UART Tx#
UART Tx Usage#
The following code snippet demonstrates the basic blocking usage of an UART Tx device.
#include <xs1.h>
#include "uart.h"
uart_tx_t uart;
port_t p_uart_tx = XS1_PORT_1A;
hwtimer_t tmr = hwtimer_alloc();
uint8_t tx_data[4] = {0x01, 0x02, 0x04, 0x08};
// Initialize the UART Tx
uart_tx_blocking_init(&uart, p_uart_tx, 115200, 8, UART_PARITY_NONE, 1, tmr);
// Transfer some data
for(int i = 0; i < sizeof(tx_data); i++){
uart_tx(&uart, tx_data[i]);
}
UART Tx Usage ISR/Buffered#
The following code snippet demonstrates the usage of an UART Tx device used in ISR/Buffered mode:
#include <xs1.h>
#include "uart.h"
HIL_UART_TX_CALLBACK_ATTR void tx_empty_callback(void *app_data){
int *tx_empty = (int *)app_data;
*tx_empty = 1;
}
void uart_tx(void){
uart_tx_t uart;
port_t p_uart_tx = XS1_PORT_1A;
hwtimer_t tmr = hwtimer_alloc();
uint8_t buffer[64 + 1] = {0}; // Note buffer size plus one
uint8_t tx_data[4] = {0x01, 0x02, 0x04, 0x08};
volatile int tx_empty = 0;
// Initialize the UART Tx
uart_tx_init(&uart, p_uart_tx, 115200, 8, UART_PARITY_NONE, 1, tmr, buffer, sizeof(buffer), tx_empty_callback, &tx_empty);
// Transfer some data
for(int i = 0; i < sizeof(tx_data); i++){
uart_tx(&uart, tx_data[i]);
}
// Wait for it to complete
while(!tx_empty);
UART Tx API#
The following structures and functions are used to initialize and start an UART Tx instance.
-
enum uart_parity_t#
Enum type representing the different options parity types.
Values:
-
enumerator UART_PARITY_NONE#
-
enumerator UART_PARITY_EVEN#
-
enumerator UART_PARITY_ODD#
-
enumerator UART_PARITY_NONE#
-
enum uart_callback_code_t#
Enum type representing the callback error codes.
Values:
-
enumerator UART_RX_COMPLETE#
-
enumerator UART_UNDERRUN_ERROR#
-
enumerator UART_START_BIT_ERROR#
-
enumerator UART_PARITY_ERROR#
-
enumerator UART_FRAMING_ERROR#
-
enumerator UART_OVERRUN_ERROR#
-
enumerator UART_RX_COMPLETE#
-
enum uart_state_t#
Enum type representing the different states for the UART logic.
Values:
-
enumerator UART_IDLE#
-
enumerator UART_START#
-
enumerator UART_DATA#
-
enumerator UART_PARITY#
-
enumerator UART_STOP#
-
enumerator UART_IDLE#
-
typedef enum uart_parity_t uart_parity_t
Enum type representing the different options parity types.
-
void uart_tx_init(uart_tx_t *uart, port_t tx_port, uint32_t baud_rate, uint8_t data_bits, uart_parity_t parity, uint8_t stop_bits, hwtimer_t tmr, uint8_t *tx_buff, size_t buffer_size_plus_one, void (*uart_tx_empty_callback_fptr)(void *app_data), void *app_data)#
Initializes a UART Tx I/O interface. Passing a valid buffer will enable buffered mode with ISR for use in bare-metal applications.
- Parameters:
uart – The uart_tx_t context to initialise.
tx_port – The port used transmit the UART frames.
baud_rate – The baud rate of the UART in bits per second.
data_bits – The number of data bits per frame sent.
parity – The type of parity used. See uart_parity_t above.
stop_bits – The number of stop bits asserted at the of the frame.
tmr – The resource id of the timer to be used. Polling mode will be used if set to 0.
tx_buff – Pointer to a buffer. Optional. If set to zero the UART will run in blocking mode. If initialised to a valid buffer, the UART will be interrupt driven.
buffer_size_plus_one – Size of the buffer if enabled in tx_buff. Note that the buffer allocation and size argument must be one greater than needed. Eg. buff[65] for a 64 byte buffer.
uart_tx_empty_callback_fptr – Callback function pointer for UART buffer empty in buffered mode.
app_data – A pointer to application specific data provided by the application. Used to share data between this callback function and the application.
-
void uart_tx_blocking_init(uart_tx_t *uart, port_t tx_port, uint32_t baud_rate, uint8_t data_bits, uart_parity_t parity, uint8_t stop_bits, hwtimer_t tmr)#
Initializes a UART Tx I/O interface. The API is hard wired to blocking mode where the call to uart_tx will return at the end of sending the stop bit.
- Parameters:
uart – The uart_tx_t context to initialise.
tx_port – The port used transmit the UART frames.
baud_rate – The baud rate of the UART in bits per second.
data_bits – The number of data bits per frame sent.
parity – The type of parity used. See uart_parity_t above.
stop_bits – The number of stop bits asserted at the of the frame.
tmr – The resource id of the timer to be used. Polling mode will be used if set to 0.
-
void uart_tx(uart_tx_t *uart, uint8_t data)#
Transmits a single UART frame with parameters as specified in uart_tx_init()
- Parameters:
uart – The uart_tx_t context to initialise.
data – The word to transmit.
-
void uart_tx_deinit(uart_tx_t *uart)#
De-initializes the specified UART Tx interface. This disables the port also. The timer, if used, needs to be freed by the application.
- Parameters:
uart – The uart_tx_t context to de-initialise.
-
UART_START_BIT_ERROR_VAL#
Define which sets the enum start point of RX errors. This is relied upon by the RTOS drivers and allows optimisation of error handling.
-
HIL_UART_TX_CALLBACK_ATTR#
This attribute must be specified on the UART TX UNDERRUN callback function provided by the application. It ensures the correct stack usage is calculated.
-
HIL_UART_RX_CALLBACK_ATTR#
This attribute must be specified on the UART Rx callback functions (both ERROR and Rx complete callbacks) provided by the application. It ensures the correct stack usage is correctly calculated.
-
struct uart_tx_t#
- #include <uart.h>
Struct to hold a UART Tx context.
The members in this struct should not be accessed directly. Use the API provided instead.