XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
controller.h
浏览该文件的文档.
1
21#ifndef __xwcd_ds_uart_controller_h__
22#define __xwcd_ds_uart_controller_h__
23
24#include <xwcd/ds/standard.h>
25#include <xwos/lib/xwbop.h>
27#include <xwos/osal/sync/sem.h>
28#include <xwos/osal/lock/mtx.h>
29#include <xwcd/ds/device.h>
30#include <xwcd/ds/soc/dma.h>
31
121};
122
131};
132
140};
141
149};
150
158};
159
165 struct {
172 void * soccfg;
173};
174
175struct xwds_uartc;
176
180typedef void (* xwds_uartc_eqcb_f)(struct xwds_uartc *, xwer_t);
181
187 xwer_t (* cfg)(struct xwds_uartc * /*uartc*/,
188 const struct xwds_uart_cfg * /*cfg*/);
189 xwer_t (* tx)(struct xwds_uartc * /*uartc*/,
190 const xwu8_t * /*data*/, xwsz_t * /*size*/,
191 xwtm_t /*to*/);
192 xwer_t (* etx)(struct xwds_uartc * /*uartc*/,
193 const xwu8_t * /*data*/, xwsz_t * /*size*/);
194 xwer_t (* eq)(struct xwds_uartc * /*uartc*/,
195 const xwu8_t * /*data*/, xwsz_t * /*size*/,
196 xwds_uartc_eqcb_f /*cb*/);
197 xwer_t (* putc)(struct xwds_uartc * /*uartc*/,
198 const xwu8_t /*byte*/);
199};
200
207 /* attributes */
208 const struct xwds_uart_cfg * cfg;
212 /* TX */
215 /* RX */
216 struct {
217 struct xwos_sem sem;
218 struct xwos_splk lock;
224 } rxq;
225};
226
227/******** ******** APIs ******** ********/
228void xwds_uartc_construct(struct xwds_uartc * uartc);
229void xwds_uartc_destruct(struct xwds_uartc * uartc);
230xwer_t xwds_uartc_grab(struct xwds_uartc * uartc);
231xwer_t xwds_uartc_put(struct xwds_uartc * uartc);
232
253xwer_t xwds_uartc_rx(struct xwds_uartc * uartc,
254 xwu8_t * buf, xwsz_t * size,
255 xwtm_t to);
256
271xwer_t xwds_uartc_try_rx(struct xwds_uartc * uartc,
272 xwu8_t * buf, xwsz_t * size);
273
296xwer_t xwds_uartc_tx(struct xwds_uartc * uartc,
297 const xwu8_t * data, xwsz_t * size,
298 xwtm_t to);
299
316xwer_t xwds_uartc_etx(struct xwds_uartc * uartc,
317 const xwu8_t * data, xwsz_t * size);
318
340xwer_t xwds_uartc_eq(struct xwds_uartc * uartc,
341 const xwu8_t * data, xwsz_t * size,
343
361xwer_t xwds_uartc_putc(struct xwds_uartc * uartc,
362 const xwu8_t byte,
363 xwtm_t to);
364
376xwer_t xwds_uartc_cfg(struct xwds_uartc * uartc,
377 const struct xwds_uart_cfg * cfg);
378
383static __xwcc_inline
385{
386 return ((50U == baudrate) || (75U == baudrate) || (110U == baudrate) ||
387 (134U == baudrate) || (150U == baudrate) || (200U == baudrate) ||
388 (300U == baudrate) || (600U == baudrate) || (1200U == baudrate) ||
389 (1800U == baudrate) || (2400U == baudrate) || (4800U == baudrate) ||
390 (9600U == baudrate) || (19200U == baudrate) || (38400U == baudrate) ||
391 (57600U == baudrate) || (115200U == baudrate) ||
392 (230400U == baudrate) || (460800U == baudrate) ||
393 (576000U == baudrate) || (921600U == baudrate) ||
394 (1000000U == baudrate) || (1152000U == baudrate) ||
395 (1500000U == baudrate) || (2000000U == baudrate) ||
396 (2500000U == baudrate) || (3000000U == baudrate) ||
397 (3500000U == baudrate) || (4000000U == baudrate));
398}
399
400/******** ******** Callbacks for driver ******** ********/
405void xwds_uartc_drvcb_rxq_flush(struct xwds_uartc * uartc);
406
416 xwu8_t bytes[], xwsz_t size);
417
423void xwds_uartc_drvcb_rxq_pub(struct xwds_uartc * uartc, xwsq_t tail);
424
429#endif /* xwcd/ds/uart/controller.h */
玄武设备栈:SOC:DMA
玄武设备栈:设备基类
xwer_t xwds_uartc_grab(struct xwds_uartc *uartc)
增加对象的引用计数
Definition controller.c:94
static bool xwds_uart_tst_baudrate(xwu32_t baudrate)
测试UART波特率是否合法
Definition controller.h:384
xwer_t xwds_uartc_tx(struct xwds_uartc *uartc, const xwu8_t *data, xwsz_t *size, xwtm_t to)
XWDS API:同步发送
Definition controller.c:348
void xwds_uartc_drvcb_rxq_pub(struct xwds_uartc *uartc, xwsq_t tail)
XWDS Driver Callback:发布数据到接收队列
Definition controller.c:555
xwds_uart_bits_em
UART字长枚举
Definition controller.h:115
xwds_uart_parity_em
UART奇偶校验枚举
Definition controller.h:136
xwer_t xwds_uartc_cfg(struct xwds_uartc *uartc, const struct xwds_uart_cfg *cfg)
XWDS API:配置UART
Definition controller.c:495
void xwds_uartc_destruct(struct xwds_uartc *uartc)
XWDS API:UART控制器对象的析构函数
Definition controller.c:84
xwer_t xwds_uartc_rx(struct xwds_uartc *uartc, xwu8_t *buf, xwsz_t *size, xwtm_t to)
XWDS API:从接收队列中获取数据
Definition controller.c:229
void xwds_uartc_construct(struct xwds_uartc *uartc)
XWDS API:UART控制器的构造函数
Definition controller.c:73
xwer_t xwds_uartc_eq(struct xwds_uartc *uartc, const xwu8_t *data, xwsz_t *size, xwds_uartc_eqcb_f cb)
XWDS API:异步发送
Definition controller.c:422
xwer_t xwds_uartc_etx(struct xwds_uartc *uartc, const xwu8_t *data, xwsz_t *size)
XWDS API:紧急发送
Definition controller.c:389
xwds_uart_hardwareflowcontrol_em
UART硬件流控枚举
Definition controller.h:145
xwer_t xwds_uartc_put(struct xwds_uartc *uartc)
减少对象的引用计数
Definition controller.c:104
xwds_uart_stopbits_em
UART停止位枚举
Definition controller.h:126
xwer_t xwds_uartc_putc(struct xwds_uartc *uartc, const xwu8_t byte, xwtm_t to)
XWDS API:直接发送一个字节(非DMA模式)
Definition controller.c:456
void(* xwds_uartc_eqcb_f)(struct xwds_uartc *, xwer_t)
异步发送的回调函数类型
Definition controller.h:180
xwds_uart_mode_em
UART模式枚举
Definition controller.h:154
xwsq_t xwds_uartc_drvcb_rxq_fill(struct xwds_uartc *uartc, xwu8_t bytes[], xwsz_t size)
XWDS Driver Callback:从UART硬件接收数据到缓冲区
Definition controller.c:541
void xwds_uartc_drvcb_rxq_flush(struct xwds_uartc *uartc)
XWDS Driver Callback:清空接收队列
Definition controller.c:528
xwer_t xwds_uartc_try_rx(struct xwds_uartc *uartc, xwu8_t *buf, xwsz_t *size)
XWDS API:尝试从接收队列中获取数据
Definition controller.c:289
@ XWDS_UART_BITS_8
Definition controller.h:119
@ XWDS_UART_BITS_5
Definition controller.h:116
@ XWDS_UART_BITS_6
Definition controller.h:117
@ XWDS_UART_BITS_9
Definition controller.h:120
@ XWDS_UART_BITS_7
Definition controller.h:118
@ XWDS_UART_PARITY_EVEN
Definition controller.h:138
@ XWDS_UART_PARITY_NONE
Definition controller.h:137
@ XWDS_UART_PARITY_ODD
Definition controller.h:139
@ XWDS_UART_HFC_CTS
Definition controller.h:148
@ XWDS_UART_HFC_RTS
Definition controller.h:147
@ XWDS_UART_HFC_NONE
Definition controller.h:146
@ XWDS_UART_STOPBITS_1_0
Definition controller.h:128
@ XWDS_UART_STOPBITS_0_5
Definition controller.h:127
@ XWDS_UART_STOPBITS_1_5
Definition controller.h:129
@ XWDS_UART_STOPBITS_2_0
Definition controller.h:130
@ XWDS_UART_MODE_TX
Definition controller.h:156
@ XWDS_UART_MODE_RX
Definition controller.h:157
@ XWDS_UART_MODE_CLOSE
Definition controller.h:155
#define __xwcc_inline
Definition compiler.h:77
xws64_t xwtm_t
XWOS系统时间 (有符号)
Definition type.h:742
signed long xwer_t
Definition type.h:554
unsigned long xwsz_t
Definition type.h:339
uint8_t xwu8_t
Definition type.h:194
unsigned long xwsq_t
Definition type.h:445
uint32_t xwu32_t
Definition type.h:266
#define XWBOP_BIT(n)
Definition xwbop.h:27
操作系统抽象层:互斥锁
操作系统抽象层:自旋锁
设备(所有设备的基类)
Definition device.h:127
基本驱动函数表(所有设备驱动的基类)
Definition device.h:113
设备栈DMA资源
Definition standard.h:108
UART配置
Definition controller.h:163
xwu32_t baudrate
Definition controller.h:164
struct xwds_uart_cfg::@26 bus
xwu8_t stopbits
Definition controller.h:167
BSP中需要提供的UART控制器驱动函数表
Definition controller.h:185
xwer_t(* eq)(struct xwds_uartc *, const xwu8_t *, xwsz_t *, xwds_uartc_eqcb_f)
Definition controller.h:194
struct xwds_driver base
Definition controller.h:186
xwer_t(* cfg)(struct xwds_uartc *, const struct xwds_uart_cfg *)
Definition controller.h:187
xwer_t(* tx)(struct xwds_uartc *, const xwu8_t *, xwsz_t *, xwtm_t)
Definition controller.h:189
xwer_t(* etx)(struct xwds_uartc *, const xwu8_t *, xwsz_t *)
Definition controller.h:192
xwer_t(* putc)(struct xwds_uartc *, const xwu8_t)
Definition controller.h:197
UART控制器
Definition controller.h:204
struct xwds_device dev
Definition controller.h:205
xwu8_t * q
Definition controller.h:222
const struct xwds_resource_dma * txdmarsc
Definition controller.h:210
const struct xwds_resource_dma * rxdmarsc
Definition controller.h:209
xwsz_t qsize
Definition controller.h:223
struct xwds_uartc::@27 rxq
xwsq_t idx
Definition controller.h:221
struct xwos_mtx txmtx
Definition controller.h:213
xwsq_t pos
Definition controller.h:219
xwsz_t tail
Definition controller.h:220
const struct xwds_uart_cfg * cfg
Definition controller.h:208
XWOS API:互斥锁
Definition mtx.h:78
XWOS API:信号量对象
Definition sem.h:91
XWOS API:自旋锁
Definition spinlock.h:69
操作系统抽象层:信号量
XWOS通用库:位操作
玄武设备栈:顶级头文件