Serial hardware abstraction layer interfaces. See Serial UART Communication for documentation.
License#
Copyright 2018 Silicon Laboratories Inc. www.silabs.com
The licensor of this software is Silicon Laboratories Inc. Your use of this software is governed by the terms of Silicon Labs Master Software License Agreement (MSLA) available at www.silabs.com/about-us/legal/master-software-license-agreement. This software is distributed to you in Source Code format and is governed by the sections of the MSLA applicable to Source Code.
/***************************************************************************/
#ifndef __HAL_SERIAL_H__
#define __HAL_SERIAL_H__
#include "stack/include/ember-types.h"
#ifdef CORTEXM3_EFM32_MICRO
#include "em_usart.h"
// Connect uses a different header, the ifndef check can be removed once
// they're unified.
#ifndef EMBER_STACK_CONNECT
#include "plugin/serial/com.h"
#endif
#endif
#ifndef CORTEXM3_EFM32_MICRO
// EM_NUM_SERIAL_PORTS is inherited from the micro specifc micro.h
#if (EM_NUM_SERIAL_PORTS == 1)
#define FOR_EACH_PORT(cast, prefix, suffix) \
cast(prefix##0##suffix)
#elif (EM_NUM_SERIAL_PORTS == 2)
#define FOR_EACH_PORT(cast, prefix, suffix) \
cast(prefix##0##suffix), \
cast(prefix##1##suffix)
#elif (EM_NUM_SERIAL_PORTS == 3)
#define FOR_EACH_PORT(cast, prefix, suffix) \
cast(prefix##0##suffix), \
cast(prefix##1##suffix), \
cast(prefix##2##suffix)
#elif (EM_NUM_SERIAL_PORTS == 4)
#define FOR_EACH_PORT(cast, prefix, suffix) \
cast(prefix##0##suffix), \
cast(prefix##1##suffix), \
cast(prefix##2##suffix), \
cast(prefix##3##suffix),
#elif (EM_NUM_SERIAL_PORTS == 5)
#define FOR_EACH_PORT(cast, prefix, suffix) \
cast(prefix##0##suffix), \
cast(prefix##1##suffix), \
cast(prefix##2##suffix), \
cast(prefix##3##suffix), \
cast(prefix##4##suffix),
#else
#error unsupported number of serial ports
#endif
#endif //CORTEXM3_EFM32_MICRO
#define EMBER_SERIAL_UNUSED 0
#define EMBER_SERIAL_FIFO 1
#define EMBER_SERIAL_LOWLEVEL 2
#ifndef DOXYGEN_SHOULD_SKIP_THIS
// The following tests for setting of an invalid mode
#ifdef EMBER_SERIAL0_MODE
#if (EMBER_SERIAL0_MODE != EMBER_SERIAL_FIFO) \
&& (EMBER_SERIAL0_MODE != EMBER_SERIAL_LOWLEVEL) \
&& (EMBER_SERIAL0_MODE != EMBER_SERIAL_UNUSED)
#error Invalid Serial 0 Mode
#endif
#else
#define EMBER_SERIAL0_MODE EMBER_SERIAL_UNUSED
#endif
#ifdef EMBER_SERIAL1_MODE
#if (EMBER_SERIAL1_MODE != EMBER_SERIAL_FIFO) \
&& (EMBER_SERIAL1_MODE != EMBER_SERIAL_LOWLEVEL) \
&& (EMBER_SERIAL1_MODE != EMBER_SERIAL_UNUSED)
#error Invalid Serial 1 Mode
#endif
#else
#define EMBER_SERIAL1_MODE EMBER_SERIAL_UNUSED
#endif
#ifdef EMBER_SERIAL2_MODE
#if (EMBER_SERIAL2_MODE != EMBER_SERIAL_FIFO) \
&& (EMBER_SERIAL2_MODE != EMBER_SERIAL_LOWLEVEL) \
&& (EMBER_SERIAL2_MODE != EMBER_SERIAL_UNUSED)
#error Invalid Serial 2 Mode
#endif
#else
#define EMBER_SERIAL2_MODE EMBER_SERIAL_UNUSED
#endif
#ifdef EMBER_SERIAL3_MODE
#if (EMBER_SERIAL3_MODE != EMBER_SERIAL_FIFO) \
&& (EMBER_SERIAL3_MODE != EMBER_SERIAL_LOWLEVEL) \
&& (EMBER_SERIAL3_MODE != EMBER_SERIAL_UNUSED)
#error Invalid Serial 3 Mode
#endif
#else
#define EMBER_SERIAL3_MODE EMBER_SERIAL_UNUSED
#endif
#ifdef EMBER_SERIAL4_MODE
#if (EMBER_SERIAL4_MODE != EMBER_SERIAL_FIFO) \
&& (EMBER_SERIAL4_MODE != EMBER_SERIAL_LOWLEVEL) \
&& (EMBER_SERIAL4_MODE != EMBER_SERIAL_UNUSED)
#error Invalid Serial 4 Mode
#endif
#else
#define EMBER_SERIAL4_MODE EMBER_SERIAL_UNUSED
#endif
// Determine if FIFO and/or Buffer modes are being used, so those sections of
// code may be disabled if not
// EMHAL-2285: buffer mode is now FIFO mode with DMA, as is any app with hardware flow control
#if defined(EMBER_MICRO_HAS_SC1) && ((EMBER_SERIAL1_MODE == EMBER_SERIAL_BUFFER) || defined(EMBER_SERIAL1_RTSCTS))
#undef EMBER_SERIAL1_MODE
#define EMBER_SERIAL1_MODE EMBER_SERIAL_FIFO
#define EM_SER1_FIFO_DMA_USED
#ifndef EMBER_SERIAL1_TX_QUEUE_SIZE
#define EMBER_SERIAL1_TX_QUEUE_SIZE 128
#define EMBER_SERIAL1_RX_QUEUE_SIZE 128
#endif
#endif
#if defined(EMBER_MICRO_HAS_SC3) && ((EMBER_SERIAL2_MODE == EMBER_SERIAL_BUFFER) || defined(EMBER_SERIAL2_RTSCTS))
#undef EMBER_SERIAL2_MODE
#define EMBER_SERIAL2_MODE EMBER_SERIAL_FIFO
#define EM_SER2_FIFO_DMA_USED
#ifndef EMBER_SERIAL2_TX_QUEUE_SIZE
#define EMBER_SERIAL2_TX_QUEUE_SIZE 128
#define EMBER_SERIAL2_RX_QUEUE_SIZE 128
#endif
#endif
#if (EMBER_SERIAL0_MODE == EMBER_SERIAL_FIFO) \
|| (EMBER_SERIAL1_MODE == EMBER_SERIAL_FIFO) \
|| (EMBER_SERIAL2_MODE == EMBER_SERIAL_FIFO) \
|| (EMBER_SERIAL3_MODE == EMBER_SERIAL_FIFO) \
|| (EMBER_SERIAL4_MODE == EMBER_SERIAL_FIFO)
#define EM_ENABLE_SERIAL_FIFO
#endif
#if (EMBER_SERIAL0_MODE == EMBER_SERIAL_BUFFER) \
|| (EMBER_SERIAL3_MODE == EMBER_SERIAL_BUFFER) \
|| (EMBER_SERIAL4_MODE == EMBER_SERIAL_BUFFER)
#define EM_ENABLE_SERIAL_BUFFER
#endif
typedef struct {
uint16_t head;
uint16_t tail;
volatile uint16_t used;
uint8_t fifo[];
} EmSerialFifoQueue;
#ifndef CORTEXM3_EFM32_MICRO
extern void *emSerialTxQueues[EM_NUM_SERIAL_PORTS];
extern EmSerialFifoQueue *emSerialRxQueues[EM_NUM_SERIAL_PORTS];
extern uint16_t PGM emSerialTxQueueMasks[EM_NUM_SERIAL_PORTS];
extern uint16_t PGM emSerialTxQueueSizes[EM_NUM_SERIAL_PORTS];
extern uint16_t PGM emSerialRxQueueSizes[EM_NUM_SERIAL_PORTS];
extern uint8_t emSerialRxError[EM_NUM_SERIAL_PORTS];
extern uint16_t emSerialRxErrorIndex[EM_NUM_SERIAL_PORTS];
extern uint8_t PGM emSerialPortModes[EM_NUM_SERIAL_PORTS];
extern uint16_t PGM emSerialTxQueueWraps[EM_NUM_SERIAL_PORTS];
extern uint16_t PGM emSerialRxQueueWraps[EM_NUM_SERIAL_PORTS];
#endif // CORTEXM3_EFM32_MICRO
#ifdef EZSP_UART
void sli_zigbee_call_counter_handler(EmberCounterType type, uint8_t data);
#define HANDLE_ASH_ERROR(type) sli_zigbee_call_counter_handler(type, 0)
#else
#define HANDLE_ASH_ERROR(type)
#endif
#endif //DOXYGEN_SHOULD_SKIP_THIS
#undef FIFO_ENQUEUE // Avoid possible warning, replace other definition
#define FIFO_ENQUEUE(queue, data, size) \
do { \
(queue)->fifo[(queue)->head] = (data); \
(queue)->head = (((queue)->head + 1) % (size)); \
(queue)->used++; \
} while (0)
#undef FIFO_DEQUEUE // Avoid possible warning, replace other definition
#define FIFO_DEQUEUE(queue, size) \
(queue)->fifo[(queue)->tail]; \
(queue)->tail = (((queue)->tail + 1) % (size)); \
(queue)->used--
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum SerialBaudRate
#else
#ifndef DEFINE_BAUD
#define DEFINE_BAUD(num) BAUD_##num
#endif
#ifdef CORTEXM3_EFM32_MICRO
typedef uint32_t SerialBaudRate;
#else
typedef uint8_t SerialBaudRate;
#endif
enum
#endif //DOXYGEN_SHOULD_SKIP_THIS
#ifdef CORTEXM3_EFM32_MICRO
{
DEFINE_BAUD(300) = 300, // BAUD_300
DEFINE_BAUD(600) = 600, // BAUD_600
DEFINE_BAUD(900) = 900, // etc...
DEFINE_BAUD(1200) = 1200,
DEFINE_BAUD(2400) = 2400,
DEFINE_BAUD(4800) = 4800,
DEFINE_BAUD(9600) = 9600,
DEFINE_BAUD(14400) = 14400,
DEFINE_BAUD(19200) = 19200,
DEFINE_BAUD(28800) = 28800,
DEFINE_BAUD(38400) = 38400,
DEFINE_BAUD(50000) = 50000,
DEFINE_BAUD(57600) = 57600,
DEFINE_BAUD(76800) = 76800,
DEFINE_BAUD(100000) = 100000,
DEFINE_BAUD(115200) = 115200
};
#else //CORTEXM3_EFM32_MICRO
{
DEFINE_BAUD(300) = 0, // BAUD_300
DEFINE_BAUD(600) = 1, // BAUD_600
DEFINE_BAUD(900) = 2, // etc...
DEFINE_BAUD(1200) = 3,
DEFINE_BAUD(2400) = 4,
DEFINE_BAUD(4800) = 5,
DEFINE_BAUD(9600) = 6,
DEFINE_BAUD(14400) = 7,
DEFINE_BAUD(19200) = 8,
DEFINE_BAUD(28800) = 9,
DEFINE_BAUD(38400) = 10,
DEFINE_BAUD(50000) = 11,
DEFINE_BAUD(57600) = 12,
DEFINE_BAUD(76800) = 13,
DEFINE_BAUD(100000) = 14,
DEFINE_BAUD(115200) = 15,
DEFINE_BAUD(230400) = 16, /*<! define higher baud rates for the EM2XX and EM3XX */
DEFINE_BAUD(460800) = 17, /*<! Note: receiving data at baud rates > 115200 */
DEFINE_BAUD(CUSTOM) = 18 /*<! may not be reliable due to interrupt latency */
};
#endif //CORTEXM3_EFM32_MICRO
#ifdef CORTEXM3_EFM32_MICRO
typedef USART_Parity_TypeDef SerialParity;
#define PARITY_NONE usartNoParity
#define PARITY_ODD usartOddParity
#define PARITY_EVEN usartEvenParity
#else
#ifdef DOXYGEN_SHOULD_SKIP_THIS
enum SerialParity
#else
#ifndef DEFINE_PARITY
#define DEFINE_PARITY(val) PARITY_##val
#endif
typedef uint8_t SerialParity;
enum
#endif //DOXYGEN_SHOULD_SKIP_THIS
{
DEFINE_PARITY(NONE) = 0U, // PARITY_NONE
DEFINE_PARITY(ODD) = 1U, // PARITY_ODD
DEFINE_PARITY(EVEN) = 2U // PARITY_EVEN
};
#endif//CORTEXM3_EFM32_MICRO
EmberStatus halInternalUartInit(uint8_t port,
SerialBaudRate rate,
SerialParity parity,
uint8_t stopBits);
void halInternalPowerDownUart(void);
void halInternalPowerUpUart(void);
void halInternalStartUartTx(uint8_t port);
void halInternalStopUartTx(uint8_t port);
EmberStatus halInternalForceWriteUartData(uint8_t port, uint8_t *data, uint8_t length);
EmberStatus halInternalForceReadUartByte(uint8_t port, uint8_t *dataByte);
void halInternalWaitUartTxComplete(uint8_t port);
#if (EMBER_SERIAL1_MODE == EMBER_SERIAL_FIFO) \
&& (defined(EMBER_SERIAL1_XONXOFF))
void halInternalUartFlowControl(uint8_t port);
#else
#define halInternalUartFlowControl(port) do {} while (false)
#endif
#if defined(CORTEXM3)
void halInternalUartRxPump(uint8_t port);
#else
#define halInternalUartRxPump(port) do {} while (false)
#endif
void halInternalRestartUart(void);
bool halInternalUartFlowControlRxIsEnabled(uint8_t port);
// define the old name for backwards compatibility
#define halInternalUart1FlowControlRxIsEnabled() halInternalUartFlowControlRxIsEnabled(1)
#ifdef CORTEXM3_EFM32_MICRO
#define halInternalUartXonRefreshDone(port) !(COM_InternalRxIsPaused((COM_Port_t) port))
#else
bool halInternalUartXonRefreshDone(uint8_t port);
#endif
#define halInternalUart1XonRefreshDone() halInternalUartXonRefreshDone(1)
#ifdef CORTEXM3_EFM32_MICRO
#define halInternalUartTxIsIdle(port) COM_InternalTxIsIdle((COM_Port_t) port)
#else
bool halInternalUartTxIsIdle(uint8_t port);
#endif
// define the old name for backwards compatibility
#define halInternalUart1TxIsIdle() halInternalUartTxIsIdle(1)
bool serialDropPacket(void);
#if defined(CORTEXM3_EFM32_MICRO)
// Connect is not currently ready to support VUART on EFR32.
#if defined(EMBER_STACK_CONNECT)
// This stub should be removed when Connect is ready.
#define halStackReceiveVuartMessage(data, length)
#else
#define halStackReceiveVuartMessage(data, length) COM_InternalReceiveData(COM_VCP, data, length)
#endif
#else
void halStackReceiveVuartMessage(uint8_t* data, uint8_t length);
#endif
#if defined(EMBER_STACK_CONNECT)
// This stub should be removed when Connect is ready.
#define emDebugReceiveData()
#endif
void halHostFlushBuffers(void);
uint16_t halHostEnqueueTx(const uint8_t *data, uint16_t length);
void halHostFlushTx(void);
// 'data' points to the next 'length' bytes of input.
uint16_t serialCopyFromRx(const uint8_t *data, uint16_t length);
// tell the upper layer to load serial data
void emLoadSerialTx(void);
#endif //__HAL_SERIAL_H__
Serial Mode Definitions#
These are numerical definitions for the possible serial modes so that code can test for the one being used. There may be additional modes defined in the micro-specific micro.h.
A numerical definition for a possible serial mode the code can test for.
A numerical definition for a possible serial mode the code can test for.
A numerical definition for a possible serial mode the code can test for.
FIFO Utility Macros#
These macros manipulate the FIFO queue data structures to add and remove data.
Macro that enqueues a byte of data in a FIFO queue.
Macro that de-queues a byte of data from a FIFO queue.
Serial HAL APIs#
These functions must be implemented by the HAL in order for the serial code to operate. Only the higher-level serial code uses these functions, so they should not be called directly. The HAL should also implement the appropriate interrupt handlers to drain the TX queues and fill the RX FIFO queue.
This function is used in FIFO mode when flow control is enabled. It is called from emberSerialReadByte(), and based on the number of bytes used in the uart receive queue, decides when to tell the host it may resume transmission.
This function exists only in software UART (SOFTUART) mode on the EM3xx. This function is called by ::emberSerialReadByte(). It is responsible for maintaining synchronization between the emSerialRxQueue and the UART DMA.
This function is used in FIFO mode when flow control is enabled. It is called from emberSerialReadByte(), and based on the number of bytes used in the uart receive queue, decides when to tell the host it may resume transmission.
This function is used in FIFO mode when flow control is enabled. It is called from emberSerialReadByte(), and based on the number of bytes used in the uart receive queue, decides when to tell the host it may resume transmission.
This function is used in FIFO mode when flow control is enabled. It is called from emberSerialReadByte(), and based on the number of bytes used in the uart receive queue, decides when to tell the host it may resume transmission.
Initializes the UART to the given settings (same parameters as ::emberSerialInit() ).
This function is typically called by halPowerDown() and it is responsible for performing all the work internal to the UART needed to stop the UART before a sleep cycle.
This function is typically called by halPowerUp() and it is responsible for performing all the work internal to the UART needed to restart the UART after a sleep cycle.
Called by serial code whenever anything is queued for transmission to start any interrupt-driven transmission. May be called when transmission is already in progess.
Called by serial code to stop any interrupt-driven serial transmission currently in progress.
Directly writes a byte to the UART for transmission, regardless of anything currently queued for transmission. Should wait for anything currently in the UART hardware registers to finish transmission first, and block until data
is finished being sent.
Directly reads a byte from the UART for reception, regardless of anything currently queued for reception. Does not block if a data byte has not been received.
Blocks until the UART has finished transmitting any data in its hardware registers.
This function is typically called by ::halInternalPowerUpBoard() and it is responsible for performing all the work internal to the UART needed to restart the UART after a sleep cycle. (For example, resyncing the DMA hardware and the serial FIFO.)
Checks to see if the host is allowed to send serial data to the ncp - i.e., it is not being held off by nCTS or an XOFF. Returns true is the host is able to send.
When Xon/Xoff flow control is used, returns true if the host is not being held off and XON refreshing is complete.
Returns true if the uart transmitter is idle, including the transmit shift register.
Testing function implemented by the upper layer. Determines whether the next packet should be dropped. Returns true if the next packet should be dropped, false otherwise.
Virtual UART API#
API used by the stack in debug builds to receive data arriving over the virtual UART.
When using a debug build with virtual UART support, this API is called by the stack when virtual UART data has been received over the debug channel.
Enumerations#
Assign numerical values for variables that hold Baud Rate parameters.
CORTEXM3_EFM32_MICRO.
Functions#
Serial Mode Definitions Documentation#
EMBER_SERIAL_UNUSED#
#define EMBER_SERIAL_UNUSEDValue:
0
A numerical definition for a possible serial mode the code can test for.
91
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
EMBER_SERIAL_FIFO#
#define EMBER_SERIAL_FIFOValue:
1
A numerical definition for a possible serial mode the code can test for.
92
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
EMBER_SERIAL_LOWLEVEL#
#define EMBER_SERIAL_LOWLEVELValue:
2
A numerical definition for a possible serial mode the code can test for.
93
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
FIFO Utility Macros Documentation#
FIFO_ENQUEUE#
#define FIFO_ENQUEUEValue:
Macro that enqueues a byte of data in a FIFO queue.
272
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
FIFO_DEQUEUE#
#define FIFO_DEQUEUEValue:
Macro that de-queues a byte of data from a FIFO queue.
287
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
Serial HAL APIs Documentation#
halInternalUartFlowControl#
#define halInternalUartFlowControlValue:
(port)
This function is used in FIFO mode when flow control is enabled. It is called from emberSerialReadByte(), and based on the number of bytes used in the uart receive queue, decides when to tell the host it may resume transmission.
484
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalUartRxPump#
#define halInternalUartRxPumpValue:
(port)
This function exists only in software UART (SOFTUART) mode on the EM3xx. This function is called by ::emberSerialReadByte(). It is responsible for maintaining synchronization between the emSerialRxQueue and the UART DMA.
498
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalUart1FlowControlRxIsEnabled#
#define halInternalUart1FlowControlRxIsEnabledValue:
()
This function is used in FIFO mode when flow control is enabled. It is called from emberSerialReadByte(), and based on the number of bytes used in the uart receive queue, decides when to tell the host it may resume transmission.
516
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalUart1XonRefreshDone#
#define halInternalUart1XonRefreshDoneValue:
()
This function is used in FIFO mode when flow control is enabled. It is called from emberSerialReadByte(), and based on the number of bytes used in the uart receive queue, decides when to tell the host it may resume transmission.
528
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalUart1TxIsIdle#
#define halInternalUart1TxIsIdleValue:
()
This function is used in FIFO mode when flow control is enabled. It is called from emberSerialReadByte(), and based on the number of bytes used in the uart receive queue, decides when to tell the host it may resume transmission.
541
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalUartInit#
EmberStatus halInternalUartInit (uint8_t port, SerialBaudRate rate, SerialParity parity, uint8_t stopBits)
Initializes the UART to the given settings (same parameters as ::emberSerialInit() ).
N/A | port | Serial port number (0 or 1). |
N/A | rate | Baud rate (see SerialBaudRate). |
N/A | parity | Parity value (see SerialParity). |
N/A | stopBits | Number of stop bits. |
Returns
An error code if initialization failed (such as invalid baud rate), otherise EMBER_SUCCESS.
410
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalPowerDownUart#
void halInternalPowerDownUart (void )
This function is typically called by halPowerDown() and it is responsible for performing all the work internal to the UART needed to stop the UART before a sleep cycle.
N/A |
419
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalPowerUpUart#
void halInternalPowerUpUart (void )
This function is typically called by halPowerUp() and it is responsible for performing all the work internal to the UART needed to restart the UART after a sleep cycle.
N/A |
425
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalStartUartTx#
void halInternalStartUartTx (uint8_t port)
Called by serial code whenever anything is queued for transmission to start any interrupt-driven transmission. May be called when transmission is already in progess.
N/A | port | Serial port number (0 or 1). |
433
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalStopUartTx#
void halInternalStopUartTx (uint8_t port)
Called by serial code to stop any interrupt-driven serial transmission currently in progress.
N/A | port | Serial port number (0 or 1). |
440
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalForceWriteUartData#
EmberStatus halInternalForceWriteUartData (uint8_t port, uint8_t * data, uint8_t length)
Directly writes a byte to the UART for transmission, regardless of anything currently queued for transmission. Should wait for anything currently in the UART hardware registers to finish transmission first, and block until data
is finished being sent.
N/A | port | Serial port number (0 or 1). |
N/A | data | Pointer to the data to be transmitted. |
N/A | length | The length of data to be transmitted |
453
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalForceReadUartByte#
EmberStatus halInternalForceReadUartByte (uint8_t port, uint8_t * dataByte)
Directly reads a byte from the UART for reception, regardless of anything currently queued for reception. Does not block if a data byte has not been received.
N/A | port | Serial port number (0 or 1). |
N/A | dataByte | The byte to receive data into. |
463
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalWaitUartTxComplete#
void halInternalWaitUartTxComplete (uint8_t port)
Blocks until the UART has finished transmitting any data in its hardware registers.
N/A | port | Serial port number (0 or 1). |
470
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalRestartUart#
void halInternalRestartUart (void )
This function is typically called by ::halInternalPowerUpBoard() and it is responsible for performing all the work internal to the UART needed to restart the UART after a sleep cycle. (For example, resyncing the DMA hardware and the serial FIFO.)
N/A |
506
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalUartFlowControlRxIsEnabled#
bool halInternalUartFlowControlRxIsEnabled (uint8_t port)
Checks to see if the host is allowed to send serial data to the ncp - i.e., it is not being held off by nCTS or an XOFF. Returns true is the host is able to send.
N/A | port |
513
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalUartXonRefreshDone#
bool halInternalUartXonRefreshDone (uint8_t port)
When Xon/Xoff flow control is used, returns true if the host is not being held off and XON refreshing is complete.
N/A | port |
525
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halInternalUartTxIsIdle#
bool halInternalUartTxIsIdle (uint8_t port)
Returns true if the uart transmitter is idle, including the transmit shift register.
N/A | port |
537
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
serialDropPacket#
bool serialDropPacket (void )
Testing function implemented by the upper layer. Determines whether the next packet should be dropped. Returns true if the next packet should be dropped, false otherwise.
N/A |
547
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
Virtual UART API Documentation#
halStackReceiveVuartMessage#
void halStackReceiveVuartMessage (uint8_t * data, uint8_t length)
When using a debug build with virtual UART support, this API is called by the stack when virtual UART data has been received over the debug channel.
N/A | data | Pointer to the the data received |
N/A | length | Length of the data received |
574
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
Enumeration Documentation#
SerialBaudRate#
SerialBaudRate
Assign numerical values for variables that hold Baud Rate parameters.
Enumerator | |
---|---|
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD | |
DEFINE_BAUD |
300
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
SerialParity#
SerialParity
CORTEXM3_EFM32_MICRO.
Assign numerical values for the types of parity. Use for variables that hold Parity parameters.
Enumerator | |
---|---|
DEFINE_PARITY | |
DEFINE_PARITY | |
DEFINE_PARITY |
370
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
Function Documentation#
halHostFlushBuffers#
void halHostFlushBuffers (void )
N/A |
585
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halHostEnqueueTx#
uint16_t halHostEnqueueTx (const uint8_t * data, uint16_t length)
N/A | data | |
N/A | length |
586
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
halHostFlushTx#
void halHostFlushTx (void )
N/A |
587
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
serialCopyFromRx#
uint16_t serialCopyFromRx (const uint8_t * data, uint16_t length)
N/A | data | |
N/A | length |
590
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h
emLoadSerialTx#
void emLoadSerialTx (void )
N/A |
593
of file /mnt/raid/workspaces/ws.tfWcRzYcf/overlay/gsdk/platform/base/hal/micro/serial.h