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.

[参考译文] TMS320F28069F:SPI 从器件的 Tx 中断的设置代码有什么问题?

Guru**** 2556190 points
Other Parts Discussed in Thread: MOTORWARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/705858/tms320f28069f-what-is-wrong-with-my-setup-code-for-tx-interrupt-of-spi-slave

器件型号:TMS320F28069F
主题中讨论的其他器件:MOTORWARE

尊敬的 TI 成员:

我正在使用带有 motorware 的中断开发 SPI 从站

其他 MCU 是 SPI 主器件、F28069F 是 SPI 从器件。

我可以通过 RxISR 从 MCU 接收几个数据、我想使用 TxISR 向 MCU 发送数据。

但是、我的代码中从未调用过 TxISR。

请看一下我的安装代码吗?  它中是否有任何错误设置?

void setupSpiA (SPI_Handle spiHandle)
{
//初始化 SPI FIFO 寄存器
SPI_enableChannels (spiHandle);
SPI_enableTxFifoEnh (spiHandle);
SPI_enableTxFifo (clearHandle);
SPI_DisableTxFifoInt (spiHandle)
;SPI_TxFifeTxFifoInt (spiHandle);
//添加以启用 Tx int
SPI_setTxFifoIntLevel (spiHandle、SPI_FifoLevel 1_Word);
SPI_enableTxFifoInt (spiHandle);

SPI_enableRxFifo (spiHandle);
SPI_clearRxFifoInt (spiHandle);
SPI_DisableRxFifoInt (spiHandle);
SPI_setRxFifoIntLevel (spiHandle、SPI_FifoLevel_1_Word);

SPI_setTxDelay (spiHandle、0);

//初始化 SPI
SPI_RESET (spiHandle);
SPI_DisableLoopBack (spiHandle);
SPI_setClkPolarity (spiHandle、SPI_ClkPolarity_OutputRisingEdge_InputFallingEdge);
SPI_setCharLength (spiHandle、SPI_CharLength _16_Bits);

SPI_setClkPhase (spiHandle、SPI_ClkPhase_Delayed);
SPI_setMode (spiHandle、SPI_Mode_Slave);
SPI_DisableOverRunInt (spiHandle);
SPI_enableTx (spiHandle);
SPI_DisableInt (spiHandle);

SPI_ENABLE (spiHandle);

SPI_setPriority (spiHandle、SPI_Priority_freRun);
SPI_setSteInv (spiHandle、 SPI_SteInv_ActiveLow);
SPI_setTriWire (spiHandle、SPI_TriWire_normalFourWire);
} 

interrupt void spiATxISR (void)
{
HAL_Obj * obj =(HAL_Obj *) halHandle;

//while (SPI_getTxFifoStatus (halHandle->spiAHandle)!= SPI_spiOStatus_empty);
TX_FLAG = SPI_getTxFifoStatus (halHandle->AifHandle<SpiHandle->AxFidle-
);TXPixIdF (halHandle<SpiDxFifoHandle<TxF);
spiTxIdx++;

if (spiTxIdx == txLen)
{
spiTxIdx=0;
txLen=0;
}

TX_cn++;
SPI_clearTxFifoInt (halHandle->spiAHandle);
PI_clearInt (obj->压 电极、PI_GroupNumber);
} 

供参考、我已使用要发送的数据填充 spiTxBuf[]、长度设置为 txLen

我已经测试过,TX_cnt 永远不会增加,这意味着在运行时永远不会调用 spiTxISR()

请查看我的代码。

提前感谢

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

    您是否也在 PIEIER 和 CPU IER 中启用了中断?

    惠特尼

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

    感谢您的及时反馈。

    正如您提到的、我在 PIEIER 和 CPU IER 中仅启用了 Rx 中断。

    在我添加了以下代码之后,TxISR 起作用 了。

    void SPI_enableInterrupt (void)
    {
    SPI_enableRxFifoInt (halHandle->spiAHandle);
    SPI_enableTxFifoInt (halHandle->spiAHandle);
    SPI_enableInt (halHandle->pieInt);
    PIE_enableInt (halHandle->压 电筒6、PI_GroupNumber PI_InterruptSource_SPIARX);
    PI_enableInt (halHandle->压 电式、PI_GroupNumber_6、PI_InterruptSource_SPIATX);
    CPU_enableInt (halHandle->cpuHandle、 CPU_IntNumber_6);
    } 

    非常感谢!