问题:采用SPI1,CS采用SPI1_SSEL2,发现:CS控制出错,SPI1_FLG寄存器经常由FF04变更成0004,高8位没更改的情况下被改动了。发现:MOSI发送数据OK,SPI1设备能收到数据,但是MISO无效,该管教对应SCK的时候有凸起,但是电压幅度在1V以下,,判断得数SPI1_RBDR=0.
备注:该SPI设备:输入输出同时进行,在SCK脉冲到来时,数据在CLK脉冲低电平期间采样,同时输出键盘数据,SPI应设置在CLK的上升沿采样MISO数据。
疑问:就算MISO采样点不对,波形怎么会没有高低变化?看不到波形啊。
程序如下:Set_PLL(16,4);
Init_EBIU();
Init_Bc7277_Ports();
SPI0_init();
while(1)
{
keydata=Bc7277_SPI0_rw(0x1d,0x00);
keydata=Bc7277_SPI0_rw(0x1d,0xFF);}
void Init_Bc7277_Ports(void)
{
*pPORTF_FER |=PF0;
*pPORTF_MUX =0x0002;
*pPORTH_FER |=PH0|PH1|PH2|PH3;
*pPORTH_MUX =0x0001;//0x3fff;
}
void SPI0_init(void)
{
*pSPI1_BAUD=0x0320; //配置速率为<64k
*pSPI1_FLG |=FLS2; //选择SPI0SEL2接口
*pSPI1_CTL = 0x1001|CPHA| CPOL; //|EMISO|GM; //配置模式为手动片选模式
*pSPI1_CTL = (*pSPI1_CTL | SPE); //使能SPI1接口
}
unsigned int Bc7277_SPI0_rw(unsigned char address,unsigned char data)
{
unsigned int read_bc7277_buf;
unsigned int i,j;
*pSPI1_FLG &=~FLS2;
delay(0x0320);
while(!(*pSPI1_STAT&SPIF)); //查看SPI传输状态是否完成
*pSPI1_TDBR =address; //将数据传入SPI传输数据寄存器0X55
*pSPI1_FLG |=FLS2; //-----------?在ADS7843.C中不用
while(*pSPI1_STAT & RXS) //查看SPI传输状态是否有数据需要接受
j =*pSPI1_RDBR; //读取数据
*pSPI1_FLG |=FLS2; //将SPI0SEL2拉到1,完成数据传输.-----------?在ADS7843.C中不用
*pSPI1_FLG &=~FLS2; //将SPI0SEL2拉到0-----------?在ADS7843.C中不用
while(!(*pSPI1_STAT&SPIF)); //查看SPI传输状态是否完成
*pSPI1_TDBR =data; //将数据传入SPI传输数据寄存器0X55
*pSPI1_FLG |=FLS2; //-----------?在ADS7843.C中不用
*pSPI1_FLG &=FLS2; //将SPI0SEL2拉到0-----------?在ADS7843.C中不用
while(*pSPI1_STAT & RXS) //查看SPI传输状态是否有数据需要接受
j =*pSPI1_RDBR; //读取数据
*pSPI1_FLG |=FLS2;
read_bc7277_buf =j; //格式转换=>read_bc7277_buf=(unsigned char) j;
return(read_bc7277_buf);
}