工具/软件:Code Composer Studio
大家好、
我在 SPI 3线模式下驱动 TLE5012B (SSC 通信)使用 TMS320F28035。在示波器中、我看到正确的数据已通过 SPIDAT 移位、但 INT_FLAG 从未设置1。
因此,当我调试它时,它总是在“while (SpiaRegs.SPISTS.bit.INT_flag !=1){}//等待数据接收”中消失。 此时 RXFFST 变为1、表示接收
FIFO 有1个字、因此表示 数据已通过 SPIDAT 移位。 在 TMS320x2803x SPI 数据表中、P13:
当指定数量的数据位已通过 SPIDAT 移位时、会发生以下事件:
•SPIDAT 内容被传输到 SPIRXBUF。
•SPI INT 标志位(SPISTS.6)被设定为1。
代码如下:
void TLE5012B_Configuration (void)
{
SpiaRegs.SPIPRI.bit.TRIWIRE =1;//3线模式
SpiaRegs.SPICCR.bit.SPICHAR = 0x0F;// 16位字符位
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0;
SpiaRegs.SPICTL.bit.CLK_PHASE = 0;
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1;
SpiaRegs.SPICTL.bit.TALK = 1;//启用主控模式、正常相位、
//启用 TALK、禁用 SPI int。
SpiaRegs.SPIBRR = 15;// 15 -> 1Mbps
SpiaRegs.SPICCR.bit.SPISWRESET = 1;//从复位中撤回 SPI
SpiaRegs.SPIPRI.bit.FREE = 1;//设置断点以避免干扰 xmission
//初始化 SPI FIFO 寄存器
SpiaRegs.SPIFFTX.All=0xE040;
SpiaRegs.SPIFFRX.All=0x2044;
SpiaRegs.SPIFFCT.All=0x0;
}
UINT16 TLE5012B_READ_Angle (空)
{
uint16 sdata、RDATA;
sdata = 0x8021;//请参阅演示
SpiaRegs.SPICTL.bit.TALK = 1;//启用发送路径
SpiaRegs.SPITXBUF = sdata;//主设备发送数据
while (SpiaRegs.SPISTS.bit.INT_flag!=1){}//等待数据接收
dummy = SpiaRegs.SPIRXBUF;//从自身清除垃圾数据
//接收相同的数据 TX
SpiaRegs.SPICTL.bit.TALK = 0;//禁用发送路径
SpiaRegs.SPITXBUF = sdata;//发送虚拟以启动 TX
//注:由于 TALK = 0、数据不会发送到 SPISIMOA 引脚
while (SpiaRegs.SPISTS.bit.INT_flag!= 1){}//等待数据接收
RDATA = SpiaRegs.SPIRXBUF;//主设备读取数据
SpiaRegs.SPICTL.bit.TALK = 0;//禁用发送路径
SpiaRegs.SPITXBUF = sdata;//发送虚拟以启动 TX
//注:由于 TALK = 0、数据不会发送到 SPISIMOA 引脚
while (SpiaRegs.SPISTS.bit.INT_flag!= 1){}//等待数据接收
SW = SpiaRegs.SPIRXBUF;//主设备读取数据
返回 RDATA-32768;
}
如果有任何帮助,将不胜感激。 提前感谢您!