我是一个编程新手,我无法让我的中断按照我希望它们为我的应用程序工作的方式工作。我想通过 UART 向 PSoC 发送串行数据,每秒存储一次值,然后回显存储的值。我正在使用 RX 中断(RX FIFO 不为空,优先级 2)和带有 TC 的定时器中断(优先级 3)。附件是 TopDesign 配置。目前,我正试图让这个代码工作(只是一个示例代码,看看我是否能让中断正常工作)。我向 PSoC 发送了一个包含字符“o”的字符串,我应该只读取“o”和“-”,但代码总是卡在其中一个中断中,而另一个则永远无法工作。谁能告诉我我做错了什么?非常感激!该板为 CY8CKIT-042。
#include <project.h>//Contains
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
uint16 ms_count = 0;
uint8 ch;
CY_ISR_PROTO(Timer_ISR);
CY_ISR_PROTO(RX_ISR);
CY_ISR(Timer_ISR){//Every millisecond, the code goes here
ms_count++;
if (ms_count == 1000){//Every second
ms_count = 0;
LED_Write(!LED_Read());
while(ch != 'o')UART_UartPutChar('-');
}
}
CY_ISR(RX_ISR){
uint8 status = UART_rx_ClearInterrupt();//Clear interrupt flag
uint8 sub;
sub = UART_UartGetChar();
if (sub != 0u){//Make sure grabbed character is not an empty
ch = sub;
if (ch == 'o'){
UART_UartPutChar(ch);
}
}
}
int main()
{
/* Start SCB UART TX+RX operation */
Timer_1_Start();
Time_ISR_StartEx(Timer_ISR);
RX_ISR_StartEx(RX_ISR);
CyGlobalIntEnable;
/* Start SCB UART TX+RX operation */
UART_Start();
UART_UartPutString("fdssf\n");
for(;;)
{
}
}