XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
SPI主机模式控制器
SPI主机模式控制器 的协作图:

结构体

struct  xwds_spim_driver
 BSP中需要提供的SPI主机模式控制器驱动函数表 更多...
 
struct  xwds_spim
 SPI主机模式控制器 更多...
 

函数

void xwds_spim_construct (struct xwds_spim *spim)
 XWDS API:SPI主机模式控制器对象的构造函数
 
void xwds_spim_destruct (struct xwds_spim *spim)
 XWDS API:SPI主机模式控制器对象的析构函数
 
xwer_t xwds_spim_grab (struct xwds_spim *spim)
 XWDS API:增加对象的引用计数
 
xwer_t xwds_spim_put (struct xwds_spim *spim)
 XWDS API:减少对象的引用计数
 
xwer_t xwds_spim_xfer (struct xwds_spim *spim, xwid_t cfgid, const xwu8_t txd[], xwu8_t *rxb, xwsz_t *size, xwtm_t to)
 XWDS API:启动SPI总线传输
 
xwer_t xwds_spim_abort (struct xwds_spim *spim, xwtm_t to)
 XWDS API:中止SPI总线传输
 

详细描述

函数说明

◆ xwds_spim_abort()

xwer_t xwds_spim_abort ( struct xwds_spim spim,
xwtm_t  to 
)

XWDS API:中止SPI总线传输

参数
[in]spimSPI主机控制器对象指针
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EINVAL设备对象不可引用
-ETIMEDOUT超时
注解
  • 上下文:线程
  • 异步函数

to 表示等待超时的时间点:

  • to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
  • 如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

<No error

在文件 master.c241 行定义.

242{
243 const struct xwds_spim_driver * drv;
244 xwer_t rc;
245
246 XWDS_VALIDATE(spim, "nullptr", -EFAULT);
247
248 rc = xwds_spim_grab(spim);
249 if (rc < 0) {
250 goto err_spim_grab;
251 }
252 drv = xwds_cast(const struct xwds_spim_driver *, spim->dev.drv);
253 if ((drv) && (drv->abort)) {
254 rc = drv->abort(spim, to);
255 } else {
256 rc = -ENOSYS;
257 }
258 if (rc < 0) {
259 goto err_drv_abort;
260 }
261 xwds_spim_put(spim);
262 return XWOK;
263
264err_drv_abort:
265 xwds_spim_put(spim);
266err_spim_grab:
267 return rc;
268}
xwer_t xwds_spim_put(struct xwds_spim *spim)
XWDS API:减少对象的引用计数
Definition master.c:81
xwer_t xwds_spim_grab(struct xwds_spim *spim)
XWDS API:增加对象的引用计数
Definition master.c:75
#define xwds_cast(type, dev)
Definition standard.h:40
#define XWDS_VALIDATE(exp, errstr,...)
Definition standard.h:51
#define EFAULT
Bad address
Definition errno.h:44
#define ENOSYS
Function not implemented
Definition errno.h:110
#define XWOK
No error
Definition errno.h:182
signed long xwer_t
Definition type.h:554
const struct xwds_driver * drv
Definition device.h:133
BSP中需要提供的SPI主机模式控制器驱动函数表
Definition master.h:45
xwer_t(* abort)(struct xwds_spim *, xwtm_t)
Definition master.h:50
struct xwds_device dev
Definition master.h:58
函数调用图:

◆ xwds_spim_construct()

void xwds_spim_construct ( struct xwds_spim spim)

XWDS API:SPI主机模式控制器对象的构造函数

参数
[in]spimSPI主机模式控制器对象指针

在文件 master.c59 行定义.

60{
62 spim->dev.vop = &xwds_spim_vop;
63}
void xwds_device_construct(struct xwds_device *dev)
XWDS API:设备的构造函数
Definition device.c:48
const struct xwds_virtual_operation xwds_spim_vop
Definition master.c:46
const struct xwds_virtual_operation * vop
Definition device.h:138
函数调用图:

◆ xwds_spim_destruct()

void xwds_spim_destruct ( struct xwds_spim spim)

XWDS API:SPI主机模式控制器对象的析构函数

参数
[in]spimSPI主机模式控制器对象指针

在文件 master.c66 行定义.

67{
68 struct xwds_device * dev;
69
70 dev = xwds_cast(struct xwds_device *, spim);
72}
void xwds_device_destruct(struct xwds_device *dev)
XWDS API:设备的析构函数
Definition device.c:56
设备(所有设备的基类)
Definition device.h:127
函数调用图:

◆ xwds_spim_grab()

xwer_t xwds_spim_grab ( struct xwds_spim spim)

XWDS API:增加对象的引用计数

参数
[in]spimSPI主机模式控制器对象指针

在文件 master.c75 行定义.

76{
77 return xwds_device_grab(&spim->dev);
78}
static xwer_t xwds_device_grab(struct xwds_device *dev)
XWDS API:增加对象的引用计数
Definition device.h:268
函数调用图:
这是这个函数的调用关系图:

◆ xwds_spim_put()

xwer_t xwds_spim_put ( struct xwds_spim spim)

XWDS API:减少对象的引用计数

参数
[in]spimSPI主机模式控制器对象指针

在文件 master.c81 行定义.

82{
83 return xwds_device_put(&spim->dev);
84}
static xwer_t xwds_device_put(struct xwds_device *dev)
XWDS API:减少对象的引用计数
Definition device.h:281
函数调用图:
这是这个函数的调用关系图:

◆ xwds_spim_xfer()

xwer_t xwds_spim_xfer ( struct xwds_spim spim,
xwid_t  cfgid,
const xwu8_t  txd[],
xwu8_t rxb,
xwsz_t size,
xwtm_t  to 
)

XWDS API:启动SPI总线传输

参数
[in]spimSPI主机模式控制器对象指针
[in]cfgidSPI总线配置的ID
[in]txd发送数据缓冲区,可为NULL表示不发送数据
[out]rxb接收数据缓冲区,可为NULL表示不接收数据
[in,out]size指向缓冲区的指针,此缓冲区:
  • (I) 作为输入时,表示缓冲区大小(单位:字节)
  • (O) 作为输出时,返回实际传输的数据大小
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ECHRNG配置ID不在配置表范围内
-EINVAL参数错误
-EBUSY总线繁忙
-EIO传输错误
-ECANCELED传输被取消
-ETIMEDOUT超时
注解
  • 上下文:线程

to 表示等待超时的时间点:

  • to 通常是未来的时间,即 当前系统时间 + delta , 可以使用 xwtm_ft(delta) 表示;
  • 如果 to 是过去的时间点,将直接返回 -ETIMEDOUT

<No error

在文件 master.c195 行定义.

198{
199 const struct xwds_spim_driver * drv;
200 xwer_t rc;
201
202 XWDS_VALIDATE(spim, "nullptr", -EFAULT);
203 XWDS_VALIDATE(((txd) || (rxb)), "invalid", -EINVAL);
204 XWDS_VALIDATE((size), "nullptr", -EFAULT);
205
206 rc = xwds_spim_grab(spim);
207 if (rc < 0) {
208 goto err_spim_grab;
209 }
210 if (cfgid >= spim->buscfg_num) {
211 rc = -ECHRNG;
212 goto err_chrng;
213 }
214 rc = xwos_mtx_lock_to(&spim->xfer.apimtx, to);
215 if (rc < 0) {
216 goto err_spim_lock;
217 }
218 drv = xwds_cast(const struct xwds_spim_driver *, spim->dev.drv);
219 if ((drv) && (drv->xfer)) {
220 rc = drv->xfer(spim, cfgid, txd, rxb, size, to);
221 } else {
222 rc = -ENOSYS;
223 }
224 if (rc < 0) {
225 goto err_drv_xfer;
226 }
228 xwds_spim_put(spim);
229 return XWOK;
230
231err_drv_xfer:
233err_spim_lock:
234err_chrng:
235 xwds_spim_put(spim);
236err_spim_grab:
237 return rc;
238}
#define ECHRNG
Channel number out of range
Definition errno.h:67
#define EINVAL
Invalid argument
Definition errno.h:52
static xwer_t xwos_mtx_lock_to(struct xwos_mtx *mtx, xwtm_t to)
XWOS API:限时等待上锁互斥锁
Definition mtx.h:329
static xwer_t xwos_mtx_unlock(struct xwos_mtx *mtx)
XWOS API:解锁互斥锁
Definition mtx.h:279
xwer_t(* xfer)(struct xwds_spim *, xwid_t, const xwu8_t[], xwu8_t *, xwsz_t *, xwtm_t)
Definition master.h:47
xwsz_t buscfg_num
Definition master.h:62
struct xwds_spim::@25 xfer
struct xwos_mtx apimtx
Definition master.h:66
函数调用图: