|
- /*****************头文件*************************/
- #include "fsl_common.h"
- #include "uart_Interrupt.h"
- #include "fsl_uart.h"
- #include "pin_Init.h"
- #include "fsl_gpio.h"
- #include "fsl_pit.h"
- #include "pit.h"
- #include "adc_Interrupt.h"
-
- /*****************变量声明*************************/
- uint8_t demoRingBuffer[DEMO_RING_BUFFER_SIZE];
- uint16_t txIndex; //发送数据计数
- uint16_t rxIndex; //接收数据计数
- uint16_t UART1rxIndex = 0; //接收数据计数
- uint8_t RS485_Buf_Arr[DEMO_RS485_ARR_SIZE]; //RS485缓存数据数组
- uint16_t UART2_SendData_len; //记录UART2发送数据长度
- uint16_t UART2_SendData_OK; //UART2发送结束标志
- uint8_t g_tipString1[] = "\r\n\r\n编码器角度:\t";
- uint8_t g_tipString2[] = "\t电压(V):\t";
- uint32_t BMQ_Location_Num; //编码器位置
- uint8_t UART2_Buf_Arr[DEMO_UART2_ARR_SIZE]; //RS485缓存数据数组
- uint32_t adc_GetValue = 0; //接收母线直流电压值
- /*****************UART1初始化*************************/
- void UART1_InterrputInit()
- {
- UART1_InitPins(); //UART1引脚初始化
- uart_config_t config; //参数设置
- UART_GetDefaultConfig(&config);
- config.stopBitCount = kUART_OneStopBit;
- config.baudRate_Bps = 2500000u; //设置波特率
- 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); //开启中断
- }
-
- uint32_t UART1_IRQ_Count;
- /*****************UART1中断服务函数**********************/
- void UART1_RX_TX_IRQHandler(void)
- {
- uint16_t data;
- UART1_IRQ_Count ++;
- UART1_IRQ_Count %= 1000;
- if ((kUART_RxDataRegFullFlag | kUART_RxOverrunFlag) & UART_GetStatusFlags(UART1)) //接收到数据标志
- {
- data = UART_ReadByte(UART1);
- if (UART1rxIndex < DEMO_RING_BUFFER_SIZE) //
- {
- demoRingBuffer[UART1rxIndex] = data;
- UART1rxIndex++;
- UART1rxIndex %= DEMO_RING_BUFFER_SIZE;
- }
- }
- UART2_SendData_len = UART1rxIndex;
- SDK_ISR_EXIT_BARRIER;
- }
-
- uint32_t UART2_IRQ_Count;
- /*****************UART2中断服务函数**********************/
- void UART2_RX_TX_IRQHandler(void)
- {
- uint16_t data;
- UART2_IRQ_Count ++;
- UART2_IRQ_Count %= 1000;
- 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;
- }
-
- /**************发送一帧数据*************/
- void UART1_sendData()
- {
- // if (UART2_SendData_OK == 1)
- // {
- // return;
- // }
- UART2_SendData_OK ++;
- UART2_SendData_OK %= 100;
- GPIO_PinWrite(GPIOE, 3, 1); //PTE3写
- UART_WriteByte(UART1, 0x1A); //发送一帧数据(一个字节,8个数据位)
- UART_WriteByte(UART1, 0x2A); //发送一帧数据(一个字节,8个数据位)
- while (!(kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(UART1))); //发送中断标志
- UART_ClearStatusFlags(UART1, kUART_TransmissionCompleteFlag);
- GPIO_PinWrite(GPIOE, 3, 0); //PTE3写
- }
-
- /**************UART2发送数据*******************/
- void UART2_sendData()
- {
- if (UART2_SendData_len != 0)
- {
- UART_WriteBlocking(DEMO_UART, g_tipString1, sizeof(g_tipString1) / sizeof(g_tipString1[0])-1);
- for (uint8_t i = 0; i < 5; i++ )
- {
- UART_WriteByte(DEMO_UART, UART2_Buf_Arr[i]);
- while (!(kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART))); //等待发送结束
- UART_ClearStatusFlags(DEMO_UART, kUART_TransmissionCompleteFlag);
- }
- UART_WriteBlocking(DEMO_UART, g_tipString2, sizeof(g_tipString2) / sizeof(g_tipString2[0])-1);
- for (uint8_t i = 0; i < 4; i++ )
- {
- UART_WriteByte(DEMO_UART, UART2_Buf_Arr[i+5]);
- while (!(kUART_TxDataRegEmptyFlag & UART_GetStatusFlags(DEMO_UART))); //等待发送结束
- UART_ClearStatusFlags(DEMO_UART, kUART_TransmissionCompleteFlag);
- }
- }
- }
-
- /***************RS485接收数据*********************/
- void RS485_Recieve_Data()
- {
- // for (uint8_t i = 0; i < UART1rxIndex; i++ )
- // {
- // RS485_Buf_Arr[i] = demoRingBuffer[i];
- // }
- // BMQ_Location_Num = (RS485_Buf_Arr[4] << 16) + (RS485_Buf_Arr[3] << 8) + (RS485_Buf_Arr[2]);
- if (demoRingBuffer[0] != 0x1A)
- {
- return;
- }
- BMQ_Location_Num = (demoRingBuffer[4] << 16) + (demoRingBuffer[3] << 8) + (demoRingBuffer[2]);
- BMQ_Location_Num = BMQ_Location_Num * 3600 / 131071; //放大10倍
- UART2_Buf_Arr[0] = (BMQ_Location_Num % 10000 / 1000) + '0';
- UART2_Buf_Arr[1] = (BMQ_Location_Num % 1000 / 100) + '0';
- UART2_Buf_Arr[2] = (BMQ_Location_Num % 100 / 10) + '0';
- UART2_Buf_Arr[3] = '.';
- UART2_Buf_Arr[4] = (BMQ_Location_Num % 10) + '0';
- }
-
- /*************刷新电压数据******************/
- void ADC16_Recieve_Data()
- {
- adc_GetValue = adc_ReturnValue();
- UART2_Buf_Arr[5] = (adc_GetValue % 10000 / 1000) + '0';
- UART2_Buf_Arr[6] = '.';
- UART2_Buf_Arr[7] = (adc_GetValue % 1000 / 100) + '0';
- UART2_Buf_Arr[8] = (adc_GetValue % 100 / 10) + '0';
- }
-
- void PIT0_IRQHandler()
- {
- PIT_ClearStatusFlags(PIT, DEMO_PIT_CHANNEL, kPIT_TimerFlag); //清除中断标志
- UART1_sendData(); //UART1发送
- UART1rxIndex = 0;
- //GPIO_PortToggle(GPIOA, 1 << 15);
-
- }
|