VSF Documented
Data Structures | Macros | Typedefs | Enumerations | Functions
vsf_template_usart.h File Reference
#include "./vsf_template_hal_driver.h"
#include "hal/arch/vsf_arch.h"

Go to the source code of this file.

Data Structures

struct  vsf_usart_isr_t
 
struct  vsf_usart_cfg_t
 
struct  vsf_usart_status_t
 
struct  vsf_usart_capability_t
 
struct  vsf_usart_op_t
 
struct  vsf_usart_t
 

Macros

#define VSF_USART_CFG_MULTI_CLASS   ENABLED
 
#define VSF_USART_CFG_PREFIX   vsf
 
#define VSF_USART_CFG_FUNCTION_RENAME   ENABLED
 
#define VSF_USART_CFG_REIMPLEMENT_TYPE_MODE   DISABLED
 
#define VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK   DISABLED
 
#define VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS   DISABLED
 
#define VSF_USART_CFG_REIMPLEMENT_TYPE_CMD   DISABLED
 
#define VSF_USART_CFG_REIMPLEMENT_MODE_TO_DATA_BITS    DISABLED
 
#define VSF_USART_CFG_REIMPLEMENT_TYPE_CFG   DISABLED
 
#define VSF_USART_CFG_REIMPLEMENT_TYPE_CAPABILITY   DISABLED
 
#define VSF_USART_CFG_INHERT_HAL_CAPABILITY   ENABLED
 
#define VSF_USART_CFG_REQUEST_API   ENABLED
 
#define VSF_USART_CFG_FIFO_API   ENABLED
 
#define __VSF_USART_BASE_APIS(__prefix_name)
 
#define __VSF_USART_FIFO_APIS(__prefix_name)
 
#define __VSF_USART_REQUEST_APIS(__prefix_name)
 
#define __VSF_USART_REQUEST_EXTRA_APIS(__prefix_name)    __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, cmd, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, vsf_usart_cmd_t cmd, void* param)
 
#define VSF_USART_ADDITIONAL_APIS(__prefix_name)
 
#define VSF_USART_APIS(__prefix_name)
 
#define __VSF_HAL_TEMPLATE_API   VSF_HAL_TEMPLATE_API_FP
 
#define __vsf_usart_t   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_t)
 
#define vsf_usart_init(__USART, ...)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_init) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
 
#define vsf_usart_fini(__USART)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_fini) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_capability(__USART)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_capability) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_enable(__USART)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_enable) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_disable(__USART)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_disable) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_irq_enable(__USART, ...)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_irq_enable) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
 
#define vsf_usart_irq_disable(__USART, ...)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_irq_disable) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
 
#define vsf_usart_status(__USART)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_status) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_rxfifo_get_data_count(__USART, ...)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_rxfifo_get_data_count) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
 
#define vsf_usart_rxfifo_read(__USART, ...)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_rxfifo_read) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
 
#define vsf_usart_txfifo_get_free_count(__USART, ...)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_txfifo_get_free_count) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
 
#define vsf_usart_txfifo_write(__USART, ...)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_txfifo_write) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
 
#define vsf_usart_request_rx(__USART, ...)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_request_rx) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
 
#define vsf_usart_request_tx(__USART, ...)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_request_tx) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
 
#define vsf_usart_cancel_rx(__USART)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_cancel_rx) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_cancel_tx(__USART)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_cancel_tx) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_get_rx_count(__USART)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_get_rx_count) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_get_tx_count(__USART)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_get_tx_count) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_send_break(__USART, ...)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_send_break) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_set_break(__USART)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_send_break) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_clear_break(__USART)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_send_break) ((__vsf_usart_t *)(__USART))
 
#define vsf_usart_cmd(__USART, ...)   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_cmd) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)
 

Typedefs

typedef enum vsf_usart_mode_t vsf_usart_mode_t
 Predefined VSF USART modes that can be reimplemented in specific hal drivers.
 
typedef enum vsf_usart_irq_mask_t vsf_usart_irq_mask_t
 Predefined VSF USART interrupt that can be reimplemented in specific hal drivers.
 
typedef struct vsf_usart_t vsf_usart_t
 
typedef void vsf_usart_isr_handler_t(void *target_ptr, vsf_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask)
 
typedef struct vsf_usart_isr_t vsf_usart_isr_t
 
typedef struct vsf_usart_cfg_t vsf_usart_cfg_t
 
typedef enum vsf_usart_cmd_t vsf_usart_cmd_t
 Predefined VSF USART command that can be reimplemented in specific hal drivers.
 
typedef struct vsf_usart_status_t vsf_usart_status_t
 
typedef struct vsf_usart_capability_t vsf_usart_capability_t
 
typedef struct vsf_usart_op_t vsf_usart_op_t
 

Enumerations

enum  vsf_usart_mode_t {
  VSF_USART_NO_PARITY = (0x0ul << 0) ,
  VSF_USART_EVEN_PARITY = (0x1ul << 0) ,
  VSF_USART_ODD_PARITY = (0x2ul << 0) ,
  VSF_USART_FORCE_0_PARITY = (0x3ul << 0) ,
  VSF_USART_FORCE_1_PARITY = (0x4ul << 0) ,
  VSF_USART_1_STOPBIT = (0x0ul << 3) ,
  VSF_USART_1_5_STOPBIT = (0x1ul << 3) ,
  VSF_USART_0_5_STOPBIT = (0x2ul << 3) ,
  VSF_USART_2_STOPBIT = (0x3ul << 3) ,
  VSF_USART_5_BIT_LENGTH = (0x0ul << 5) ,
  VSF_USART_6_BIT_LENGTH = (0x1ul << 5) ,
  VSF_USART_7_BIT_LENGTH = (0x2ul << 5) ,
  VSF_USART_8_BIT_LENGTH = (0x3ul << 5) ,
  VSF_USART_9_BIT_LENGTH = (0x4ul << 5) ,
  VSF_USART_10_BIT_LENGTH = (0x5ul << 5) ,
  VSF_USART_NO_HWCONTROL = (0x0ul << 8) ,
  VSF_USART_RTS_HWCONTROL = (0x1ul << 8) ,
  VSF_USART_CTS_HWCONTROL = (0x2ul << 8) ,
  VSF_USART_RTS_CTS_HWCONTROL = (0x3ul << 8) ,
  VSF_USART_TX_ENABLE = (0x0ul << 9) ,
  VSF_USART_TX_DISABLE = (0x1ul << 9) ,
  VSF_USART_RX_ENABLE = (0x0ul << 10) ,
  VSF_USART_RX_DISABLE = (0x1ul << 10) ,
  VSF_USART_SYNC_CLOCK_ENABLE = (0x0ul << 11) ,
  VSF_USART_SYNC_CLOCK_DISABLE = (0x1ul << 11) ,
  VSF_USART_HALF_DUPLEX_DISABLE = (0x0ul << 12) ,
  VSF_USART_HALF_DUPLEX_ENABLE = (0x1ul << 12) ,
  VSF_USART_TX_FIFO_THRESH_ONE = (0x0ul << 13) ,
  VSF_USART_TX_FIFO_THRESH_HALF_FULL = (0x1ul << 13) ,
  VSF_USART_TX_FIFO_THRESH_FULL = (0x2ul << 13) ,
  VSF_USART_RX_FIFO_THRESH_ONE = (0x0ul << 15) ,
  VSF_USART_RX_FIFO_THRESH_HALF_FULL = (0x1ul << 15) ,
  VSF_USART_RX_FIFO_THRESH_FULL = (0x2ul << 15) ,
  VSF_USART_SYNC_CLOCK_POLARITY_LOW = (0x0ul << 16) ,
  VSF_USART_SYNC_CLOCK_POLARITY_HIGH = (0x1ul << 16) ,
  VSF_USART_SYNC_CLOCK_PHASE_1_EDGE = (0x0ul << 17) ,
  VSF_USART_SYNC_CLOCK_PHASE_2_EDGE = (0x1ul << 17)
}
 Predefined VSF USART modes that can be reimplemented in specific hal drivers. More...
 
enum  {
  VSF_USART_PARITY_MASK ,
  VSF_USART_STOPBIT_MASK ,
  VSF_USART_BIT_LENGTH_MASK ,
  VSF_USART_TX_FIFO_THRESH_MASK ,
  VSF_USART_RX_FIFO_THRESH_MASK ,
  VSF_USART_HWCONTROL_MASK ,
  VSF_USART_TX_MASK ,
  VSF_USART_RX_MASK ,
  VSF_USART_SYNC_CLOCK_MASK ,
  VSF_USART_HALF_DUPLEX_MASK ,
  VSF_USART_SYNC_CLOCK_POLARITY_MASK ,
  VSF_USART_SYNC_CLOCK_PHASE_MASK ,
  VSF_USART_MODE_ALL_BITS_MASK
}
 
enum  vsf_usart_irq_mask_t {
  VSF_USART_IRQ_MASK_TX_CPL = (0x1ul << 0) ,
  VSF_USART_IRQ_MASK_RX_CPL = (0x1ul << 1) ,
  VSF_USART_IRQ_MASK_TX = (0x1ul << 2) ,
  VSF_USART_IRQ_MASK_RX = (0x1ul << 3) ,
  VSF_USART_IRQ_MASK_RX_TIMEOUT = (0x1ul << 4) ,
  VSF_USART_IRQ_MASK_CTS = (0x1ul << 5) ,
  VSF_USART_IRQ_MASK_FRAME_ERR = (0x1ul << 6) ,
  VSF_USART_IRQ_MASK_PARITY_ERR = (0x1ul << 7) ,
  VSF_USART_IRQ_MASK_BREAK_ERR = (0x1ul << 8) ,
  VSF_USART_IRQ_MASK_OVERFLOW_ERR = (0x1ul << 9)
}
 Predefined VSF USART interrupt that can be reimplemented in specific hal drivers. More...
 
enum  {
  VSF_USART_IRQ_MASK_RX_IDLE = VSF_USART_IRQ_MASK_RX_TIMEOUT ,
  VSF_USART_IRQ_MASK_TX_FIFO_THRESHOLD = VSF_USART_IRQ_MASK_TX ,
  VSF_USART_IRQ_MASK_RX_FIFO_THRESHOLD = VSF_USART_IRQ_MASK_RX ,
  VSF_USART_IRQ_MASK_ERR ,
  VSF_USART_IRQ_ALL_BITS_MASK
}
 
enum  vsf_usart_cmd_t {
  VSF_USART_CMD_SEND_BREAK = (0x01ul << 0) ,
  VSF_USART_CMD_SET_BREAK = (0x01ul << 1) ,
  VSF_USART_CMD_CLEAR_BREAK = (0x01ul << 2)
}
 Predefined VSF USART command that can be reimplemented in specific hal drivers. More...
 

Functions

vsf_err_t vsf_usart_init (vsf_usart_t *usart_ptr, vsf_usart_cfg_t *cfg_ptr)
 initialize a usart instance.
 
void vsf_usart_fini (vsf_usart_t *usart_ptr)
 finalize a usart instance.
 
fsm_rt_t vsf_usart_enable (vsf_usart_t *usart_ptr)
 enable interrupt masks of usart instance.
 
fsm_rt_t vsf_usart_disable (vsf_usart_t *usart_ptr)
 disable interrupt masks of usart instance.
 
void vsf_usart_irq_enable (vsf_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask)
 enable interrupt masks of usart instance.
 
void vsf_usart_irq_disable (vsf_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask)
 disable interrupt masks of usart instance.
 
vsf_usart_status_t vsf_usart_status (vsf_usart_t *usart_ptr)
 get the status of usart instance.
 
vsf_usart_capability_t vsf_usart_capability (vsf_usart_t *usart_ptr)
 get the capability of usart instance.
 
uint_fast16_t vsf_usart_rxfifo_get_data_count (vsf_usart_t *usart_ptr)
 get the number of data currently received in the usart receive fifo
 
uint_fast16_t vsf_usart_rxfifo_read (vsf_usart_t *usart_ptr, void *buffer_ptr, uint_fast16_t count)
 try to read the maximum length of data from the usart receive fifo
 
uint_fast16_t vsf_usart_txfifo_get_free_count (vsf_usart_t *usart_ptr)
 try to get the maximum number of data that can be sent from the usart send fifo
 
uint_fast16_t vsf_usart_txfifo_write (vsf_usart_t *usart_ptr, void *buffer_ptr, uint_fast16_t count)
 try to write the maximum length of data from the usart send fifo
 
vsf_err_t vsf_usart_request_rx (vsf_usart_t *usart_ptr, void *buffer_ptr, uint_fast32_t count)
 usart request to receive data of specified length
 
vsf_err_t vsf_usart_request_tx (vsf_usart_t *usart_ptr, void *buffer_ptr, uint_fast32_t count)
 usart request to send data of specified length
 
vsf_err_t vsf_usart_cancel_rx (vsf_usart_t *usart_ptr)
 cancel current current receive request
 
vsf_err_t vsf_usart_cancel_tx (vsf_usart_t *usart_ptr)
 cancel current send request
 
int_fast32_t vsf_usart_get_rx_count (vsf_usart_t *usart_ptr)
 get the number of current receive requests that have been received
 
int_fast32_t vsf_usart_get_tx_count (vsf_usart_t *usart_ptr)
 get the number of current send requests that have been sended
 
vsf_err_t vsf_usart_cmd (vsf_usart_t *usart_ptr, vsf_usart_cmd_t cmd, void *param)
 Calls the specified usart command.
 

Macro Definition Documentation

◆ VSF_USART_CFG_MULTI_CLASS

#define VSF_USART_CFG_MULTI_CLASS   ENABLED

◆ VSF_USART_CFG_PREFIX

#define VSF_USART_CFG_PREFIX   vsf

In the application code, we can redefine this macro to call the actual API directly without a runtime cost. For example: #define VSF_USART_CFG_MULTI_CLASS vsf_hw vsf_usart_init(&vsf_hw_usart0, &cfg); It will be expanded at compile time to vsf_hw_usart_init(&vsf_hw_usart0, &cfg).

Dependency: VSF_USART_CFG_FUNCTION_RENAME enable

◆ VSF_USART_CFG_FUNCTION_RENAME

#define VSF_USART_CFG_FUNCTION_RENAME   ENABLED

If VSF_USART_CFG_FUNCTION_RENAME is enabled, the actual API is called based on the value of VSF_USART_CFG_PREFIX

◆ VSF_USART_CFG_REIMPLEMENT_TYPE_MODE

#define VSF_USART_CFG_REIMPLEMENT_TYPE_MODE   DISABLED

In the specific hardware driver, we can enable VSF_USART_CFG_REIMPLEMENT_TYPE_MODE to redefine vsf_usart_mode_t as needed.

◆ VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK

#define VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK   DISABLED

In the specific hardware driver, we can enable VSF_USART_CFG_REIMPLEMENT_TYPE_IRQ_MASK to redefine vsf_usart_irq_mask_t as needed.

◆ VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS

#define VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS   DISABLED

In the specific hardware driver, we can enable VSF_USART_CFG_REIMPLEMENT_TYPE_STATUS to redefine vsf_usart_status_t as needed.

◆ VSF_USART_CFG_REIMPLEMENT_TYPE_CMD

#define VSF_USART_CFG_REIMPLEMENT_TYPE_CMD   DISABLED

In the specific hardware driver, we can enable VSF_USART_CFG_REIMPLEMENT_TYPE_CMD to redefine vsf_usart_cmd_t as needed.

◆ VSF_USART_CFG_REIMPLEMENT_MODE_TO_DATA_BITS

#define VSF_USART_CFG_REIMPLEMENT_MODE_TO_DATA_BITS    DISABLED

◆ VSF_USART_CFG_REIMPLEMENT_TYPE_CFG

#define VSF_USART_CFG_REIMPLEMENT_TYPE_CFG   DISABLED

Redefine struct vsf_usart_cfg_t. The vsf_usart_isr_handler_t type also needs to be redefined For compatibility, members should not be deleted when struct vsf_usart_cfg_t redefining.

◆ VSF_USART_CFG_REIMPLEMENT_TYPE_CAPABILITY

#define VSF_USART_CFG_REIMPLEMENT_TYPE_CAPABILITY   DISABLED

Redefine struct vsf_usart_capability_t. For compatibility, members should not be deleted when struct vsf_usart_capability_t redefining.

◆ VSF_USART_CFG_INHERT_HAL_CAPABILITY

#define VSF_USART_CFG_INHERT_HAL_CAPABILITY   ENABLED

◆ VSF_USART_CFG_REQUEST_API

#define VSF_USART_CFG_REQUEST_API   ENABLED

◆ VSF_USART_CFG_FIFO_API

#define VSF_USART_CFG_FIFO_API   ENABLED

◆ __VSF_USART_BASE_APIS

#define __VSF_USART_BASE_APIS (   __prefix_name)
Value:
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, init, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, vsf_usart_cfg_t *cfg_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, void, usart, fini, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, usart, enable, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, fsm_rt_t, usart, disable, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_usart_capability_t, usart, capability, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, void, usart, irq_enable, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, vsf_usart_irq_mask_t irq_mask) \
__VSF_HAL_TEMPLATE_API(__prefix_name, void, usart, irq_disable, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, vsf_usart_irq_mask_t irq_mask) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_usart_status_t, usart, status, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr)
vsf_err_t
Definition __type.h:42
vsf_usart_irq_mask_t
Definition uart.h:105
struct VSF_MCONNECT(VSF_FLASH_CFG_IMP_PREFIX, _flash_t)
Definition flash.c:53
__le16 capability
Definition ieee80211.h:134
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
Definition vsf_template_usart.h:630
Definition vsf_template_usart.h:556
Definition uart.h:156
fsm_rt_t
Definition vsf_fsm.h:315
#define __VSF_HAL_TEMPLATE_API
Definition vsf_template_usart.h:655
uint8_t status
Definition vsf_tgui.h:122

◆ __VSF_USART_FIFO_APIS

#define __VSF_USART_FIFO_APIS (   __prefix_name)
Value:
__VSF_HAL_TEMPLATE_API(__prefix_name, uint_fast16_t, usart, rxfifo_get_data_count, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, uint_fast16_t, usart, rxfifo_read, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, void *buffer_ptr, uint_fast16_t count) \
__VSF_HAL_TEMPLATE_API(__prefix_name, uint_fast16_t, usart, txfifo_get_free_count, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, uint_fast16_t, usart, txfifo_write, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, void *buffer_ptr, uint_fast16_t count)
unsigned short uint_fast16_t
Definition stdint.h:25

◆ __VSF_USART_REQUEST_APIS

#define __VSF_USART_REQUEST_APIS (   __prefix_name)
Value:
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, request_rx, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, void *buffer_ptr, uint_fast32_t count) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, request_tx, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, void *buffer_ptr, uint_fast32_t count) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, cancel_rx, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, cancel_tx, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, int_fast32_t, usart, get_rx_count, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
__VSF_HAL_TEMPLATE_API(__prefix_name, int_fast32_t, usart, get_tx_count, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr)
unsigned int uint_fast32_t
Definition stdint.h:27
int int_fast32_t
Definition stdint.h:26

◆ __VSF_USART_REQUEST_EXTRA_APIS

#define __VSF_USART_REQUEST_EXTRA_APIS (   __prefix_name)     __VSF_HAL_TEMPLATE_API(__prefix_name, vsf_err_t, usart, cmd, VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr, vsf_usart_cmd_t cmd, void* param)

◆ VSF_USART_ADDITIONAL_APIS

#define VSF_USART_ADDITIONAL_APIS (   __prefix_name)
Value:
static inline vsf_err_t VSF_MCONNECT(__prefix_name, _usart_send_break) \
(VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
{ \
return VSF_MCONNECT(__prefix_name, _usart_cmd)(usart_ptr, \
} \
static inline vsf_err_t VSF_MCONNECT(__prefix_name, _usart_set_break) \
(VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
{ \
VSF_MCONNECT(__prefix_name, _usart_capability)(usart_ptr); \
VSF_HAL_ASSERT(cap.support_set_and_clear_break); \
return VSF_MCONNECT(__prefix_name, _usart_cmd)(usart_ptr, \
} \
static inline vsf_err_t VSF_MCONNECT(__prefix_name, _usart_clear_break) \
(VSF_MCONNECT(__prefix_name, _usart_t) *usart_ptr) \
{ \
VSF_MCONNECT(__prefix_name, _usart_capability)(usart_ptr); \
VSF_HAL_ASSERT(cap.support_set_and_clear_break); \
return VSF_MCONNECT(__prefix_name, _usart_cmd)(usart_ptr, \
}
#define NULL
Definition stddef.h:52
uint8_t support_set_and_clear_break
Definition vsf_template_usart.h:650
@ VSF_USART_CMD_SET_BREAK
usart set break condition
Definition vsf_template_usart.h:589
@ VSF_USART_CMD_CLEAR_BREAK
usart clean break condition
Definition vsf_template_usart.h:591
@ VSF_USART_CMD_SEND_BREAK
Definition vsf_template_usart.h:586

◆ VSF_USART_APIS

#define VSF_USART_APIS (   __prefix_name)
Value:
__VSF_USART_BASE_APIS(__prefix_name) \
__VSF_USART_FIFO_APIS(__prefix_name) \
__VSF_USART_REQUEST_APIS(__prefix_name) \
__VSF_USART_REQUEST_EXTRA_APIS(__prefix_name)
#define __VSF_USART_BASE_APIS(__prefix_name)
Definition vsf_template_usart.h:126

◆ __VSF_HAL_TEMPLATE_API

#define __VSF_HAL_TEMPLATE_API   VSF_HAL_TEMPLATE_API_FP

◆ __vsf_usart_t

#define __vsf_usart_t   VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_t)

◆ vsf_usart_init

#define vsf_usart_init (   __USART,
  ... 
)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_init) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)

◆ vsf_usart_fini

#define vsf_usart_fini (   __USART)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_fini) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_capability

#define vsf_usart_capability (   __USART)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_capability) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_enable

#define vsf_usart_enable (   __USART)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_enable) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_disable

#define vsf_usart_disable (   __USART)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_disable) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_irq_enable

#define vsf_usart_irq_enable (   __USART,
  ... 
)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_irq_enable) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)

◆ vsf_usart_irq_disable

#define vsf_usart_irq_disable (   __USART,
  ... 
)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_irq_disable) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)

◆ vsf_usart_status

#define vsf_usart_status (   __USART)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_status) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_rxfifo_get_data_count

#define vsf_usart_rxfifo_get_data_count (   __USART,
  ... 
)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_rxfifo_get_data_count) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)

◆ vsf_usart_rxfifo_read

#define vsf_usart_rxfifo_read (   __USART,
  ... 
)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_rxfifo_read) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)

◆ vsf_usart_txfifo_get_free_count

#define vsf_usart_txfifo_get_free_count (   __USART,
  ... 
)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_txfifo_get_free_count) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)

◆ vsf_usart_txfifo_write

#define vsf_usart_txfifo_write (   __USART,
  ... 
)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_txfifo_write) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)

◆ vsf_usart_request_rx

#define vsf_usart_request_rx (   __USART,
  ... 
)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_request_rx) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)

◆ vsf_usart_request_tx

#define vsf_usart_request_tx (   __USART,
  ... 
)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_request_tx) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)

◆ vsf_usart_cancel_rx

#define vsf_usart_cancel_rx (   __USART)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_cancel_rx) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_cancel_tx

#define vsf_usart_cancel_tx (   __USART)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_cancel_tx) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_get_rx_count

#define vsf_usart_get_rx_count (   __USART)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_get_rx_count) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_get_tx_count

#define vsf_usart_get_tx_count (   __USART)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_get_tx_count) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_send_break

#define vsf_usart_send_break (   __USART,
  ... 
)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_send_break) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_set_break

#define vsf_usart_set_break (   __USART)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_send_break) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_clear_break

#define vsf_usart_clear_break (   __USART)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_send_break) ((__vsf_usart_t *)(__USART))

◆ vsf_usart_cmd

#define vsf_usart_cmd (   __USART,
  ... 
)    VSF_MCONNECT(VSF_USART_CFG_PREFIX, _usart_cmd) ((__vsf_usart_t *)(__USART), ##__VA_ARGS__)

Typedef Documentation

◆ vsf_usart_mode_t

Predefined VSF USART modes that can be reimplemented in specific hal drivers.

Even if the hardware doesn't support these modes, the following modes must be kept, If the hardware supports more modes, e.g. more parity modes, more databits, more stopbits, more FIFO threshold size, we can implement it in the hardware driver:

If more new modes are added to the driver, then the corresponding MASK macros need to be defined to include the values of the new modes. For example, Adding the new TX FIFO Threshold option requires that the macro VSF_USART_TX_FIFO_THRESH_MASK be defined. Adding the new parity check option requires the macro VSF_USART_PARITY_MASK be defined. Adding the new stop bit option requires the macro of VSF_USART_BIT_LENGTH_MASK be defined.

Optional features require one or more enumeration options and a macro with the same name to determine if they are supported at runtime. If the feature supports more than one option, it is recommended to provide the corresponding MASK option, so that the user can switch to different modes at compile-time.

◆ vsf_usart_irq_mask_t

Predefined VSF USART interrupt that can be reimplemented in specific hal drivers.

Even if the hardware doesn't support these features, these interrupt must be kept.

◆ vsf_usart_t

typedef struct vsf_usart_t vsf_usart_t

◆ vsf_usart_isr_handler_t

typedef void vsf_usart_isr_handler_t(void *target_ptr, vsf_usart_t *usart_ptr, vsf_usart_irq_mask_t irq_mask)

◆ vsf_usart_isr_t

◆ vsf_usart_cfg_t

◆ vsf_usart_cmd_t

Predefined VSF USART command that can be reimplemented in specific hal drivers.

Even if the hardware doesn't support these features, these commands must be kept. If the hardware supports more commands, but the following commands must be kept:

◆ vsf_usart_status_t

◆ vsf_usart_capability_t

◆ vsf_usart_op_t

Enumeration Type Documentation

◆ vsf_usart_mode_t

Predefined VSF USART modes that can be reimplemented in specific hal drivers.

Even if the hardware doesn't support these modes, the following modes must be kept, If the hardware supports more modes, e.g. more parity modes, more databits, more stopbits, more FIFO threshold size, we can implement it in the hardware driver:

If more new modes are added to the driver, then the corresponding MASK macros need to be defined to include the values of the new modes. For example, Adding the new TX FIFO Threshold option requires that the macro VSF_USART_TX_FIFO_THRESH_MASK be defined. Adding the new parity check option requires the macro VSF_USART_PARITY_MASK be defined. Adding the new stop bit option requires the macro of VSF_USART_BIT_LENGTH_MASK be defined.

Optional features require one or more enumeration options and a macro with the same name to determine if they are supported at runtime. If the feature supports more than one option, it is recommended to provide the corresponding MASK option, so that the user can switch to different modes at compile-time.

Enumerator
VSF_USART_NO_PARITY 

USART Parity.

VSF_USART_EVEN_PARITY 
VSF_USART_ODD_PARITY 
VSF_USART_FORCE_0_PARITY 
VSF_USART_FORCE_1_PARITY 
VSF_USART_1_STOPBIT 

USART Stopbit.

stopbit: 1 bit

VSF_USART_1_5_STOPBIT 

stopbit: 1.5 bit

VSF_USART_0_5_STOPBIT 

stopbit: 0.5 bit

VSF_USART_2_STOPBIT 

stopbit: 2 bit

VSF_USART_5_BIT_LENGTH 

USART Databit Lenght.

data bits : 5,

VSF_USART_6_BIT_LENGTH 

data bits : 6,

VSF_USART_7_BIT_LENGTH 

data bits : 7,

VSF_USART_8_BIT_LENGTH 

data bits : 8,

VSF_USART_9_BIT_LENGTH 

data bits : 9,

VSF_USART_10_BIT_LENGTH 

data bits : 10,

VSF_USART_NO_HWCONTROL 

USART Hardware Control.

VSF_USART_RTS_HWCONTROL 
VSF_USART_CTS_HWCONTROL 
VSF_USART_RTS_CTS_HWCONTROL 
VSF_USART_TX_ENABLE 
VSF_USART_TX_DISABLE 
VSF_USART_RX_ENABLE 
VSF_USART_RX_DISABLE 
VSF_USART_SYNC_CLOCK_ENABLE 
VSF_USART_SYNC_CLOCK_DISABLE 
VSF_USART_HALF_DUPLEX_DISABLE 
VSF_USART_HALF_DUPLEX_ENABLE 
VSF_USART_TX_FIFO_THRESH_ONE 

one data for txfifo

As generic options for tx/rx fifo threshold, only three modes are defined here. More options for thresholds can be defined in the specific driver.

VSF_USART_TX_FIFO_THRESH_HALF_FULL 

Half of the threshold for txfifo.

VSF_USART_TX_FIFO_THRESH_FULL 

Full of the threshold for txfifo.

VSF_USART_RX_FIFO_THRESH_ONE 

one data for txfifo

VSF_USART_RX_FIFO_THRESH_HALF_FULL 

Half of the threshold for txfifo.

VSF_USART_RX_FIFO_THRESH_FULL 

Full of the threshold for txfifo.

VSF_USART_SYNC_CLOCK_POLARITY_LOW 

USART SYNC Mode Clock.

VSF_USART_SYNC_CLOCK_POLARITY_HIGH 
VSF_USART_SYNC_CLOCK_PHASE_1_EDGE 
VSF_USART_SYNC_CLOCK_PHASE_2_EDGE 

◆ anonymous enum

anonymous enum
Enumerator
VSF_USART_PARITY_MASK 
VSF_USART_STOPBIT_MASK 
VSF_USART_BIT_LENGTH_MASK 
VSF_USART_TX_FIFO_THRESH_MASK 
VSF_USART_RX_FIFO_THRESH_MASK 
VSF_USART_HWCONTROL_MASK 
VSF_USART_TX_MASK 
VSF_USART_RX_MASK 
VSF_USART_SYNC_CLOCK_MASK 
VSF_USART_HALF_DUPLEX_MASK 
VSF_USART_SYNC_CLOCK_POLARITY_MASK 
VSF_USART_SYNC_CLOCK_PHASE_MASK 
VSF_USART_MODE_ALL_BITS_MASK 

◆ vsf_usart_irq_mask_t

Predefined VSF USART interrupt that can be reimplemented in specific hal drivers.

Even if the hardware doesn't support these features, these interrupt must be kept.

Enumerator
VSF_USART_IRQ_MASK_TX_CPL 
VSF_USART_IRQ_MASK_RX_CPL 
VSF_USART_IRQ_MASK_TX 
VSF_USART_IRQ_MASK_RX 
VSF_USART_IRQ_MASK_RX_TIMEOUT 
VSF_USART_IRQ_MASK_CTS 
VSF_USART_IRQ_MASK_FRAME_ERR 
VSF_USART_IRQ_MASK_PARITY_ERR 
VSF_USART_IRQ_MASK_BREAK_ERR 
VSF_USART_IRQ_MASK_OVERFLOW_ERR 

◆ anonymous enum

anonymous enum
Enumerator
VSF_USART_IRQ_MASK_RX_IDLE 
VSF_USART_IRQ_MASK_TX_FIFO_THRESHOLD 
VSF_USART_IRQ_MASK_RX_FIFO_THRESHOLD 
VSF_USART_IRQ_MASK_ERR 
VSF_USART_IRQ_ALL_BITS_MASK 

◆ vsf_usart_cmd_t

Predefined VSF USART command that can be reimplemented in specific hal drivers.

Even if the hardware doesn't support these features, these commands must be kept. If the hardware supports more commands, but the following commands must be kept:

Enumerator
VSF_USART_CMD_SEND_BREAK 

usart send break After a number of bits, the hardware will automatically clear the break condition automatically.

VSF_USART_CMD_SET_BREAK 

usart set break condition

VSF_USART_CMD_CLEAR_BREAK 

usart clean break condition

Function Documentation

◆ vsf_usart_init()

vsf_err_t vsf_usart_init ( vsf_usart_t usart_ptr,
vsf_usart_cfg_t cfg_ptr 
)
extern

initialize a usart instance.

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
[in]cfg_ptra pointer to structure vsf_usart_cfg_t
Returns
vsf_err_t: VSF_ERR_NONE if usart was initialized, or a negative error code
Note
It is not necessary to call vsf_usart_fini() to deinitialization. vsf_usart_init() should be called before any other usart API except vsf_usart_capability().

calculate baudrate

calculate baudrate

◆ vsf_usart_fini()

void vsf_usart_fini ( vsf_usart_t usart_ptr)
extern

finalize a usart instance.

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
Returns
none

◆ vsf_usart_enable()

fsm_rt_t vsf_usart_enable ( vsf_usart_t usart_ptr)
extern

enable interrupt masks of usart instance.

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
Returns
none.

don't forget to enable sync clock and peripheral_clk here

◆ vsf_usart_disable()

fsm_rt_t vsf_usart_disable ( vsf_usart_t usart_ptr)
extern

disable interrupt masks of usart instance.

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
Returns
none.

don't forget to disable sync clock and peripheral_clk here

◆ vsf_usart_irq_enable()

void vsf_usart_irq_enable ( vsf_usart_t usart_ptr,
vsf_usart_irq_mask_t  irq_mask 
)
extern

enable interrupt masks of usart instance.

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
[in]irq_maskone or more value of enum vsf_usart_irq_mask_t
Returns
none.
Note
All pending interrupts should be cleared before interrupts are enabled.

◆ vsf_usart_irq_disable()

void vsf_usart_irq_disable ( vsf_usart_t usart_ptr,
vsf_usart_irq_mask_t  irq_mask 
)
extern

disable interrupt masks of usart instance.

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
[in]irq_maskone or more value of enum vsf_usart_irq_mask_t, vsf_usart_irq_mask_t
Returns
none.

◆ vsf_usart_status()

vsf_usart_status_t vsf_usart_status ( vsf_usart_t usart_ptr)
extern

get the status of usart instance.

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
Returns
vsf_usart_status_t: return all status of current usart

◆ vsf_usart_capability()

vsf_usart_capability_t vsf_usart_capability ( vsf_usart_t usart_ptr)
extern

get the capability of usart instance.

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
Returns
vsf_usart_capability_t: return all capability of current usart vsf_usart_capability_t

◆ vsf_usart_rxfifo_get_data_count()

uint_fast16_t vsf_usart_rxfifo_get_data_count ( vsf_usart_t usart_ptr)
extern

get the number of data currently received in the usart receive fifo

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
Returns
uint_fast16_t: return the number of data currently in the usart receive queue.

◆ vsf_usart_rxfifo_read()

uint_fast16_t vsf_usart_rxfifo_read ( vsf_usart_t usart_ptr,
void *  buffer_ptr,
uint_fast16_t  count 
)
extern

try to read the maximum length of data from the usart receive fifo

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
[in]buffer_ptrdata buffer
[in]countmaximum number of reads
Returns
uint_fast16_t: return the actual number of reads from the current usart receive fifo

◆ vsf_usart_txfifo_get_free_count()

uint_fast16_t vsf_usart_txfifo_get_free_count ( vsf_usart_t usart_ptr)
extern

try to get the maximum number of data that can be sent from the usart send fifo

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
Returns
uint_fast16_t: return the maximum number of data that can be sent from the current usart send fifo
Note
Some usart has no fifo, or has fifo but can't get the number of fifo, can return 1~2
  1. The data register is empty, but the shift register is not empty
  2. Both data register and shift register are empty

◆ vsf_usart_txfifo_write()

uint_fast16_t vsf_usart_txfifo_write ( vsf_usart_t usart_ptr,
void *  buffer_ptr,
uint_fast16_t  count 
)
extern

try to write the maximum length of data from the usart send fifo

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
[in]buffer_ptrdata buffer
[in]countmaximum number of writes
Returns
uint_fast16_t: return the actual number of writes to the current usart send queue

◆ vsf_usart_request_rx()

vsf_err_t vsf_usart_request_rx ( vsf_usart_t usart_ptr,
void *  buffer_ptr,
uint_fast32_t  count 
)
extern

usart request to receive data of specified length

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
[in]buffer_ptrdata buffer
[in]countnumber of requested data
Returns
vsf_err_t: VSF_ERR_NONE if the usart request was successfully, or a negative error code

◆ vsf_usart_request_tx()

vsf_err_t vsf_usart_request_tx ( vsf_usart_t usart_ptr,
void *  buffer_ptr,
uint_fast32_t  count 
)
extern

usart request to send data of specified length

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
[in]buffer_ptrdata buffer
[in]countnumber of requested data
Returns
vsf_err_t: VSF_ERR_NONE if the usart request was successfully, or a negative error code
Note
: The request interface is usually implemented via DMA.

◆ vsf_usart_cancel_rx()

vsf_err_t vsf_usart_cancel_rx ( vsf_usart_t usart_ptr)
extern

cancel current current receive request

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
Returns
vsf_err_t: VSF_ERR_NONE if the usart request was successfully, or a negative error code
Note
: The request interface is usually implemented via DMA.

◆ vsf_usart_cancel_tx()

vsf_err_t vsf_usart_cancel_tx ( vsf_usart_t usart_ptr)
extern

cancel current send request

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
Returns
vsf_err_t: VSF_ERR_NONE if the usart request was successfully, or a negative error code

◆ vsf_usart_get_rx_count()

int_fast32_t vsf_usart_get_rx_count ( vsf_usart_t usart_ptr)
extern

get the number of current receive requests that have been received

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
Returns
int_fast32_t: number already received
Note
: only valid until the current receive request is completed.

◆ vsf_usart_get_tx_count()

int_fast32_t vsf_usart_get_tx_count ( vsf_usart_t usart_ptr)
extern

get the number of current send requests that have been sended

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
Returns
int_fast32_t: number already send
Note
: only valid until the current send request is completed.

◆ vsf_usart_cmd()

vsf_err_t vsf_usart_cmd ( vsf_usart_t usart_ptr,
vsf_usart_cmd_t  cmd,
void *  param 
)
extern

Calls the specified usart command.

Parameters
[in]usart_ptra pointer to structure vsf_usart_t
[in]cmdusart command vsf_usart_cmd_t.
[in]paramthe parameter of the command, its use is determined by the command
Returns
vsf_err_t: returns the result of the usart command when it is invoked, success returns VSF_ERR_NONE