|
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 行定义.
