cortex mo lpc1114 uart串口中斷收發(fā)數(shù)據(jù)
中斷方式串口接收數(shù)據(jù)
新建一個(gè)工程,結(jié)構(gòu)如下圖所示:
在main.c文件中,輸入以下代碼:
#include “l(fā)pc11xx.h”
#include “uart.h”
uint8_t rec_buf;
void UART_IRQHandler(void)
{
uint32_t IRQ_ID; // 定義讀取中斷ID號(hào)變量
uint8_t rec_buf; // 定義接收數(shù)據(jù)變量數(shù)組
IRQ_ID = LPC_UART->IIR; // 讀中斷ID號(hào)
IRQ_ID =((IRQ_ID>>1)&0x7);// 檢測(cè)bit3:bit1
if(IRQ_ID == 0x02 ) // 檢測(cè)是不是接收數(shù)據(jù)引起的中斷
{
rec_buf = LPC_UART->RBR;
UART_send_byte(rec_buf); // 把接收到的字節(jié)發(fā)回串口
}
}
int main()
{
UART_init(115200); // 把串口波特率配置為9600
LPC_UART->IER = 0x01; // 開(kāi)啟接收中斷
NVIC_EnableIRQ(UART_IRQn); // 開(kāi)串口中斷
while(1)
{
;
}
}
與上一節(jié)相比,在main函數(shù)中,增加了第19、20行,負(fù)責(zé)開(kāi)啟串口接收中斷。
第19行,給中斷允許寄存器IER bit0寫(xiě)1,開(kāi)啟接收中斷。
第4~15行是中斷服務(wù)函數(shù)。
第8行,讀取中斷識(shí)別寄存器IIR的值。
第9行,獲取IIR寄存器bit1~bit3的值,先右移一位,再把bit4以上的值清0,得到bit1~bit3的值。
第10行,檢測(cè)是否是接收到數(shù)據(jù)引起的中斷。
打開(kāi)串口調(diào)試助手,波特率調(diào)成9600,用串口調(diào)試助手給單片機(jī)發(fā)送數(shù)據(jù),單片機(jī)將會(huì)把接收到的數(shù)據(jù)發(fā)送回串口調(diào)試助手。