<?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>LPCXpresso IDE中的主题 Problem with multiple timers LPC1769</title>
    <link>https://community.nxp.com/t5/LPCXpresso-IDE/Problem-with-multiple-timers-LPC1769/m-p/528290#M869</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by ghh on Sat Apr 11 13:34:54 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have been trying to implement three different timers for my school project. The timers work properly when i removed the other timers. However, when i run them together the timers do not run for the expected time.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The time each timer is supposed to take:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;TIMER0: 250ms&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;TIMER1: 1000ms&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;TIMER2: 3000ms&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int startVal = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int endVal = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int startVal2 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int endVal2 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int startVal3 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int endVal3 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile uint32_t msTicks; // counter for 1ms SysTicks&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//&amp;nbsp; SysTick_Handler - just increment SysTick counter&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void SysTick_Handler(void) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;msTicks++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void timer_interrupt()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;init_segment_display_interrupt();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;init_sampling_interrupt();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;init_restrictedLedISR();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void init_segment_display_interrupt() {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCONP |= 1 &amp;lt;&amp;lt; 1; // Power up&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCLKSEL0 |= 0x01 &amp;lt;&amp;lt; 2;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;TCR = (0 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;CCR |= (0x00 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;TC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;PR = (100000000/4.0) - 1; // (CLK/ Peripheral divider * Hz) -1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;PC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;MCR |= (1 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;MR0 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(TIMER0_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void init_sampling_interrupt(){&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCONP |= 1&amp;lt;&amp;lt;2;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCLKSEL0 |= 0x01 &amp;lt;&amp;lt; 4;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;TCR = (0 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;CCR |= (0x00 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;TC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;PR = (100000000/1.0) - 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;PC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;MCR |= (1 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;MR0 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(TIMER1_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void init_restrictedLedISR(){&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCONP |= 1&amp;lt;&amp;lt;22;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCLKSEL1 |= 0x01 &amp;lt;&amp;lt; 12;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;TCR = (0 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;CCR |= (0x00 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;TC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;PR = (100000000/1.0) - 1; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;PC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;MCR |= (1 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;MR0 = 3;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(TIMER2_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void TIMER0_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;startVal = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0-&amp;gt; TCR = (10&amp;lt;&amp;lt;0); // stop timer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0-&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int temp =&amp;nbsp; startVal - endVal;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;printf("Time in 0 is %d\r\n",temp);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// stuff&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;endVal = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void TIMER1_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;startVal2 = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1-&amp;gt; TCR = (10&amp;lt;&amp;lt;0); // stop timer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1-&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int temp = startVal2 - endVal2;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;printf("Time in 1 is %d\r\n",temp);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// stuff&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;endVal2 = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void TIMER2_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;startVal3 = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2-&amp;gt; TCR = (10&amp;lt;&amp;lt;0); // stop timer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2-&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int temp =&amp;nbsp; startVal3 - endVal3;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;printf("Time in 2 is %d\r\n",temp);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// stuff&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;endVal3 = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;int main(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SysTick_Config(SystemCoreClock / 1000)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timer_interrupt();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // do stuff&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;When I run them together, I get something like this printed out:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 1 is 500&amp;nbsp;&amp;nbsp; // this supposed to be 1000&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 133 // supposed to be 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 1 is 633&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 122&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 2 is 1608 // supposed to be 3000&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Why does this happen? Are my ISRs affecting each other indirectly? &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am using the CPU clock for this timer (100 000 000Hz). I did not select the clock, since thats the default for LPC1769. Could that be the problem?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I cant think of anything else. Any help is appreciated. Thank you&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 16 Jun 2016 02:53:26 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-16T02:53:26Z</dc:date>
    <item>
      <title>Problem with multiple timers LPC1769</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Problem-with-multiple-timers-LPC1769/m-p/528290#M869</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by ghh on Sat Apr 11 13:34:54 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;I have been trying to implement three different timers for my school project. The timers work properly when i removed the other timers. However, when i run them together the timers do not run for the expected time.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;The time each timer is supposed to take:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;TIMER0: 250ms&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;TIMER1: 1000ms&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;TIMER2: 3000ms&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My code:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int startVal = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int endVal = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int startVal2 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int endVal2 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int startVal3 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile int endVal3 = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;volatile uint32_t msTicks; // counter for 1ms SysTicks&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;//&amp;nbsp; SysTick_Handler - just increment SysTick counter&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;void SysTick_Handler(void) &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;msTicks++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void timer_interrupt()&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;init_segment_display_interrupt();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;init_sampling_interrupt();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;init_restrictedLedISR();&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void init_segment_display_interrupt() {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCONP |= 1 &amp;lt;&amp;lt; 1; // Power up&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCLKSEL0 |= 0x01 &amp;lt;&amp;lt; 2;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;TCR = (0 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;CCR |= (0x00 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;TC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;PR = (100000000/4.0) - 1; // (CLK/ Peripheral divider * Hz) -1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;PC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;MCR |= (1 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;MR0 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0 -&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(TIMER0_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void init_sampling_interrupt(){&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCONP |= 1&amp;lt;&amp;lt;2;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCLKSEL0 |= 0x01 &amp;lt;&amp;lt; 4;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;TCR = (0 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;CCR |= (0x00 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;TC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;PR = (100000000/1.0) - 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;PC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;MCR |= (1 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;MR0 = 1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1 -&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(TIMER1_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void init_restrictedLedISR(){&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCONP |= 1&amp;lt;&amp;lt;22;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_SC-&amp;gt;PCLKSEL1 |= 0x01 &amp;lt;&amp;lt; 12;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;TCR = (0 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;CCR |= (0x00 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;TC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;PR = (100000000/1.0) - 1; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;PC = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;MCR |= (1 &amp;lt;&amp;lt; 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;MR0 = 3;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2 -&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(TIMER2_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void TIMER0_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;startVal = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0-&amp;gt; TCR = (10&amp;lt;&amp;lt;0); // stop timer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0-&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int temp =&amp;nbsp; startVal - endVal;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;printf("Time in 0 is %d\r\n",temp);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// stuff&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM0-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;endVal = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void TIMER1_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;startVal2 = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1-&amp;gt; TCR = (10&amp;lt;&amp;lt;0); // stop timer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1-&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int temp = startVal2 - endVal2;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;printf("Time in 1 is %d\r\n",temp);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// stuff&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM1-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;endVal2 = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void TIMER2_IRQHandler(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;startVal3 = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2-&amp;gt; TCR = (10&amp;lt;&amp;lt;0); // stop timer&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2-&amp;gt;IR = 0xFF;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;int temp =&amp;nbsp; startVal3 - endVal3;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;printf("Time in 2 is %d\r\n",temp);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;// stuff&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_TIM2-&amp;gt; TCR = (1&amp;lt;&amp;lt;0); // start counting&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;endVal3 = (int) msTicks;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;int main(void)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (SysTick_Config(SystemCoreClock / 1000)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; timer_interrupt();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // do stuff&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;When I run them together, I get something like this printed out:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 1 is 500&amp;nbsp;&amp;nbsp; // this supposed to be 1000&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 133 // supposed to be 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 1 is 633&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 122&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 0 is 250&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Time in 2 is 1608 // supposed to be 3000&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Why does this happen? Are my ISRs affecting each other indirectly? &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I am using the CPU clock for this timer (100 000 000Hz). I did not select the clock, since thats the default for LPC1769. Could that be the problem?&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I cant think of anything else. Any help is appreciated. Thank you&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:53:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Problem-with-multiple-timers-LPC1769/m-p/528290#M869</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:53:26Z</dc:date>
    </item>
    <item>
      <title>Re: Problem with multiple timers LPC1769</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Problem-with-multiple-timers-LPC1769/m-p/528291#M870</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 Sat Apr 11 13:55:09 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: ghh&lt;/STRONG&gt;&lt;BR /&gt;I cant think of anything else. Any help is appreciated. Thank you&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I can&amp;nbsp; :O &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm not sure what you are trying to do in detail, but a few things in your snippet are not very useful&amp;nbsp; ;-) &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#1: Don't use printf in ISR. Printf is very slow and so it's not useful to use it in an interrupt handler...&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#2: If you want to use a timer, use TC register. Don't use SysTick interrupt with 1000Hz and count... &lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:53:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Problem-with-multiple-timers-LPC1769/m-p/528291#M870</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:53:27Z</dc:date>
    </item>
    <item>
      <title>Re: Problem with multiple timers LPC1769</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Problem-with-multiple-timers-LPC1769/m-p/528292#M871</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by ghh on Sat Apr 11 20:50:50 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thank you for replying. I am using the timers to read sensors and switch on leds on the EABaseBoard after a specific amount of time.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am using printf and Systick interrupt to find out how long it takes for the timers to call each ISR.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Is there a better way to this?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:53:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Problem-with-multiple-timers-LPC1769/m-p/528292#M871</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:53:27Z</dc:date>
    </item>
    <item>
      <title>Re: Problem with multiple timers LPC1769</title>
      <link>https://community.nxp.com/t5/LPCXpresso-IDE/Problem-with-multiple-timers-LPC1769/m-p/528293#M872</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 Sun Apr 12 02:50:36 MST 2015&lt;/STRONG&gt;&lt;BR /&gt;&lt;HR /&gt;&lt;SPAN style="color: #0000ff;"&gt;&lt;STRONG&gt;Quote: ghh&lt;/STRONG&gt;&lt;BR /&gt;Is there a better way to this?&lt;/SPAN&gt;&lt;HR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;To generate 250ms / 1000ms / 3000ms ?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Set a simple timer (RIT) to 250ms interrupt and count this interrupts. Set flags there for 250ms, 1000ms (count %4) and 3000ms (count=12) and reset&amp;nbsp; the counter.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Then read this flags in your main loop and do your LED / sensor stuff there&amp;nbsp; :)&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 16 Jun 2016 02:53:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPCXpresso-IDE/Problem-with-multiple-timers-LPC1769/m-p/528293#M872</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-16T02:53:28Z</dc:date>
    </item>
  </channel>
</rss>

