Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 

51 wiersze
1.7 KiB

  1. /*****************头文件*************************/
  2. #include "fsl_common.h"
  3. #include "uart_Interrupt.h"
  4. #include "fsl_uart.h"
  5. #include "pin_Init.h"
  6. /*****************变量声明*************************/
  7. uint8_t demoRingBuffer[DEMO_RING_BUFFER_SIZE];
  8. uint16_t txIndex; //发送数据计数变量
  9. volatile uint16_t rxIndex; //接收数据计数变量
  10. /*****************UART2初始化*************************/
  11. void UART_InterrputInit()
  12. {
  13. UART2_InitPins(); //串口引脚初始化
  14. uart_config_t config; //参数设置
  15. UART_GetDefaultConfig(&config);
  16. config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE; //设置波特率
  17. config.enableTx = true;
  18. config.enableRx = true;
  19. UART_Init(DEMO_UART, &config, SystemCoreClock); //初始化配置
  20. UART_EnableInterrupts(DEMO_UART, kUART_RxDataRegFullInterruptEnable | kUART_RxOverrunInterruptEnable); //使能Rx中断
  21. EnableIRQ(UART2_RX_TX_IRQn); //开启中断
  22. }
  23. /*****************UART2中断服务函数**********************/
  24. void UART2_RX_TX_IRQHandler(void)
  25. {
  26. uint16_t data;
  27. if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(DEMO_UART)) //接收到数据标志
  28. {
  29. data = UART_ReadByte(DEMO_UART);
  30. if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) //
  31. {
  32. demoRingBuffer[rxIndex] = data;
  33. rxIndex++;
  34. rxIndex %= DEMO_RING_BUFFER_SIZE;
  35. }
  36. }
  37. /*将接收到的数据返回*/
  38. if ((kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)) && (rxIndex != txIndex)) //发送中断标志
  39. {
  40. UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]); //发送一帧数据(一个字节,8个数据位)
  41. txIndex++;
  42. txIndex %= DEMO_RING_BUFFER_SIZE;
  43. }
  44. SDK_ISR_EXIT_BARRIER;
  45. }