embedded-software
reusable software modules for embedded systems
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
uart.h
Go to the documentation of this file.
1 
25 #ifndef _UART_H_
26 #define _UART_H_
27 
28 #include <stdint.h>
29 #include <stdbool.h>
30 #include <stdarg.h>
31 
32 // Get project/library configuration
33 #include "project_settings.h"
34 
35 #ifdef USE_MODULE_SUBSYSTEM
36 #include "subsystem.h"
37 #endif
38 
39 #ifdef USE_MODULE_TASK
40 #include "task.h"
41 #endif
42 
43 #ifdef USE_MODULE_BUFFER_PRINTF
44 #include "buffer_printf.h"
45 #endif
46 
47 #include "buffer.h"
48 
59 };
60 
61 /**************************************
62  * Hardware Abstraction Layer Includes
63  *************************************/
64 #include "hal_uart.h"
65 
76 void UART_Init(uint8_t channel);
77 
83 void UART_ReconfigureBaud(uint8_t channel, uint32_t baud);
84 
92 void UART_WriteByte(uint8_t channel, uint8_t c);
93 
102 int8_t UART_Write(uint8_t channel, uint8_t * data, uint16_t length);
103 
104 // this module could be used without buffer_printf if these functions are
105 // not used. Flag added to make it easy to not require buffer_printf
106 #ifdef _BUFFER_PRINTF_H_
107 
118 void UART_printf(uint8_t channel, char * str, ...);
119 
131 void UART_vprintf(uint8_t channel, char * str, va_list vars);
132 #endif
133 
140 uint8_t UART_IsTransmitting(uint8_t channel);
141 
149 void UART_Tick(void);
150 
161 int8_t UART_RegisterReceiver(uint8_t channel, void(*fn)(uint8_t));
162 
169 void UART_UnregisterReceiver(uint8_t channel, void(*fn)(uint8_t));
170 
180 void UART_RegisterErrorCallback(uint8_t channel, void(*callback)(enum uart_errors));
181 
191 void UART_RegisterTxOverwriteCallback(uint8_t channel, void(*overwriteCallback)(void));
192 
202 void UART_RegisterRxOverwriteCallback(uint8_t channel, void(*overwriteCallback)(void));
203 
204 
205 /**************************************
206  * Hardware Abstraction Layer Declarations
207  *************************************/
208 
209  // In some cases the HAL will implement these with a #define which is why each is
210  // surrounded with a #ifndef / #endif
211 
224  #ifndef hal_UART_Init
225 void hal_UART_Init(uint8_t channel, uint32_t baud);
226 #endif
227 
228 
234 #ifndef hal_UART_ReconfigureBaud
235 void hal_UART_ReconfigureBaud(uint8_t channel, uint32_t baud);
236 #endif
237 
247 #ifndef UART_Tx_Handler
248 void UART_Tx_Handler(uint8_t channel);
249 #endif
250 
260 #ifndef UART_Rx_Handler
261 void UART_Rx_Handler(uint8_t channel);
262 #endif
263 
272 #ifndef UART_Error_Handler
273 void UART_Error_Handler(uint8_t channel, enum uart_errors error);
274 #endif
275 
278 #ifndef hal_UART_Enable
279 void hal_UART_Enable(uint8_t channel);
280 #endif
281 
284 #ifndef hal_UART_Disable
285 void hal_UART_Disable(uint8_t channel);
286 #endif
287 
292 #ifndef hal_UART_SpaceAvailable
293 uint8_t hal_UART_SpaceAvailable(uint8_t channel);
294 #endif
295 
300 #ifndef hal_UART_DataAvailable
301 uint8_t hal_UART_DataAvailable(uint8_t channel);
302 #endif
303 
306 #ifndef hal_UART_ClearRxIF
307 void hal_UART_ClearRxIF(uint8_t channel);
308 #endif
309 
312 #ifndef hal_UART_ClearTxIF
313 void hal_UART_ClearTxIF(uint8_t channel);
314 #endif
315 
318 #ifndef hal_UART_EnableRxInterrupt
319 void hal_UART_EnableRxInterrupt(uint8_t channel);
320 #endif
321 
326 #ifndef hal_UART_EnableTxInterrupt
327 void hal_UART_EnableTxInterrupt(uint8_t channel);
328 #endif
329 
332 #ifndef hal_UART_DisableRxInterrupt
333 void hal_UART_DisableRxInterrupt(uint8_t channel);
334 #endif
335 
340 #ifndef hal_UART_DisableTxInterrupt
341 void hal_UART_DisableTxInterrupt(uint8_t channel);
342 #endif
343 
346 #ifndef hal_UART_RxInterruptEnabled
347 uint8_t hal_UART_RxInterruptEnabled(uint8_t channel);
348 #endif
349 
354 #ifndef hal_UART_TxInterruptEnabled
355 uint8_t hal_UART_TxInterruptEnabled(uint8_t channel);
356 #endif
357 
362 #ifndef hal_UART_RxByte
363 uint8_t hal_UART_RxByte(uint8_t channel);
364 #endif
365 
370 #ifndef hal_UART_TxByte
371 void hal_UART_TxByte(uint8_t channel, uint8_t data);
372 #endif
373 
375 #endif /* _UART_H_ */
uint8_t hal_UART_DataAvailable(uint8_t channel)
return 0 if no data is available in the hardware UART rx buffer
Definition: hal_uart.c:278
Definition: uart.h:55
void UART_ReconfigureBaud(uint8_t channel, uint32_t baud)
Change baud rate.
Definition: uart.c:425
Definition: uart.h:57
void hal_UART_DisableTxInterrupt(uint8_t channel)
disable the UART tx interrupt
Definition: hal_uart.c:192
uint8_t data[SPI_MAX_SIZE]
data (write data followed by read data)
Definition: spi.h:59
uint8_t hal_UART_TxInterruptEnabled(uint8_t channel)
Is UART tx interrupt enabled.
Definition: hal_uart.c:207
void UART_UnregisterReceiver(uint8_t channel, void(*fn)(uint8_t))
Unregister a receiver added by UART_RegisterReceiver()
Definition: uart.c:481
void hal_UART_TxByte(uint8_t channel, uint8_t data)
send character to UART hardware tx register
Definition: hal_uart.c:233
void hal_UART_ReconfigureBaud(uint8_t channel, uint32_t baud)
change the baud rate for the UART channel
void hal_UART_ClearTxIF(uint8_t channel)
clear the UART tx interrupt flags
Definition: hal_uart.c:248
int8_t UART_Write(uint8_t channel, uint8_t *data, uint16_t length)
Write chunk of data to UART tx buffer.
Definition: uart.c:435
void hal_UART_DisableRxInterrupt(uint8_t channel)
disable the UART rx interrupt
Definition: hal_uart.c:149
void hal_UART_ClearRxIF(uint8_t channel)
clear the UART rx interrupt flags
Definition: hal_uart.c:263
int8_t UART_RegisterReceiver(uint8_t channel, void(*fn)(uint8_t))
register a character receiver for a UART channel to receive data
Definition: uart.c:466
void hal_UART_Init(uint8_t channel, uint32_t baud)
initialize UART channel at specified baud rate
Definition: hal_uart.c:42
Definition: uart.h:54
void UART_Error_Handler(uint8_t channel, enum uart_errors error)
UART error (interrupt) handler.
Definition: uart.c:543
Definition: uart.h:58
volatile uint8_t channel
channel setting
Definition: spi.h:53
void hal_UART_Disable(uint8_t channel)
Disable UART peripheral for given channel.
Definition: hal_uart.c:104
void hal_UART_Enable(uint8_t channel)
Enable UART peripheral for given channel.
Definition: hal_uart.c:89
uint8_t hal_UART_RxByte(uint8_t channel)
Get character from UART hardware rx register.
Definition: hal_uart.c:220
void hal_UART_EnableTxInterrupt(uint8_t channel)
enable the UART tx interrupt
Definition: hal_uart.c:177
void UART_RegisterTxOverwriteCallback(uint8_t channel, void(*overwriteCallback)(void))
Register callback function to be called when/if the UART Tx buffer overflows.
Definition: uart.c:555
void UART_Tx_Handler(uint8_t channel)
UART transmit interrupt handler.
Definition: uart.c:506
void UART_WriteByte(uint8_t channel, uint8_t c)
Write a single byte to UART.
Definition: uart.c:429
void(* callback)(struct spi_transaction *)
callback function
Definition: spi.h:57
void UART_Init(uint8_t channel)
Definition: uart.c:231
uint8_t hal_UART_SpaceAvailable(uint8_t channel)
return 0 if no space is available in the hardware UART tx buffer
Definition: hal_uart.c:291
void UART_Rx_Handler(uint8_t channel)
UART receive interrupt handler.
Definition: uart.c:536
uart_errors
Definition: uart.h:53
uint8_t UART_IsTransmitting(uint8_t channel)
Returns 0 or num bytes to indicate if the UART is transmitting.
Definition: uart.c:501
uint8_t hal_UART_RxInterruptEnabled(uint8_t channel)
Is UART rx interrupt enabled.
Definition: hal_uart.c:164
Definition: uart.h:56
void UART_Tick(void)
Main UART routine which calls subscribers and handles errors.
Definition: uart.c:372
void hal_UART_EnableRxInterrupt(uint8_t channel)
enable the UART rx interrupt
Definition: hal_uart.c:134
void UART_RegisterRxOverwriteCallback(uint8_t channel, void(*overwriteCallback)(void))
Register callback function to be called when/if the UART Rx buffer overflows.
Definition: uart.c:559
void UART_RegisterErrorCallback(uint8_t channel, void(*callback)(enum uart_errors))
Register callback function to handle UART errors.
Definition: uart.c:551