Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 

93 rindas
3.2 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. /*****************UART0初始化*************************/
  11. void UART0_InterrputInit()
  12. {
  13. UART0_InitPins(); //UART0引脚初始化
  14. uart_config_t config; //参数设置
  15. UART_GetDefaultConfig(&config);
  16. config.baudRate_Bps = 2500000u; //设置波特率
  17. config.enableTx = true;
  18. config.enableRx = true;
  19. UART_Init(UART0, &config, SystemCoreClock); //初始化配置
  20. UART_EnableInterrupts(UART0, kUART_RxDataRegFullInterruptEnable | kUART_RxOverrunInterruptEnable); //使能Rx中断
  21. EnableIRQ(UART0_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. uint16_t UART0_IRQ_Count = 0;
  38. /*****************UART0中断服务函数**********************/
  39. void UART0_RX_TX_IRQHandler(void)
  40. {
  41. uint16_t data;
  42. UART0_IRQ_Count ++;
  43. UART0_IRQ_Count %= 1000;
  44. if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(UART0)) //接收到数据标志
  45. {
  46. data = UART_ReadByte(UART0);
  47. if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) //
  48. {
  49. demoRingBuffer[rxIndex] = data;
  50. rxIndex++;
  51. rxIndex %= DEMO_RING_BUFFER_SIZE;
  52. }
  53. }
  54. /*将接收到的数据返回*/
  55. if ((kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)) && (rxIndex != txIndex)) //发送中断标志
  56. {
  57. UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]); //发送一帧数据(一个字节,8个数据位)
  58. txIndex++;
  59. txIndex %= DEMO_RING_BUFFER_SIZE;
  60. }
  61. SDK_ISR_EXIT_BARRIER;
  62. }
  63. /*****************UART2中断服务函数**********************/
  64. void UART2_RX_TX_IRQHandler(void)
  65. {
  66. uint16_t data;
  67. if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(DEMO_UART)) //接收到数据标志
  68. {
  69. data = UART_ReadByte(DEMO_UART);
  70. if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) //
  71. {
  72. demoRingBuffer[rxIndex] = data;
  73. rxIndex++;
  74. rxIndex %= DEMO_RING_BUFFER_SIZE;
  75. }
  76. }
  77. /*将接收到的数据返回*/
  78. if ((kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)) && (rxIndex != txIndex)) //发送中断标志
  79. {
  80. UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]); //发送一帧数据(一个字节,8个数据位)
  81. txIndex++;
  82. txIndex %= DEMO_RING_BUFFER_SIZE;
  83. }
  84. SDK_ISR_EXIT_BARRIER;
  85. }