请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
部件号:MSP432P401R 您好! 我尝试使用MSP432 通过SPI与CY15B104Q FRAM通信。 问题是,如果我在触发RX ISR后立即读取接收缓冲区,它将读取0,但如果我在读取前添加一个小延迟,它将读取正常。 我使用的是CCS SDK.TI 16.9 v.4.LTS,0.0.0013万 7.2 1.40 .1.00。 这是我的代码:
CY15B104Q_Assert_CS(); while (framTxFlag == false) { MAP_PCM_GotoLPM0InterruptSafe (); MAP_Interrupt_enableMaster(); } framTxFlag =假; SPI_SPI_SpeneData (EUSI_A1_base, 0x05); while (framTxFlag == false) { MAP_PCM_GotoLPM0InterruptSafe (); MAP_Interrupt_enableMaster(); } framTxFlag =假; SPI_SPI_Spendate(EUSI_A1_base, 0x00);//虚拟写入以从FRAM中超时数据 while (framRxFlag == false) { MAP_PCM_GotoLPM0InterruptSafe (); MAP_Interrupt_enableMaster(); } framRxFlag =假; CY15B104Q_DEASSERT_CS();
void EUSCIA1_IRQHandler (void) { unsigned int状态; 状态= MAP_SPI_getEnabledInterruptStatus(EUSSCI_A1_base); MAP_SPI_clearInterruptFlag (EUSCI_A1_BASE,状态); Char Rx; IF (状态和EUSCI_A_SPI_Transmit_Interrupt) { framTxFlag =真; } IF (状态和EUSCI_A_SPI_Receive_interrupt) { int jj; 对于(jj=0;j<100;jj++); Rx = MAP_SPI_receiveData(EUSSCI_A1_base); framRxFlag =真; } MAP_Interrupt_DisableSleepOnIsrExit(); }
如果我从IRQ处理程序注释for()循环,则SPI_receiveData()读数为0,但循环读数为OK。
问题是什么? 是否按预期工作? 接收缓冲区已满时,RX中断似乎未触发。