/*****************头文件*************************/ #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; //接收数据计数 /*****************UART0初始化*************************/ void UART0_InterrputInit() { UART0_InitPins(); //UART0引脚初始化 uart_config_t config; //参数设置 UART_GetDefaultConfig(&config); config.baudRate_Bps = 2500000u; //设置波特率 config.enableTx = true; config.enableRx = true; UART_Init(UART0, &config, SystemCoreClock); //初始化配置 UART_EnableInterrupts(UART0, kUART_RxDataRegFullInterruptEnable | kUART_RxOverrunInterruptEnable); //使能Rx中断 EnableIRQ(UART0_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个数据位) } uint16_t UART0_IRQ_Count = 0; /*****************UART0中断服务函数**********************/ void UART0_RX_TX_IRQHandler(void) { uint16_t data; UART0_IRQ_Count ++; UART0_IRQ_Count %= 1000; if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(UART0)) //接收到数据标志 { data = UART_ReadByte(UART0); 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; }