XWOS API  4.0
XWOS C/C++ API参考手册
载入中...
搜索中...
未找到
driver.c
浏览该文件的文档.
1
21#include <xwos/standard.h>
22#include <xwos/lib/xwlog.h>
23#include <xwcd/ds/soc/gpio.h>
24#include <xwcd/ds/soc/eirq.h>
28
29#define LOGTAG "TCA9539"
30
31static __xwbsp_code
33 xwu8_t reg, xwu8_t data,
34 xwtm_t to)
35{
36 xwer_t rc;
37 struct xwds_i2cm * bus;
38 struct xwds_i2c_msg msg;
39 xwu8_t txdata[2];
40
41 bus = tca9539->iochip.bc.i2cp.bus;
42 txdata[0] = (xwu8_t)reg;
43 txdata[1] = (xwu8_t)data;
44 msg.addr = tca9539->iochip.bc.i2cp.addr;
46 msg.data = txdata;
47 msg.size = sizeof(txdata);
48 rc = xwds_i2cm_xfer(bus, &msg, 1U, to);
49 return rc;
50}
51
52static __xwbsp_code
54 xwu8_t reg, xwu8_t * buf,
55 xwtm_t to)
56{
57 xwer_t rc;
58 struct xwds_i2cm * bus;
59 struct xwds_i2c_msg msg[2];
60
61 bus = tca9539->iochip.bc.i2cp.bus;
62 msg[0].addr = tca9539->iochip.bc.i2cp.addr;
64 msg[0].data = &reg;
65 msg[0].size = 1U;
66 msg[1].addr = msg[0].addr;
69 msg[1].data = buf;
70 msg[1].size = 1U;
71 rc = xwds_i2cm_xfer(bus, msg, 2U, to);
72 return rc;
73}
74
75/******** ******** base driver ******** ********/
78{
79 struct xwds_tca9539 * tca9539;
80 const struct xwds_resource_gpio * gpiorsc;
81 xwer_t rc;
82
83 tca9539 = xwds_cast(struct xwds_tca9539 *, dev);
84 gpiorsc = tca9539->gpiorsc.rst;
85 if (NULL != gpiorsc) {
86 rc = xwds_gpio_req(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
87 if (rc < 0) {
88 goto err_gpio_req_rst;
89 }
90 xwds_tca9539_reset(tca9539, true);
91 }
92 gpiorsc = tca9539->gpiorsc.irq;
93 if (NULL != gpiorsc) {
94 rc = xwds_gpio_req(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
95 if (rc < 0) {
96 goto err_gpio_req_irq;
97 }
98 }
99 return XWOK;
100
101err_gpio_req_irq:
102 gpiorsc = tca9539->gpiorsc.rst;
103 if (NULL != gpiorsc) {
104 xwds_gpio_rls(gpiorsc->soc, gpiorsc->port, gpiorsc->pinmask);
105 }
106err_gpio_req_rst:
107 return rc;
108}
109
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}
127
128#if defined(XWCDCFG_ds_PM) && (1 == XWCDCFG_ds_PM)
131{
132 return xwds_tca9539_drv_stop(dev);
133}
134
137{
138 return xwds_tca9539_drv_start(dev);
139}
140#endif
141
142/******** ******** gpio operation driver ******** ********/
146 xwtm_t to)
147{
148 XWOS_UNUSED(iochip);
151 XWOS_UNUSED(to);
152 return XWOK;
153}
154
158 xwtm_t to)
159{
160 XWOS_UNUSED(iochip);
163 XWOS_UNUSED(to);
164 return XWOK;
165}
166
169 xwid_t port, xwsq_t pinmsk, void * cfg,
170 xwtm_t to)
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}
215
218 xwid_t port, xwsq_t pinmsk,
219 xwtm_t to)
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}
261
264 xwid_t port, xwsq_t pinmsk,
265 xwtm_t to)
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}
305
308 xwid_t port, xwsq_t pinmsk,
309 xwtm_t to)
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}
351
354 xwid_t port, xwsq_t pinmsk, xwsq_t out,
355 xwtm_t to)
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}
397
400 xwid_t port, xwsq_t pinmsk, xwsq_t * in,
401 xwtm_t to)
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}
429
432 .base = {
433 .name = "xwds.tca9539",
434 .probe = NULL,
435 .remove = NULL,
436 .start = xwds_tca9539_drv_start,
437 .stop = xwds_tca9539_drv_stop,
438#if defined(XWCDCFG_ds_PM) && (1 == XWCDCFG_ds_PM)
439 .suspend = xwds_tca9539_drv_suspend,
440 .resume = xwds_tca9539_drv_resume,
441#endif
442 },
443 .gpio_req = xwds_tca9539_drv_gpio_req,
444 .gpio_rls = xwds_tca9539_drv_gpio_rls,
445 .gpio_cfg = xwds_tca9539_drv_gpio_cfg,
446 .gpio_set = xwds_tca9539_drv_gpio_set,
447 .gpio_reset = xwds_tca9539_drv_gpio_reset,
448 .gpio_toggle = xwds_tca9539_drv_gpio_toggle,
449 .gpio_output = xwds_tca9539_drv_gpio_output,
450 .gpio_input = xwds_tca9539_drv_gpio_input,
451};
452
453/******** ******** TCA9539 APIs ******** ********/
455void xwds_tca9539_reset(struct xwds_tca9539 * tca9539, bool active)
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}
468
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}
517
519void xwds_tca9539_quit(struct xwds_tca9539 * tca9539)
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}
529
531void xwds_tca9539_dump(struct xwds_tca9539 * tca9539, xwtm_t to)
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}
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
xwer_t xwds_eirq_rls(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask, xwid_t eiid)
XWDS API:释放外部中断
Definition eirq.c:80
玄武设备栈:SOC:外部中断
@ XWDS_SOC_EIF_TM_FALLING
Definition eirq.h:42
@ XWDS_SOC_EIF_WKUP
Definition eirq.h:49
xwer_t xwds_i2cm_xfer(struct xwds_i2cm *i2cm, struct xwds_i2c_msg *msg, xwsz_t num, xwtm_t to)
XWDS API:传输I2C消息
Definition master.c:201
@ XWDS_I2C_F_START
Definition common.h:42
@ XWDS_I2C_F_RD
Definition common.h:39
@ XWDS_I2C_F_STOP
Definition common.h:43
void(* xwds_eirq_f)(struct xwds_soc *, xwid_t, xwds_eirq_arg_t)
外部中断函数
Definition chip.h:149
#define xwds_cast(type, dev)
Definition standard.h:40
#define XWDS_TCA9539_REG_P0_POLINV
Definition device.h:38
xwer_t xwds_tca9539_drv_start(struct xwds_device *dev)
TCA9539基本驱动:启动设备
Definition driver.c:77
#define XWDS_TCA9539_REG_P1_INPUT
Definition device.h:35
#define XWDS_TCA9539_REG_P0_OUTPUT
Definition device.h:36
#define XWDS_TCA9539_REG_P1_OUTPUT
Definition device.h:37
#define XWDS_TCA9539_REG_P1_CFG
Definition device.h:41
#define XWDS_TCA9539_REG_P1_POLINV
Definition device.h:39
#define XWDS_TCA9539_REG_P0_CFG
Definition device.h:40
#define XWDS_TCA9539_REG_P0_INPUT
Definition device.h:34
@ XWDS_TCA9539_PIN_DIRECTION_IN
Definition device.h:48
#define __xwbsp_rodata
Definition compiler.h:251
#define __xwbsp_code
Definition compiler.h:231
#define __xwbsp_api
Definition compiler.h:235
#define XWOK
No error
Definition errno.h:182
xws64_t xwtm_t
XWOS系统时间 (有符号)
Definition type.h:742
signed long xwer_t
Definition type.h:554
#define NULL
Definition type.h:28
unsigned long xwid_t
Definition type.h:481
uint8_t xwu8_t
Definition type.h:194
unsigned long xwsq_t
Definition type.h:445
uint16_t xwu16_t
Definition type.h:230
#define xwlogf(lv, tag, fmt,...)
格式化日志,并输出
Definition xwlog.h:119
#define XWOS_UNUSED(x)
Definition standard.h:66
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
Definition driver.c:399
xwer_t xwds_tca9539_drv_gpio_req(struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmask, xwtm_t to)
TCA9539 GPIO驱动:申请IO扩展芯片的GPIO
Definition driver.c:144
xwer_t xwds_tca9539_drv_gpio_reset(struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmsk, xwtm_t to)
TCA9539 GPIO驱动:将IO扩展芯片的GPIO设置为低电平
Definition driver.c:263
#define LOGTAG
Definition driver.c:29
void xwds_tca9539_dump(struct xwds_tca9539 *tca9539, xwtm_t to)
TCA9539 API:输出TCA9539的寄存器信息
Definition driver.c:531
xwer_t xwds_tca9539_drv_stop(struct xwds_device *dev)
TCA9539基本驱动:停止设备
Definition driver.c:111
xwer_t xwds_tca9539_drv_suspend(struct xwds_device *dev)
TCA9539基本驱动:暂停设备
Definition driver.c:130
void xwds_tca9539_reset(struct xwds_tca9539 *tca9539, bool active)
TCA9539 API:复位TCA9539
Definition driver.c:455
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
Definition driver.c:353
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
Definition driver.c:168
static xwer_t xwds_tca9539_write(struct xwds_tca9539 *tca9539, xwu8_t reg, xwu8_t data, xwtm_t to)
Definition driver.c:32
xwer_t xwds_tca9539_drv_resume(struct xwds_device *dev)
TCA9539基本驱动:继续设备
Definition driver.c:136
xwer_t xwds_tca9539_run(struct xwds_tca9539 *tca9539, xwds_eirq_f eisr, xwtm_t to)
TCA9539 API:启动TCA9539
Definition driver.c:470
xwer_t xwds_tca9539_drv_gpio_toggle(struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmsk, xwtm_t to)
TCA9539 GPIO驱动:翻转IO扩展芯片的GPIO电平
Definition driver.c:307
void xwds_tca9539_quit(struct xwds_tca9539 *tca9539)
TCA9539 API:停止运行TCA9539
Definition driver.c:519
const struct xwds_iochip_driver xwds_tca9539_drv
TCA9539的驱动
Definition driver.c:431
xwer_t xwds_tca9539_drv_gpio_set(struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmsk, xwtm_t to)
TCA9539 GPIO驱动:将IO扩展芯片的GPIO设置为高电平
Definition driver.c:217
xwer_t xwds_tca9539_drv_gpio_rls(struct xwds_iochip *iochip, xwid_t port, xwsq_t pinmask, xwtm_t to)
TCA9539 GPIO驱动:释放IO扩展芯片的GPIO
Definition driver.c:156
static xwer_t xwds_tca9539_read(struct xwds_tca9539 *tca9539, xwu8_t reg, xwu8_t *buf, xwtm_t to)
Definition driver.c:53
玄武设备栈:I2C IO扩展芯片:TCA9539:驱动
玄武设备栈:I2C:外设
玄武设备栈:I2C IO扩展芯片:TCA9539
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_rls(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask)
XWDS API:释放SOC的GPIO
Definition gpio.c:63
xwer_t xwds_gpio_set(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask)
XWDS API:将SOC的GPIO设置为高电平
Definition gpio.c:131
xwer_t xwds_gpio_req(struct xwds_soc *soc, xwid_t port, xwsq_t pinmask)
XWDS API:申请SOC的GPIO
Definition gpio.c:27
玄武设备栈:SOC:GPIO
设备(所有设备的基类)
Definition device.h:127
xwid_t id
Definition device.h:131
const char * name
Definition device.h:115
I2C消息
Definition common.h:49
xwsz_t size
Definition common.h:55
xwu8_t * data
Definition common.h:54
xwu16_t addr
Definition common.h:50
xwu16_t flag
Definition common.h:53
I2C主机
Definition master.h:53
struct xwds_device dev
Definition peripheral.h:49
xwu16_t addr
Definition peripheral.h:53
struct xwds_i2cm * bus
Definition peripheral.h:52
BSP中需要提供的IO扩展芯片设备驱动函数表
Definition chip.h:52
struct xwds_driver base
Definition chip.h:53
IO扩展芯片
Definition chip.h:95
struct xwds_i2cp i2cp
Definition chip.h:99
union xwds_iochip::@19 bc
struct xwds_iochip::@20 gpio
void * cfg
Definition chip.h:108
设备栈GPIO资源
Definition standard.h:98
struct xwds_soc * soc
Definition standard.h:99
TCA9539配置
Definition device.h:56
TCA9539 PIN配置
Definition device.h:120
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
xwid_t eirq
Definition device.h:133
struct xwds_iochip iochip
Definition device.h:128
struct xwds_tca9539::@39 gpiorsc
XWOS通用库:日志
XWOS的标准头文件