TMS320VC5509 Mcbsp SPI 主机模式出错,请大神帮助,谢谢!
SPI的各寄存器已经宏定义,Nopi()为i个Nop;
初始化过程如下:
void SPI_init()
{
SPCR10 = 0x1800; //CLKSTP=11,时钟停止模式,半时钟周期延时
Nopi(6);
SPCR20 = 0x0200; //FREE=1,断点处理方式
Nopi(6);
PCR0 = 0x0A0D; //FSXM=1,发送帧同步由Mcbsp提供;CLKXM=1,输出时钟信号; FSXP=1,FSRP=1,CLKXP=0,CLKRP=1
Nopi(6);
RCR10 = 0x0040; //接收16位数据
Nopi(6);
RCR20 = 0x0001; //FSX一周期延时
Nopi(6);
XCR10 = 0x0040; //接收16位数据
Nopi(6);
XCR20 = 0x0001; //FSX一周期延时
Nopi(6);
SRGR10 = 0x0127;//40分频,分频后CLKX=1Mhz
Nopi(6);
SRGR20 = 0x2000; //0X300F
Nopi(6);
SPCR20 |= 0x0040; //采样率发生器复位
Nopi(200);
SPCR20 |= 0x0001; //发送器复位
Nopi(200);
SPCR10 |= 0x0001; //接收器复位
Nopi(200);
}
Mcbsp的SPI作为主模式。发送16位数据,接收16位数据。接收到的数据低8位正确,高8位出错,是寄存器的设置不正确吗?
我用的成套的开发板,开发板上的FSR与FSX外接,CLKX与CLKR外接,这会影响SPI通信吗?(我在PCR中设的clkxp=0、clkrp=1)
另外,在上面的基础上我做了部分修改,将SRGR20 = 0x2000改为0X300F,即发送帧同步模式FSGM=1,设置FPER(11~0)=0000 0000 0000 1111;
改完之后可以正确读取16位数据,但是有时不稳定,程序跑着跑着就跑飞了,这是为什么?
Shine:
你好,
发送16位数据正确吗? 还是只是接收的时候不正确?
高8位出错有规律吗? 是数据错位吗? 用示波器抓过时序吗?
SPI模式下, FSGM要设成0.