<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Program is not leaving the ISR (timer0 mat0 interrupt) in LPCXpresso IDE</title>
    <link>https://community.nxp.com/t5/LPCXpresso-IDE/Program-is-not-leaving-the-ISR-timer0-mat0-interrupt/m-p/567867#M19048</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by emielzij on Wed Dec 17 09:03:21 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have an external clock source that drives the counter0 of the LPC11C24.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If the counter value matches the match register 0 (in the code forced to a value 10 for testing purposes) then the counter should reset to 0 and the code should jump to an isr.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is my code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
#define timer0match 10//0-65535

#include "LPC11xx.h"

void timer0init(void)
{
LPC_IOCON-&amp;gt;PIO0_2 |= (1 &amp;lt;&amp;lt; 1);//Selects function CT16B0_CAP0
LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL |= (1 &amp;lt;&amp;lt; 7);//Enable clock for 16-bit counter/timer0
LPC_TMR16B0-&amp;gt;CTCR |= (1 &amp;lt;&amp;lt; 0);//TC incremented on rising edge CAP input (Selected)

//CAP0 as clock source, default CAP0

//Configure CT16B0_MAT0 (PIO0_8) as match function for external measurements
LPC_GPIO0-&amp;gt;DIR |= (1 &amp;lt;&amp;lt; 8);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Set PIO0_8 as output
LPC_TMR16B0-&amp;gt;EMR|= 0x00000030;//EMC0, Toggle the corresponding External Match bit/output
LPC_IOCON-&amp;gt;PIO0_8|= (1 &amp;lt;&amp;lt; 1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Selects function CT16B0_MAT0

LPC_TMR16B0-&amp;gt;MR0 = timer0match;//Set match value
LPC_TMR16B0-&amp;gt;MCR|= (1 &amp;lt;&amp;lt; 0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Interrupt if TC==MR0
LPC_TMR16B0-&amp;gt;MCR|= (1 &amp;lt;&amp;lt; 1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Reset TC to 0 if TC==MR0

LPC_TMR16B0-&amp;gt;TCR |= (1 &amp;lt;&amp;lt; 0);//Enable timer 0

//Reset timer 0
LPC_TMR16B0-&amp;gt;TCR |= (1 &amp;lt;&amp;lt; 1);
LPC_TMR16B0-&amp;gt;TCR &amp;amp;= ~(1 &amp;lt;&amp;lt; 1);

NVIC_EnableIRQ(TIMER_16_0_IRQn);
}

int main(void)
{
int i=0;

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL&amp;nbsp;&amp;nbsp; |= (1&amp;lt;&amp;lt;6);//GPIO CLOCK ENABLE
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL&amp;nbsp;&amp;nbsp; |= (1&amp;lt;&amp;lt;16);//Enable IOCON

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_GPIO0-&amp;gt;DIR|= (1 &amp;lt;&amp;lt; 3);//OUTPUT
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;PIO0_3&amp;amp;= ~(1 &amp;lt;&amp;lt; 3);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Disable pull up

&amp;nbsp;&amp;nbsp;&amp;nbsp; timer0init();

&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_GPIO0-&amp;gt;DATA|= (1 &amp;lt;&amp;lt; 3);
&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt;100; i++);
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_GPIO0-&amp;gt;DATA &amp;amp;= ~(1 &amp;lt;&amp;lt; 3); //toggle pin
&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt;100; i++);

&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0 ;
}

void TIMER_16_0_IRQHandler(void)
{
LPC_TMR16B0-&amp;gt;IR |= (1 &amp;lt;&amp;lt; 0);//Clear interrupt flag by writing a 1
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The PIO0_3 is not toggled in the while(1) loop, the program get stuck in the ISR I think. If I remove NVIC_EnableIRQ(TIMER_16_0_IRQn); from the code, the program runs fine. The hardware interrupt, toggle a pin at a match works fine in both cases.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Am I doing something wrong with the interrupt clearing?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 16 Jun 2016 02:19:19 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-16T02:19:19Z</dc:date>
    <item>
      <title>Program is not leaving the ISR (timer0 mat0 interrupt)</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Program-is-not-leaving-the-ISR-timer0-mat0-interrupt/m-p/567867#M19048</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by emielzij on Wed Dec 17 09:03:21 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have an external clock source that drives the counter0 of the LPC11C24.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;If the counter value matches the match register 0 (in the code forced to a value 10 for testing purposes) then the counter should reset to 0 and the code should jump to an isr.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here is my code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;
#define timer0match 10//0-65535

#include "LPC11xx.h"

void timer0init(void)
{
LPC_IOCON-&amp;gt;PIO0_2 |= (1 &amp;lt;&amp;lt; 1);//Selects function CT16B0_CAP0
LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL |= (1 &amp;lt;&amp;lt; 7);//Enable clock for 16-bit counter/timer0
LPC_TMR16B0-&amp;gt;CTCR |= (1 &amp;lt;&amp;lt; 0);//TC incremented on rising edge CAP input (Selected)

//CAP0 as clock source, default CAP0

//Configure CT16B0_MAT0 (PIO0_8) as match function for external measurements
LPC_GPIO0-&amp;gt;DIR |= (1 &amp;lt;&amp;lt; 8);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Set PIO0_8 as output
LPC_TMR16B0-&amp;gt;EMR|= 0x00000030;//EMC0, Toggle the corresponding External Match bit/output
LPC_IOCON-&amp;gt;PIO0_8|= (1 &amp;lt;&amp;lt; 1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Selects function CT16B0_MAT0

LPC_TMR16B0-&amp;gt;MR0 = timer0match;//Set match value
LPC_TMR16B0-&amp;gt;MCR|= (1 &amp;lt;&amp;lt; 0);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Interrupt if TC==MR0
LPC_TMR16B0-&amp;gt;MCR|= (1 &amp;lt;&amp;lt; 1);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Reset TC to 0 if TC==MR0

LPC_TMR16B0-&amp;gt;TCR |= (1 &amp;lt;&amp;lt; 0);//Enable timer 0

//Reset timer 0
LPC_TMR16B0-&amp;gt;TCR |= (1 &amp;lt;&amp;lt; 1);
LPC_TMR16B0-&amp;gt;TCR &amp;amp;= ~(1 &amp;lt;&amp;lt; 1);

NVIC_EnableIRQ(TIMER_16_0_IRQn);
}

int main(void)
{
int i=0;

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL&amp;nbsp;&amp;nbsp; |= (1&amp;lt;&amp;lt;6);//GPIO CLOCK ENABLE
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_SYSCON-&amp;gt;SYSAHBCLKCTRL&amp;nbsp;&amp;nbsp; |= (1&amp;lt;&amp;lt;16);//Enable IOCON

&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_GPIO0-&amp;gt;DIR|= (1 &amp;lt;&amp;lt; 3);//OUTPUT
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_IOCON-&amp;gt;PIO0_3&amp;amp;= ~(1 &amp;lt;&amp;lt; 3);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Disable pull up

&amp;nbsp;&amp;nbsp;&amp;nbsp; timer0init();

&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_GPIO0-&amp;gt;DATA|= (1 &amp;lt;&amp;lt; 3);
&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt;100; i++);
&amp;nbsp;&amp;nbsp;&amp;nbsp; LPC_GPIO0-&amp;gt;DATA &amp;amp;= ~(1 &amp;lt;&amp;lt; 3); //toggle pin
&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0; i&amp;lt;100; i++);

&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0 ;
}

void TIMER_16_0_IRQHandler(void)
{
LPC_TMR16B0-&amp;gt;IR |= (1 &amp;lt;&amp;lt; 0);//Clear interrupt flag by writing a 1
}
&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;The PIO0_3 is not toggled in the while(1) loop, the program get stuck in the ISR I think. If I remove NVIC_EnableIRQ(TIMER_16_0_IRQn); from the code, the program runs fine. The hardware interrupt, toggle a pin at a match works fine in both cases.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Am I doing something wrong with the interrupt clearing?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:19:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Program-is-not-leaving-the-ISR-timer0-mat0-interrupt/m-p/567867#M19048</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:19:19Z</dc:date>
    </item>
    <item>
      <title>Re: Program is not leaving the ISR (timer0 mat0 interrupt)</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Program-is-not-leaving-the-ISR-timer0-mat0-interrupt/m-p/567868#M19049</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by R2D2 on Wed Dec 17 10:18:10 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: emielzij&lt;/STRONG&gt;&lt;BR /&gt;...the program get stuck in the ISR I think.&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt; :quest: &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;And what's the debugger telling you?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Probably your ISR name is wrong :(( &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD bgcolor="#cacaca"&gt; &lt;PRE&gt;void TIMER[color=#f00]_[/color]16_0_IRQHandler(void)&lt;/PRE&gt; &lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:19:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Program-is-not-leaving-the-ISR-timer0-mat0-interrupt/m-p/567868#M19049</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:19:20Z</dc:date>
    </item>
    <item>
      <title>Re: Program is not leaving the ISR (timer0 mat0 interrupt)</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Program-is-not-leaving-the-ISR-timer0-mat0-interrupt/m-p/567869#M19050</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by emielzij on Wed Dec 17 14:38:45 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Indeed, the ISR name was incorrect.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:19:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Program-is-not-leaving-the-ISR-timer0-mat0-interrupt/m-p/567869#M19050</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:19:20Z</dc:date>
    </item>
  </channel>
</rss>

