InterruptAttach 在 am3352x irq 号 97 上为 bank 0B 失败
InterruptAttach fails on am3352x irq number 97 for bank 0B
我正在尝试将 IRQ 处理程序 附加到 gpio bank 0 即 0B irq no 97
.
目前,我的实施 returns 和 -1
。我究竟做错了什么?实施起来将是一个非常简单的问题。
#include <stdio.h>
#include <unistd.h>
#include "gpio.h"
#include <sys/neutrino.h>
#include "interrupt.h"
volatile unsigned int gpio0_irq_count;
static const struct sigevent * gpio0_irq_handler (void *gpio, int id){
gpio0_irq_count++;
return NULL;
}
int main(){
int ret;
unsigned long count=0;
ret = InterruptAttach(97, gpio0_irq_handler, NULL,0,_NTO_INTR_FLAGS_TRK_MSK);
printf("%s: Registering handler for irq %d result = %d\n",__func__ , 97, ret);
if (ret)
return -1;
while(1){
printf("%s:[%lu] : gpio0_irq_count = %d\n", __func__, count++, gpio0_irq_count);
sleep(2);
}
}
错误输出为:
main: Registering handler for irq 97 result = -1
在与 QNX 来回反复之后,事实证明请求 InterruptAttach() 或 InterruptAttach_r() 的进程需要通过
获得提升的权限
ThreadCtl( _NTO_TCTL_IO, 0 );
一旦执行 API 的工作。然而,仍然必须配置 gpio 寄存器以实际触发中断。
GPIO_OE
GPIO_STATUS
GPIO_STATUS_SET
GPIO_CTRL
GPIO_RISINGDETECT
我正在尝试将 IRQ 处理程序 附加到 gpio bank 0 即 0B irq no 97
.
目前,我的实施 returns 和 -1
。我究竟做错了什么?实施起来将是一个非常简单的问题。
#include <stdio.h>
#include <unistd.h>
#include "gpio.h"
#include <sys/neutrino.h>
#include "interrupt.h"
volatile unsigned int gpio0_irq_count;
static const struct sigevent * gpio0_irq_handler (void *gpio, int id){
gpio0_irq_count++;
return NULL;
}
int main(){
int ret;
unsigned long count=0;
ret = InterruptAttach(97, gpio0_irq_handler, NULL,0,_NTO_INTR_FLAGS_TRK_MSK);
printf("%s: Registering handler for irq %d result = %d\n",__func__ , 97, ret);
if (ret)
return -1;
while(1){
printf("%s:[%lu] : gpio0_irq_count = %d\n", __func__, count++, gpio0_irq_count);
sleep(2);
}
}
错误输出为:
main: Registering handler for irq 97 result = -1
在与 QNX 来回反复之后,事实证明请求 InterruptAttach() 或 InterruptAttach_r() 的进程需要通过
获得提升的权限ThreadCtl( _NTO_TCTL_IO, 0 );
一旦执行 API 的工作。然而,仍然必须配置 gpio 寄存器以实际触发中断。
GPIO_OE
GPIO_STATUS
GPIO_STATUS_SET
GPIO_CTRL
GPIO_RISINGDETECT