Rev 10 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 10 | Rev 13 | ||
|---|---|---|---|
| Line 29... | Line 29... | ||
| 29 | #endif |
29 | #endif |
| 30 | #if defined SERIAL_UART5 |
30 | #if defined SERIAL_UART5 |
| 31 | usart_ctl uc5; |
31 | usart_ctl uc5; |
| 32 | #endif |
32 | #endif |
| 33 | 33 | ||
| 34 | /* returns the number of characters received by the Rx USART */ |
- | |
| 35 | uint16_t |
34 | uint16_t |
| 36 | SerialCharsReceived(usart_ctl *instance) |
35 | SerialCharsReceived(usart_ctl *instance) |
| 37 | { |
36 | { |
| 38 | uint16_t result = 0; // assume no characters received yet |
37 | uint16_t result = 0; // assume no characters received yet |
| 39 | 38 | ||
| Line 87... | Line 86... | ||
| 87 | __HAL_UART_ENABLE_IT(instance->Handle, UART_IT_RXNE); |
86 | __HAL_UART_ENABLE_IT(instance->Handle, UART_IT_RXNE); |
| 88 | 87 | ||
| 89 | return rc; |
88 | return rc; |
| 90 | } |
89 | } |
| 91 | 90 | ||
| 92 | /***! |
- | |
| 93 | * @brief return the next character in the Serial input buffer |
- | |
| 94 | * This function will wait until a character arrives. |
- | |
| 95 | */ |
- | |
| 96 | inline uint8_t |
91 | inline uint8_t |
| 97 | GetCharSerial(usart_ctl *instance) |
92 | GetCharSerial(usart_ctl *instance) |
| 98 | { |
93 | { |
| 99 | uint8_t c; |
94 | uint8_t c; |
| 100 | __HAL_UART_DISABLE_IT(instance->Handle, UART_IT_RXNE); |
95 | __HAL_UART_DISABLE_IT(instance->Handle, UART_IT_RXNE); |
| Line 144... | Line 139... | ||
| 144 | instance->tx_usart_in_Ptr = 0; |
139 | instance->tx_usart_in_Ptr = 0; |
| 145 | } |
140 | } |
| 146 | /* Handle overrun by losing oldest characters */ |
141 | /* Handle overrun by losing oldest characters */ |
| 147 | if (instance->tx_usart_in_Ptr == instance->tx_usart_out_Ptr) |
142 | if (instance->tx_usart_in_Ptr == instance->tx_usart_out_Ptr) |
| 148 | { |
143 | { |
| 149 | instance->tx_usart_overruns ++; |
144 | instance->tx_usart_overruns++; |
| 150 | instance->tx_usart_out_Ptr++; |
145 | instance->tx_usart_out_Ptr++; |
| 151 | if (instance->tx_usart_out_Ptr >= TX_USART_BUFF_SIZ) |
146 | if (instance->tx_usart_out_Ptr >= TX_USART_BUFF_SIZ) |
| 152 | { |
147 | { |
| 153 | instance->tx_usart_out_Ptr = 0; |
148 | instance->tx_usart_out_Ptr = 0; |
| 154 | } |
149 | } |
| Line 213... | Line 208... | ||
| 213 | __enable_irq(); |
208 | __enable_irq(); |
| 214 | } |
209 | } |
| 215 | 210 | ||
| 216 | void PutCharSerial(usart_ctl *instance, uint8_t c) |
211 | void PutCharSerial(usart_ctl *instance, uint8_t c) |
| 217 | { |
212 | { |
| 218 | // Put character in Crayon/Pen interface |
- | |
| 219 | PutCharSerialFIFO(instance, c); |
213 | PutCharSerialFIFO(instance, c); |
| 220 | } |
214 | } |
| 221 | 215 | ||
| 222 | /* |
- | |
| 223 | * \brief |
- | |
| 224 | * ResetTxBuffer(void) - resets the serial transmitter buffer |
- | |
| 225 | */ |
- | |
| 226 | void ResetTxBuffer(usart_ctl *instance) |
216 | void ResetTxBuffer(usart_ctl *instance) |
| 227 | { |
217 | { |
| 228 | 218 | ||
| 229 | instance->tx_usart_out_Ptr = 0; |
219 | instance->tx_usart_out_Ptr = 0; |
| 230 | instance->tx_usart_running = 0; |
220 | instance->tx_usart_running = 0; |
| Line 259... | Line 249... | ||
| 259 | uint8_t |
249 | uint8_t |
| 260 | TxBufferEmpty(usart_ctl *instance) |
250 | TxBufferEmpty(usart_ctl *instance) |
| 261 | { |
251 | { |
| 262 | if (instance->tx_usart_running) |
252 | if (instance->tx_usart_running) |
| 263 | return 0; |
253 | return 0; |
| 264 | return (instance->Handle->Instance->SR & USART_SR_TC) == 0; |
254 | return (instance->Handle->Instance->SR & USART_SR_TC) == 0; |
| 265 | } |
255 | } |
| 266 | 256 | ||
| 267 | /***! |
257 | /***! |
| 268 | * @brief wait for transmission to finish |
258 | * @brief wait for transmission to finish |
| 269 | */ |
259 | */ |
| Line 290... | Line 280... | ||
| 290 | 280 | ||
| 291 | /* cheat here - this is a macro and I have the same Instance member as the HAL handle, with the same meaning */ |
281 | /* cheat here - this is a macro and I have the same Instance member as the HAL handle, with the same meaning */ |
| 292 | __HAL_UART_DISABLE_IT(instance->Handle, UART_IT_TXE); |
282 | __HAL_UART_DISABLE_IT(instance->Handle, UART_IT_TXE); |
| 293 | __HAL_UART_DISABLE_IT(instance->Handle, UART_IT_RXNE); |
283 | __HAL_UART_DISABLE_IT(instance->Handle, UART_IT_RXNE); |
| 294 | 284 | ||
| 295 | FlushSerial(instance); |
285 | FlushSerial(instance); |
| 296 | } |
286 | } |
| 297 | 287 | ||
| 298 | void setBaud(usart_ctl *ctl, uint32_t baud) |
288 | void setBaud(usart_ctl *ctl, uint32_t baud) |
| 299 | { |
289 | { |
| 300 | ctl->Handle->Init.BaudRate = baud; |
290 | ctl->Handle->Init.BaudRate = baud; |
| 301 | __disable_irq(); |
291 | __disable_irq(); |
| 302 | HAL_UART_Init(ctl->Handle); |
292 | HAL_UART_Init(ctl->Handle); |
| 303 | __enable_irq(); |
293 | __enable_irq(); |
| 304 | } |
294 | } |
| 305 | 295 | ||
| 306 | - | ||
| 307 | ///////////////////////////////////////////////////////// |
296 | ///////////////////////////////////////////////////////// |
| 308 | /// Moved from generated code to avoid crappy HAL handler |
297 | /// Moved from generated code to avoid crappy HAL handler |
| 309 | #if defined SERIAL_UART1 |
298 | #if defined SERIAL_UART1 |
| 310 | void USART1_IRQHandler(void) |
299 | void USART1_IRQHandler(void) |
| 311 | { |
300 | { |