Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 

90 строки
3.1 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. /*****************UART1初始化*************************/
  11. void UART1_InterrputInit()
  12. {
  13. UART1_InitPins(); //UART1引脚初始化
  14. uart_config_t config; //参数设置
  15. UART_GetDefaultConfig(&config);
  16. config.baudRate_Bps = 9600; //设置波特率
  17. config.enableTx = true;
  18. config.enableRx = true;
  19. UART_Init(UART1, &config, SystemCoreClock); //初始化配置
  20. UART_EnableInterrupts(UART1, kUART_RxDataRegFullInterruptEnable | kUART_RxOverrunInterruptEnable); //使能Rx中断
  21. EnableIRQ(UART1_RX_TX_IRQn); //开启中断
  22. }
  23. /*****************UART2初始化*************************/
  24. void UART2_InterrputInit()
  25. {
  26. UART2_InitPins(); //UART2引脚初始化
  27. uart_config_t config; //参数设置
  28. UART_GetDefaultConfig(&config);
  29. config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE; //设置波特率
  30. config.enableTx = true;
  31. config.enableRx = true;
  32. UART_Init(DEMO_UART, &config, SystemCoreClock); //初始化配置
  33. UART_EnableInterrupts(DEMO_UART, kUART_RxDataRegFullInterruptEnable | kUART_RxOverrunInterruptEnable); //使能Rx中断
  34. EnableIRQ(UART2_RX_TX_IRQn); //开启中断
  35. UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]); //发送一帧数据(一个字节,8个数据位)
  36. }
  37. /*****************UART1中断服务函数**********************/
  38. void UART1_RX_TX_IRQHandler(void)
  39. {
  40. uint16_t data;
  41. if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(UART0)) //接收到数据标志
  42. {
  43. data = UART_ReadByte(UART1);
  44. if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) //
  45. {
  46. demoRingBuffer[rxIndex] = data;
  47. rxIndex++;
  48. rxIndex %= DEMO_RING_BUFFER_SIZE;
  49. }
  50. }
  51. /*将接收到的数据返回*/
  52. if ((kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)) && (rxIndex != txIndex)) //发送中断标志
  53. {
  54. UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]); //发送一帧数据(一个字节,8个数据位)
  55. txIndex++;
  56. txIndex %= DEMO_RING_BUFFER_SIZE;
  57. }
  58. SDK_ISR_EXIT_BARRIER;
  59. }
  60. /*****************UART2中断服务函数**********************/
  61. void UART2_RX_TX_IRQHandler(void)
  62. {
  63. uint16_t data;
  64. if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(DEMO_UART)) //接收到数据标志
  65. {
  66. data = UART_ReadByte(DEMO_UART);
  67. if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) //
  68. {
  69. demoRingBuffer[rxIndex] = data;
  70. rxIndex++;
  71. rxIndex %= DEMO_RING_BUFFER_SIZE;
  72. }
  73. }
  74. /*将接收到的数据返回*/
  75. if ((kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)) && (rxIndex != txIndex)) //发送中断标志
  76. {
  77. UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]); //发送一帧数据(一个字节,8个数据位)
  78. txIndex++;
  79. txIndex %= DEMO_RING_BUFFER_SIZE;
  80. }
  81. SDK_ISR_EXIT_BARRIER;
  82. }