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);
}
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