您的位置: OpenADSP社区论坛 -> SHARC/TigerSHARC专区 -> 新手上路 -> [求助] SPI 範例代碼,修改為 slave 模式
本帖共有536个阅读者
发表帖子 发表投票 回复主题
[求助] SPI 範例代碼,修改為 slave 模式
chris_syu(论坛新手)
chris_syu
头衔:社区公民
帮派:无帮无派
帖数:35
金钱:411
积分:49
注册时间:2012/12/17
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
[求助] SPI 範例代碼,修改為 slave 模式
抱歉,發錯版


請問各位大大:

我想讓 BF533 擔任 SPI 中 Slave ,要使用SPI的範例代碼修改。

原始範例代碼 如下:

#include <cdefBF533.h>

unsigned char buff_w[512];
unsigned char buff_r[512];

void Init_SDRAM(void)
{
*pEBIU_SDRRC = 0x00000817;
*pEBIU_SDBCTL = 0x00000013;
*pEBIU_SDGCTL = 0x0091998d;
ssync();
}

void Init_EBIU(void)
{
*pEBIU_AMBCTL0 = 0x7bb07bb0;
*pEBIU_AMBCTL1 = 0xffc07bb0;
*pEBIU_AMGCTL = 0x000f;
}

void Set_PLL(int pmsel,int pssel)
{
int new_PLL_CTL;
*pPLL_DIV = pssel;
asm("ssync;");
new_PLL_CTL = (pmsel & 0x3f) << 9;
*pSIC_IWR |= 0xffffffff;
if (new_PLL_CTL != *pPLL_CTL)
{
*pPLL_CTL = new_PLL_CTL;
asm("ssync;");
asm("idle;");
}
}


void SPI_init(void)
{
*pSPI_BAUD=2; //配置速率為1/4系統時鐘  SPI速率 = SCLK/2*SPI_BAUD
*pSPI_FLG |=FLS2;   //選擇SPISEL2接口
*pSPI_CTL = 0x1001|CPHA| CPOL; //配置模式為手動片選模式
*pSPI_CTL = (*pSPI_CTL | SPE); //使能SPI接口
}


int main()
{
int i;
Set_PLL(16,4);
Init_EBIU();

SPI_init();
*pSPI_FLG &= ~FLG2; //將SPISEL2拉到0
while(!(*pSPI_STAT & SPIF));  //查看SPI傳輸狀態是否完成
*pSPI_TDBR = 0x55;      //將數據送入SPI傳輸數據寄存器
*pSPI_FLG |= FLG2;    //將SPISEL2拉到1,完成數據傳輸
*pSPI_FLG &= ~FLG2;
while(*pSPI_STAT & RXS)//查看SPI傳輸狀態是否有數據需要接收
i = *pSPI_RDBR; //讀取數據
*pSPI_FLG |= FLG2;
while(1);
}

需修改是否如下:

void SPI_init(void)
{
// *pSPI_BAUD=2; //Master mode Only ,所以將此行註解
// *pSPI_FLG |=FLS2;   //Master mode Only ,所以將此行註解 ,選擇SPISEL2接口
*pSPI_CTL = 0x0030|CPHA| CPOL; //改為 Slave mode , 配置模式為手動片選模式
*pSPI_CTL = (*pSPI_CTL | SPE); //使能SPI接口
}


int main()
{
int i;
Set_PLL(16,4);
Init_EBIU();

SPI_init();
// *pSPI_FLG &= ~FLG2; //Slave mode ,將此行註解,將SPISEL2拉到0
while(!(*pSPI_STAT & SPIF));  //查看SPI傳輸狀態是否完成
*pSPI_TDBR = 0x55;       //將數據送入SPI傳輸數據寄存器
// *pSPI_FLG |= FLG2;    //Slave mode ,將此行註解,將SPISEL2拉到1,完成數據傳輸
// *pSPI_FLG &= ~FLG2; //Slave mode ,將此行註解,
while(*pSPI_STAT & RXS) //查看SPI傳輸狀態是否有數據需要接收
i = *pSPI_RDBR; //讀取數據
// *pSPI_FLG |= FLG2; //Slave mode ,將此行註解,
while(1);
}

然後將 SPISS( PF0) pin 腳 接地。

是否將上述範例代碼這樣修改後,即變為 SPI 的 Slave 了???

麻煩各位大大解答,謝謝。



「该帖子被 chris_syu 在 2013-07-24 08:48:48 编辑过」

正在學習使用ADSP-53x
等级:论坛新手 参考IP地址:*.*.*.*
2013/7/23 15:40:41
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154101 Call, 6 Queries, Processed in 0.046875 second(s),