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/MSP432P401R:通过 SPI 发送数据命令

Guru**** 2561930 points
Other Parts Discussed in Thread: ADS1292R

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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/748904/ccs-msp432p401r-sending-a-data-command-by-spi

器件型号:MSP432P401R

工具/软件:Code Composer Studio

您好!  

我必须通过 SPI 进行通信、并且我已经创建了一个函数、用于向 SPI 发送一些命令。 在进行一些测试并 在代码的某些点放置一些断点后 、我验证了代码在将数据发送到 TXBUF 后停止。 之后、我设置了一 个"while"条件、以防止程序在 TX 缓冲区不为空时执行一些其他任务。 下面我将分享函数代码、希望获得一些帮助。

提前感谢

/*ADS1292R SPI 命令数据*/
void ads1292R_SPI_CMD_DATA (uint8_t data){

unsigned char delayVar;

TxData =数据;
ads1292R_CS_low (); /*ADS1292R CS 低电平 PIN*/
delayADS1292R (2); /*稳定的小延迟*/
ads1292R_CS_HIGH (); /*ADS1292R CS 高电平 PIN*/
ads1292R_CS_low (); /*ADS1292R CS 低电平 PIN*/

EUSCI_B0->TXBUF =数据; /*将指针数据处的数据发送到 TX 缓冲区*/
while (EUSCI_B0->STATW 和 EUSCI_B_STATW_BBUSY);


delayVar = EUSCI_B0->RXBUF;

delayADS1292R (2); /*稳定的小延迟*/
} 

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

    eUSCI 外设有一个单字节发送缓冲区、当被载入时、此缓冲区被自动移动(1个时钟周期)到移位寄存器中。 当数据被载入到缓冲器时、发送 IFG 被清零、而一旦数据被移动到移位寄存器、发送 IFG 被置位。 发送 IFG 并不意味着数据已经被发送。 此外、除非移位寄存器中有数据、否则 eUSCI 不会生成时钟、因此、为了接收数据、您必须将一个"虚拟"字节加载到发送缓冲区中。 RXIFG 将指示虚拟字节已发送且接收数据已就绪。

    有关更详细的说明、请参阅技术参考手册。 www.ti.com/.../slau356h.pdf

    此致、
    Chris
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Chris Sterzik,
    因此、我了解到我需要在代码行上用 sinTAx " while (EUSCI_B0->STATW & EUSCI_B_STATW_BBUSY)"替代、因为、
    "while (!(EUSCI_B0->IFG & EUSCI_B_IFG_RXIFG));"这样我就可以确认"IFG"是否为空以及虚拟字节是否已发送。
    是这样吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您的原始代码几乎正确:
    > while (EUSCI_B0->STATW 和 EUSCI_B_STATW_BBUSY);
    这是检查 I2C 忙位、而不是 SPI/UART 忙位、因此它根本没有等待。 (不、我不知道为什么有两个。) 尝试:
    > while (EUSCI_B0->STATW 和 EUSCI_A_STATW_BUSY);

    您的 RXIFG 检查也将起作用。

    请记住、ADS1292R 不使用您要发送的字节[参考数据表(SBAS502B)图34]。