Kinetis K60 LPTMR module in interrupt mode

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Kinetis K60 LPTMR module in interrupt mode

1,127 Views
broccolee
Contributor III

Hi,

 

I am using TWR-K60N512, with PK60DN512Z VMD10 chip and Codewarrior 10.5. There's a very good example baremetal project for this module, but the interrupt mode in this example doesn't work properly. I think it got stuck in the interrupt and keeps printing 'LPT ISR' every five seconds.The code is shown below taken directly from the example. It does not ever go beyond the "while(LPTMR_INTERRUPT == 0)" line.

Any idea how to troubleshoot this? To view the full example "lptmr project", you can find it in Codewarrior example for K60.

void lptmr_interrupt(void)
{
   int compare_value=5000; //value must be less than 0xFFFF
   LPTMR_INTERRUPT=0; //Clear global variable
   lptmr_clear_registers();
   enable_irq(85); //LPTMR Vector is 101. IRQ# is 101-16=85
   LPTMR0_CMR=LPTMR_CMR_COMPARE(compare_value); //Set compare value
   LPTMR0_PSR=LPTMR_PSR_PCS(0x1)|LPTMR_PSR_PBYP_MASK; 
   LPTMR0_CSR=LPTMR_CSR_TIE_MASK; //Enable LPT interrupt
   in_char(); //wait for keyboard press

   LPTMR0_CSR|=LPTMR_CSR_TEN_MASK; //Turn on LPTMR and start counting


   while(LPTMR_INTERRUPT == 0)
   {}

******NEVER GOT TO THIS LINE**********

   LPTMR0_CSR&=~LPTMR_CSR_TEN_MASK; //Turn off LPT to avoid more interrupts
   lptmr_clear_registers();
}

void lptmr_isr(void)
{
   LPTMR0_CSR|=LPTMR_CSR_TCF_MASK; //Clear LPT Compare flag
   LPTMR_INTERRUPT=1; //Set global variable
   printf("\n\nIn LPT ISR!\n\n"); ************ THIS KEEPS PRINTING *********
}

Thanks.

2 Replies

874 Views
mjbcswitzerland
Specialist V

Hi

It my be an optimisaton issue - check that LPTMR_INTERRUPT is declared as a volatle variable.

Regards

Mark

874 Views
broccolee
Contributor III

Thanks Mark. That fixed the problem!

0 Kudos
Reply