lwgpio interrupt problem

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

lwgpio interrupt problem

1,206 次查看
heyunfei
Contributor I

I run the gpio demo based on mqx4.1.it is successful.

I copy the demo to my project, and the result is changed.

the result of the demo is : when I press the button ,it enter the ISR,

but

the restult of my project: when after calling _bsp_int_init(lwgpio_int_get_vector(&btn1), 3, 0, TRUE),  it enter the ISR Automatically,  then I press the button, it enter the isr.

when I modify the priority  _bsp_int_init(lwgpio_int_get_vector(&btn1), 3, 0, TRUE) :3 --->8

then it can't enter the isr forever.

my project  is :

void int_service_routine10(void *pin)

{

    lwgpio_int_clear_flag((LWGPIO_STRUCT_PTR) pin);

}

void main_task1

    (

        uint32_t initial_data

    )

{

    LWGPIO_STRUCT led1, btn1;

 

    _mqx_uint result;

   

    if (!lwgpio_init(&btn1, (GPIO_PORT_B | GPIO_PIN5), LWGPIO_DIR_INPUT, LWGPIO_VALUE_NOCHANGE))//(GPIO_PORT_B | GPIO_PIN4)(GPIO_PORT_B | GPIO_PIN7)

    {

        printf("Initializing button GPIO as input failed.\n");

        _task_block();

    }

    lwgpio_set_functionality(&btn1, 1);

  lwgpio_set_attribute(&btn1, LWGPIO_ATTR_PULL_UP, LWGPIO_AVAL_ENABLE);

  

    if (!lwgpio_int_init(&btn1, LWGPIO_INT_MODE_FALLING))

    {

        printf("Initializing button GPIO for interrupt failed.\n");

        _task_block();

    }

     _int_install_isr(lwgpio_int_get_vector(&btn1), int_service_routine10, (void *) &btn1);

    lwgpio_int_clear_flag(&btn1);

    lwgpio_int_enable(&btn1, TRUE);

  _bsp_int_init(lwgpio_int_get_vector(&btn1), 3, 0, TRUE);

    button_press_count = 1;

    while(button_press_count < 4)       {

        printf("Button pressed %dx\r", button_press_count);

    }

    lwgpio_int_enable(&btn1, FALSE);

}

void main_task(uint32_t initial_data)

{

     main_task1(1);

}

0 项奖励
回复
1 回复

776 次查看
Carlos_Musich
NXP Employee
NXP Employee

Hi!

Please see the attached example. I used TWR-K60D100M, MQX4.1 and CW10.6. The example install 3 interrupts Port A, Port E and PIT. An Interrupt is generated each time you press SW1 or SW2. And the PIT generates an Interrupt despending on the value you load in LDVAL register.

You can decide whether MQX should handle the interrupts or they should bypass MQX by setting BYPASS macro.

Hope this helps.

Regards,

Carlos

0 项奖励
回复