我和一个按键/LED控制IC=BC7277进行SPI0控制.结果发现
1:由于BC7277工作在64KHZ以下.我对SPI0_BAND=0X0320
2:我检测SPI0_SCK,发现上电复位波形是12.5M的脉冲,但是我初始化SPI后,波形基本没变化,并没有达到我想的64K以下.
3:我测试SPI0_MISO和SPI0_MOSI,都没测到信号,全是不稳定的高电平.
4:F10运行,发现控制有效,能发送数据,但是是错误的.能接受数据,但是也是错误的.--由于示波器无法检测,不知道问题在哪儿.
5:代码如下
Set_PLL(16,4);
Init_Bc7277_Ports();
SPI0_init();
while(1)
{
keydata=Bc7277_SPI0_rw(0x1d,0xff);}
void Init_Bc7277_Ports(void)
{
*pPORTG_FER |=PG12|PG13|PG14|PG15; //PG12-PG15=peripheral function
*pPORTG_MUX &=0x3fff;
}
void SPI0_init(void)
{
*pSPI0_BAUD=0x0320; //配置速率为1/4系统时钟 SPI速率 = SCLK/2*SPI_BAUD
*pSPI0_FLG |=FLS2; //选择SPI0SEL2接口
*pSPI0_CTL = 0x1001|CPHA| CPOL|EMISO|GM; //配置模式为手动片选模式
*pSPI0_CTL = (*pSPI0_CTL | SPE); //使能SPI1接口
}
unsigned int Bc7277_SPI0_rw(unsigned char address,unsigned char data) //从SPI中读取数据
{
unsigned int read_bc7277_buf;
unsigned int i,j;
*pSPI_FLG &=~FLG2; //将SPI0SEL2拉到0-----------?在ADS7843.C中不用
delay(0x0320);
while(!(*pSPI_STAT&SPIF)); //查看SPI传输状态是否完成
*pSPI0_TDBR =address; //将数据传入SPI传输数据寄存器0X55
*pSPI0_FLG |=FLG2; //-----------?在ADS7843.C中不用
while(*pSPI_STAT & RXS) //查看SPI传输状态是否有数据需要接受
j =*pSPI_RDBR; //读取数据
*pSPI_FLG |=FLG2; //将SPI0SEL2拉到1,完成数据传输.-----------?在ADS7843.C中不用
*pSPI_FLG &=~FLG2; //将SPI0SEL2拉到0-----------?在ADS7843.C中不用
while(!(*pSPI_STAT&SPIF)); //查看SPI传输状态是否完成
*pSPI0_TDBR =data; //将数据传入SPI传输数据寄存器0X55
*pSPI0_FLG |=FLG2; //-----------?在ADS7843.C中不用
*pSPI0_FLG &=FLG2; //将SPI0SEL2拉到0-----------?在ADS7843.C中不用
while(*pSPI_STAT & RXS) //查看SPI传输状态是否有数据需要接受
j =*pSPI_RDBR; //读取数据
*pSPI_FLG |=FLG2; //将SPI0SEL2拉到1,完成数据传输.-----------?在ADS7843.C中不用
read_bc7277_buf =j; //格式转换=>read_bc7277_buf=(unsigned char) j;
return(read_bc7277_buf);
}