1

私はプログラミングの初心者であり、割り込みを自分のアプリケーションで希望どおりに動作させるのに苦労しています。シリアル データを UART 経由で PSoC に送信し、毎秒値を保存してから、保存した値をエコー バックしたいと考えています。RX 割り込み (RX FIFO が空でない、優先度 2) と TC によるタイマー割り込み (優先度 3) を使用しています。添付されているのは TopDesign 構成です。現在、このコードを機能させようとしています (割り込みを正しく機能させることができるかどうかを確認するためのサンプル コードです)。文字「o」を含む文字列を PSoC に送信します。「o」と「-」のみを読み取る必要がありますが、コードは常に割り込みの 1 つでスタックし、他の割り込みは機能しません。誰かが私が間違っていることを教えてもらえますか? とても有難い!ボードは 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(;;)
    {

    }
}
4

1 に答える 1