Initial commit
This commit is contained in:
173
Core/Src/driverHWUART2.c
Normal file
173
Core/Src/driverHWUART2.c
Normal file
@@ -0,0 +1,173 @@
|
||||
#include "driverHWUART2.h"
|
||||
|
||||
UART_HandleTypeDef driverHWUART2Handle;
|
||||
DMA_HandleTypeDef driverHWUART2HDMAHandleRX;
|
||||
uint8_t driverHWUART2ReceivedChar;
|
||||
|
||||
uint8_t driverHWUART2ReceiveBuffer[RX_UART_BUFFER_SIZE]; // Buffer that stores received chars
|
||||
uint8_t driverHWUART2ReceiveBuffer_usb[RX_UART_BUFFER_SIZE];
|
||||
uint32_t driverHWUART2Receive_CNDTR = RX_UART_BUFFER_SIZE;
|
||||
uint8_t driverHWUART2Receive_CNDTR_resetFlag = 0;
|
||||
|
||||
void driverHWUART2Init(uint32_t baudRate) {
|
||||
// memset(driverHWUART2ReceiveBuffer,0,sizeof(driverHWUART2ReceiveBuffer)/sizeof(uint8_t));
|
||||
//
|
||||
// /* DMA controller clock enable */
|
||||
// __HAL_RCC_DMA1_CLK_ENABLE();
|
||||
//
|
||||
// driverHWUART2HDMAHandleRX.Instance = DMA1_Channel6; // Will handle transfer of received char to buffer
|
||||
// driverHWUART2HDMAHandleRX.Init.Direction = DMA_PERIPH_TO_MEMORY;
|
||||
// driverHWUART2HDMAHandleRX.Init.PeriphInc = DMA_PINC_DISABLE;
|
||||
// driverHWUART2HDMAHandleRX.Init.MemInc = DMA_MINC_ENABLE;
|
||||
// driverHWUART2HDMAHandleRX.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
|
||||
// driverHWUART2HDMAHandleRX.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
|
||||
// driverHWUART2HDMAHandleRX.Init.Mode = DMA_CIRCULAR;
|
||||
// driverHWUART2HDMAHandleRX.Init.Priority = DMA_PRIORITY_MEDIUM;
|
||||
//
|
||||
// if (HAL_DMA_Init(&driverHWUART2HDMAHandleRX) != HAL_OK)
|
||||
// {
|
||||
// while(true);
|
||||
// }
|
||||
//
|
||||
// __HAL_LINKDMA(&driverHWUART2Handle,hdmarx,driverHWUART2HDMAHandleRX);
|
||||
//
|
||||
// driverHWUART2Handle.Instance = USART2;
|
||||
// driverHWUART2Handle.Init.BaudRate = baudRate;
|
||||
// driverHWUART2Handle.Init.WordLength = UART_WORDLENGTH_8B;
|
||||
// driverHWUART2Handle.Init.StopBits = UART_STOPBITS_1;
|
||||
// driverHWUART2Handle.Init.Parity = UART_PARITY_NONE;
|
||||
// driverHWUART2Handle.Init.Mode = UART_MODE_TX_RX;
|
||||
// driverHWUART2Handle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
||||
// driverHWUART2Handle.Init.OverSampling = UART_OVERSAMPLING_16;
|
||||
// // driverHWUART2Handle.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
|
||||
// // driverHWUART2Handle.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_NO_INIT;
|
||||
//
|
||||
// if (HAL_UART_Init(&driverHWUART2Handle) != HAL_OK) {
|
||||
// while(true);
|
||||
// }
|
||||
//
|
||||
// volatile HAL_StatusTypeDef temp = HAL_UART_Receive_DMA(&driverHWUART2Handle,driverHWUART2ReceiveBuffer,sizeof(driverHWUART2ReceiveBuffer)/sizeof(uint8_t)); // Start receive to DMA transfer
|
||||
//
|
||||
// HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 0, 0); // Will realise interrupt on half and full DMA transfer
|
||||
// HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn);
|
||||
};
|
||||
|
||||
void driverHWUART2SendChar(uint8_t character) {
|
||||
uint8_t usb_out_buffer[1];
|
||||
uint8_t usb_result = 1;
|
||||
uint32_t usb_start_time;
|
||||
usb_start_time = HAL_GetTick();
|
||||
|
||||
usb_out_buffer[0] = character;
|
||||
while(usb_result == 1){
|
||||
//) || ((HAL_GetTick() - usb_start_time < 10))
|
||||
usb_result = CDC_Transmit_FS(usb_out_buffer, 1);
|
||||
}
|
||||
//HAL_UART_Transmit(&driverHWUART2Handle,&character,sizeof(character)/sizeof(uint8_t),10); // Send single char over serial port
|
||||
};
|
||||
|
||||
bool driverHWUART2GetChar(char *character) {
|
||||
static uint32_t bufferTail = 0; // Initiate tail to 0
|
||||
uint32_t bufferHead = sizeof(driverHWUART2ReceiveBuffer_usb)/sizeof(uint8_t) - driverHWUART2Receive_CNDTR; // Tranform to be transferred bytes to bytes transferred.
|
||||
|
||||
// if(driverHWUART2Receive_CNDTR_resetFlag){
|
||||
// bufferTail = 0;
|
||||
// driverHWUART2Receive_CNDTR_resetFlag = 0;
|
||||
// //bufferHead = 0;
|
||||
// }
|
||||
|
||||
if(bufferTail != bufferHead){ // If head and tail differs there is something in the buffer
|
||||
*character = driverHWUART2ReceiveBuffer_usb[bufferTail]; // Get char from tail of buffer
|
||||
bufferTail++; // Move the tail forward
|
||||
bufferTail %= (sizeof(driverHWUART2ReceiveBuffer_usb)/sizeof(uint8_t)); // Wrap it around the end
|
||||
return true; // Indicate there is a char in buffer
|
||||
}else
|
||||
return false; // Indicate there is no char in buffer
|
||||
};
|
||||
|
||||
//bool driverHWUART2GetChar(char *character) {
|
||||
// static uint32_t bufferTail = 0;
|
||||
// __IO uint32_t a = 0;
|
||||
// __IO uint32_t b = 0;
|
||||
// uint32_t usb_start_time;
|
||||
// __IO uint32_t bufferHead = 0;
|
||||
// usb_start_time = HAL_GetTick();// Initiate tail to 0
|
||||
// uint32_t cndtr_buf = driverHWUART2HDMAHandleRX.Instance->CNDTR;
|
||||
//
|
||||
// if(driverHWUART2Receive_CNDTR_resetFlag){
|
||||
// bufferTail = 0;
|
||||
// driverHWUART2Receive_CNDTR_resetFlag = 0;
|
||||
// //bufferHead = 0;
|
||||
//
|
||||
// }
|
||||
//
|
||||
// //uint32_t bufferHead = sizeof(driverHWUART2ReceiveBuffer)/sizeof(uint8_t) - driverHWUART2HDMAHandleRX.Instance->CNDTR; // Tranform to be transferred bytes to bytes transferred.
|
||||
// bufferHead = sizeof(driverHWUART2ReceiveBuffer)/sizeof(uint8_t) - driverHWUART2Receive_CNDTR; // Tranform to be transferred bytes to bytes transferred.
|
||||
// // 1024 - 1016 = 8
|
||||
// a = bufferHead - bufferTail;
|
||||
// if(a != 0) {
|
||||
// *character = driverHWUART2ReceiveBuffer_usb[bufferTail];
|
||||
// bufferTail++;
|
||||
//
|
||||
// bufferTail %= (sizeof(driverHWUART2ReceiveBuffer)/sizeof(uint8_t));
|
||||
// return true;
|
||||
// } else{
|
||||
// if(driverHWUART2Receive_CNDTR < 1000) {
|
||||
// return false;
|
||||
// }
|
||||
// return false; // Indicate there is no char in buffer
|
||||
// }
|
||||
// //if(bufferTail != bufferHead) { // If head and tail differs there is something in the buffer
|
||||
// //while (bufferTail != bufferHead) {
|
||||
//// //if(bufferTail < 20) {
|
||||
//// //*character = driverHWUART2ReceiveBuffer[bufferTail]; // Get char from tail of buffer
|
||||
//// *character = driverHWUART2ReceiveBuffer_usb[bufferTail];
|
||||
//// bufferTail++;
|
||||
//// // Move the tail forward
|
||||
//// bufferTail %= (sizeof(driverHWUART2ReceiveBuffer)/sizeof(uint8_t)); // Wrap it around the end
|
||||
//// // bufferTail = bufferTail % 1024
|
||||
//// // bufferTail = 1024 % 1024 = 0
|
||||
//// return true; // Indicate there is a char in buffer
|
||||
//// }else{
|
||||
//// if(driverHWUART2Receive_CNDTR < 1000) {
|
||||
//// return false;
|
||||
//// }
|
||||
//// return false; // Indicate there is no char in buffer
|
||||
//// }
|
||||
//};
|
||||
|
||||
//void driverHWUART2SendChar(uint8_t character) {
|
||||
// //HAL_UART_Transmit(&driverHWUART2Handle,&character,sizeof(character)/sizeof(uint8_t),10); // Send single char over serial port
|
||||
//// CDC_Transmit_FS(character, 1);
|
||||
// uint8_t testDataToSend[8];
|
||||
// // for (uint8_t i = 0; i < 8; i++)
|
||||
// // {
|
||||
// // testDataToSend[i] = i;
|
||||
// // }
|
||||
//
|
||||
// testDataToSend[0] = character;
|
||||
// CDC_Transmit_FS(testDataToSend, 1);
|
||||
//
|
||||
// //uint8_t buf[1];
|
||||
// //buf[0] = character;
|
||||
// //CDC_Transmit_FS(buf[0], 1);
|
||||
//};
|
||||
//
|
||||
//bool driverHWUART2GetChar(char *character) {
|
||||
// static uint32_t bufferTail = 0; // Initiate tail to 0
|
||||
// uint32_t bufferHead = sizeof(driverHWUART2ReceiveBuffer)/sizeof(uint8_t) - driverHWUART2Receive_CNDTR; // Tranform to be transferred bytes to bytes transferred.
|
||||
// if(bufferHead == 12) {
|
||||
//// bufferTail = 1;
|
||||
// }
|
||||
// if(bufferTail != bufferHead){ // If head and tail differs there is something in the buffer
|
||||
// *character = driverHWUART2ReceiveBuffer[bufferTail]; // Get char from tail of buffer
|
||||
// bufferTail++; // Move the tail forward
|
||||
// bufferTail %= (sizeof(driverHWUART2ReceiveBuffer)/sizeof(uint8_t)); // Wrap it around the end
|
||||
// return true; // Indicate there is a char in buffer
|
||||
// }else
|
||||
// return false; // Indicate there is no char in buffer
|
||||
//};
|
||||
|
||||
void DMA1_Channel6_IRQHandler(void) { // Will trigger on halve and full
|
||||
// HAL_DMA_IRQHandler(&driverHWUART2HDMAHandleRX);
|
||||
}
|
||||
Reference in New Issue
Block a user