This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS320F28035:在 SPI 3线模式下、数据已通过 SPIDAT 进行 Ben 移位、但 SPI INT_FLAG 位(SPISTS.6)从未设置为1

Guru**** 2606725 points
Other Parts Discussed in Thread: TMS320F28035

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/683917/ccs-tms320f28035-in-spi-3-wire-mode-the-data-has-ben-shifted-through-spidat-but-spi-int_flag-bit-spists-6-never-set-to-1

器件型号:TMS320F28035

工具/软件: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;

如果有任何帮助,将不胜感激。 提前感谢您!  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好。

    启用 FIFO 时、请使用 SPIFFTXINT/SPIFFRXINT 标志。 INT_FLAG 位仅在不使用 FIFO 模式时适用。

    此致、
    标记