0

我想一个IRQ处理程序附加到GPIO银行00B irq no 97InterruptAttach上am3352x IRQ号97失败银行0B

在目前,我的执行返回-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 

回答

0

经过多次来回QNX,事实证明请求InterruptAttach()或InterruptAttach_r()的方法需要通过

ThreadCtl(_NTO_TCTL_IO, 0); 
获取提升的权限

一旦执行API的工作。但是,仍然必须配置gpio寄存器来实际触发中断。

GPIO_OE 
GPIO_STATUS 
GPIO_STATUS_SET 
GPIO_CTRL 
GPIO_RISINGDETECT