Hi Isao Takashima
I don't know if you are still interested in this, but if so, the problem is not the instruction BX LR; LR is a special register which holds the address to return to when a function call completes, as long as you are using a function inside your handler that use this register (dummy()), your handler cannot use this register so it use the PC register.
But as I mentioned before this doesn't relate with your initial question, problem here is that your last instruction in the interrupt handler is when you clear the flag, this instruction doesn't have time to execute when the interrupt service is "attended again". Normally the first thing that you do in the handler (after check if the interrupt occurred as expected) is clear the flag, so:
if (PORTA_ISFR & (1<<19))
{
PORTA_ISFR |= (1<<19);
isButtonPress = true;
GPIOA_PTOR = (1 << 11);
}
Even you could try some test, the trick here is not to put the clear instruction at the end, for example:
GPIOA_PTOR = (1 << 11);
PORTA_ISFR |= (1<<19);
isButtonPress = true;
Should works.
Hope this helps
Have a great day,
Jorge Alcala
-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------