This is the code:
#define Vkeyboard 22
#define ON 0
#define OFF 1
#define LED1 PTFD_PTFD0
#define LED2 PTFD_PTFD1
interrupt Vkeyboard void intCLK() {
LED1 = !LED1;
KBI1SC &= 0x0f; // (1) commenting out this will render ineffective statement (2)
KBI1SC_KBACK = 1; // clear interrupt
KBI1SC_KBEDG4 = 1; // (2) wait for rising edge
}
void main(void) {
/* LEDs are output*/
PTFDD = 0x03;
LED1 = OFF;
LED2 = OFF;
KBI1SC = 0x02; // request HW , edge only
KBI1SC_KBEDG4 = 0; // first wait for falling edge
KBI1PE_KBIPE4 = 1;
EnableInterrupts;
for(;;) {
__RESET_WATCHDOG();
}
/* please make sure that you never leave main */
}
During the keyboard interrupt handler, I want to change the edge behavior ( from falling to rising ). This works as long as I
outcomment line (1) where I write to KBI1SC register. If do this write, the command KBI1SC_KBEDG4 is ignored, that is the edge dectection remains falling edge. Worse, after a couple of changes , the keyboard interrupt stops working all toegether.
I use the Axion demoboard for the GB60 with an external debounced push button.
What's wrong with that write to KBI1SC inside the interrupt handler ?
Thanks for your support