GPIO interrupt using RTOS SDK: how to?

ecl66
Posts: 4
Joined: Wed Aug 19, 2015 4:14 pm

GPIO interrupt using RTOS SDK: how to?

Postby ecl66 » Wed Aug 19, 2015 4:26 pm

Greetings to All,

I am trying to set up GPIO-based interrupt using the RTOS SDK (see code below).

It seems I need to use the gpio_pin_intr_state_set() function but it is missing from the SDK libraries. Any help would be greatly appreciated!

Best,
Emmanuel

void main_int_handler()
{
printf("main_int_callback!\n");
int i;
uint32 gpio_status = GPIO_REG_READ(GPIO_STATUS_ADDRESS);
uint32 gpio_mask = _xt_read_ints();
printf("Generic interrupt gpio_mask= 0x%08x, status = 0x%08x\n",gpio_mask,gpio_status);
for (i=0 ; i<16 ; i++) {
if ((0x1<<i) & gpio_status) {
printf("Mask set %d\n",i);
}
}

void registerInterrupt(int pin, GPIO_INT_TYPE mode)
{
portENTER_CRITICAL();

// disable open drain
GPIO_REG_WRITE(GPIO_PIN_ADDR(GPIO_ID_PIN(pin)),
GPIO_REG_READ(GPIO_PIN_ADDR(GPIO_ID_PIN(pin))) & (~ GPIO_PIN_PAD_DRIVER_SET(GPIO_PAD_DRIVER_ENABLE)));

//clear interrupt status
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, BIT(pin));

// set the mode
_xt_isr_unmask(1<<ETS_GPIO_INUM);
//gpio_pin_intr_state_set(GPIO_ID_PIN(pin), mode); // does not link if this line is enabled...
portENABLE_INTERRUPTS();

portEXIT_CRITICAL();
}

in user_init():

_xt_isr_attach(ETS_GPIO_INUM, (_xt_isr)main_int_handler, NULL);
_xt_isr_unmask(1<<ETS_GPIO_INUM);
registerInterrupt(15, GPIO_PIN_INTR_ANYEDGE); // setting INT on GPIO15

Who is online

Users browsing this forum: No registered users and 28 guests