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