簡體   English   中英

PIC32MZ UART RX中斷

[英]PIC32MZ UART RX Interrupt

從PIC32MX移植到MZ(PIC32MZ2048EFG100)並撞牆,試圖在UART3上生成簡單的RX中斷。 請參見下面的代碼。

void main(void} {
    __builtin_disable_interrupts();
    //Ensuring all pins config as digital
    ANSELA = 0x0000;
    ANSELB = 0x0000;
    ANSELC = 0x0000;
    ANSELD = 0x0000;
    ANSELE = 0x0000;
    ANSELF = 0x0000;
    ANSELG = 0x0000;

    //Convenient macrso to do IOUNLOCK
    #define PPSUnLock() {SYSKEY=0x0;SYSKEY=0xAA996655;SYSKEY=0x556699AA;CFGCONbits.IOLOCK=0;} 
    #define PPSLock() {SYSKEY=0x0;SYSKEY=0xAA996655;SYSKEY=0x556699AA;CFGCONbits.IOLOCK=1;}

    //Peripheral Pin Select (PPS) Settings for UART3
    PPSUnLock();
    U3RXRbits.U3RXR = 0b1010;
    RPA14Rbits.RPA14R = 0b0001;
    PPSLock();

    //Config UART3
    U3MODEbits.UEN0 = 0;  //no flow control
    U3MODEbits.UEN1 = 0;
    U3MODEbits.LPBACK = 0; // no loopback
    U3MODEbits.ABAUD = 0; //no autobaud
    U3MODEbits.BRGH = 0;
    U3MODEbits.PDSEL0 = 0; //8 data bits, no parity
    U3MODEbits.PDSEL1 = 0;
    U3MODEbits.STSEL = 0; // 1 stop bit

    U3STAbits.URXISEL0 = 0; //RX Interrupt on first byte in FIFO
    U3STAbits.URXISEL1 = 0;

    U3BRG = CLOSEST_UBRG_VALUE115200; //Macro defined elsewhere, but it works

    //Int priorities
    IPC39bits.U3EIP = 6;
    IPC39bits.U3EIS = 3;

    //Int flags
    IFS4bits.U3RXIF = 0;

    //Int enable/disable
    IEC4bits.U3EIE = 0;
    IEC4bits.U3TXIE = 0;
    IEC4bits.U3RXIE = 1; //Enable int on RX

    //Enable multi-vector interrupts
    INTCONSET = _INTCON_MVEC_MASK;
    __builtin_enable_interrupts();

    //Turn on UART3
    U3STAbits.URXEN = 1;
    U3STAbits.UTXEN = 1;
    U3MODEbits.ON = 1;

    UART_txEXTCOMandWait('A'); //Function defined elsewhere - I get successful byte "A" sent to my terminal. So TX works.


    while(1){Nop();}; //wait in endless loop for interrupt to occur on keystroke
}

以下是我的ISR:

void __ISR_AT_VECTOR (_UART3_RX_VECTOR, IPL6SOFT) U3Interrupt(void) {
    unsigned int test=0;
    Nop(); //Setting a breakpoint here

}

運行該程序時,我在終端屏幕上成功看到了“ A”,因此設置對於TX是正確的。 在我的終端屏幕上輸入文本不會產生中斷。 經范圍驗證了信號正在傳送到PIC32。

我在這里想念什么? 我在一些瑣碎的事情上花了很多時間。

多謝你們。

想通了...應該是:

 //Int priorities
 IPC39bits.U3EIP = 6;
 IPC39bits.U3EIS = 3;

有趣的是,如何在PIC​​32MX上進行生產已經有多年了。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM