Microchip PIC24FJ64GA008 通用非同步收發器 UART 的中斷處理程式,主要是針對處理接收 UART 的資料,因為 MCU 不能夠預測何時接收 UART 的資料,所以當有接收資料,便要啓動中斷處理程式,首先要重置接收中斷標誌,假如標誌沒有重置,則無法判斷第二次中斷曾發生過否。
PIC24FJ64GA008 開發板的 UART LCD1602 顯示 |
PIC24FJ64GA008 開發板的 UART LCD1602 接收中斷顯示 |
UART 接收中斷標誌(UxRXIF)位於相應的中斷標誌狀態(IFS)寄存器中。URXISEL<1:0>1:0>(UxSTA<7:6>7:6>)控制位決定UART接收器何時將產生一個中斷。
a)如果 URXISEL<1:0> = 001:0> 或 01,每當一個資料字從接收移位寄存器(UxRSR)傳輸到接收緩衝器後,就會產生中斷。接收緩衝器中可以有一個或多個字元。
b)如果 URXISEL<1:0> = 101:0>,當一個字從接收移位寄存器(UxRSR)傳輸到接收緩衝器時就會產生中斷,其結果是接收緩衝器中有 3或 4個字元。
c)如果 URXISEL<1:0> = 111:0>,當一個字從接收移位寄存器(UxRSR)傳輸到接收緩衝器時就會產生中斷,其結果是接收緩衝器中有 4個字元(即,緩衝器滿)。
運行時可以在三種中斷模式間切換。URXDA 和 UxRXIF 標誌位元指示 UxRXREG 寄存器的狀態,而 RIDLE 位元(UxSTA<4>4>)表明 UxRSR 寄存器的狀態。RIDLE 狀態位元是唯讀位元,在接收器空閒時(即,UxRSR 寄存器為空)時被置 1。因為沒有與此位元關聯的中斷邏輯,所以用戶必須查詢此位以判斷 UxRSR 是否空閒。
URXDA位(UxSTA<0>0>)指示接收緩衝器有資料還是為空。只要接收緩衝器中至少有一個可以讀出的字元,該位元就將置 1。URXDA 是唯讀位。
Microchip
PIC24FJ64GA008 通用非同步收發器 UART 中斷啓動程式:
void IntUART1( void)
{
U1STAbits.URXISEL = 1; // Set RX Interrupt
INTCON1 = 0x8000;
INTCON2 = 0;
IEC0 = 0x1800;
IFS0bits.U1RXIF
= 0; // Reset RX Interrupt
} // initUART1
|
Microchip PIC24FJ64GA008 通用非同步收發器 UART 中斷程式:
void __attribute__((interrupt, no_auto_psv))
_U1RXInterrupt(void) {
IFS0bits.U1RXIF = 0;
UART_RX_data = U1RXREG;
SetDDRamAddr(0x40);
WriteStrXLCD("INT = ");
WriteDataXLCD(UART_RX_data);
}
|
Microchip PIC24FJ64GA008 通用非同步收發器 UART 收發程式:
// 1. Init the UART1 Serial
Port
initUART1();
// 2. Init the UART1 Interrupt
IntUART1();
char hello[]=("\n>> Hello
ugworkshop PICFJ24GA008 Development Board \n");
putstringUART1(hello);
putcharUART1( '\r');
while(1){
}
|
電腦 Terminal 程式接收到訊息 |
PIC24FJ64GA008 開發板接收到中斷訊息 |
2016年 8月 9日 天氣報告
氣溫:27.9度 @ 20:10
相對濕度:百分之 78%
天氣:微雨
沒有留言:
張貼留言