XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
controller.c 文件参考

玄武设备栈:UART控制器 更多...

#include <xwcd/ds/standard.h>
#include <string.h>
#include <xwos/osal/lock/spinlock.h>
#include <xwos/osal/lock/mtx.h>
#include <xwos/osal/sync/sem.h>
#include <xwcd/ds/uart/controller.h>
controller.c 的引用(Include)关系图:

浏览源代码.

函数

static xwer_t xwds_uartc_vop_probe (struct xwds_uartc *uartc)
 XWDS VOP:探测UART控制器
 
static xwer_t xwds_uartc_vop_remove (struct xwds_uartc *uartc)
 XWDS VOP:移除UART控制器
 
static xwer_t xwds_uartc_vop_start (struct xwds_uartc *uartc)
 XWDS VOP:启动UART控制器
 
static xwer_t xwds_uartc_vop_stop (struct xwds_uartc *uartc)
 XWDS VOP:停止UART控制器
 
static xwer_t xwds_uartc_vop_suspend (struct xwds_uartc *uartc)
 XWDS VOP:暂停UART控制器
 
static xwer_t xwds_uartc_vop_resume (struct xwds_uartc *uartc)
 XWDS VOP:继续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
 
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 pub)
 XWDS Driver Callback:发布数据到接收队列
 

变量

const struct xwds_virtual_operation xwds_uartc_vop
 

详细描述

玄武设备栈:UART控制器

作者
注解
  • 方案1:
    • 中断优先级:定时器中断的优先级 == DMA中断的优先级
    • 定时器中断函数与DMA中断函数运行在同一个CPU上
  • 方案2:
    • 中断优先级:定时器中断的优先级 < DMA半完成与完成中断的优先级
    • 定时器中断中,获取DMA剩余计数前关闭DMA中断或总中断开关
    • 定时器中断函数与DMA中断函数运行在同一个CPU上

在文件 controller.c 中定义.

函数说明

◆ xwds_uartc_vop_probe()

static xwer_t xwds_uartc_vop_probe ( struct xwds_uartc uartc)
static

XWDS VOP:探测UART控制器

参数
[in]uartcUART控制器对象指针

<No error

在文件 controller.c115 行定义.

116{
117 xwer_t rc;
118
119 xwos_splk_init(&uartc->rxq.lock);
120 rc = xwos_sem_init(&uartc->rxq.sem, 0, 1);
121 if (rc < 0) {
122 goto err_sem_init;
123 }
125 if (rc < 0) {
126 goto err_txmtx_init;
127 }
128 rc = xwds_device_vop_probe(&uartc->dev);
129 if (rc < 0) {
130 goto err_dev_probe;
131 }
132 return XWOK;
133
134err_dev_probe:
135 xwos_mtx_fini(&uartc->txmtx);
136err_txmtx_init:
137 xwos_sem_fini(&uartc->rxq.sem);
138err_sem_init:
139 return rc;
140}
xwer_t xwds_device_vop_probe(struct xwds_device *dev)
设备基本操作函数:探测设备
Definition device.c:67
#define XWOK
No error
Definition errno.h:182
signed long xwer_t
Definition type.h:554
static xwer_t xwos_mtx_init(struct xwos_mtx *mtx, xwpr_t sprio)
XWOS API:静态方式初始化互斥锁
Definition mtx.h:111
static xwer_t xwos_mtx_fini(struct xwos_mtx *mtx)
XWOS API:销毁静态方式初始化的互斥锁
Definition mtx.h:126
static void xwos_splk_init(struct xwos_splk *spl)
XWOS API:初始化自旋锁
Definition spinlock.h:89
#define XWOS_SKD_PRIORITY_RT_MIN
XWOS API:最小实时优先级
Definition skd.h:89
static xwer_t xwos_sem_fini(struct xwos_sem *sem)
XWOS API:销毁静态方式初始化的信号量对象
Definition sem.h:140
static xwer_t xwos_sem_init(struct xwos_sem *sem, xwssq_t val, xwssq_t max)
XWOS API:静态方式初始化信号量对象
Definition sem.h:125
struct xwds_device dev
Definition controller.h:194
struct xwos_splk lock
Definition controller.h:207
struct xwos_sem sem
Definition controller.h:206
struct xwds_uartc::@27 rxq
struct xwos_mtx txmtx
Definition controller.h:202
函数调用图:

◆ xwds_uartc_vop_remove()

static xwer_t xwds_uartc_vop_remove ( struct xwds_uartc uartc)
static

XWDS VOP:移除UART控制器

参数
[in]uartcUART控制器对象指针

<No error

在文件 controller.c147 行定义.

148{
149 xwer_t rc;
150
151 rc = xwds_device_vop_remove(&uartc->dev);
152 if (rc < 0) {
153 goto err_dev_vop_remove;
154 }
155
156 xwos_mtx_fini(&uartc->txmtx);
157 xwos_sem_fini(&uartc->rxq.sem);
158 return XWOK;
159
160err_dev_vop_remove:
161 return rc;
162}
xwer_t xwds_device_vop_remove(struct xwds_device *dev)
设备基本操作函数:删除设备
Definition device.c:86
函数调用图:

◆ xwds_uartc_vop_resume()

static xwer_t xwds_uartc_vop_resume ( struct xwds_uartc uartc)
static

XWDS VOP:继续UART控制器

参数
[in]uartcUART控制器对象指针

在文件 controller.c215 行定义.

216{
217 xwer_t rc;
218
219 memset(uartc->rxq.mem, 0, sizeof(uartc->rxq.mem));
220 uartc->rxq.pos = 0;
221 uartc->rxq.tail = 0;
222 rc = xwds_device_vop_resume(&uartc->dev);
223 return rc;
224}
xwer_t xwds_device_vop_resume(struct xwds_device *dev)
设备基本操作函数:继续设备
Definition device.c:163
xwu8_t mem[(128U)]
Definition controller.h:211
xwsq_t pos
Definition controller.h:208
xwsz_t tail
Definition controller.h:209
函数调用图:

◆ xwds_uartc_vop_start()

static xwer_t xwds_uartc_vop_start ( struct xwds_uartc uartc)
static

XWDS VOP:启动UART控制器

参数
[in]uartcUART控制器对象指针

在文件 controller.c169 行定义.

170{
171 xwer_t rc;
172
173 memset(uartc->rxq.mem, 0, sizeof(uartc->rxq.mem));
174 uartc->rxq.pos = 0;
175 uartc->rxq.tail = 0;
176 uartc->rxq.idx = 0;
177
178 rc = xwds_device_vop_start(&uartc->dev);
179 return rc;
180}
xwer_t xwds_device_vop_start(struct xwds_device *dev)
设备基本操作函数:启动设备
Definition device.c:105
xwsq_t idx
Definition controller.h:210
函数调用图:

◆ xwds_uartc_vop_stop()

static xwer_t xwds_uartc_vop_stop ( struct xwds_uartc uartc)
static

XWDS VOP:停止UART控制器

参数
[in]uartcUART控制器对象指针

在文件 controller.c187 行定义.

188{
189 xwer_t rc;
190
191 rc = xwds_device_vop_stop(&uartc->dev);
192 return rc;
193}
xwer_t xwds_device_vop_stop(struct xwds_device *dev)
设备基本操作函数:停止设备
Definition device.c:124
函数调用图:

◆ xwds_uartc_vop_suspend()

static xwer_t xwds_uartc_vop_suspend ( struct xwds_uartc uartc)
static

XWDS VOP:暂停UART控制器

参数
[in]uartcUART控制器对象指针

在文件 controller.c202 行定义.

203{
204 xwer_t rc;
205
206 rc = xwds_device_vop_suspend(&uartc->dev);
207 return rc;
208}
xwer_t xwds_device_vop_suspend(struct xwds_device *dev)
设备基本操作函数:暂停设备
Definition device.c:144
函数调用图:

变量说明

◆ xwds_uartc_vop

const struct xwds_virtual_operation xwds_uartc_vop
初始值:
= {
.probe = (void *)xwds_uartc_vop_probe,
.remove = (void *)xwds_uartc_vop_remove,
.start = (void *)xwds_uartc_vop_start,
.stop = (void *)xwds_uartc_vop_stop,
.suspend = (void *)xwds_uartc_vop_suspend,
.resume = (void *)xwds_uartc_vop_resume,
}
static xwer_t xwds_uartc_vop_probe(struct xwds_uartc *uartc)
XWDS VOP:探测UART控制器
Definition controller.c:115
static xwer_t xwds_uartc_vop_resume(struct xwds_uartc *uartc)
XWDS VOP:继续UART控制器
Definition controller.c:215
static xwer_t xwds_uartc_vop_stop(struct xwds_uartc *uartc)
XWDS VOP:停止UART控制器
Definition controller.c:187
static xwer_t xwds_uartc_vop_remove(struct xwds_uartc *uartc)
XWDS VOP:移除UART控制器
Definition controller.c:147
static xwer_t xwds_uartc_vop_start(struct xwds_uartc *uartc)
XWDS VOP:启动UART控制器
Definition controller.c:169
static xwer_t xwds_uartc_vop_suspend(struct xwds_uartc *uartc)
XWDS VOP:暂停UART控制器
Definition controller.c:202

在文件 controller.c56 行定义.