0

Я пытаюсь прикрепить IRQ обработчика к GPIO банке в 00B irq no 97 т.е..InterruptAttach терпит неудачу на 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