QNX中监听GPIO引脚信号的代码流程(1)

ThreadCtl(_NTO_TCTL_IO, 0);  // 打开线程访问IO的权限
gpio_open  -> 返回gpio的fd
gpio_set_interrupt_cfg   ->  设置GPIO引脚的中断模式,例如通过给定GPIO引脚号和GPIO_INTERRUPT_TRIGGER_RISING设置在上升沿时触发中断

gpio_get_interrupt_cfg   -> 获取GPIO引脚的中断编号
	
在上面get_interrupt_cfg后,就获取了GPIO引脚的中断号
下面就可以设置ISR(Interrupt Service Runtime, 中断处理函数)
SIGEV_INTR_INIT    ->   对sigevent做初始化,例如:SIGEV_INTR_INIT(sigevent_);
InterruptAttachEvent   ->  返回id, 这一步降GPIO的中断绑定到事件   InterruptAttachEvent(irq, sigevent_, _NTO_INTR_FLAGS_TRK_MSK)   , 
		       -> 其中irq是gpio_get_interrupt_cfg返回的, _NTO_INTR_FLAGS_TRK_MSK是中断标志参数,代表当中断处理程序ISR运行的时候,自动屏蔽当前中断,防止中断嵌套

while
    InterruptWait_r   -> 等待GPIO产生中断后到达ISR中发送event到当前线程
                      -> 在ISR中会屏蔽中断号对应的中断请求
    // 做一些事情
    InterruptUnmask   -> 打开对应中断号的中断请求

GPIO最大支持40个引脚,配置GPIO中断的时候需要指定引脚编号  
sigevent 信号事件,POSIX标准定义的结构体,用于描述异步事件的通知方式

#include <signal.h>

struct sigevent {
&
# # devc-quipv3 -e -b115200 13 & [1] 1421366 # [1] + Done devc-quipv3 -e -b115200 13 # # chmod 777 /dev/ser2 # # ls -l /dev/ser ser1 ser2 # ls -l /dev/ser2 crwxrwxrwx 1 root root 3, 2 Jan 01 00:04 /dev/ser2 # # /mnt/bin/pm_gpio_demo 6 1 out cmos 4 vin1 high Level status after enable: 1 Status: enable=1 mode=1 vsrc=1 outbuf=0 level=1 drv=2 pulls=5 src=0 dtest=0 GPIO 0 on PMIC 6 configured OK. # # # /mnt/bin/pm_gpio_demo 6 3 out cmos 2 vin1 low; sleep 0.01 Level status after enable: 0 Status: enable=1 mode=1 vsrc=1 outbuf=0 level=0 drv=1 pulls=5 src=0 dtest=0 GPIO 2 on PMIC 6 configured OK. # # # /mnt/bin/pm_gpio_demo 6 3 out cmos 2 vin1 high Level status after enable: 1 Status: enable=1 mode=1 vsrc=1 outbuf=0 level=1 drv=1 pulls=5 src=0 dtest=0 GPIO 2 on PMIC 6 configured OK. # # # /mnt/bin/pm_gpio_demo 6 2 out cmos 4 vin1 high Level status after enable: 1 Status: enable=1 mode=1 vsrc=1 outbuf=0 level=1 drv=2 pulls=5 src=0 dtest=0 GPIO 1 on PMIC 6 configured OK. # # # /var/prgflash_uart_qnx /var/GSD5XP_NAV_SQIF_IMAGE.bin /dev/ser2 115200 -e SiRFflashEngineEP UART version: 3.06 Trying to connect at 115200 baud. Please wait ... Error: [103][0] Initial load error # # ldd /var/p pps_persist/ prgflash_uart_qnx.zip prgflash_uart_qnx property_configurations.json # ldd /var/pr prgflash_uart_qnx property_configurations.json prgflash_uart_qnx.zip # ldd /var/prgflash_uart_qnx |gerp "not found" ksh: gerp: cannot execute - No such file or directory # ldd /var/prgflash_uart_qnx |gerp "not found" bin/ etc/ lib64/ qcpe_qhee/ var/ data/ firmware/ mnt/ sbin/ dev/ ifs/ persist/ tmp/ diag_service/ lib/ proc/ usr/ # ldd /var/prgflash_uart_qnx prgflash_uart_qnx prgflash_uart_qnx.zip # ldd /var/prgflash_uart_qnx /var/prgflash_uart_qnx: libc.so.5 => /ifs/lib64/libc.so.5 (0x561c46e000) libgcc_s.so.1 => /ifs/lib64/libgcc_s.so.1 (0x561c534000) # ldd /var/prgflash_uart_qnx |grep "not found" # # # echo "test" > /dev/ser1 && cat < /dev/ser1 test
08-16
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值