<?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 how to chain timers in LPC Microcontrollers</title>
    <link>https://community.nxp.com/t5/LPC-Microcontrollers/how-to-chain-timers/m-p/549977#M13916</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by kevin_liu on Mon Jul 28 16:55:10 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am trying to chain 2 timers together in my code: let timer2 to take timer1's match output. However, I cannot get it work.&amp;nbsp; The following is my code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I can get each timer work independently,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;by toggling the lines controlling timer1 interrupt:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_MatchDisableInt(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_TIMER_MatchEnableInt(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and commenting out the line&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; Chip_TIMER_TIMER_SetCountClockSrc(LPC_TIMER2, TIMER_CAPSRC_RISING_CAPN, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;However, I cannot chain them together.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Setup a chained timer. Timer2 will take input from Timer1's match 3.*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void setupChainTimer(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Init(LPC_TIMER1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_RGU_TriggerReset(RGU_TIMER1_RST);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (Chip_RGU_InReset(RGU_TIMER1_RST)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_PrescaleSet(LPC_TIMER1, 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Reset(LPC_TIMER1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ClearMatch(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_SetMatch(TIMER_NUMBER, 3, 4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ResetOnMatchEnable(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_MatchDisableInt(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_TIMER_MatchEnableInt(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Enable(LPC_TIMER1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(TIMER1_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_ClearPendingIRQ(TIMER1_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Init(LPC_TIMER2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_RGU_TriggerReset(RGU_TIMER2_RST);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (Chip_RGU_InReset(RGU_TIMER2_RST)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GIMA-&amp;gt;CAP0_IN[2][3] = 0x1&amp;lt;&amp;lt;1|0x1&amp;lt;&amp;lt;2|0x2&amp;lt;&amp;lt;4;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Reset(LPC_TIMER2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_TIMER_SetCountClockSrc(LPC_TIMER2, TIMER_CAPSRC_RISING_CAPN, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ClearMatch(LPC_TIMER2, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_SetMatch(LPC_TIMER2, 1, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_MatchEnableInt(LPC_TIMER2, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ResetOnMatchEnable(LPC_TIMER2, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Enable(LPC_TIMER2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(TIMER2_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_ClearPendingIRQ(TIMER2_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&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 TIMER1_IRQHandler(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static bool On = false;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static int count = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;count++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (Chip_TIMER_MatchPending(LPC_TIMER1, 3)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ClearMatch(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;On = (bool) !On;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Board_LED_Set(6, On);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&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;static bool On = false;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static int count = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;count++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if (Chip_TIMER_MatchPending(LPC_TIMER2, 1)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ClearMatch(LPC_TIMER2, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;On = (bool) !On;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Board_LED_Set(5, On);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 15 Jun 2016 18:34:05 GMT</pubDate>
    <dc:creator>lpcware</dc:creator>
    <dc:date>2016-06-15T18:34:05Z</dc:date>
    <item>
      <title>how to chain timers</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/how-to-chain-timers/m-p/549977#M13916</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by kevin_liu on Mon Jul 28 16:55:10 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Hi,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I am trying to chain 2 timers together in my code: let timer2 to take timer1's match output. However, I cannot get it work.&amp;nbsp; The following is my code.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I can get each timer work independently,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;by toggling the lines controlling timer1 interrupt:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_MatchDisableInt(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_TIMER_MatchEnableInt(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;and commenting out the line&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; Chip_TIMER_TIMER_SetCountClockSrc(LPC_TIMER2, TIMER_CAPSRC_RISING_CAPN, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;However, I cannot chain them together.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;/* Setup a chained timer. Timer2 will take input from Timer1's match 3.*/&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static void setupChainTimer(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Init(LPC_TIMER1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_RGU_TriggerReset(RGU_TIMER1_RST);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (Chip_RGU_InReset(RGU_TIMER1_RST)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_PrescaleSet(LPC_TIMER1, 0);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Reset(LPC_TIMER1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ClearMatch(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_SetMatch(TIMER_NUMBER, 3, 4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ResetOnMatchEnable(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_MatchDisableInt(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;//Chip_TIMER_MatchEnableInt(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Enable(LPC_TIMER1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(TIMER1_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_ClearPendingIRQ(TIMER1_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Init(LPC_TIMER2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_RGU_TriggerReset(RGU_TIMER2_RST);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while (Chip_RGU_InReset(RGU_TIMER2_RST)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;LPC_GIMA-&amp;gt;CAP0_IN[2][3] = 0x1&amp;lt;&amp;lt;1|0x1&amp;lt;&amp;lt;2|0x2&amp;lt;&amp;lt;4;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Reset(LPC_TIMER2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_TIMER_SetCountClockSrc(LPC_TIMER2, TIMER_CAPSRC_RISING_CAPN, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ClearMatch(LPC_TIMER2, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_SetMatch(LPC_TIMER2, 1, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_MatchEnableInt(LPC_TIMER2, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ResetOnMatchEnable(LPC_TIMER2, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_Enable(LPC_TIMER2);&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_EnableIRQ(TIMER2_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;NVIC_ClearPendingIRQ(TIMER2_IRQn);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&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 TIMER1_IRQHandler(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static bool On = false;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static int count = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;count++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;if (Chip_TIMER_MatchPending(LPC_TIMER1, 3)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ClearMatch(LPC_TIMER1, 3);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;On = (bool) !On;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Board_LED_Set(6, On);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&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;static bool On = false;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;static int count = 0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;count++;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;if (Chip_TIMER_MatchPending(LPC_TIMER2, 1)) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Chip_TIMER_ClearMatch(LPC_TIMER2, 1);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;On = (bool) !On;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Board_LED_Set(5, On);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:34:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/how-to-chain-timers/m-p/549977#M13916</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:34:05Z</dc:date>
    </item>
    <item>
      <title>Re: how to chain timers</title>
      <link>https://community.nxp.com/t5/LPC-Microcontrollers/how-to-chain-timers/m-p/549978#M13917</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;STRONG&gt;Content originally posted in LPCWare by Pacman on Sun Aug 31 01:25:59 MST 2014&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;Sorry for the late reply.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Just something that came to mind: I think you may need to hardwire them.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Or try using T3_MAT0 and CTIN_1 or T3_MAT1 and CTIN_0 or T3_MAT2 and CTIN_2. I believe setting the pin function to be T3_MAT1 might work.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;-I have no idea if this will work, just a thought.&lt;/SPAN&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 15 Jun 2016 18:34:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/LPC-Microcontrollers/how-to-chain-timers/m-p/549978#M13917</guid>
      <dc:creator>lpcware</dc:creator>
      <dc:date>2016-06-15T18:34:06Z</dc:date>
    </item>
  </channel>
</rss>

