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

玄武设备栈:I2C IO扩展芯片:TCA9539:驱动 更多...

driver.h 的引用(Include)关系图:
此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

const struct xwds_iochip_driver xwds_tca9539_drv
 TCA9539的驱动
 
xwer_t xwds_tca9539_drv_start (struct xwds_device *dev)
 TCA9539基本驱动:启动设备
 
xwer_t xwds_tca9539_drv_stop (struct xwds_device *dev)
 TCA9539基本驱动:停止设备
 
xwer_t xwds_tca9539_drv_suspend (struct xwds_device *dev)
 TCA9539基本驱动:暂停设备
 
xwer_t xwds_tca9539_drv_resume (struct xwds_device *dev)
 TCA9539基本驱动:继续设备
 
xwer_t xwds_tca9539_drv_gpio_req (struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmask, xwtm_t to)
 TCA9539 GPIO驱动:申请IO扩展芯片的GPIO
 
xwer_t xwds_tca9539_drv_gpio_rls (struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmask, xwtm_t to)
 TCA9539 GPIO驱动:释放IO扩展芯片的GPIO
 
xwer_t xwds_tca9539_drv_gpio_cfg (struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmsk, void *cfg, xwtm_t to)
 TCA9539 GPIO驱动:配置IO扩展芯片的GPIO
 
xwer_t xwds_tca9539_drv_gpio_set (struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmsk, xwtm_t to)
 TCA9539 GPIO驱动:将IO扩展芯片的GPIO设置为高电平
 
xwer_t xwds_tca9539_drv_gpio_reset (struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmsk, xwtm_t to)
 TCA9539 GPIO驱动:将IO扩展芯片的GPIO设置为低电平
 
xwer_t xwds_tca9539_drv_gpio_toggle (struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmsk, xwtm_t to)
 TCA9539 GPIO驱动:翻转IO扩展芯片的GPIO电平
 
xwer_t xwds_tca9539_drv_gpio_output (struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmsk, xwsq_t out, xwtm_t to)
 TCA9539 GPIO驱动:并行输出多个IO扩展芯片的GPIO
 
xwer_t xwds_tca9539_drv_gpio_input (struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmsk, xwsq_t *in, xwtm_t to)
 TCA9539 GPIO驱动:并行读取多个IO扩展芯片的GPIO
 
void xwds_tca9539_reset (struct xwds_tca9539 *tca9539, bool active)
 TCA9539 API:复位TCA9539
 
xwer_t xwds_tca9539_run (struct xwds_tca9539 *tca9539, xwds_eirq_f eisr, xwtm_t to)
 TCA9539 API:启动TCA9539
 
void xwds_tca9539_quit (struct xwds_tca9539 *tca9539)
 TCA9539 API:停止运行TCA9539
 
void xwds_tca9539_dump (struct xwds_tca9539 *tca9539, xwtm_t to)
 TCA9539 API:输出TCA9539的寄存器信息
 

详细描述

玄武设备栈:I2C IO扩展芯片:TCA9539:驱动

作者
注解
  • 所有API只可被单一线程访问。

在文件 driver.h 中定义.

函数说明

◆ xwds_tca9539_drv_stop()

xwer_t xwds_tca9539_drv_stop ( struct xwds_device dev)

TCA9539基本驱动:停止设备

<No error

在文件 driver.c111 行定义.

112{
113 struct xwds_tca9539 * tca9539;
114 const struct xwds_resource_gpio * gpiorsc;
115
116 tca9539 = xwds_cast(struct xwds_tca9539 *, dev);
117 gpiorsc = tca9539->gpiorsc.irq;
118 if (NULL != gpiorsc) {
119 xwds_gpio_rls(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
120 }
121 gpiorsc = tca9539->gpiorsc.rst;
122 if (NULL != gpiorsc) {
123 xwds_gpio_rls(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
124 }
125 return XWOK;
126}
#define xwds_cast(type, dev)
Definition standard.h:40
#define XWOK
No error
Definition errno.h:182
#define NULL
Definition type.h:28
xwer_t xwds_gpio_rls(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask)
XWDS API:释放SOC的GPIO
Definition gpio.c:63
设备栈GPIO资源
Definition standard.h:98
struct xwds_soc * soc
Definition standard.h:99
TCA9539对象
Definition device.h:127
const struct xwds_resource_gpio * irq
Definition device.h:131
const struct xwds_resource_gpio * rst
Definition device.h:130
struct xwds_tca9539::@39 gpiorsc
函数调用图:
这是这个函数的调用关系图:

◆ xwds_tca9539_drv_suspend()

xwer_t xwds_tca9539_drv_suspend ( struct xwds_device dev)

TCA9539基本驱动:暂停设备

在文件 driver.c130 行定义.

131{
132 return xwds_tca9539_drv_stop(dev);
133}
xwer_t xwds_tca9539_drv_stop(struct xwds_device *dev)
TCA9539基本驱动:停止设备
Definition driver.c:111
函数调用图:

◆ xwds_tca9539_drv_resume()

xwer_t xwds_tca9539_drv_resume ( struct xwds_device dev)

TCA9539基本驱动:继续设备

在文件 driver.c136 行定义.

137{
138 return xwds_tca9539_drv_start(dev);
139}
xwer_t xwds_tca9539_drv_start(struct xwds_device *dev)
TCA9539基本驱动:启动设备
Definition driver.c:77
函数调用图:

◆ xwds_tca9539_drv_gpio_req()

xwer_t xwds_tca9539_drv_gpio_req ( struct xwds_iochip iochip,
xwid_t  port,
xwsq_t  pinmask,
xwtm_t  to 
)

TCA9539 GPIO驱动:申请IO扩展芯片的GPIO

参数
[in]iochipIOCHIP对象指针
[in]portGPIO端口
[in]pinmask引脚的掩码
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ERANGEGPIO PORT错误
-EBUSYGPIO PIN已被使用
注解
  • 上下文:线程

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

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

< 去除未使用变量的警告

< 去除未使用变量的警告

< 去除未使用变量的警告

< 去除未使用变量的警告

<No error

在文件 driver.c144 行定义.

147{
148 XWOS_UNUSED(iochip);
149 XWOS_UNUSED(port);
150 XWOS_UNUSED(pinmask);
151 XWOS_UNUSED(to);
152 return XWOK;
153}
#define XWOS_UNUSED(x)
Definition standard.h:66

◆ xwds_tca9539_drv_gpio_rls()

xwer_t xwds_tca9539_drv_gpio_rls ( struct xwds_iochip iochip,
xwid_t  port,
xwsq_t  pinmask,
xwtm_t  to 
)

TCA9539 GPIO驱动:释放IO扩展芯片的GPIO

参数
[in]iochipIOCHIP对象指针
[in]portGPIO端口
[in]pinmask引脚的掩码
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ERANGEGPIO PORT错误
-EPERMGPIO PIN未被申请
注解
  • 上下文:线程

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

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

< 去除未使用变量的警告

< 去除未使用变量的警告

< 去除未使用变量的警告

< 去除未使用变量的警告

<No error

在文件 driver.c156 行定义.

159{
160 XWOS_UNUSED(iochip);
161 XWOS_UNUSED(port);
162 XWOS_UNUSED(pinmask);
163 XWOS_UNUSED(to);
164 return XWOK;
165}

◆ xwds_tca9539_drv_gpio_cfg()

xwer_t xwds_tca9539_drv_gpio_cfg ( struct xwds_iochip iochip,
xwid_t  port,
xwsq_t  pinmsk,
void *  cfg,
xwtm_t  to 
)

TCA9539 GPIO驱动:配置IO扩展芯片的GPIO

参数
[in]iochipIOCHIP对象指针
[in]portGPIO端口
[in]pinmask引脚的掩码
[in]cfgGPIO配置,取值依据不同IOCHIP
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ERANGEGPIO PORT错误
-ENOSYS不支持的API
注解
  • 上下文:线程

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

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

<No error

在文件 driver.c168 行定义.

171{
172 struct xwds_tca9539 * tca9539 = xwds_cast(struct xwds_tca9539 *, iochip);
173 const struct xwds_tca9539_pincfg * pincfg = cfg;
174 xwer_t rc;
175 xwu8_t oldval;
176 xwu8_t newval;
177 xwu8_t cfgval;
178 xwu8_t regmsk;
179
180 regmsk = (xwu8_t)pinmsk & 0xFFU;
182 cfgval = regmsk;
183 } else {
184 cfgval = regmsk ^ regmsk;
185 }
186 if (1U == port) {
187 rc = xwds_tca9539_read(tca9539, XWDS_TCA9539_REG_P1_CFG, &oldval, to);
188 if (rc < 0) {
189 goto err_read;
190 }
191 newval = oldval & (~regmsk);
192 newval |= cfgval;
193 rc = xwds_tca9539_write(tca9539, XWDS_TCA9539_REG_P1_CFG, newval, to);
194 if (rc < 0) {
195 goto err_write;
196 }
197 } else {
198 rc = xwds_tca9539_read(tca9539, XWDS_TCA9539_REG_P0_CFG, &oldval, to);
199 if (rc < 0) {
200 goto err_read;
201 }
202 newval = oldval & (~regmsk);
203 newval |= cfgval;
204 rc = xwds_tca9539_write(tca9539, XWDS_TCA9539_REG_P0_CFG, newval, to);
205 if (rc < 0) {
206 goto err_write;
207 }
208 }
209 return XWOK;
210
211err_write:
212err_read:
213 return rc;
214}
#define XWDS_TCA9539_REG_P1_CFG
Definition device.h:41
#define XWDS_TCA9539_REG_P0_CFG
Definition device.h:40
@ XWDS_TCA9539_PIN_DIRECTION_IN
Definition device.h:48
signed long xwer_t
Definition type.h:554
uint8_t xwu8_t
Definition type.h:194
static xwer_t xwds_tca9539_write(struct xwds_tca9539 *tca9539, xwu8_t reg, xwu8_t data, xwtm_t to)
Definition driver.c:32
static xwer_t xwds_tca9539_read(struct xwds_tca9539 *tca9539, xwu8_t reg, xwu8_t *buf, xwtm_t to)
Definition driver.c:53
TCA9539 PIN配置
Definition device.h:120
struct xwds_iochip iochip
Definition device.h:128
函数调用图:

◆ xwds_tca9539_drv_gpio_set()

xwer_t xwds_tca9539_drv_gpio_set ( struct xwds_iochip iochip,
xwid_t  port,
xwsq_t  pinmsk,
xwtm_t  to 
)

TCA9539 GPIO驱动:将IO扩展芯片的GPIO设置为高电平

参数
[in]iochipIOCHIP对象指针
[in]portGPIO端口
[in]pinmask引脚的掩码
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ERANGEGPIO PORT错误
-EPERMGPIO PIN未被申请
-ENOSYS不支持的API
注解
  • 上下文:线程

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

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

<No error

在文件 driver.c217 行定义.

220{
221 struct xwds_tca9539 * tca9539 = xwds_cast(struct xwds_tca9539 *, iochip);
222 xwer_t rc;
223 xwu8_t oldval;
224 xwu8_t newval;
225 xwu8_t regmsk;
226
227 regmsk = (xwu8_t)pinmsk & 0xFFU;
228 if (1U == port) {
229 rc = xwds_tca9539_read(tca9539,
230 XWDS_TCA9539_REG_P1_OUTPUT, &oldval, to);
231 if (rc < 0) {
232 goto err_read;
233 }
234 newval = oldval & (~regmsk);
235 newval |= regmsk;
236 rc = xwds_tca9539_write(tca9539,
237 XWDS_TCA9539_REG_P1_OUTPUT, newval, to);
238 if (rc < 0) {
239 goto err_write;
240 }
241 } else {
242 rc = xwds_tca9539_read(tca9539,
243 XWDS_TCA9539_REG_P0_OUTPUT, &oldval, to);
244 if (rc < 0) {
245 goto err_read;
246 }
247 newval = oldval & (~regmsk);
248 newval |= regmsk;
249 rc = xwds_tca9539_write(tca9539,
250 XWDS_TCA9539_REG_P0_OUTPUT, newval, to);
251 if (rc < 0) {
252 goto err_write;
253 }
254 }
255 return XWOK;
256
257err_write:
258err_read:
259 return rc;
260}
#define XWDS_TCA9539_REG_P0_OUTPUT
Definition device.h:36
#define XWDS_TCA9539_REG_P1_OUTPUT
Definition device.h:37
函数调用图:

◆ xwds_tca9539_drv_gpio_reset()

xwer_t xwds_tca9539_drv_gpio_reset ( struct xwds_iochip iochip,
xwid_t  port,
xwsq_t  pinmsk,
xwtm_t  to 
)

TCA9539 GPIO驱动:将IO扩展芯片的GPIO设置为低电平

参数
[in]iochipIOCHIP对象指针
[in]portGPIO端口
[in]pinmask引脚的掩码
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ERANGEGPIO PORT错误
-EPERMGPIO PIN未被申请
-ENOSYS不支持的API
注解
  • 上下文:线程

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

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

<No error

在文件 driver.c263 行定义.

266{
267 struct xwds_tca9539 * tca9539 = xwds_cast(struct xwds_tca9539 *, iochip);
268 xwer_t rc;
269 xwu8_t oldval;
270 xwu8_t newval;
271 xwu8_t regmsk;
272
273 regmsk = (xwu8_t)pinmsk & 0xFFU;
274 if (1U == port) {
275 rc = xwds_tca9539_read(tca9539,
276 XWDS_TCA9539_REG_P1_OUTPUT, &oldval, to);
277 if (rc < 0) {
278 goto err_read;
279 }
280 newval = oldval & (~regmsk);
281 rc = xwds_tca9539_write(tca9539,
282 XWDS_TCA9539_REG_P1_OUTPUT, newval, to);
283 if (rc < 0) {
284 goto err_write;
285 }
286 } else {
287 rc = xwds_tca9539_read(tca9539,
288 XWDS_TCA9539_REG_P0_OUTPUT, &oldval, to);
289 if (rc < 0) {
290 goto err_read;
291 }
292 newval = oldval & (~regmsk);
293 rc = xwds_tca9539_write(tca9539,
294 XWDS_TCA9539_REG_P0_OUTPUT, newval, to);
295 if (rc < 0) {
296 goto err_write;
297 }
298 }
299 return XWOK;
300
301err_write:
302err_read:
303 return rc;
304}
函数调用图:

◆ xwds_tca9539_drv_gpio_toggle()

xwer_t xwds_tca9539_drv_gpio_toggle ( struct xwds_iochip iochip,
xwid_t  port,
xwsq_t  pinmsk,
xwtm_t  to 
)

TCA9539 GPIO驱动:翻转IO扩展芯片的GPIO电平

参数
[in]iochipIOCHIP对象指针
[in]portGPIO端口
[in]pinmask引脚的掩码
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ERANGEGPIO PORT错误
-EPERMGPIO PIN未被申请
-ENOSYS不支持的API
注解
  • 上下文:线程

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

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

<No error

在文件 driver.c307 行定义.

310{
311 struct xwds_tca9539 * tca9539 = xwds_cast(struct xwds_tca9539 *, iochip);
312 xwer_t rc;
313 xwu8_t oldval;
314 xwu8_t newval;
315 xwu8_t regmsk;
316
317 regmsk = (xwu8_t)pinmsk & 0xFFU;
318 if (1U == port) {
319 rc = xwds_tca9539_read(tca9539,
320 XWDS_TCA9539_REG_P1_OUTPUT, &oldval, to);
321 if (rc < 0) {
322 goto err_read;
323 }
324 newval = oldval & (~regmsk);
325 newval ^= regmsk;
326 rc = xwds_tca9539_write(tca9539,
327 XWDS_TCA9539_REG_P1_OUTPUT, newval, to);
328 if (rc < 0) {
329 goto err_write;
330 }
331 } else {
332 rc = xwds_tca9539_read(tca9539,
333 XWDS_TCA9539_REG_P0_OUTPUT, &oldval, to);
334 if (rc < 0) {
335 goto err_read;
336 }
337 newval = oldval & (~regmsk);
338 newval ^= regmsk;
339 rc = xwds_tca9539_write(tca9539,
340 XWDS_TCA9539_REG_P0_OUTPUT, newval, to);
341 if (rc < 0) {
342 goto err_write;
343 }
344 }
345 return XWOK;
346
347err_write:
348err_read:
349 return rc;
350}
函数调用图:

◆ xwds_tca9539_drv_gpio_output()

xwer_t xwds_tca9539_drv_gpio_output ( struct xwds_iochip iochip,
xwid_t  port,
xwsq_t  pinmsk,
xwsq_t  out,
xwtm_t  to 
)

TCA9539 GPIO驱动:并行输出多个IO扩展芯片的GPIO

参数
[in]iochipIOCHIP对象指针
[in]portGPIO端口
[in]pinmask引脚的掩码
[in]out输出值
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ERANGEGPIO PORT错误
-EPERMGPIO PIN未被申请
-ENOSYS不支持的API
注解
  • 上下文:线程

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

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

<No error

在文件 driver.c353 行定义.

356{
357 struct xwds_tca9539 * tca9539 = xwds_cast(struct xwds_tca9539 *, iochip);
358 xwer_t rc;
359 xwu8_t oldval;
360 xwu8_t newval;
361 xwu8_t regmsk;
362
363 regmsk = (xwu8_t)pinmsk & 0xFFU;
364 if (1U == port) {
365 rc = xwds_tca9539_read(tca9539,
366 XWDS_TCA9539_REG_P1_OUTPUT, &oldval, to);
367 if (rc < 0) {
368 goto err_read;
369 }
370 newval = oldval & (~regmsk);
371 newval |= (regmsk & (xwu8_t)out);
372 rc = xwds_tca9539_write(tca9539,
373 XWDS_TCA9539_REG_P1_OUTPUT, newval, to);
374 if (rc < 0) {
375 goto err_write;
376 }
377 } else {
378 rc = xwds_tca9539_read(tca9539,
379 XWDS_TCA9539_REG_P0_OUTPUT, &oldval, to);
380 if (rc < 0) {
381 goto err_read;
382 }
383 newval = oldval & (~regmsk);
384 newval |= (regmsk & (xwu8_t)out);
385 rc = xwds_tca9539_write(tca9539,
386 XWDS_TCA9539_REG_P0_OUTPUT, newval, to);
387 if (rc < 0) {
388 goto err_write;
389 }
390 }
391 return XWOK;
392
393err_write:
394err_read:
395 return rc;
396}
函数调用图:

◆ xwds_tca9539_drv_gpio_input()

xwer_t xwds_tca9539_drv_gpio_input ( struct xwds_iochip iochip,
xwid_t  port,
xwsq_t  pinmsk,
xwsq_t in,
xwtm_t  to 
)

TCA9539 GPIO驱动:并行读取多个IO扩展芯片的GPIO

参数
[in]iochipIOCHIP对象指针
[in]portGPIO端口
[in]pinmask引脚的掩码
[out]inbuf输入缓冲区
[in]to期望唤醒的时间点
返回
错误码
返回值
XWOK没有错误
-EFAULT无效指针
-ERANGEGPIO PORT错误
-EPERMGPIO PIN未被申请
-ENOSYS不支持的API
注解
  • 上下文:线程

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

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

<No error

在文件 driver.c399 行定义.

402{
403 struct xwds_tca9539 * tca9539 = xwds_cast(struct xwds_tca9539 *, iochip);
404 xwer_t rc;
405 xwu8_t regval;
406 xwu8_t regmsk;
407
408 regmsk = (xwu8_t)pinmsk & 0xFFU;
409 if (1U == port) {
410 rc = xwds_tca9539_read(tca9539,
411 XWDS_TCA9539_REG_P1_INPUT, &regval, to);
412 if (rc < 0) {
413 goto err_read;
414 }
415 *in = regval & regmsk;
416 } else {
417 rc = xwds_tca9539_read(tca9539,
418 XWDS_TCA9539_REG_P0_INPUT, &regval, to);
419 if (rc < 0) {
420 goto err_read;
421 }
422 *in = regval & regmsk;
423 }
424 return XWOK;
425
426err_read:
427 return rc;
428}
#define XWDS_TCA9539_REG_P1_INPUT
Definition device.h:35
#define XWDS_TCA9539_REG_P0_INPUT
Definition device.h:34
函数调用图:

◆ xwds_tca9539_reset()

void xwds_tca9539_reset ( struct xwds_tca9539 tca9539,
bool  active 
)

TCA9539 API:复位TCA9539

参数
[in]tca9539TCA9539对象的指针
[in]active是否使能复位
注解
  • 上下文:线程、中断底半部、线程

在文件 driver.c455 行定义.

456{
457 const struct xwds_resource_gpio * gpiorsc;
458
459 gpiorsc = tca9539->gpiorsc.rst;
460 if (gpiorsc) {
461 if (active) {
462 xwds_gpio_reset(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
463 } else {
464 xwds_gpio_set(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
465 }
466 }
467}
xwer_t xwds_gpio_reset(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask)
XWDS API:将SOC的GPIO设置为低电平
Definition gpio.c:170
xwer_t xwds_gpio_set(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask)
XWDS API:将SOC的GPIO设置为高电平
Definition gpio.c:131
函数调用图:
这是这个函数的调用关系图:

◆ xwds_tca9539_run()

xwer_t xwds_tca9539_run ( struct xwds_tca9539 tca9539,
xwds_eirq_f  eisr,
xwtm_t  to 
)

TCA9539 API:启动TCA9539

参数
[in]tca9539I2C TCA9539对象的指针
[in]eisr中断处理函数
[in]to期望唤醒的时间点 @retrun 错误码
注解
  • 上下文:线程

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

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

<No error

在文件 driver.c470 行定义.

471{
472 const struct xwds_tca9539_cfg * chipcfg;
473 const struct xwds_resource_gpio * gpiorsc;
474 xwer_t rc;
475
476 chipcfg = (const struct xwds_tca9539_cfg *)tca9539->iochip.gpio.cfg;
477 rc = xwds_tca9539_write(tca9539,
478 XWDS_TCA9539_REG_P0_CFG, chipcfg->p0.direction.u8,
479 to);
480 if (rc < 0) {
481 goto err_write;
482 }
483 rc = xwds_tca9539_write(tca9539,
484 XWDS_TCA9539_REG_P1_CFG, chipcfg->p1.direction.u8,
485 to);
486 if (rc < 0) {
487 goto err_write;
488 }
489 rc = xwds_tca9539_write(tca9539,
490 XWDS_TCA9539_REG_P0_OUTPUT, chipcfg->p0.out.u8,
491 to);
492 if (rc < 0) {
493 goto err_write;
494 }
495 rc = xwds_tca9539_write(tca9539,
496 XWDS_TCA9539_REG_P1_OUTPUT, chipcfg->p1.out.u8,
497 to);
498 if (rc < 0) {
499 goto err_write;
500 }
501 gpiorsc = tca9539->gpiorsc.irq;
502 if (NULL != gpiorsc) {
503 rc = xwds_eirq_req(gpiorsc->soc,
504 gpiorsc->port, gpiorsc->pinmask, tca9539->eirq,
506 eisr, tca9539);
507 if (rc < 0) {
508 goto err_eirq_req;
509 }
510 }
511 return XWOK;
512
513err_eirq_req:
514err_write:
515 return rc;
516}
xwer_t xwds_eirq_req(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask, xwid_t eiid, xwsq_t eiflag, xwds_eirq_f isr, xwds_eirq_arg_t arg)
XWDS API:申请外部中断
Definition eirq.c:26
@ XWDS_SOC_EIF_TM_FALLING
Definition eirq.h:42
@ XWDS_SOC_EIF_WKUP
Definition eirq.h:49
struct xwds_iochip::@20 gpio
void * cfg
Definition chip.h:108
TCA9539配置
Definition device.h:56
xwid_t eirq
Definition device.h:133
函数调用图:

◆ xwds_tca9539_quit()

void xwds_tca9539_quit ( struct xwds_tca9539 tca9539)

TCA9539 API:停止运行TCA9539

参数
[in]tca9539I2C TCA9539对象的指针
[in]to期望唤醒的时间点
注解
  • 上下文:中断、中断底半部、线程

在文件 driver.c519 行定义.

520{
521 const struct xwds_resource_gpio * gpiorsc;
522
523 gpiorsc = tca9539->gpiorsc.irq;
524 if (NULL != gpiorsc) {
525 xwds_eirq_rls(gpiorsc->soc,
526 gpiorsc->port, gpiorsc->pinmask, tca9539->eirq);
527 }
528}
xwer_t xwds_eirq_rls(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask, xwid_t eiid)
XWDS API:释放外部中断
Definition eirq.c:80
函数调用图:

◆ xwds_tca9539_dump()

void xwds_tca9539_dump ( struct xwds_tca9539 tca9539,
xwtm_t  to 
)

TCA9539 API:输出TCA9539的寄存器信息

参数
[in]tca9539I2C TCA9539对象的指针
[in]to期望唤醒的时间点
注解
  • 上下文:线程

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

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

在文件 driver.c531 行定义.

532{
533 xwer_t rc;
534 xwu8_t val[8];
535
536 rc = xwds_tca9539_read(tca9539,
537 XWDS_TCA9539_REG_P0_INPUT, &val[0], to);
538 if (rc < 0) {
539 goto err_read;
540 }
541 rc = xwds_tca9539_read(tca9539,
542 XWDS_TCA9539_REG_P1_INPUT, &val[1], to);
543 if (rc < 0) {
544 goto err_read;
545 }
546 rc = xwds_tca9539_read(tca9539,
547 XWDS_TCA9539_REG_P0_OUTPUT, &val[2], to);
548 if (rc < 0) {
549 goto err_read;
550 }
551 rc = xwds_tca9539_read(tca9539,
552 XWDS_TCA9539_REG_P1_OUTPUT, &val[3], to);
553 if (rc < 0) {
554 goto err_read;
555 }
556 rc = xwds_tca9539_read(tca9539,
557 XWDS_TCA9539_REG_P0_POLINV, &val[4], to);
558 if (rc < 0) {
559 goto err_read;
560 }
561 rc = xwds_tca9539_read(tca9539,
562 XWDS_TCA9539_REG_P1_POLINV, &val[5], to);
563 if (rc < 0) {
564 goto err_read;
565 }
566 rc = xwds_tca9539_read(tca9539,
567 XWDS_TCA9539_REG_P0_CFG, &val[6], to);
568 if (rc < 0) {
569 goto err_read;
570 }
571 rc = xwds_tca9539_read(tca9539,
572 XWDS_TCA9539_REG_P1_CFG, &val[7], to);
573 if (rc < 0) {
574 goto err_read;
575 }
576 xwlogf(INFO, LOGTAG,
577 "[ID:%d] 0x%X, 0x%X, 0x%X, 0x%X, 0x%X, 0x%X, 0x%X, 0x%X\r\n",
578 tca9539->iochip.bc.i2cp.dev.id,
579 val[0], val[1], val[2], val[3],
580 val[4], val[5], val[6], val[7]);
581err_read:
582 return;
583}
#define XWDS_TCA9539_REG_P0_POLINV
Definition device.h:38
#define XWDS_TCA9539_REG_P1_POLINV
Definition device.h:39
#define xwlogf(lv, tag, fmt,...)
格式化日志,并输出
Definition xwlog.h:119
#define LOGTAG
Definition driver.c:29
xwid_t id
Definition device.h:131
struct xwds_device dev
Definition peripheral.h:49
struct xwds_i2cp i2cp
Definition chip.h:99
union xwds_iochip::@19 bc
函数调用图:

变量说明

◆ xwds_tca9539_drv

const struct xwds_iochip_driver xwds_tca9539_drv
extern

TCA9539的驱动

在文件 driver.c431 行定义.