lwgpio interrupt problem

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

lwgpio interrupt problem

1,205件の閲覧回数
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 返信

775件の閲覧回数
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 件の賞賛
返信