請問各位大大:
我想讓 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 了???
麻煩各位大大解答,謝謝。