|
- /*****************头文件*************************/
- #include "fsl_common.h"
- #include "uart_Interrupt.h"
- #include "fsl_uart.h"
- #include "pin_Init.h"
-
- /*****************变量声明*************************/
- uint8_t demoRingBuffer[DEMO_RING_BUFFER_SIZE];
- uint16_t txIndex; //发送数据计数变量
- volatile uint16_t rxIndex; //接收数据计数变量
-
- /*****************UART1初始化*************************/
- void UART1_InterrputInit()
- {
- UART1_InitPins(); //UART1引脚初始化
- uart_config_t config; //参数设置
- UART_GetDefaultConfig(&config);
- config.baudRate_Bps = 9600; //设置波特率
- config.enableTx = true;
- config.enableRx = true;
- UART_Init(UART1, &config, SystemCoreClock); //初始化配置
- UART_EnableInterrupts(UART1, kUART_RxDataRegFullInterruptEnable | kUART_RxOverrunInterruptEnable); //使能Rx中断
- EnableIRQ(UART1_RX_TX_IRQn); //开启中断
- }
-
- /*****************UART2初始化*************************/
- void UART2_InterrputInit()
- {
- UART2_InitPins(); //UART2引脚初始化
- uart_config_t config; //参数设置
- UART_GetDefaultConfig(&config);
- config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE; //设置波特率
- config.enableTx = true;
- config.enableRx = true;
- UART_Init(DEMO_UART, &config, SystemCoreClock); //初始化配置
- UART_EnableInterrupts(DEMO_UART, kUART_RxDataRegFullInterruptEnable | kUART_RxOverrunInterruptEnable); //使能Rx中断
- EnableIRQ(UART2_RX_TX_IRQn); //开启中断
- UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]); //发送一帧数据(一个字节,8个数据位)
- }
-
- /*****************UART1中断服务函数**********************/
- void UART1_RX_TX_IRQHandler(void)
- {
- uint16_t data;
- if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(UART0)) //接收到数据标志
- {
- data = UART_ReadByte(UART1);
- if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) //
- {
- demoRingBuffer[rxIndex] = data;
- rxIndex++;
- rxIndex %= DEMO_RING_BUFFER_SIZE;
- }
- }
- /*将接收到的数据返回*/
- if ((kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)) && (rxIndex != txIndex)) //发送中断标志
- {
- UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]); //发送一帧数据(一个字节,8个数据位)
- txIndex++;
- txIndex %= DEMO_RING_BUFFER_SIZE;
- }
- SDK_ISR_EXIT_BARRIER;
- }
-
- /*****************UART2中断服务函数**********************/
- void UART2_RX_TX_IRQHandler(void)
- {
- uint16_t data;
- if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(DEMO_UART)) //接收到数据标志
- {
- data = UART_ReadByte(DEMO_UART);
- if (((rxIndex + 1) % DEMO_RING_BUFFER_SIZE) != txIndex) //
- {
- demoRingBuffer[rxIndex] = data;
- rxIndex++;
- rxIndex %= DEMO_RING_BUFFER_SIZE;
- }
- }
- /*将接收到的数据返回*/
- if ((kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART)) && (rxIndex != txIndex)) //发送中断标志
- {
- UART_WriteByte(DEMO_UART, demoRingBuffer[txIndex]); //发送一帧数据(一个字节,8个数据位)
- txIndex++;
- txIndex %= DEMO_RING_BUFFER_SIZE;
- }
- SDK_ISR_EXIT_BARRIER;
- }
-
|