Mercurial > public > ostc4
annotate Small_CPU/Src/uart.c @ 1036:5865f0aeb438 Puls_Integration
Radio data integration:
Added functionality for displaying radio data as debug message. The USART3 has been configurated for receiption and a function for the visualization of the data has been added to the demo unit (draft implementation). For activation the radio as well as the logger functionality needs to be activated via compile switch. Note that at the moment bluetooth and radio DMA may not be operated in parallel.
| author | Ideenmodellierer |
|---|---|
| date | Sun, 10 Aug 2025 15:28:59 +0200 |
| parents | c386ae6635e4 |
| children |
| rev | line source |
|---|---|
| 38 | 1 /** |
| 2 ****************************************************************************** | |
| 3 * @file uart.c | |
| 4 * @author heinrichs weikamp gmbh | |
| 5 * @version V0.0.1 | |
| 6 * @date 27-March-2014 | |
| 7 * @brief button control | |
| 8 * | |
| 9 @verbatim | |
| 10 ============================================================================== | |
| 11 ##### How to use ##### | |
| 12 ============================================================================== | |
| 13 @endverbatim | |
| 14 ****************************************************************************** | |
| 15 * @attention | |
| 16 * | |
| 17 * <h2><center>© COPYRIGHT(c) 2015 heinrichs weikamp</center></h2> | |
| 18 * | |
| 19 ****************************************************************************** | |
| 20 */ | |
| 21 /* Includes ------------------------------------------------------------------*/ | |
| 22 #include "uart.h" | |
| 794 | 23 #include "uartProtocol_O2.h" |
|
798
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
24 #include "uartProtocol_Co2.h" |
|
842
c3dd461ca3f9
Migrated Sentinel protocol to new UART structure:
Ideenmodellierer
parents:
809
diff
changeset
|
25 #include "uartProtocol_Sentinel.h" |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
26 #include "uartProtocol_GNSS.h" |
| 662 | 27 #include "externalInterface.h" |
| 28 #include "data_exchange.h" | |
| 1000 | 29 #include "gpio.h" |
|
704
f1b40364b0af
Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents:
690
diff
changeset
|
30 #include <string.h> /* memset */ |
| 38 | 31 |
| 988 | 32 #ifdef ENABLE_GNSS_INTERN |
| 922 | 33 extern UART_HandleTypeDef huart6; |
| 932 | 34 extern sUartComCtrl Uart6Ctrl; |
| 922 | 35 #endif |
| 889 | 36 |
| 38 | 37 /* Private variables ---------------------------------------------------------*/ |
| 38 | |
| 922 | 39 DMA_HandleTypeDef hdma_usart1_rx, hdma_usart1_tx; |
| 38 | 40 |
|
890
651d21777b61
cleanup and disable function for GNSS uart and DMA
heinrichsweikamp
parents:
889
diff
changeset
|
41 uint8_t rxBuffer[CHUNK_SIZE * CHUNKS_PER_BUFFER]; /* The complete buffer has a X * chunk size to allow variations in buffer read time */ |
| 936 | 42 uint8_t txBuffer[TX_BUF_SIZE]; /* tx uses less bytes */ |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
43 uint8_t txBufferQue[TX_BUF_SIZE]; /* In MUX mode command may be send shortly after each other => allow q 1 entry que */ |
| 932 | 44 |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
45 |
|
890
651d21777b61
cleanup and disable function for GNSS uart and DMA
heinrichsweikamp
parents:
889
diff
changeset
|
46 static uint8_t lastCmdIndex; /* Index of last command which has not been completely received */ |
| 932 | 47 |
| 48 sUartComCtrl Uart1Ctrl; | |
| 49 static sUartComCtrl* pGnssCtrl = NULL; | |
| 794 | 50 |
| 921 | 51 static uint32_t LastCmdRequestTick = 0; /* Used by ADC handler to avoid interferance with UART communication */ |
|
798
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
52 |
| 38 | 53 /* Exported functions --------------------------------------------------------*/ |
| 54 | |
| 932 | 55 |
| 56 void UART_SetGnssCtrl(sUartComCtrl* pTarget) | |
| 57 { | |
| 58 pGnssCtrl = pTarget; | |
| 59 } | |
| 60 | |
| 61 sUartComCtrl* UART_GetGnssCtrl() | |
| 62 { | |
| 63 return pGnssCtrl; | |
| 64 } | |
| 65 | |
| 66 | |
| 67 void UART_clearRxBuffer(sUartComCtrl* pUartCtrl) | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
68 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
69 uint16_t index = 0; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
70 do |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
71 { |
| 932 | 72 pUartCtrl->pRxBuffer[index++] = BUFFER_NODATA_LOW; |
| 73 pUartCtrl->pRxBuffer[index++] = BUFFER_NODATA_HIGH; | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
74 } while (index < sizeof(rxBuffer)); |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
75 |
| 932 | 76 pUartCtrl->rxReadIndex = 0; |
| 77 pUartCtrl->rxWriteIndex = 0; | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
78 } |
| 794 | 79 |
| 662 | 80 void MX_USART1_UART_Init(void) |
| 38 | 81 { |
| 662 | 82 /* regular init */ |
| 83 huart1.Instance = USART1; | |
|
803
96ffad0a4e57
Cleanup initialisation / deinitialization:
Ideenmodellierer
parents:
798
diff
changeset
|
84 huart1.Init.BaudRate = 19200; |
| 662 | 85 huart1.Init.WordLength = UART_WORDLENGTH_8B; |
| 86 huart1.Init.StopBits = UART_STOPBITS_1; | |
| 87 huart1.Init.Parity = UART_PARITY_NONE; | |
| 88 huart1.Init.Mode = UART_MODE_TX_RX; | |
| 89 huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; | |
| 90 huart1.Init.OverSampling = UART_OVERSAMPLING_16; | |
| 91 | |
| 92 HAL_UART_Init(&huart1); | |
| 93 | |
|
704
f1b40364b0af
Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents:
690
diff
changeset
|
94 MX_USART1_DMA_Init(); |
|
f1b40364b0af
Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents:
690
diff
changeset
|
95 |
| 932 | 96 UART_clearRxBuffer(&Uart1Ctrl); |
| 662 | 97 lastCmdIndex = 0; |
| 932 | 98 |
| 99 Uart1Ctrl.pHandle = &huart1; | |
| 100 Uart1Ctrl.rxWriteIndex = 0; | |
| 101 Uart1Ctrl.rxReadIndex = 0; | |
| 102 Uart1Ctrl.dmaRxActive = 0; | |
| 103 Uart1Ctrl.dmaTxActive = 0; | |
| 104 Uart1Ctrl.pRxBuffer = rxBuffer; | |
| 105 Uart1Ctrl.pTxBuffer = txBuffer; | |
| 106 Uart1Ctrl.txBufferQueLen = 0; | |
| 107 | |
| 988 | 108 #ifndef ENABLE_GNSS_INTERN |
| 109 #ifdef ENABLE_GNSS_EXTERN | |
| 932 | 110 UART_SetGnssCtrl(&Uart1Ctrl); |
| 111 #endif | |
| 988 | 112 #endif |
| 662 | 113 } |
| 38 | 114 |
| 889 | 115 |
| 116 | |
| 662 | 117 void MX_USART1_UART_DeInit(void) |
| 118 { | |
|
704
f1b40364b0af
Added protocol functions for UART DiveO2 sensor:
Ideenmodellierer
parents:
690
diff
changeset
|
119 HAL_DMA_Abort(&hdma_usart1_rx); |
| 662 | 120 HAL_DMA_DeInit(&hdma_usart1_rx); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
121 HAL_DMA_Abort(&hdma_usart1_tx); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
122 HAL_DMA_DeInit(&hdma_usart1_tx); |
| 662 | 123 HAL_UART_DeInit(&huart1); |
| 932 | 124 Uart1Ctrl.dmaRxActive = 0; |
| 125 Uart1Ctrl.dmaTxActive = 0; | |
| 126 Uart1Ctrl.txBufferQueLen = 0; | |
| 662 | 127 } |
| 128 | |
| 129 void MX_USART1_DMA_Init() | |
| 130 { | |
| 131 /* DMA controller clock enable */ | |
| 132 __DMA2_CLK_ENABLE(); | |
| 133 | |
| 134 /* Peripheral DMA init*/ | |
| 135 hdma_usart1_rx.Instance = DMA2_Stream5; | |
| 136 hdma_usart1_rx.Init.Channel = DMA_CHANNEL_4; | |
| 137 hdma_usart1_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; //DMA_MEMORY_TO_PERIPH; | |
| 138 hdma_usart1_rx.Init.PeriphInc = DMA_PINC_DISABLE; | |
| 139 hdma_usart1_rx.Init.MemInc = DMA_MINC_ENABLE; | |
| 140 hdma_usart1_rx.Init.PeriphDataAlignment = DMA_MDATAALIGN_BYTE; | |
| 141 hdma_usart1_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; | |
| 142 hdma_usart1_rx.Init.Mode = DMA_NORMAL; | |
| 143 hdma_usart1_rx.Init.Priority = DMA_PRIORITY_LOW; | |
| 144 hdma_usart1_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; | |
| 145 HAL_DMA_Init(&hdma_usart1_rx); | |
| 146 | |
| 147 __HAL_LINKDMA(&huart1,hdmarx,hdma_usart1_rx); | |
| 148 | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
149 hdma_usart1_tx.Instance = DMA2_Stream7; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
150 hdma_usart1_tx.Init.Channel = DMA_CHANNEL_4; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
151 hdma_usart1_tx.Init.Direction = DMA_MEMORY_TO_PERIPH; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
152 hdma_usart1_tx.Init.PeriphInc = DMA_PINC_DISABLE; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
153 hdma_usart1_tx.Init.MemInc = DMA_MINC_ENABLE; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
154 hdma_usart1_tx.Init.PeriphDataAlignment = DMA_MDATAALIGN_BYTE; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
155 hdma_usart1_tx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
156 hdma_usart1_tx.Init.Mode = DMA_NORMAL; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
157 hdma_usart1_tx.Init.Priority = DMA_PRIORITY_LOW; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
158 hdma_usart1_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
159 HAL_DMA_Init(&hdma_usart1_tx); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
160 |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
161 __HAL_LINKDMA(&huart1,hdmatx,hdma_usart1_tx); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
162 |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
163 |
| 662 | 164 /* DMA interrupt init */ |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
165 HAL_NVIC_SetPriority(DMA2_Stream5_IRQn, 2, 2); |
| 662 | 166 HAL_NVIC_EnableIRQ(DMA2_Stream5_IRQn); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
167 HAL_NVIC_SetPriority(DMA2_Stream7_IRQn, 2, 1); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
168 HAL_NVIC_EnableIRQ(DMA2_Stream7_IRQn); |
| 38 | 169 } |
| 170 | |
| 932 | 171 void UART_MUX_SelectAddress(uint8_t muxAddress) |
|
779
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
172 { |
|
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
173 uint8_t indexstr[4]; |
|
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
174 |
| 794 | 175 if(muxAddress <= MAX_MUX_CHANNEL) |
|
779
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
176 { |
| 794 | 177 indexstr[0] = '~'; |
| 178 indexstr[1] = muxAddress; | |
| 179 indexstr[2] = 0x0D; | |
| 180 indexstr[3] = 0x0A; | |
| 932 | 181 if(!Uart1Ctrl.dmaTxActive) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
182 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
183 memcpy(txBuffer, indexstr, 4); |
| 932 | 184 Uart1Ctrl.dmaTxActive = 0; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
185 if(HAL_OK == HAL_UART_Transmit_DMA(&huart1,txBuffer,4)) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
186 { |
| 932 | 187 Uart1Ctrl.dmaTxActive = 1; |
| 188 while(Uart1Ctrl.dmaTxActive) | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
189 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
190 HAL_Delay(1); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
191 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
192 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
193 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
194 else |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
195 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
196 memcpy(txBufferQue, indexstr, 4); |
| 932 | 197 Uart1Ctrl.txBufferQueLen = 4; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
198 } |
|
779
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
199 } |
|
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
200 } |
|
0b5f45448eb6
Added UART multiplexer support for DiveO2:
Ideenmodellierer
parents:
747
diff
changeset
|
201 |
| 794 | 202 |
| 203 void UART_SendCmdString(uint8_t *cmdString) | |
|
729
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
204 { |
| 794 | 205 uint8_t cmdLength = strlen((char*)cmdString); |
| 206 | |
| 932 | 207 if(Uart1Ctrl.dmaTxActive == 0) |
|
729
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
208 { |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
209 if(cmdLength < TX_BUF_SIZE) /* A longer string is an indication for a missing 0 termination */ |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
210 { |
| 932 | 211 if(Uart1Ctrl.dmaRxActive == 0) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
212 { |
| 932 | 213 UART_StartDMA_Receiption(&Uart1Ctrl); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
214 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
215 memcpy(txBuffer, cmdString, cmdLength); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
216 if(HAL_OK == HAL_UART_Transmit_DMA(&huart1,txBuffer,cmdLength)) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
217 { |
| 932 | 218 Uart1Ctrl.dmaTxActive = 1; |
| 921 | 219 LastCmdRequestTick = HAL_GetTick(); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
220 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
221 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
222 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
223 else |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
224 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
225 memcpy(txBufferQue, cmdString, cmdLength); |
| 932 | 226 Uart1Ctrl.txBufferQueLen = cmdLength; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
227 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
228 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
229 |
| 933 | 230 void UART_AddFletcher(uint8_t* pBuffer, uint8_t length) |
| 231 { | |
| 232 uint8_t ck_A = 0; | |
| 233 uint8_t ck_B = 0; | |
| 234 uint8_t index = 0; | |
| 235 | |
| 236 | |
| 237 pBuffer += 2; /* skip sync chars */ | |
| 238 for(index = 2; index < length; index++) | |
| 239 { | |
| 240 ck_A += *pBuffer++; | |
| 241 ck_B += ck_A; | |
| 242 } | |
| 243 *pBuffer++ = ck_A; | |
| 244 *pBuffer++ = ck_B; | |
| 245 } | |
| 246 | |
| 922 | 247 void UART_SendCmdUbx(const uint8_t *cmd, uint8_t len) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
248 { |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
249 if(len < TX_BUF_SIZE) /* A longer string is an indication for a missing 0 termination */ |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
250 { |
| 932 | 251 if(pGnssCtrl != NULL) |
| 794 | 252 { |
| 932 | 253 if(pGnssCtrl->dmaRxActive == 0) |
| 254 { | |
| 255 UART_StartDMA_Receiption(pGnssCtrl); | |
| 256 } | |
| 257 memcpy(pGnssCtrl->pTxBuffer, cmd, len); | |
| 933 | 258 UART_AddFletcher(pGnssCtrl->pTxBuffer, len); |
| 259 len += 2; | |
| 932 | 260 if(HAL_OK == HAL_UART_Transmit_DMA(pGnssCtrl->pHandle,pGnssCtrl->pTxBuffer,len)) |
| 261 { | |
| 262 pGnssCtrl->dmaTxActive = 1; | |
| 263 LastCmdRequestTick = HAL_GetTick(); | |
| 264 } | |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
265 } |
| 794 | 266 } |
| 267 } | |
| 268 | |
|
729
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
269 |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
270 void StringToInt(char *pstr, uint32_t *puInt32) |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
271 { |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
272 uint8_t index = 0; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
273 uint32_t result = 0; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
274 while((pstr[index] >= '0') && (pstr[index] <= '9')) |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
275 { |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
276 result *=10; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
277 result += pstr[index] - '0'; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
278 index++; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
279 } |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
280 *puInt32 = result; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
281 } |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
282 |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
283 void StringToUInt64(char *pstr, uint64_t *puint64) |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
284 { |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
285 uint8_t index = 0; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
286 uint64_t result = 0; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
287 while((pstr[index] >= '0') && (pstr[index] <= '9')) |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
288 { |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
289 result *=10; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
290 result += pstr[index] - '0'; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
291 index++; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
292 } |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
293 *puint64 = result; |
|
d646a0f724a7
Added auto detection functionality for sensors connected to the external interface:
Ideenmodellierer
parents:
725
diff
changeset
|
294 } |
| 662 | 295 |
| 932 | 296 void UART_StartDMA_Receiption(sUartComCtrl* pUartCtrl) |
| 742 | 297 { |
| 932 | 298 if(pUartCtrl->dmaRxActive == 0) |
| 742 | 299 { |
| 932 | 300 if(((pUartCtrl->rxWriteIndex / CHUNK_SIZE) != (pUartCtrl->rxReadIndex / CHUNK_SIZE)) || ((UART_isEndIndication(pUartCtrl, pUartCtrl->rxWriteIndex)) && (UART_isEndIndication(pUartCtrl, pUartCtrl->rxWriteIndex + 1)))) /* start next transfer if we did not catch up with read index */ |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
301 { |
| 932 | 302 if(HAL_OK == HAL_UART_Receive_DMA (pUartCtrl->pHandle, &pUartCtrl->pRxBuffer[pUartCtrl->rxWriteIndex], CHUNK_SIZE)) |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
303 { |
| 932 | 304 pUartCtrl->dmaRxActive = 1; |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
305 } |
|
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
306 } |
| 742 | 307 } |
| 308 } | |
| 690 | 309 |
|
798
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
310 void UART_ChangeBaudrate(uint32_t newBaudrate) |
| 38 | 311 { |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
312 MX_USART1_UART_DeInit(); |
|
798
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
313 huart1.Init.BaudRate = newBaudrate; |
|
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
314 HAL_UART_Init(&huart1); |
|
e9eba334b942
Migrated CO2 protocol implementation to new format:
Ideenmodellierer
parents:
794
diff
changeset
|
315 MX_USART1_DMA_Init(); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
316 HAL_NVIC_SetPriority(USART1_IRQn, 1, 3); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
317 HAL_NVIC_EnableIRQ(USART1_IRQn); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
318 |
| 932 | 319 UART_clearRxBuffer(&Uart1Ctrl); |
| 320 Uart1Ctrl.rxReadIndex = 0; | |
| 321 Uart1Ctrl.rxWriteIndex = 0; | |
| 322 Uart1Ctrl.dmaRxActive = 0; | |
| 976 | 323 Uart1Ctrl.dmaTxActive = 0; |
| 932 | 324 Uart1Ctrl.txBufferQueLen = 0; |
| 38 | 325 } |
| 690 | 326 |
| 932 | 327 void UART_HandleRxComplete(sUartComCtrl* pUartCtrl) |
| 328 { | |
| 329 pUartCtrl->dmaRxActive = 0; | |
| 330 pUartCtrl->rxWriteIndex+=CHUNK_SIZE; | |
| 331 if(pUartCtrl->rxWriteIndex >= CHUNK_SIZE * CHUNKS_PER_BUFFER) | |
| 332 { | |
| 333 pUartCtrl->rxWriteIndex = 0; | |
| 334 } | |
| 335 UART_StartDMA_Receiption(pUartCtrl); | |
| 336 } | |
| 662 | 337 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) |
| 38 | 338 { |
| 932 | 339 if(huart == &huart1) |
| 340 { | |
| 341 UART_HandleRxComplete(&Uart1Ctrl); | |
| 342 } | |
| 988 | 343 #ifdef ENABLE_GNSS_INTERN |
| 344 if(GPIO_GetVersion() > 0) | |
| 932 | 345 { |
| 988 | 346 if(huart == &huart6) |
| 347 { | |
| 348 UART_HandleRxComplete(&Uart6Ctrl); | |
| 349 } | |
| 932 | 350 } |
| 922 | 351 #endif |
| 38 | 352 } |
| 932 | 353 |
| 354 void UART_HandleTxComplete(sUartComCtrl* pUartCtrl) | |
| 355 { | |
| 356 pUartCtrl->dmaTxActive = 0; | |
| 357 UART_WriteData(pUartCtrl); | |
| 358 if(pUartCtrl->txBufferQueLen) | |
| 359 { | |
| 360 memcpy(pUartCtrl->pTxBuffer, pUartCtrl->pTxQue, pUartCtrl->txBufferQueLen); | |
| 361 HAL_UART_Transmit_DMA(pUartCtrl->pHandle,pUartCtrl->pTxBuffer,pUartCtrl->txBufferQueLen); | |
| 362 pUartCtrl->dmaTxActive = 1; | |
| 363 pUartCtrl->txBufferQueLen = 0; | |
| 364 } | |
| 365 } | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
366 void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
367 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
368 if(huart == &huart1) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
369 { |
| 932 | 370 UART_HandleTxComplete(&Uart1Ctrl); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
371 } |
| 988 | 372 #ifdef ENABLE_GNSS_INTERN |
| 373 if(GPIO_GetVersion() > 0) | |
| 922 | 374 { |
| 988 | 375 if(huart == &huart6) |
| 376 { | |
| 377 UART_HandleTxComplete(&Uart6Ctrl); | |
| 378 } | |
| 922 | 379 } |
| 380 #endif | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
381 } |
| 38 | 382 |
| 932 | 383 uint8_t UART_isEndIndication(sUartComCtrl* pCtrl, uint8_t index) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
384 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
385 uint8_t ret = 0; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
386 if(index % 2) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
387 { |
| 932 | 388 if(pCtrl->pRxBuffer[index] == BUFFER_NODATA_HIGH) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
389 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
390 ret = 1; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
391 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
392 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
393 else |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
394 { |
| 932 | 395 if(pCtrl->pRxBuffer[index] == BUFFER_NODATA_LOW) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
396 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
397 ret = 1; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
398 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
399 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
400 |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
401 return ret; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
402 } |
| 976 | 403 void UART_ReadData(uint8_t sensorType, uint8_t flush) /* flush = 1 skips processing of data => data is discarded */ |
| 794 | 404 { |
| 932 | 405 uint8_t localRX; |
| 406 uint8_t futureIndex; | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
407 uint8_t moreData = 0; |
| 38 | 408 |
| 932 | 409 sUartComCtrl* pUartCtrl; |
| 410 | |
| 411 if(sensorType == SENSOR_GNSS) | |
| 412 { | |
| 988 | 413 #ifdef ENABLE_GNSS_INTERN |
| 932 | 414 pUartCtrl = &Uart6Ctrl; |
| 415 #else | |
| 988 | 416 #ifdef ENABLE_GNSS_EXTERN |
| 932 | 417 pUartCtrl = &Uart1Ctrl; |
| 418 #endif | |
| 988 | 419 #endif |
| 932 | 420 } |
| 421 else | |
| 422 { | |
| 423 pUartCtrl = &Uart1Ctrl; | |
| 424 } | |
| 425 localRX = pUartCtrl->rxReadIndex; | |
| 426 futureIndex = pUartCtrl->rxReadIndex + 1; | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
427 if(futureIndex >= CHUNK_SIZE * CHUNKS_PER_BUFFER) |
| 794 | 428 { |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
429 futureIndex = 0; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
430 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
431 |
| 932 | 432 if(!UART_isEndIndication(pUartCtrl, futureIndex)) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
433 { |
| 932 | 434 moreData = 1; |
| 435 } | |
| 436 | |
| 437 if((!UART_isEndIndication(pUartCtrl, localRX)) || (moreData)) | |
| 438 do | |
| 439 { | |
| 440 while((!UART_isEndIndication(pUartCtrl, localRX)) || (moreData)) | |
| 794 | 441 { |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
442 moreData = 0; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
443 switch (sensorType) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
444 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
445 case SENSOR_MUX: |
| 932 | 446 case SENSOR_DIGO2: uartO2_ProcessData(pUartCtrl->pRxBuffer[localRX]); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
447 break; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
448 #ifdef ENABLE_CO2_SUPPORT |
| 932 | 449 case SENSOR_CO2: uartCo2_ProcessData(pUartCtrl->pRxBuffer[localRX]); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
450 break; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
451 #endif |
| 988 | 452 #if defined ENABLE_GNSS_INTERN || defined ENABLE_GNSS_EXTERN |
| 932 | 453 case SENSOR_GNSS: uartGnss_ProcessData(pUartCtrl->pRxBuffer[localRX]); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
454 break; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
455 #endif |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
456 #ifdef ENABLE_SENTINEL_MODE |
| 932 | 457 case SENSOR_SENTINEL: uartSentinel_ProcessData(pUartCtrl->pRxBuffer[localRX]); |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
458 break; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
459 #endif |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
460 default: |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
461 break; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
462 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
463 if(localRX % 2) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
464 { |
| 932 | 465 pUartCtrl->pRxBuffer[localRX] = BUFFER_NODATA_HIGH; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
466 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
467 else |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
468 { |
| 932 | 469 pUartCtrl->pRxBuffer[localRX] = BUFFER_NODATA_LOW; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
470 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
471 |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
472 localRX++; |
| 932 | 473 pUartCtrl->rxReadIndex++; |
| 474 if(pUartCtrl->rxReadIndex >= CHUNK_SIZE * CHUNKS_PER_BUFFER) | |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
475 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
476 localRX = 0; |
| 932 | 477 pUartCtrl->rxReadIndex = 0; |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
478 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
479 futureIndex++; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
480 if(futureIndex >= CHUNK_SIZE * CHUNKS_PER_BUFFER) |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
481 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
482 futureIndex = 0; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
483 } |
| 794 | 484 } |
| 932 | 485 if(!UART_isEndIndication(pUartCtrl, futureIndex)) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
486 { |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
487 moreData = 1; |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
488 } |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
489 } while(moreData); |
|
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
490 } |
| 794 | 491 |
| 932 | 492 void UART_WriteData(sUartComCtrl* pUartCtrl) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
493 { |
| 932 | 494 if(pUartCtrl->pHandle->hdmatx->State == HAL_DMA_STATE_READY) |
|
916
4832981f9af8
External sensor UART: Switch to DMA TX transfers:
Ideenmodellierer
parents:
894
diff
changeset
|
495 { |
| 932 | 496 pUartCtrl->pHandle->gState = HAL_UART_STATE_READY; |
| 497 pUartCtrl->dmaTxActive = 0; | |
| 794 | 498 } |
| 932 | 499 if(pUartCtrl->pHandle->hdmarx->State == HAL_DMA_STATE_READY) |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
500 { |
| 932 | 501 pUartCtrl->pHandle->RxState = HAL_UART_STATE_READY; |
| 502 pUartCtrl->dmaRxActive = 0; | |
|
918
f72613a152dd
Switch external interface tx communication to DMA:
Ideenmodellierer
parents:
916
diff
changeset
|
503 } |
| 794 | 504 } |
| 505 | |
| 861 | 506 uint8_t UART_isComActive(uint8_t sensorId) |
| 507 { | |
| 508 uint8_t active = 1; | |
| 809 | 509 |
| 921 | 510 if(time_elapsed_ms(LastCmdRequestTick, HAL_GetTick()) > 300) /* UART activity should be inactive 300ms after last command */ |
| 861 | 511 { |
| 512 active = 0; | |
| 513 } | |
| 514 return active; | |
| 515 } | |
| 809 | 516 |
| 921 | 517 |
| 38 | 518 /************************ (C) COPYRIGHT heinrichs weikamp *****END OF FILE****/ |
