cortex mo lpc1114 uart串口中断收发数据

中断方式串口接收数据

新建一个工程,结构如下图所示:

新建串口工程

在main.c文件中,输入以下代码:

  1. #include “lpc11xx.h”
  2. #include “uart.h”
  3. uint8_t rec_buf;
  4. void UART_IRQHandler(void)
  5. {
  6. ? ?uint32_t IRQ_ID;?????? ? // 定义读取中断ID号变量
  7. ? ?uint8_t rec_buf;??? // 定义接收数据变量数组
  8. ? ?IRQ_ID = LPC_UART->IIR;?? // 读中断ID号
  9. ? ?IRQ_ID =((IRQ_ID>>1)&0x7);// 检测bit3:bit1
  10. ? ?if(IRQ_ID == 0x02 )????????? ? // 检测是不是接收数据引起的中断
  11. ? ?{
  12. ? ? ? rec_buf = LPC_UART->RBR;
  13. ? ? ? UART_send_byte(rec_buf); // 把接收到的字节发回串口
  14. ? ?}
  15. }
  16. int main()
  17. {
  18. ? ?UART_init(115200); // 把串口波特率配置为9600
  19. ? ?LPC_UART->IER = 0x01;? // 开启接收中断
  20. ? ?NVIC_EnableIRQ(UART_IRQn); // 开串口中断
  21. ? ?while(1)
  22. ? ?{
  23. ? ? ? ;
  24. ? ?}
  25. }

与上一节相比,在main函数中,增加了第19、20行,负责开启串口接收中断。

第19行,给中断允许寄存器IER bit0写1,开启接收中断。

第4~15行是中断服务函数。

第8行,读取中断识别寄存器IIR的值。

第9行,获取IIR寄存器bit1~bit3的值,先右移一位,再把bit4以上的值清0,得到bit1~bit3的值。

第10行,检测是否是接收到数据引起的中断。

打开串口调试助手,波特率调成9600,用串口调试助手给单片机发送数据,单片机将会把接收到的数据发送回串口调试助手。