在线时间0 小时
UID344389
注册时间2012-2-28
NXP金币0
该用户从未签到
新手上路

- 积分
- 26
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2014-6-19 08:57:50
|
显示全部楼层
回复:在MQX 4.0中,多个GPIO脚中断问题
这个问题已解决,感谢freescale的梁工
void int_service_routine(void *buttons)
{
LWGPIO_STRUCT_PTR *btn_array = (LWGPIO_STRUCT_PTR *)buttons;
LWGPIO_STRUCT_PTR btn = NULL;
btn = btn_array[0];
if(lwgpio_int_get_flag(btn))
{
//printf("GPIO_PIN4 Interrupt.\n");
lwgpio_int_clear_flag((LWGPIO_STRUCT_PTR) btn);
}
btn = btn_array[1];
if(lwgpio_int_get_flag(btn))
{
//printf("GPIO_PIN28 Interrupt.\n");
lwgpio_int_clear_flag((LWGPIO_STRUCT_PTR) btn);
}
}
void main_task
(
uint32_t initial_data
)
{
/* Structures holding information about specific pin */
LWGPIO_STRUCT btn1,btn2;
/* opening pins for input */
if (!lwgpio_init(&btn1, BSP_BUTTON1, LWGPIO_DIR_INPUT, LWGPIO_VALUE_NOCHANGE))
{
printf("Initializing button GPIO as input failed.\n");
_task_block();
}
/* Some platforms require to setup MUX to IRQ functionality,
for the rest just set MUXto GPIO functionality */
lwgpio_set_functionality(&btn1, BSP_BUTTON1_MUX_IRQ);
lwgpio_set_attribute(&btn1, LWGPIO_ATTR_PULL_UP, LWGPIO_AVAL_ENABLE);
/* enable gpio functionality for given pin, react on falling edge */
if (!lwgpio_int_init(&btn1, LWGPIO_INT_MODE_FALLING))
{
printf("Initializing button GPIO for interrupt failed.\n");
_task_block();
}
/* opening pins for input */
if (!lwgpio_init(&btn2, BSP_BUTTON2, LWGPIO_DIR_INPUT, LWGPIO_VALUE_NOCHANGE))
{
printf("Initializing button GPIO as input failed.\n");
_task_block();
}
/* Some platforms require to setup MUX to IRQ functionality,
for the rest just set MUXto GPIO functionality */
lwgpio_set_functionality(&btn2, 1);
lwgpio_set_attribute(&btn2, LWGPIO_ATTR_PULL_UP, LWGPIO_AVAL_ENABLE);
/* enable gpio functionality for given pin, react on falling edge */
if (!lwgpio_int_init(&btn2, LWGPIO_INT_MODE_FALLING))
{
printf("Initializing button GPIO for interrupt failed.\n");
_task_block();
}
/* install gpio interrupt service routine */
//_int_install_isr(lwgpio_int_get_vector(&btn2), int_service_routine, (void *) &btn2);
/* set the interrupt level, and unmask the interrupt in interrupt controller */
//_bsp_int_init(lwgpio_int_get_vector(&btn2), 3, 0, TRUE);
/* enable interrupt on GPIO peripheral module */
lwgpio_int_enable(&btn2, TRUE);
btn_array[0] = &btn1;
btn_array[1] = &btn2;
/* install gpio interrupt service routine */
_int_install_isr(lwgpio_int_get_vector(&btn1), int_service_routine, (void *) btn_array);
/* set the interrupt level, and unmask the interrupt in interrupt controller */
_bsp_int_init(lwgpio_int_get_vector(&btn1), 3, 0, TRUE);
/* enable interrupt on GPIO peripheral module */
lwgpio_int_enable(&btn1, TRUE);
} |
|