TI中文支持网
TI专业的中文技术问题搜集分享网站

关于28035的SPI从机问题

我用两个28035做SPI通信,一个做主机,一个做从机,通信一段时间后出现了数据错位,贴出抓到的信号:

正常情况下

错位情况

我的初始化程序

if(DeviceType == MasterDevice)
{
SpibRegs.SPIFFTX.all = 0xe000; // 不产生中断,主循环中轮询
SpibRegs.SPIFFRX.all = 0x0024;
SpibRegs.SPIFFCT.all = 0x0000;
SpibRegs.SPICCR.all = 0x000f;
SpibRegs.SPICTL.all = 0x000e;
SpibRegs.SPIBRR = 59; //15m/30
SpibRegs.SPICCR.all =0x008f;
SpibRegs.SPIFFTX.bit.TXFIFO = 1;
SpibRegs.SPIFFRX.bit.RXFIFORESET=1;

GpioDataRegs.GPACLEAR.bit.GPIO15 = 1;
}
else
{
SpibRegs.SPICCR.bit.SPISWRESET=0; // Reset SPI

SpibRegs.SPICCR.all=0x000F; //16-bit character
SpibRegs.SPIBRR = 59; //15m/15
SpibRegs.SPIFFTX.all = 0xc001; // SpibRegs.SPIFFRX.all = 0x0024;
SpibRegs.SPIFFCT.all = 0x0000;

SpibRegs.SPICTL.all = 0x000a;

SpibRegs.SPICCR.bit.SPISWRESET=1; // Enable SPI

SpibRegs.SPIFFTX.bit.TXFIFO=1;
SpibRegs.SPIFFRX.bit.RXFIFORESET=1; }

这里我有两个疑问

1.这里我把SPI的时钟模式配置为CLK_POLARITY = 0;CLK_PHASE =1 ;这时SPI在SPICLK信号第一个上升沿之前半个周期开始输出数据;这里我把STE片选信号一直拉低。我的疑问是,对于从机,怎么会提前知道SPICLK第一个上升沿之前半个周期就开始输出数据了呢?难道是未卜先知么。。。

2.当数据开始错位后我想清空 FIFO缓冲寄存器,请问如何能做到呢?我总感觉这里错位的原因是FIFO缓冲中的数据没有发完造成的。

赞(0)
未经允许不得转载:TI中文支持网 » 关于28035的SPI从机问题
分享到: 更多 (0)