TI-RTOS for SimpleLink Wireless MCUs
2.14.02.22
|
UART driver implementation for a Tiva UART controller.
============================================================================
The UARTTiva driver is (ring) buffered driver where it stores data it may already received in a user-supplied background buffer.
While permitted, it is STRONGLY suggested to avoid implementations where you call UART_read() within it own callback function (when in UART_MODE_CALLBACK).
Doing so, will require additional (task and system) stack for each nested UART_read() call.
Tool chain | Number of bytes per nested UART_read() call |
---|---|
GNU | 152 bytes + callback function stack requirements |
IAR | 56 bytes + callback function stack requirements |
TI | 120 bytes + callback function stack requirements |
It is important to note a potential worst case scenario: A full ring buffer with data; say 32 bytes The callback function calls UART_read() with a size of 1 (byte) No other variables are allocated in the callback function No other function calls are made in the callback function
As a result, you need an additional task and system stack of: 32 bytes * (120 bytes for TI + 0 bytes by the callback function) = 3.75kB
The UART header file should be included in an application as follows:
#include <stdint.h>
#include <stdbool.h>
#include <ti/drivers/UART.h>
#include <ti/drivers/uart/RingBuf.h>
#include <ti/sysbios/knl/Clock.h>
#include <ti/sysbios/knl/Semaphore.h>
#include <ti/sysbios/family/arm/m3/Hwi.h>
Go to the source code of this file.
Data Structures | |
struct | UARTTiva_FxnSet |
Complement set of read functions to be used by the UART ISR and UARTTiva_read(). Internal use only. More... | |
struct | UARTTiva_HWAttrs |
UARTTiva Hardware attributes. More... | |
struct | UARTTiva_Object |
UARTTiva Object. More... | |
Macros | |
#define | ti_sysbios_family_arm_m3_Hwi__nolocalnames |
Typedefs | |
typedef struct UARTTiva_FxnSet | UARTTiva_FxnSet |
Complement set of read functions to be used by the UART ISR and UARTTiva_read(). Internal use only. More... | |
typedef struct UARTTiva_HWAttrs | UARTTiva_HWAttrs |
UARTTiva Hardware attributes. More... | |
typedef struct UARTTiva_Object | UARTTiva_Object |
UARTTiva Object. More... | |
typedef struct UARTTiva_Object * | UARTTiva_Handle |
Variables | |
const UART_FxnTable | UARTTiva_fxnTable |
#define ti_sysbios_family_arm_m3_Hwi__nolocalnames |
typedef struct UARTTiva_FxnSet UARTTiva_FxnSet |
Complement set of read functions to be used by the UART ISR and UARTTiva_read(). Internal use only.
These functions should not be used by the user and are solely intended for the UARTTiva driver. The UARTTiva_FxnSet is a pair of complement functions that are design to operate with one another in a task context and in an ISR context. The readTaskFxn is called by UARTTiva_read() to drain a circular buffer, whereas the readIsrFxn is used by the UARTTiva_hwiIntFxn to fill up the circular buffer.
readTaskFxn: Function called by UART read These variables are set and avilalable for use to the readTaskFxn. object->readBuf = buffer; //Pointer to a user buffer object->readSize = size; //Desired no. of bytes to read object->readCount = size; //Remaining no. of bytes to read
readIsrFxn: The required ISR counterpart to readTaskFxn
typedef struct UARTTiva_HWAttrs UARTTiva_HWAttrs |
UARTTiva Hardware attributes.
These fields are used by driverlib APIs and therefore must be populated by driverlib macro definitions. For TivaWare these definitions are found in:
A sample structure is shown below:
typedef struct UARTTiva_Object UARTTiva_Object |
UARTTiva Object.
The application must not access any member variables of this structure!
typedef struct UARTTiva_Object * UARTTiva_Handle |
const UART_FxnTable UARTTiva_fxnTable |