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