XWOS API
4.0
XWOS C/C++ API参考手册
|
结构体 | |
struct | xwds_uart_cfg |
UART配置 更多... | |
struct | xwds_uartc_driver |
BSP中需要提供的UART控制器驱动函数表 更多... | |
struct | xwds_uartc |
UART控制器 更多... | |
宏定义 | |
#define | XWDS_UART_RXQ_SIZE XWCDCFG_ds_UART_RXQ_SIZE |
类型定义 | |
typedef void(* | xwds_uartc_eqcb_f) (struct xwds_uartc *, xwer_t) |
异步发送的回调函数类型 | |
枚举 | |
enum | xwds_uart_bits_em { XWDS_UART_BITS_5 = 0U , XWDS_UART_BITS_6 , XWDS_UART_BITS_7 , XWDS_UART_BITS_8 , XWDS_UART_BITS_9 } |
UART字长枚举 更多... | |
enum | xwds_uart_stopbits_em { XWDS_UART_STOPBITS_0_5 = 0U , XWDS_UART_STOPBITS_1_0 , XWDS_UART_STOPBITS_1_5 , XWDS_UART_STOPBITS_2_0 } |
UART停止位枚举 更多... | |
enum | xwds_uart_parity_em { XWDS_UART_PARITY_NONE = 0U , XWDS_UART_PARITY_EVEN , XWDS_UART_PARITY_ODD } |
UART奇偶校验枚举 更多... | |
enum | xwds_uart_hardwareflowcontrol_em { XWDS_UART_HFC_NONE = 0U , XWDS_UART_HFC_RTS = ((xwbmp_t)1 << ( 0 )) , XWDS_UART_HFC_CTS = ((xwbmp_t)1 << ( 1 )) } |
UART硬件流控枚举 更多... | |
enum | xwds_uart_mode_em { XWDS_UART_MODE_CLOSE = 0U , XWDS_UART_MODE_TX = ((xwbmp_t)1 << ( 0 )) , XWDS_UART_MODE_RX = ((xwbmp_t)1 << ( 1 )) } |
UART模式枚举 更多... | |
函数 | |
void | xwds_uartc_construct (struct xwds_uartc *uartc) |
XWDS API:UART控制器的构造函数 | |
void | xwds_uartc_destruct (struct xwds_uartc *uartc) |
XWDS API:UART控制器对象的析构函数 | |
xwer_t | xwds_uartc_grab (struct xwds_uartc *uartc) |
增加对象的引用计数 | |
xwer_t | xwds_uartc_put (struct xwds_uartc *uartc) |
减少对象的引用计数 | |
xwer_t | xwds_uartc_rx (struct xwds_uartc *uartc, xwu8_t *buf, xwsz_t *size, xwtm_t to) |
XWDS API:从接收队列中获取数据 | |
xwer_t | xwds_uartc_try_rx (struct xwds_uartc *uartc, xwu8_t *buf, xwsz_t *size) |
XWDS API:尝试从接收队列中获取数据 | |
xwer_t | xwds_uartc_tx (struct xwds_uartc *uartc, const xwu8_t *data, xwsz_t *size, xwtm_t to) |
XWDS API:同步发送 | |
xwer_t | xwds_uartc_eq (struct xwds_uartc *uartc, const xwu8_t *data, xwsz_t *size, xwds_uartc_eqcb_f cb) |
XWDS API:异步发送 | |
xwer_t | xwds_uartc_putc (struct xwds_uartc *uartc, const xwu8_t byte, xwtm_t to) |
XWDS API:直接发送一个字节(非DMA模式) | |
xwer_t | xwds_uartc_cfg (struct xwds_uartc *uartc, const struct xwds_uart_cfg *cfg) |
XWDS API:配置UART | |
static bool | xwds_uart_tst_baudrate (xwu32_t baudrate) |
测试UART波特率是否合法 | |
void | xwds_uartc_drvcb_rxq_flush (struct xwds_uartc *uartc) |
XWDS Driver Callback:清空接收队列 | |
xwsq_t | xwds_uartc_drvcb_rxq_fill (struct xwds_uartc *uartc, xwu8_t bytes[], xwsz_t size) |
XWDS Driver Callback:从UART硬件接收数据到缓冲区 | |
void | xwds_uartc_drvcb_rxq_pub (struct xwds_uartc *uartc, xwsq_t tail) |
XWDS Driver Callback:发布数据到接收队列 | |
XWDS串口控制器框架内定义了大小为 XWCDCFG_ds_UART_RXQ_SIZE
的 接收缓冲区 , CAPI xwds_uartc_rx()
与 xwds_uartc_try_rx()
用于从 接收缓冲区 获取数据。
异步发送 xwds_uartc_eq()
只会将数据拷贝到发送缓冲区, 不会等待发送结果,可在中断中使用。
同步发送 xwds_uartc_tx()
会阻塞调用者,等待发送结果,因此只能在线程中使用。
接收缓冲区 是一个循环队列,当 overflow
时,最新的数据会将最旧的数据覆盖掉。
rxq.idx
用于向 接收缓冲区 内填充数据, rxq.pos
和 rxq.tail
用于向 接收缓冲区 获取数据。
当使用 中断模式 的UART硬件控制器时,需在中断函数内 调用 xwds_uartc_drvcb_rxq_fill()
填充 接收缓冲区 , 然后调用 xwds_uartc_drvcb_rxq_pub()
发布数据。
如果UART硬件控制器支持FIFO,需要使用一个 接收超时定时器 定期将FIFO内数据填充至 接收缓冲区 并发布数据。
出现错误时,需要使用 xwds_uartc_drvcb_rxq_flush()
重置 接收缓冲区 。
当使用 DMA模式 的UART硬件控制器时,需将DMA的接收地址 设置为 接收缓冲区 的首地址,DMA引擎会自动填充 接收缓冲区 , DMA完成中断触发时,需要调用 xwds_uartc_drvcb_rxq_pub()
发布数据。
此外需要使用一个 接收超时定时器 定期发布数据。
出现错误时,需要使用 xwds_uartc_drvcb_rxq_flush()
重置 接收缓冲区 。
同步发送 xwds_uartc_tx()
需要 BSP驱动层 实现 xwds_uartc_driver.tx
函数。
异步发送 xwds_uartc_eq()
需要 BSP驱动层 实现 xwds_uartc_driver.eq
函数。 BSP驱动层 可根据需要实现 发送缓冲区 ,有些SOC提供很大的 TX FIFO , 可替代发送缓冲区。
DMA模式的发送则必须提供 发送缓冲区 作为DMA的内存。
BSP驱动层 还需要实现一个 BUSY 标志,此CAPI不阻塞,当检测到BUSY标志时 需要立即返回 -EBUSY
。
#define XWDS_UART_RXQ_SIZE XWCDCFG_ds_UART_RXQ_SIZE |
在文件 controller.h 第 101 行定义.
typedef void(* xwds_uartc_eqcb_f) (struct xwds_uartc *, xwer_t) |
异步发送的回调函数类型
在文件 controller.h 第 171 行定义.
enum xwds_uart_bits_em |
UART字长枚举
枚举值 | |
---|---|
XWDS_UART_BITS_5 | |
XWDS_UART_BITS_6 | |
XWDS_UART_BITS_7 | |
XWDS_UART_BITS_8 | |
XWDS_UART_BITS_9 |
在文件 controller.h 第 106 行定义.
UART硬件流控枚举
枚举值 | |
---|---|
XWDS_UART_HFC_NONE | |
XWDS_UART_HFC_RTS | |
XWDS_UART_HFC_CTS |
在文件 controller.h 第 136 行定义.
enum xwds_uart_mode_em |
UART模式枚举
枚举值 | |
---|---|
XWDS_UART_MODE_CLOSE | |
XWDS_UART_MODE_TX | |
XWDS_UART_MODE_RX |
在文件 controller.h 第 145 行定义.
enum xwds_uart_parity_em |
UART奇偶校验枚举
枚举值 | |
---|---|
XWDS_UART_PARITY_NONE | |
XWDS_UART_PARITY_EVEN | |
XWDS_UART_PARITY_ODD |
在文件 controller.h 第 127 行定义.
UART停止位枚举
枚举值 | |
---|---|
XWDS_UART_STOPBITS_0_5 | |
XWDS_UART_STOPBITS_1_0 | |
XWDS_UART_STOPBITS_1_5 | |
XWDS_UART_STOPBITS_2_0 |
在文件 controller.h 第 117 行定义.
|
inlinestatic |
测试UART波特率是否合法
[in] | baudrate | 波特率 |
在文件 controller.h 第 353 行定义.
xwer_t xwds_uartc_cfg | ( | struct xwds_uartc * | uartc, |
const struct xwds_uart_cfg * | cfg | ||
) |
XWDS API:配置UART
[in] | uartc | UART控制器对象指针 |
[in] | cfg | 新的配置 |
XWOK | 没有错误 |
-EFAULT | 无效指针 |
-ENOSYS | 不支持此操作 |
<No error
在文件 controller.c 第 462 行定义.
void xwds_uartc_construct | ( | struct xwds_uartc * | uartc | ) |
XWDS API:UART控制器的构造函数
[in] | uartc | UART控制器对象指针 |
在文件 controller.c 第 73 行定义.
void xwds_uartc_destruct | ( | struct xwds_uartc * | uartc | ) |
XWDS API:UART控制器对象的析构函数
[in] | uartc | UART控制器对象指针 |
在文件 controller.c 第 84 行定义.
xwsq_t xwds_uartc_drvcb_rxq_fill | ( | struct xwds_uartc * | uartc, |
xwu8_t | bytes[], | ||
xwsz_t | size | ||
) |
XWDS Driver Callback:从UART硬件接收数据到缓冲区
[in] | uartc | UART控制器对象指针 |
如果使用 uartc->rxq.mem
作为DMA内存,缓冲区将自动被填充,不需要使用此函数。 此函数仅当DMA内存与缓冲区不一致时,或使用中断模式时使用。
在文件 controller.c 第 508 行定义.
void xwds_uartc_drvcb_rxq_flush | ( | struct xwds_uartc * | uartc | ) |
XWDS Driver Callback:清空接收队列
[in] | uartc | UART控制器对象指针 |
在文件 controller.c 第 495 行定义.
void xwds_uartc_drvcb_rxq_pub | ( | struct xwds_uartc * | uartc, |
xwsq_t | tail | ||
) |
XWDS Driver Callback:发布数据到接收队列
[in] | uartc | UART控制器对象指针 |
[in] | pub | 新的数据接收位置(有效数据结尾 + 1) |
在文件 controller.c 第 522 行定义.
xwer_t xwds_uartc_eq | ( | struct xwds_uartc * | uartc, |
const xwu8_t * | data, | ||
xwsz_t * | size, | ||
xwds_uartc_eqcb_f | cb | ||
) |
XWDS API:异步发送
[in] | uartc | UART控制器对象指针 |
[in] | data | 待发送的数据的缓冲区 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
[in] | cb | 发送结束后的回调函数,可为 NULL |
XWOK | 没有错误 |
-EFAULT | 无效指针 |
-ENOSYS | 不支持此操作 |
-EBUSY | 端口繁忙 |
-EBUSY
返回。 此CAPI可在中断中使用。*size
会返回实际拷贝到缓冲区的数据大小。 <No error
在文件 controller.c 第 389 行定义.
xwer_t xwds_uartc_grab | ( | struct xwds_uartc * | uartc | ) |
增加对象的引用计数
[in] | uartc | UART控制器对象指针 |
在文件 controller.c 第 94 行定义.
xwer_t xwds_uartc_put | ( | struct xwds_uartc * | uartc | ) |
减少对象的引用计数
[in] | uartc | UART控制器对象指针 |
在文件 controller.c 第 104 行定义.
xwer_t xwds_uartc_putc | ( | struct xwds_uartc * | uartc, |
const xwu8_t | byte, | ||
xwtm_t | to | ||
) |
XWDS API:直接发送一个字节(非DMA模式)
[in] | uartc | UART控制器对象指针 |
[in] | byte | 待发送的字节 |
[in] | to | 期望唤醒的时间点 |
XWOK | 没有错误 |
-EFAULT | 无效指针 |
-ENOSYS | 不支持此操作 |
to
表示等待超时的时间点:
to
通常是未来的时间,即 当前系统时间 + delta
, 可以使用 xwtm_ft(delta)
表示;to
是过去的时间点,将直接返回 -ETIMEDOUT
。 <No error
在文件 controller.c 第 423 行定义.
xwer_t xwds_uartc_rx | ( | struct xwds_uartc * | uartc, |
xwu8_t * | buf, | ||
xwsz_t * | size, | ||
xwtm_t | to | ||
) |
XWDS API:从接收队列中获取数据
[in] | uartc | UART控制器对象指针 |
[out] | buf | 指向缓冲区的指针,通过此缓冲区返回数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
[in] | to | 期望唤醒的时间点 |
XWOK | 没有错误 |
-EFAULT | 无效指针 |
-ETIMEDOUT | 超时 |
to
表示等待超时的时间点:
to
通常是未来的时间,即 当前系统时间 + delta
, 可以使用 xwtm_ft(delta)
表示;to
是过去的时间点,将直接返回 -ETIMEDOUT
。 <No error
在文件 controller.c 第 229 行定义.
xwer_t xwds_uartc_try_rx | ( | struct xwds_uartc * | uartc, |
xwu8_t * | buf, | ||
xwsz_t * | size | ||
) |
XWDS API:尝试从接收队列中获取数据
[in] | uartc | UART控制器对象指针 |
[out] | buf | 指向缓冲区的指针,通过此缓冲区返回数据 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
XWOK | 没有错误 |
-EFAULT | 无效指针 |
-ENODATA | 没有数据 |
<No error
在文件 controller.c 第 289 行定义.
xwer_t xwds_uartc_tx | ( | struct xwds_uartc * | uartc, |
const xwu8_t * | data, | ||
xwsz_t * | size, | ||
xwtm_t | to | ||
) |
XWDS API:同步发送
[in] | uartc | UART控制器对象指针 |
[in] | data | 待发送的数据的缓冲区 |
[in,out] | size | 指向缓冲区的指针,此缓冲区:
|
[in] | to | 期望唤醒的时间点 |
XWOK | 没有错误 |
-EFAULT | 无效指针 |
-ENOSYS | 不支持此操作 |
-ECANCELED | 发送被取消 |
-ETIMEDOUT | 超时 |
to
表示等待超时的时间点:
to
通常是未来的时间,即 当前系统时间 + delta
, 可以使用 xwtm_ft(delta)
表示;to
是过去的时间点,将直接返回 -ETIMEDOUT
。 <No error
在文件 controller.c 第 348 行定义.