UARTDRV
Detailed Description
UARTDRV Universal Asynchronous Receiver/Transmitter Driver.
The source files for the UART driver library,
uartdrv.c
and
uartdrv.h
, are in the emdrv/uartdrv folder.
Introduction
The UART driver supports the UART capabilities of the USART, UART, and LEUART peripherals. The driver is fully reentrant and supports multiple driver instances. The driver does not buffer or queue data. However, it queues UART transmit and receive operations. Both blocking and non-blocking transfer functions are available. Non-blocking transfer functions report transfer completion with callback functions. Transfers are done using DMA. Simple direct/forced transmit and receive functions are also available. Note that these functions are blocking and not suitable for low energy applications because they use CPU polling.
UART hardware flow control (CTS/RTS) is fully supported by the driver. UART software flow control (XON/XOFF) is partially supported by the driver. For more information about flow control support, see Flow Control Support .
- Note
- Transfer completion callback functions are called from within the DMA interrupt handler with interrupts disabled.
Configuration Options
Some properties of the UARTDRV driver are compile-time configurable. These properties are set in a uartdrv_config.h file. A template for this file, containing default values, is in the emdrv/config folder. To configure UARTDRV for your application, provide a custom configuration file, or override the defines on the compiler command line. These are the available configuration parameters with default values defined.
The properties of each UART driver instance are set at run-time via the UARTDRV_InitUart_t data structure input parameter to the UARTDRV_InitUart() function for UART and USART peripherals, and the UARTDRV_InitLeuart_t data structure input parameter to the UARTDRV_InitLeuart() function for LEUART peripherals.
The API
This section contains brief descriptions of the functions in the API. For more information on input and output parameters and return values, click on the hyperlinked function names. Most functions return an error code,
ECODE_EMDRV_UARTDRV_OK
is returned on success, see
ecode.h
and
uartdrv.h
for other error codes.
The application code must include
uartdrv.h
header file.
UARTDRV_InitUart()
, UARTDRV_InitLeuart() and
UARTDRV_DeInit()
These functions initialize and deinitialize the UARTDRV driver. Typically, UARTDRV_InitUart() (for UART/USART) or UARTDRV_InitLeuart() (for LEUART) are called once in the startup code.
UARTDRV_GetReceiveStatus()
and
UARTDRV_GetTransmitStatus()
Query the status of a current transmit or receive operations. Reports number of items (frames) transmitted and remaining.
UARTDRV_GetReceiveDepth()
and
UARTDRV_GetTransmitDepth()
Get the number of queued receive or transmit operations.
UARTDRV_Transmit()
,
UARTDRV_Receive()
UARTDRV_TransmitB()
,
UARTDRV_ReceiveB()
UARTDRV_ForceTransmit()
and
UARTDRV_ForceReceive()
Blocking and non-blocking transfer functions are included. The blocking versions have an uppercase B (for Blocking) at the end of their function name. Blocking functions do not return before the transfer is complete. The non-blocking functions signal a transfer completion with a callback function.
UARTDRV_ForceTransmit()
and
UARTDRV_ForceReceive()
are also blocking. These two functions access the UART peripheral directly without using DMA or interrupts.
UARTDRV_ForceTransmit()
does not respect flow control.
UARTDRV_ForceReceive()
forces RTS low.
UARTDRV_Abort()
Abort current transmit or receive operations and remove all queued operations.
UARTDRV_FlowControlSet()
,
UARTDRV_FlowControlGetSelfStatus()
,
UARTDRV_FlowControlSetPeerStatus()
and
UARTDRV_FlowControlGetPeerStatus()
Set and get flow control status of self or peer device. Note that the return value from these two functions depends on the flow control mode set by
UARTDRV_FlowControlSet()
,
UARTDRV_InitUart()
, or UARTDRV_InitLeuart().
UARTDRV_FlowControlIgnoreRestrain()
Enables transmission when restrained by flow control.
UARTDRV_PauseTransmit()
and
UARTDRV_ResumeTransmit()
Pause a currently active transmit operation by preventing the DMA from loading the UART FIFO. Will not override HW flow control state (if applicable), but can be used in conjunction.
Flow Control Support
If UART flow control is not required, make sure that EMDRV_UARTDRV_FLOW_CONTROL_ENABLE is set to 0. This reduces the code size and complexity of the driver.
Both hardware and software flow control are supported. To enable either of these, set EMDRV_UARTDRV_FLOW_CONTROL_ENABLE to 1 in uartdrv_config.h.
Hardware Flow Control
UART hardware flow control uses two additional pins for flow control handshaking, the clear-to-send (CTS) and ready-to-send (RTS) pins. RTS is an output and CTS is an input. These are active-low signals. When CTS is high, the UART transmitter should stop sending frames. A receiver should set RTS high when it is no longer capable of receiving data.
- Peripheral Hardware Flow Control
Newer devices, such as EFR32MG1 and EFM32PG1, natively support CTS/RTS in the USART peripheral hardware. To enable hardware flow control, perform the following steps:
- Set EMDRV_UARTDRV_FLOW_CONTROL_ENABLE to 1.
- In the UARTDRV_InitUart_t struct passed to UARTDRV_InitUart() , set UARTDRV_InitUart_t::fcType = uartdrvFlowControlHwUart.
- Define the pins for CTS and RTS by setting ctsPort, ctsPin, rtsPort and rtsPin in the init struct.
- Also define the CTS and RTS locations by setting portLocationCts and portLocationRts in the init struct.
- GPIO Hardware Flow Control
To support hardware flow control on devices that don't have UART CTS/RTS hardware support, the driver includes the GPIOINT driver to emulate a hardware implementation of UART CTS/RTS flow control on these devices.
To enable hardware flow control, perform the following steps:
- Set EMDRV_UARTDRV_FLOW_CONTROL_ENABLE to 1.
- UART/USART: In the UARTDRV_InitUart_t struct passed to UARTDRV_InitUart() , set UARTDRV_InitUart_t::fcType = uartdrvFlowControlHw.
- LEUART: In the UARTDRV_InitLeuart_t struct passed to UARTDRV_InitLeuart(), set UARTDRV_InitLeuart_t.fcType = uartdrvFlowControlHw.
- Define the pins for CTS and RTS by setting ctsPort, ctsPin, rtsPort and rtsPin in the same init struct.
- Note
- Because of the limitations in GPIO interrupt hardware, you cannot select CTS pins in multiple driver instances with the same pin number. For example, pin A0 and B0 cannot serve as CTS pins in two concurrent driver instances.
RTS is set high whenever there are no Rx operations queued. The UART transmitter is halted when the CTS pin goes high. The transmitter completes the current frame before halting. DMA transfers are also halted.
Software Flow Control
UART software flow control uses in-band signaling, meaning the receiver sends special flow control characters to the transmitter and thereby removes the need for dedicated wires for flow control. The two symbols UARTDRV_FC_SW_XON and UARTDRV_FC_SW_XOFF are defined in uartdrv_config.h.
To enable support for software flow control, perform the following steps:
- Set EMDRV_UARTDRV_FLOW_CONTROL_ENABLE to 1.
- UART/USART: In the UARTDRV_InitUart_t structure passed to UARTDRV_InitUart() , set UARTDRV_InitUart_t::fcType = uartdrvFlowControlSw.
- LEUART: In the UARTDRV_InitLeuart_t structure passed to UARTDRV_InitLeuart(), set UARTDRV_InitLeuart_t.fcType = uartdrvFlowControlSw.
- Note
- Software flow control is partial only.
The application must monitor buffers and make decisions on when to send XON/ XOFF. XON/XOFF can be sent to the peer using UARTDRV_FlowControlSet() . Though UARTDRV_FlowControlSet() will pause the active transmit operation to send a flow control character, there is no way to guarantee the order. If the application implements a specific packet format where the flow control codes may appear only in fixed positions, the application should not use UARTDRV_FlowControlSet() but implement read and write of XON/XOFF into packet buffers. If the application code fully implements all the flow control logic, EMDRV_UARTDRV_FLOW_CONTROL_ENABLE should be set to 0 to reduce code space.
Example
uartdrv.h
"
Data Structures |
|
struct | UARTDRV_Buffer_FifoQueue_t |
Transfer operation FIFO queue typedef.
|
|
struct | UARTDRV_Buffer_t |
UART transfer buffer.
|
|
struct | UARTDRV_HandleData |
struct | UARTDRV_InitUart_t |
Macros |
|
#define | DEFINE_BUF_QUEUE (qSize, qName) |
#define | ECODE_EMDRV_UARTDRV_ABORTED ( ECODE_EMDRV_UARTDRV_BASE | 0x00000009) |
A UART transfer has been aborted.
|
|
#define | ECODE_EMDRV_UARTDRV_BUSY ( ECODE_EMDRV_UARTDRV_BASE | 0x00000004) |
The UART port is busy.
|
|
#define | ECODE_EMDRV_UARTDRV_CLOCK_ERROR ( ECODE_EMDRV_UARTDRV_BASE | 0x0000000F) |
Unable to set a desired baudrate.
|
|
#define | ECODE_EMDRV_UARTDRV_DMA_ALLOC_ERROR ( ECODE_EMDRV_UARTDRV_BASE | 0x0000000E) |
Unable to allocate DMA channels.
|
|
#define | ECODE_EMDRV_UARTDRV_FRAME_ERROR ( ECODE_EMDRV_UARTDRV_BASE | 0x0000000D) |
A UART frame error. Data is ignored.
|
|
#define | ECODE_EMDRV_UARTDRV_IDLE ( ECODE_EMDRV_UARTDRV_BASE | 0x00000008) |
No UART transfer is in progress.
|
|
#define | ECODE_EMDRV_UARTDRV_ILLEGAL_HANDLE ( ECODE_EMDRV_UARTDRV_BASE | 0x00000002) |
An illegal UART handle.
|
|
#define | ECODE_EMDRV_UARTDRV_ILLEGAL_OPERATION ( ECODE_EMDRV_UARTDRV_BASE | 0x00000005) |
An illegal operation on the UART port.
|
|
#define | ECODE_EMDRV_UARTDRV_OK ( ECODE_OK ) |
A successful return value.
|
|
#define | ECODE_EMDRV_UARTDRV_PARAM_ERROR ( ECODE_EMDRV_UARTDRV_BASE | 0x00000003) |
An illegal input parameter.
|
|
#define | ECODE_EMDRV_UARTDRV_PARITY_ERROR ( ECODE_EMDRV_UARTDRV_BASE | 0x0000000C) |
A UART parity error frame. Data is ignored.
|
|
#define | ECODE_EMDRV_UARTDRV_QUEUE_EMPTY ( ECODE_EMDRV_UARTDRV_BASE | 0x0000000B) |
A UART operation queue is empty.
|
|
#define | ECODE_EMDRV_UARTDRV_QUEUE_FULL ( ECODE_EMDRV_UARTDRV_BASE | 0x0000000A) |
A UART operation queue is full.
|
|
#define | ECODE_EMDRV_UARTDRV_WAITING ( ECODE_EMDRV_UARTDRV_BASE | 0x00000001) |
An operation is waiting in queue.
|
|
#define | UARTDRV_STATUS_RXBLOCK (1 << 3) |
The receiver is blocked; incoming frames will be discarded.
|
|
#define | UARTDRV_STATUS_RXDATAV (1 << 7) |
Data is available in the receive buffer.
|
|
#define | UARTDRV_STATUS_RXEN (1 << 0) |
The receiver is enabled.
|
|
#define | UARTDRV_STATUS_RXFULL (1 << 8) |
The receive buffer is full.
|
|
#define | UARTDRV_STATUS_TXBL (1 << 6) |
The transmit buffer is empty.
|
|
#define | UARTDRV_STATUS_TXC (1 << 5) |
A transmit operation is complete. No more data is available in the transmit buffer and shift register.
|
|
#define | UARTDRV_STATUS_TXEN (1 << 1) |
The transmitter is enabled.
|
|
#define | UARTDRV_STATUS_TXIDLE (1 << 13) |
The transmitter is idle.
|
|
#define | UARTDRV_STATUS_TXTRI (1 << 4) |
The transmitter is tristated.
|
|
Typedefs |
|
typedef enum UARTDRV_AbortType | UARTDRV_AbortType_t |
Transfer abort type.
|
|
typedef void(* | UARTDRV_Callback_t ) (struct UARTDRV_HandleData *handle, Ecode_t transferStatus, uint8_t *data, UARTDRV_Count_t transferCount) |
UARTDRV transfer completion callback function.
|
|
typedef uint32_t | UARTDRV_Count_t |
A UART transfer count.
|
|
typedef enum UARTDRV_FlowControlState | UARTDRV_FlowControlState_t |
Flow Control state.
|
|
typedef enum UARTDRV_FlowControlType | UARTDRV_FlowControlType_t |
Flow Control method.
|
|
typedef UARTDRV_HandleData_t * | UARTDRV_Handle_t |
Handle pointer.
|
|
typedef struct UARTDRV_HandleData | UARTDRV_HandleData_t |
typedef uint32_t | UARTDRV_Status_t |
A UART status return type. Bitfield of UARTDRV_STATUS_* values.
|
|
Enumerations |
|
enum |
UARTDRV_AbortType
{
uartdrvAbortTransmit = 1, uartdrvAbortReceive = 2, uartdrvAbortAll = 3 } |
Transfer abort type.
|
|
enum |
UARTDRV_FlowControlState
{
uartdrvFlowControlOn = 0, uartdrvFlowControlOff = 1, uartdrvFlowControlAuto = 2 } |
Flow Control state.
|
|
enum |
UARTDRV_FlowControlType
{
uartdrvFlowControlNone = 0, uartdrvFlowControlSw = 1, uartdrvFlowControlHw = 2, uartdrvFlowControlHwUart = 3 } |
Flow Control method.
|
|
Functions |
|
Ecode_t | UARTDRV_Abort ( UARTDRV_Handle_t handle, UARTDRV_AbortType_t type) |
Abort ongoing UART transfers.
|
|
Ecode_t | UARTDRV_DeInit ( UARTDRV_Handle_t handle) |
Deinitialize a UART driver instance.
|
|
UARTDRV_FlowControlState_t | UARTDRV_FlowControlGetPeerStatus ( UARTDRV_Handle_t handle) |
Check the peer's flow control status.
|
|
UARTDRV_FlowControlState_t | UARTDRV_FlowControlGetSelfStatus ( UARTDRV_Handle_t handle) |
Check the self flow control status.
|
|
Ecode_t | UARTDRV_FlowControlIgnoreRestrain ( UARTDRV_Handle_t handle) |
Enable transmission when restrained by flow control.
|
|
Ecode_t | UARTDRV_FlowControlSet ( UARTDRV_Handle_t handle, UARTDRV_FlowControlState_t state) |
Set UART flow control state. Set nRTS pin if hardware flow control is enabled. Send XON/XOFF if software flow control is enabled.
|
|
Ecode_t | UARTDRV_FlowControlSetPeerStatus ( UARTDRV_Handle_t handle, UARTDRV_FlowControlState_t state) |
Set peer UART flow control state. Pause/resume transmit accordingly. Only for manual software flow control.
|
|
UARTDRV_Count_t | UARTDRV_ForceReceive ( UARTDRV_Handle_t handle, uint8_t *data, UARTDRV_Count_t maxLength) |
Direct receive without interrupts or callback. This is a blocking function.
|
|
Ecode_t | UARTDRV_ForceTransmit ( UARTDRV_Handle_t handle, uint8_t *data, UARTDRV_Count_t count) |
Direct transmit without interrupts or callback. This is a blocking function. that ignores flow control if enabled.
|
|
UARTDRV_Status_t | UARTDRV_GetPeripheralStatus ( UARTDRV_Handle_t handle) |
Return the status of the UART peripheral associated with a given handle.
|
|
uint8_t | UARTDRV_GetReceiveDepth ( UARTDRV_Handle_t handle) |
Return the number of queued receive operations.
|
|
UARTDRV_Status_t | UARTDRV_GetReceiveStatus ( UARTDRV_Handle_t handle, uint8_t **buffer, UARTDRV_Count_t *bytesReceived, UARTDRV_Count_t *bytesRemaining) |
Check the status of the UART and gather information about any ongoing receive operations.
|
|
uint8_t | UARTDRV_GetTransmitDepth ( UARTDRV_Handle_t handle) |
Returns the number of queued transmit operations.
|
|
UARTDRV_Status_t | UARTDRV_GetTransmitStatus ( UARTDRV_Handle_t handle, uint8_t **buffer, UARTDRV_Count_t *bytesSent, UARTDRV_Count_t *bytesRemaining) |
Check the status of the UART and gather information about any ongoing transmit operations.
|
|
__STATIC_INLINE Ecode_t | UARTDRV_Init ( UARTDRV_Handle_t handle, UARTDRV_InitUart_t *initData) |
Initialize a U(S)ART driver instance.
|
|
Ecode_t | UARTDRV_InitUart ( UARTDRV_Handle_t handle, const UARTDRV_InitUart_t *initData) |
Initialize a U(S)ART driver instance.
|
|
Ecode_t | UARTDRV_PauseTransmit ( UARTDRV_Handle_t handle) |
Pause an ongoing transmit operation.
|
|
Ecode_t | UARTDRV_Receive ( UARTDRV_Handle_t handle, uint8_t *data, UARTDRV_Count_t count, UARTDRV_Callback_t callback) |
Start a non-blocking receive.
|
|
Ecode_t | UARTDRV_ReceiveB ( UARTDRV_Handle_t handle, uint8_t *data, UARTDRV_Count_t count) |
Start a blocking receive.
|
|
Ecode_t | UARTDRV_ResumeTransmit ( UARTDRV_Handle_t handle) |
Resume a paused transmit operation.
|
|
Ecode_t | UARTDRV_Transmit ( UARTDRV_Handle_t handle, uint8_t *data, UARTDRV_Count_t count, UARTDRV_Callback_t callback) |
Start a non-blocking transmit.
|
|
Ecode_t | UARTDRV_TransmitB ( UARTDRV_Handle_t handle, uint8_t *data, UARTDRV_Count_t count) |
Start a blocking transmit.
|
|
Macro Definition Documentation
#define DEFINE_BUF_QUEUE | ( |
qSize,
|
|
qName
|
|||
) |
Macros to define FIFO and buffer queues. typedef can't be used becuase the size of the FIFO array in the queues can change.
Definition at line
171
of file
uartdrv.h
.
Typedef Documentation
typedef void(* UARTDRV_Callback_t) (struct UARTDRV_HandleData *handle, Ecode_t transferStatus, uint8_t *data, UARTDRV_Count_t transferCount) |
UARTDRV transfer completion callback function.
Called when a transfer is complete. An application should check the transferStatus and itemsTransferred values.
- Parameters
-
[in] handle
The UARTDRV device handle used to start the transfer. [in] transferStatus
Completion status of the transfer operation. [in] data
A pointer to the transfer data buffer. [in] transferCount
A number of bytes transferred.
Definition at line
146
of file
uartdrv.h
.
typedef struct UARTDRV_HandleData UARTDRV_HandleData_t |
A UART driver instance handle data structure. Allocated by the application using UARTDRV. Several concurrent driver instances may exist in an application. The application must not modify the contents of this handle and should not depend on its values.
Enumeration Type Documentation
enum UARTDRV_AbortType |
Function Documentation
Ecode_t UARTDRV_Abort | ( | UARTDRV_Handle_t |
handle,
|
UARTDRV_AbortType_t |
type
|
||
) |
Abort ongoing UART transfers.
All ongoing or queued operations of the given abort type will be aborted.
- Parameters
-
[in] handle
Pointer to a UART driver handle. [in] type
Abort type – whether to abort only Tx, only Rx, or both.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success, ECODE_EMDRV_UARTDRV_IDLE if the UART is idle. On failure, an appropriate UARTDRV Ecode_t is returned.
Definition at line
1688
of file
uartdrv.c
.
References UARTDRV_Buffer_t::callback , CORE_DECLARE_IRQ_STATE , CORE_ENTER_ATOMIC , CORE_EXIT_ATOMIC , DMADRV_StopTransfer() , DMADRV_TransferRemainingCount() , ECODE_EMDRV_UARTDRV_ABORTED , ECODE_EMDRV_UARTDRV_IDLE , ECODE_EMDRV_UARTDRV_ILLEGAL_HANDLE , ECODE_EMDRV_UARTDRV_OK , UARTDRV_Buffer_t::itemsRemaining , rxBuffer , UARTDRV_Buffer_t::transferStatus , UARTDRV_GetPeripheralStatus() , UARTDRV_STATUS_TXIDLE , uartdrvAbortAll , uartdrvAbortReceive , uartdrvAbortTransmit , and uartdrvFlowControlHwUart .
Referenced by UARTDRV_DeInit() .
Ecode_t UARTDRV_DeInit | ( | UARTDRV_Handle_t |
handle
|
) |
Deinitialize a UART driver instance.
- Parameters
-
[in] handle
Pointer to a UART driver handle.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success. On failure, an appropriate UARTDRV Ecode_t is returned.
Definition at line
1621
of file
uartdrv.c
.
References CMU_ClockEnable() , DMADRV_DeInit() , DMADRV_FreeChannel() , ECODE_EMDRV_UARTDRV_ILLEGAL_HANDLE , ECODE_EMDRV_UARTDRV_OK , GPIOINT_CallbackRegister() , UARTDRV_Abort() , UARTDRV_FlowControlSet() , uartdrvAbortAll , uartdrvFlowControlHwUart , and uartdrvFlowControlOn .
UARTDRV_FlowControlState_t UARTDRV_FlowControlGetPeerStatus | ( | UARTDRV_Handle_t |
handle
|
) |
Check the peer's flow control status.
- Parameters
-
[in] handle
Pointer to a UART driver handle.
- Returns
- Returns uartdrvFlowControlOn if clear to send.
Definition at line
2027
of file
uartdrv.c
.
UARTDRV_FlowControlState_t UARTDRV_FlowControlGetSelfStatus | ( | UARTDRV_Handle_t |
handle
|
) |
Check the self flow control status.
- Parameters
-
[in] handle
Pointer to a UART driver handle.
- Returns
- Returns uartdrvFlowControlOn if requesting to send.
Definition at line
2041
of file
uartdrv.c
.
Ecode_t UARTDRV_FlowControlIgnoreRestrain | ( | UARTDRV_Handle_t |
handle
|
) |
Enable transmission when restrained by flow control.
- Parameters
-
[in] handle
Pointer to a UART driver handle.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success.
Definition at line
2055
of file
uartdrv.c
.
References ECODE_EMDRV_UARTDRV_OK .
Ecode_t UARTDRV_FlowControlSet | ( | UARTDRV_Handle_t |
handle,
|
UARTDRV_FlowControlState_t |
state
|
||
) |
Set UART flow control state. Set nRTS pin if hardware flow control is enabled. Send XON/XOFF if software flow control is enabled.
- Parameters
-
[in] handle
Pointer to a UART driver handle. [in] state
Flow control state.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success.
Definition at line
1969
of file
uartdrv.c
.
References ECODE_EMDRV_UARTDRV_ILLEGAL_OPERATION , ECODE_EMDRV_UARTDRV_OK , uartdrvFlowControlAuto , and uartdrvFlowControlHwUart .
Referenced by UARTDRV_DeInit() .
Ecode_t UARTDRV_FlowControlSetPeerStatus | ( | UARTDRV_Handle_t |
handle,
|
UARTDRV_FlowControlState_t |
state
|
||
) |
Set peer UART flow control state. Pause/resume transmit accordingly. Only for manual software flow control.
- Parameters
-
[in] handle
Pointer to a UART driver handle. [in] state
Flow control state.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success.
Definition at line
1999
of file
uartdrv.c
.
References ECODE_EMDRV_UARTDRV_ILLEGAL_OPERATION , ECODE_EMDRV_UARTDRV_OK , UARTDRV_PauseTransmit() , UARTDRV_ResumeTransmit() , uartdrvFlowControlAuto , uartdrvFlowControlOff , uartdrvFlowControlOn , and uartdrvFlowControlSw .
UARTDRV_Count_t UARTDRV_ForceReceive | ( | UARTDRV_Handle_t |
handle,
|
uint8_t * |
data,
|
||
UARTDRV_Count_t |
maxCount
|
||
) |
Direct receive without interrupts or callback. This is a blocking function.
- Parameters
-
[in] handle
Pointer to a UART driver handle. [in] data
pointer to buffer. [in] maxCount
Maximum number of bytes to receive.
- Returns
- Number of bytes received.
Definition at line
2075
of file
uartdrv.c
.
References ECODE_EMDRV_UARTDRV_OK .
Ecode_t UARTDRV_ForceTransmit | ( | UARTDRV_Handle_t |
handle,
|
uint8_t * |
data,
|
||
UARTDRV_Count_t |
count
|
||
) |
Direct transmit without interrupts or callback. This is a blocking function. that ignores flow control if enabled.
- Parameters
-
[in] handle
Pointer to a UART driver handle. [in] data
Pointer to the buffer. [in] count
A number of bytes to transmit.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success.
Definition at line
2156
of file
uartdrv.c
.
References CORE_IrqIsBlocked() , ECODE_EMDRV_UARTDRV_OK , and USART_Tx() .
UARTDRV_Status_t UARTDRV_GetPeripheralStatus | ( | UARTDRV_Handle_t |
handle
|
) |
Return the status of the UART peripheral associated with a given handle.
- Parameters
-
[in] handle
Pointer to a UART driver handle.
- Returns
- UART status value
Definition at line
1788
of file
uartdrv.c
.
References UARTDRV_STATUS_RXBLOCK , UARTDRV_STATUS_RXDATAV , UARTDRV_STATUS_RXEN , UARTDRV_STATUS_TXBL , UARTDRV_STATUS_TXC , UARTDRV_STATUS_TXEN , and UARTDRV_STATUS_TXIDLE .
Referenced by UARTDRV_Abort() , UARTDRV_GetReceiveStatus() , and UARTDRV_GetTransmitStatus() .
uint8_t UARTDRV_GetReceiveDepth | ( | UARTDRV_Handle_t |
handle
|
) |
Return the number of queued receive operations.
- Parameters
-
[in] handle
Pointer to a UART driver handle.
- Returns
- The number of queued operations.
Definition at line
1850
of file
uartdrv.c
.
UARTDRV_Status_t UARTDRV_GetReceiveStatus | ( | UARTDRV_Handle_t |
handle,
|
uint8_t ** |
buffer,
|
||
UARTDRV_Count_t * |
itemsReceived,
|
||
UARTDRV_Count_t * |
itemsRemaining
|
||
) |
Check the status of the UART and gather information about any ongoing receive operations.
- Parameters
-
[in] handle
Pointer to a UART driver handle. [out] buffer
Pointer to the current data buffer. [out] itemsReceived
Current bytes received count. [out] itemsRemaining
Current bytes remaining count.
- Returns
- UART status.
Definition at line
1871
of file
uartdrv.c
.
References UARTDRV_Buffer_t::data , DMADRV_TransferRemainingCount() , ECODE_EMDRV_UARTDRV_OK , rxBuffer , UARTDRV_Buffer_t::transferCount , and UARTDRV_GetPeripheralStatus() .
uint8_t UARTDRV_GetTransmitDepth | ( | UARTDRV_Handle_t |
handle
|
) |
Returns the number of queued transmit operations.
- Parameters
-
[in] handle
Pointer to a UART driver handle.
- Returns
- The number of queued operations.
Definition at line
1908
of file
uartdrv.c
.
UARTDRV_Status_t UARTDRV_GetTransmitStatus | ( | UARTDRV_Handle_t |
handle,
|
uint8_t ** |
buffer,
|
||
UARTDRV_Count_t * |
itemsSent,
|
||
UARTDRV_Count_t * |
itemsRemaining
|
||
) |
Check the status of the UART and gather information about any ongoing transmit operations.
- Parameters
-
[in] handle
Pointer to a UART driver handle. [out] buffer
Pointer to the current data buffer. [out] itemsSent
Current bytes sent count. [out] itemsRemaining
Current bytes remaining count.
- Returns
- UART status.
Definition at line
1929
of file
uartdrv.c
.
References UARTDRV_Buffer_t::data , DMADRV_TransferRemainingCount() , ECODE_EMDRV_UARTDRV_OK , UARTDRV_Buffer_t::transferCount , and UARTDRV_GetPeripheralStatus() .
__STATIC_INLINE Ecode_t UARTDRV_Init | ( | UARTDRV_Handle_t |
handle,
|
UARTDRV_InitUart_t * |
initData
|
||
) |
Initialize a U(S)ART driver instance.
-
Deprecated:
- Deprecated; Use UARTDRV_InitUart() instead.
- Parameters
-
[out] handle
A pointer to a UARTDRV handle, refer to UARTDRV_Handle_t . [in] initData
A pointer to an initialization data structure, refer to UARTDRV_InitUart_t .
- Returns
- ECODE_EMDRV_UARTDRV_OK on success. On failure, an appropriate UARTDRV Ecode_t is returned.
Definition at line
429
of file
uartdrv.h
.
References UARTDRV_InitUart() .
Ecode_t UARTDRV_InitUart | ( | UARTDRV_Handle_t |
handle,
|
const UARTDRV_InitUart_t * |
initData
|
||
) |
Initialize a U(S)ART driver instance.
- Parameters
-
[out] handle
Pointer to a UARTDRV handle, refer to UARTDRV_Handle_t . [in] initData
Pointer to an initialization data structure, refer to UARTDRV_InitUart_t .
- Returns
- ECODE_EMDRV_UARTDRV_OK on success. On failure an appropriate UARTDRV Ecode_t is returned.
Definition at line
1066
of file
uartdrv.c
.
References UARTDRV_InitUart_t::baudRate , USART_InitAsync_TypeDef::baudrate , CMU_ClockEnable() , cmuClock_GPIO , cmuClock_USART0 , cmuClock_USART1 , cmuClock_USART2 , CORE_DECLARE_IRQ_STATE , CORE_ENTER_ATOMIC , CORE_EXIT_ATOMIC , UARTDRV_InitUart_t::ctsPin , UARTDRV_InitUart_t::ctsPort , USART_InitAsync_TypeDef::databits , ECODE_EMDRV_UARTDRV_ILLEGAL_HANDLE , ECODE_EMDRV_UARTDRV_OK , ECODE_EMDRV_UARTDRV_PARAM_ERROR , USART_InitAsync_TypeDef::enable , UARTDRV_InitUart_t::fcType , UARTDRV_InitUart_t::mvdis , USART_InitAsync_TypeDef::mvdis , UARTDRV_InitUart_t::oversampling , USART_InitAsync_TypeDef::oversampling , UARTDRV_InitUart_t::parity , USART_InitAsync_TypeDef::parity , UARTDRV_InitUart_t::port , UARTDRV_InitUart_t::rtsPin , UARTDRV_InitUart_t::rtsPort , UARTDRV_InitUart_t::rxPin , UARTDRV_InitUart_t::rxPort , UARTDRV_InitUart_t::rxQueue , UARTDRV_InitUart_t::stopBits , USART_InitAsync_TypeDef::stopbits , UARTDRV_InitUart_t::txPin , UARTDRV_InitUart_t::txPort , UARTDRV_InitUart_t::txQueue , uartdrvFlowControlHw , uartdrvFlowControlHwUart , uartdrvFlowControlNone , UARTDRV_InitUart_t::uartNum , USART_Enable() , USART_InitAsync() , USART_INITASYNC_DEFAULT , USART_IntClear() , usartDisable , usartEnable , and usartEnableTx .
Referenced by UARTDRV_Init() .
Ecode_t UARTDRV_PauseTransmit | ( | UARTDRV_Handle_t |
handle
|
) |
Pause an ongoing transmit operation.
- Parameters
-
[in] handle
Pointer to a UART driver handle.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success. On failure, an appropriate UARTDRV Ecode_t is returned.
Definition at line
2249
of file
uartdrv.c
.
References DMADRV_PauseTransfer() , ECODE_EMDRV_UARTDRV_ILLEGAL_HANDLE , ECODE_EMDRV_UARTDRV_OK , and uartdrvFlowControlOn .
Referenced by UARTDRV_FlowControlSetPeerStatus() .
Ecode_t UARTDRV_Receive | ( | UARTDRV_Handle_t |
handle,
|
uint8_t * |
data,
|
||
UARTDRV_Count_t |
count,
|
||
UARTDRV_Callback_t |
callback
|
||
) |
Start a non-blocking receive.
- Parameters
-
[in] handle
Pointer to a UART driver handle. [in] data
A receive data buffer. [in] count
A number of bytes received. [in] callback
A transfer completion callback.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success.
Definition at line
2279
of file
uartdrv.c
.
References UARTDRV_Buffer_t::callback , UARTDRV_Buffer_t::data , ECODE_EMDRV_UARTDRV_OK , ECODE_EMDRV_UARTDRV_WAITING , UARTDRV_Buffer_t::itemsRemaining , UARTDRV_Buffer_t::transferCount , UARTDRV_Buffer_t::transferStatus , uartdrvFlowControlHwUart , and uartdrvFlowControlOn .
Ecode_t UARTDRV_ReceiveB | ( | UARTDRV_Handle_t |
handle,
|
uint8_t * |
data,
|
||
UARTDRV_Count_t |
count
|
||
) |
Start a blocking receive.
- Parameters
-
[in] handle
Pointer to a UART driver handle. [in] data
A receive data buffer. [in] count
A number of bytes received.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success.
Definition at line
2329
of file
uartdrv.c
.
References UARTDRV_Buffer_t::callback , UARTDRV_Buffer_t::data , ECODE_EMDRV_UARTDRV_OK , ECODE_EMDRV_UARTDRV_WAITING , EMU_EnterEM1() , UARTDRV_Buffer_t::itemsRemaining , UARTDRV_Buffer_t::transferCount , UARTDRV_Buffer_t::transferStatus , uartdrvFlowControlHwUart , and uartdrvFlowControlOn .
Ecode_t UARTDRV_ResumeTransmit | ( | UARTDRV_Handle_t |
handle
|
) |
Resume a paused transmit operation.
- Parameters
-
[in] handle
Pointer to a UART driver handle.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success. On failure, an appropriate UARTDRV Ecode_t is returned.
Definition at line
2378
of file
uartdrv.c
.
References DMADRV_ResumeTransfer() , ECODE_EMDRV_UARTDRV_ILLEGAL_HANDLE , ECODE_EMDRV_UARTDRV_ILLEGAL_OPERATION , ECODE_EMDRV_UARTDRV_OK , and uartdrvFlowControlOn .
Referenced by UARTDRV_FlowControlSetPeerStatus() .
Ecode_t UARTDRV_Transmit | ( | UARTDRV_Handle_t |
handle,
|
uint8_t * |
data,
|
||
UARTDRV_Count_t |
count,
|
||
UARTDRV_Callback_t |
callback
|
||
) |
Start a non-blocking transmit.
- Parameters
-
[in] handle
Pointer to a UART driver handle. [in] data
A transmit data buffer. [in] count
A number of bytes to transmit. [in] callback
A transfer completion callback.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success.
Definition at line
2412
of file
uartdrv.c
.
References UARTDRV_Buffer_t::callback , CORE_ATOMIC_SECTION , UARTDRV_Buffer_t::data , ECODE_EMDRV_UARTDRV_OK , ECODE_EMDRV_UARTDRV_WAITING , UARTDRV_Buffer_t::itemsRemaining , UARTDRV_Buffer_t::transferCount , and UARTDRV_Buffer_t::transferStatus .
Ecode_t UARTDRV_TransmitB | ( | UARTDRV_Handle_t |
handle,
|
uint8_t * |
data,
|
||
UARTDRV_Count_t |
count
|
||
) |
Start a blocking transmit.
- Parameters
-
[in] handle
Pointer to a UART driver handle. [in] data
A transmit data buffer. [in] count
A number of bytes to transmit.
- Returns
- ECODE_EMDRV_UARTDRV_OK on success.
Definition at line
2460
of file
uartdrv.c
.
References UARTDRV_Buffer_t::callback , UARTDRV_Buffer_t::data , ECODE_EMDRV_UARTDRV_OK , ECODE_EMDRV_UARTDRV_WAITING , EMU_EnterEM1() , UARTDRV_Buffer_t::itemsRemaining , UARTDRV_Buffer_t::transferCount , and UARTDRV_Buffer_t::transferStatus .