cortex mo lpc1114 uart串口中断收发数据
中断方式串口接收数据
新建一个工程,结构如下图所示:
在main.c文件中,输入以下代码:
- #include “lpc11xx.h”
- #include “uart.h”
- uint8_t rec_buf;
- void UART_IRQHandler(void)
- {
- ? ?uint32_t IRQ_ID;?????? ? // 定义读取中断ID号变量
- ? ?uint8_t rec_buf;??? // 定义接收数据变量数组
- ? ?IRQ_ID = LPC_UART->IIR;?? // 读中断ID号
- ? ?IRQ_ID =((IRQ_ID>>1)&0x7);// 检测bit3:bit1
- ? ?if(IRQ_ID == 0x02 )????????? ? // 检测是不是接收数据引起的中断
- ? ?{
- ? ? ? rec_buf = LPC_UART->RBR;
- ? ? ? UART_send_byte(rec_buf); // 把接收到的字节发回串口
- ? ?}
- }
- int main()
- {
- ? ?UART_init(115200); // 把串口波特率配置为9600
- ? ?LPC_UART->IER = 0x01;? // 开启接收中断
- ? ?NVIC_EnableIRQ(UART_IRQn); // 开串口中断
- ? ?while(1)
- ? ?{
- ? ? ? ;
- ? ?}
- }
与上一节相比,在main函数中,增加了第19、20行,负责开启串口接收中断。
第19行,给中断允许寄存器IER bit0写1,开启接收中断。
第4~15行是中断服务函数。
第8行,读取中断识别寄存器IIR的值。
第9行,获取IIR寄存器bit1~bit3的值,先右移一位,再把bit4以上的值清0,得到bit1~bit3的值。
第10行,检测是否是接收到数据引起的中断。
打开串口调试助手,波特率调成9600,用串口调试助手给单片机发送数据,单片机将会把接收到的数据发送回串口调试助手。