<?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 Re: How can I stop a timer? in 8-bit Microcontrollers</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187321#M14141</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hello!&lt;/DIV&gt;&lt;DIV&gt;Yes the problem is that I haven't understood what the "TPM channel"-stuff is.&lt;/DIV&gt;&lt;DIV&gt;For instance, if I use the TPM alone:&lt;/DIV&gt;&lt;DIV&gt;* How can I TPM interrupts without using the channels? I can se no place for the&lt;/DIV&gt;&lt;DIV&gt;isr in the vector table (only for "TPM channel"-isr's).&lt;/DIV&gt;&lt;DIV&gt;* The bit 5 in TPM1SC lets me chose from 2 different channel operating modes. But I&lt;/DIV&gt;&lt;DIV&gt;cannot se that I can chose to not use the cannels at all.&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;If I use the TPM with channels:&lt;/DIV&gt;&lt;DIV&gt;* I still have to set TPM1SC = 0x17 won't I? (I never get the TPM channel interrupt&lt;/DIV&gt;&lt;DIV&gt;if I don't). This solution works for me, but maybe I'm doing something wrong&lt;/DIV&gt;&lt;DIV&gt;anyway...&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;-------------------------------&lt;/DIV&gt;&lt;DIV&gt;My current code:&lt;/DIV&gt;&lt;DIV&gt;void TimerInit(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1C0SC = 0x10; // Use output compare&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; TPM1SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void TimerStart(unsigned char high, unsigned char low)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1C0VH = high;&lt;BR /&gt;&amp;nbsp; TPM1C0VL = low;&lt;BR /&gt;&amp;nbsp; TPM1C0SC |= 0x40; // interrupt enable&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void ClearTimerRegisters(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;TPM1SC&amp;nbsp;&amp;nbsp; = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1C0SC = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1CNTH = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1CNTL = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1C0VH = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1C0VL = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1MODH = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1MODL = 0x00;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;interrupt void TimerISR(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1C0SC&amp;nbsp; &amp;amp;= ~0x80; //clear overflow flag&lt;BR /&gt;&amp;nbsp; TPM1C0SC&amp;nbsp; &amp;amp;= ~0x40; //clear enable&lt;BR /&gt;&amp;nbsp; // Do stuff&lt;BR /&gt;&amp;nbsp; ...&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void MCPSDataIndication(tRxPacket *gsRxPacket)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Place your code here to handle a mac layer data indication.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * RX packet is in the global structure&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * gsRxPacket.dataLength and gsRxPacket.data&lt;BR /&gt;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClearTimerRegisters(); // Stops the timer&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (gsRxPacket-&amp;gt;u8Status == SUCCESS)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Do stuff&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Start the timer that is used to check if messages stops comming&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerInit();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerStart(0x22, 0x22);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;-------------------------&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Again, thanks for your replies!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/_JR_&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 07 Feb 2008 18:21:50 GMT</pubDate>
    <dc:creator>J_R</dc:creator>
    <dc:date>2008-02-07T18:21:50Z</dc:date>
    <item>
      <title>How can I stop a timer?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187314#M14134</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;I have made a small radio sw, using SMAC for the MC1321 chip (HCS08). The whole system consists of one send unit&amp;nbsp;and&amp;nbsp;one receiver unit.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I'm using a timer to time out if messages stops comming in on the receiver side.&lt;/DIV&gt;&lt;DIV&gt;So when I receive a message I have to stop the timer and then restart it, but I cannot make it work. Once the timer is initiated and started it allways calls the ISR, even if i try to stop it before!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Can anyone see the error??&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;-------------------------------&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void TimerInit(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1C0SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; TPM1SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void TimerStart(unsigned char modH, unsigned char modL)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1MODH = modH;&lt;BR /&gt;&amp;nbsp; TPM1MODL = modL;&lt;BR /&gt;&amp;nbsp; TPM1C0SC |= 0x40;&amp;nbsp;&amp;nbsp; // interrupt enable&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void TimerClear(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; if(TPM1C0SC &amp;amp; 0x80)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TPM1C0SC &amp;amp;= ~0x80;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void TimerStop(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1SC = 0x00;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;interrupt void TimerISR(void)&lt;BR /&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; // We have a timeout!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; TimerClear();&lt;BR /&gt;&amp;nbsp; TimerStop();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;// Do stuff&amp;nbsp;&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;// MCPSDataIndication is called when data is received on the radio&lt;/DIV&gt;&lt;DIV&gt;void MCPSDataIndication(tRxPacket *gsRxPacket)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerClear();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerStop();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (gsRxPacket-&amp;gt;u8Status == SUCCESS)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerStart(); // Restart the timer&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Feb 2008 21:42:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187314#M14134</guid>
      <dc:creator>J_R</dc:creator>
      <dc:date>2008-02-06T21:42:20Z</dc:date>
    </item>
    <item>
      <title>Re: How can I stop a timer?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187315#M14135</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;It seems that you have&amp;nbsp;mixed the TPM and the TIM module.&lt;/DIV&gt;&lt;DIV&gt;If you look at the first routine, the TimerInit(), your registers start with TPM, but for eg the first line&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; TPM1C0SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;....does not make any sense at all.&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;It should either be&lt;/DIV&gt;&amp;nbsp; TPM1SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0;&amp;nbsp;&amp;nbsp; // to stop the clock&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;or....&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; TSC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; //&amp;nbsp;to stop the&amp;nbsp;clock&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;What kind of MCU are you using?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;Ake&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;TPM1CSC&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;assume that you are using the HC908 TIM module. With the 9S08 TPM module, the bits are a bit different,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;First the routine...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void TimerInit(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1C0SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; TPM1SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;....is wrong. It should be&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void TimerInit(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1CSC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; TPM&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; TPM1SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Feb 2008 23:19:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187315#M14135</guid>
      <dc:creator>Ake</dc:creator>
      <dc:date>2008-02-06T23:19:03Z</dc:date>
    </item>
    <item>
      <title>Re: How can I stop a timer?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187316#M14136</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;Oops, I forgot to remove some of my earlier corrections. This is how my message should look like:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;It seems that you have&amp;nbsp;mixed the TPM and the TIM module.&lt;/DIV&gt;&lt;DIV&gt;If you look at the first routine, the TimerInit(), your registers start with TPM, but for eg the first line&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; TPM1C0SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;....does not make any sense at all.&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;DIV&gt;It should either be&lt;/DIV&gt;&amp;nbsp; TPM1SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x0;&amp;nbsp;&amp;nbsp; // to stop the clock&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;or....&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; TSC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; //&amp;nbsp;to stop the&amp;nbsp;clock&lt;BR /&gt;&lt;/DIV&gt;&lt;DIV&gt;What kind of MCU are you using?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;Ake&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Feb 2008 23:20:59 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187316#M14136</guid>
      <dc:creator>Ake</dc:creator>
      <dc:date>2008-02-06T23:20:59Z</dc:date>
    </item>
    <item>
      <title>Re: How can I stop a timer?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187317#M14137</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Thanks for the fast reply!&lt;/DIV&gt;&lt;DIV&gt;I've got it working though, before I saw your reply.&lt;/DIV&gt;&lt;DIV&gt;I think that I'd better have a look into what you have written though.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;This is how I've solved it:&lt;/DIV&gt;&lt;DIV&gt;--------------------------------------------&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void TimerInit(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1C0SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; TPM1SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void TimerStart(unsigned char modH, unsigned char modL)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1MODH = modH;&lt;BR /&gt;&amp;nbsp; TPM1MODL = modL;&lt;BR /&gt;&amp;nbsp; TPM1C0SC |= 0x40;&amp;nbsp;&amp;nbsp; // interrupt enable&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void ClearTimerRegisters(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;TPM1SC&amp;nbsp;&amp;nbsp; = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1C0SC = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1CNTH = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1CNTL = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1C0VH = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1C0VL = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1MODH = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1MODL = 0x00;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;interrupt void TimerISR(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1C0SC&amp;nbsp; &amp;amp;= ~0x80; //clear overflow flag&lt;BR /&gt;&amp;nbsp; TPM1C0SC&amp;nbsp; &amp;amp;= ~0x40; //clear enable&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; LED4 = ~LED4; //TEMP&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; receivedCommand = NO_COMMAND;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;void MCPSDataIndication(tRxPacket *gsRxPacket)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClearTimerRegisters(); // Stops the timer&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (gsRxPacket-&amp;gt;u8Status == SUCCESS)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerInit();&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerStart(); // Restart the timer&lt;/DIV&gt;&lt;DIV&gt;....&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;--------------------------------------------&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;By the way, I use the Freescale refecence board MC1321x.&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 06 Feb 2008 23:53:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187317#M14137</guid>
      <dc:creator>J_R</dc:creator>
      <dc:date>2008-02-06T23:53:29Z</dc:date>
    </item>
    <item>
      <title>Re: How can I stop a timer?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187318#M14138</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi,&lt;/DIV&gt;&lt;DIV&gt;I understand that it is an 9S08 MCU in your dev tool.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;But I must say that the TimerInit() routine is quite strange&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;void TimerInit(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1C0SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;This&amp;nbsp;line write 0x17 to&amp;nbsp;&amp;nbsp;TPM1C0SC. So it sets the MS0B&amp;nbsp;and the ELS0A bit. It also tries&amp;nbsp;to set bit 0 and 1 which are always 0.&lt;/DIV&gt;&lt;DIV&gt;The clock has not stopped. No interrupts&amp;nbsp;are enabled.&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; TPM1SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;This line writes 0x17 to TPM1SC. So it sets the CLKSB and the CLKSA and the PS2 bit.&lt;/DIV&gt;&lt;DIV&gt;This means that the external source is for the timer clock and it is divided by 16 before using it.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Where did you get this code from?&lt;/DIV&gt;&lt;DIV&gt;Is it from Freescale? Then it must be a new version of 9S08 that I have never heard of.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;Ake&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;}&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 Feb 2008 00:28:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187318#M14138</guid>
      <dc:creator>Ake</dc:creator>
      <dc:date>2008-02-07T00:28:57Z</dc:date>
    </item>
    <item>
      <title>Re: How can I stop a timer?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187319#M14139</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;It appears that there may be some confusion between the registers TPM1SC and TPM1C0SC, as suggested by the comments within the code.&amp;nbsp;&amp;nbsp;The actual method used to generate the time interval seems muddled.&amp;nbsp; I suspect that the intent is to use overflow of the TPM module (the actual&amp;nbsp;interrupt that the ISR refers seems unclear).&amp;nbsp; This is suggested by the&amp;nbsp;change of the TPM1MOD value.&amp;nbsp; If this is the case, it is unnecessary to write anything to TPM1C0SC register, since TPM channels are not used in the process.&amp;nbsp; The TPM1C0SC value could remain at the reset default.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;An alternative timing method would be to use a TPM channel in output compare, interrupt only mode.&amp;nbsp; Typically, this method would operate with the TPM module in free running mode.&amp;nbsp; There would be no need to stop the TPM, nor alter the modulo value.&amp;nbsp; This would be the preferred method because it does not affect usage of other TPM channels.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;A minor point, when setting the TPM1MOD value, you can directly write a 16-bit value, rather than two 8-bit values.&amp;nbsp; This should simplify the code a little bit.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 Feb 2008 13:03:53 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187319#M14139</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2008-02-07T13:03:53Z</dc:date>
    </item>
    <item>
      <title>Re: How can I stop a timer?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187320#M14140</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi again,&lt;/DIV&gt;&lt;DIV&gt;I looked at your original message and saw that you used "SMAC for the MC1321 chip".&lt;/DIV&gt;&lt;DIV&gt;I looked up the MC1321, and found that this is somekind or a transmitter/reciever&amp;nbsp; connected to a 9S08 made by Freescale.&lt;/DIV&gt;&lt;DIV&gt;But I could not find what kind of 9S08 is used.&lt;/DIV&gt;&lt;DIV&gt;My question is, where did you get the source code?&lt;/DIV&gt;&lt;DIV&gt;Did you write it yourself or is it from an application note?&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I really must apologize, I am supposed to "know" the HC908/9S08 MCUs but I have not heard about the MC1321 chips before.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;Ake&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 Feb 2008 16:09:43 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187320#M14140</guid>
      <dc:creator>Ake</dc:creator>
      <dc:date>2008-02-07T16:09:43Z</dc:date>
    </item>
    <item>
      <title>Re: How can I stop a timer?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187321#M14141</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hello!&lt;/DIV&gt;&lt;DIV&gt;Yes the problem is that I haven't understood what the "TPM channel"-stuff is.&lt;/DIV&gt;&lt;DIV&gt;For instance, if I use the TPM alone:&lt;/DIV&gt;&lt;DIV&gt;* How can I TPM interrupts without using the channels? I can se no place for the&lt;/DIV&gt;&lt;DIV&gt;isr in the vector table (only for "TPM channel"-isr's).&lt;/DIV&gt;&lt;DIV&gt;* The bit 5 in TPM1SC lets me chose from 2 different channel operating modes. But I&lt;/DIV&gt;&lt;DIV&gt;cannot se that I can chose to not use the cannels at all.&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;If I use the TPM with channels:&lt;/DIV&gt;&lt;DIV&gt;* I still have to set TPM1SC = 0x17 won't I? (I never get the TPM channel interrupt&lt;/DIV&gt;&lt;DIV&gt;if I don't). This solution works for me, but maybe I'm doing something wrong&lt;/DIV&gt;&lt;DIV&gt;anyway...&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;-------------------------------&lt;/DIV&gt;&lt;DIV&gt;My current code:&lt;/DIV&gt;&lt;DIV&gt;void TimerInit(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1C0SC = 0x10; // Use output compare&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; TPM1SC = 0x07 |&amp;nbsp; // prescale divisor = 128&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0x10;&amp;nbsp;&amp;nbsp; // fixed system clock&amp;nbsp;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void TimerStart(unsigned char high, unsigned char low)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1C0VH = high;&lt;BR /&gt;&amp;nbsp; TPM1C0VL = low;&lt;BR /&gt;&amp;nbsp; TPM1C0SC |= 0x40; // interrupt enable&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void ClearTimerRegisters(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;TPM1SC&amp;nbsp;&amp;nbsp; = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1C0SC = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1CNTH = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1CNTL = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1C0VH = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1C0VL = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1MODH = 0x00;&lt;BR /&gt;&amp;nbsp;TPM1MODL = 0x00;&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;interrupt void TimerISR(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1C0SC&amp;nbsp; &amp;amp;= ~0x80; //clear overflow flag&lt;BR /&gt;&amp;nbsp; TPM1C0SC&amp;nbsp; &amp;amp;= ~0x40; //clear enable&lt;BR /&gt;&amp;nbsp; // Do stuff&lt;BR /&gt;&amp;nbsp; ...&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;void MCPSDataIndication(tRxPacket *gsRxPacket)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * Place your code here to handle a mac layer data indication.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * RX packet is in the global structure&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * gsRxPacket.dataLength and gsRxPacket.data&lt;BR /&gt;&amp;nbsp; */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClearTimerRegisters(); // Stops the timer&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (gsRxPacket-&amp;gt;u8Status == SUCCESS)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Do stuff&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Start the timer that is used to check if messages stops comming&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerInit();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimerStart(0x22, 0x22);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;-------------------------&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Again, thanks for your replies!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/_JR_&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 Feb 2008 18:21:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187321#M14141</guid>
      <dc:creator>J_R</dc:creator>
      <dc:date>2008-02-07T18:21:50Z</dc:date>
    </item>
    <item>
      <title>Re: How can I stop a timer?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187322#M14142</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello JR,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;I will briefly attempt to describe the basic operation ot the TPM module, hopefully to clear up some of the confusion.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;The module consists of a 16-bit counter that runs continuously during normal operation.&amp;nbsp; Whenever the count value reaches the value contained within TPM1MOD, an overflow event occurs, and the counter will begin counting from zero at the next (prescaled) timer clock.&amp;nbsp; The overflow will generate an interrupt if the TOIE bit within the TPM1SC register is set.&amp;nbsp; The TOF flag within the same register will be set, whether or not the interrupt is enabled.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Even if you are not specifically using the TPM overflow facility, the TPM1SC register also controls the pre-scaler setting and the clock source selection, so will usually need to be initialized.&amp;nbsp; Many applications may leave the TPM1MOD setting at the reset default setting, for a full 16-bit count.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Associated with the TPM are a number of "channels" that operate quite independently of the timer overflow, but their operation will be affected by the TPM1MOD setting.&amp;nbsp; Each channel may be configured for one of the operating modes,&lt;BR /&gt;1)&amp;nbsp; Input capture, or&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;2)&amp;nbsp; Output compare with hardware output, or&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;3)&amp;nbsp; Output compare, interrupt only, or&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;4)&amp;nbsp; PWM operation, either edge aligned or centre aligned.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;If the meaning of any of these operations&amp;nbsp;is unclear, perhaps you&amp;nbsp;should re-read the relevant paragraphs in the data sheet.&amp;nbsp; For channel 0, the mode of operation is controlled by the TPM1C0SC register.&amp;nbsp; If none of these operating modes are needed, the register can remain at the default setting.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;An interrupt vector is provided for each channel, and a separate vector for overflow interrupts.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;To provide a timeout delay as you require,&amp;nbsp;the method used will depend on the length of the delay, and the accuracy required for the delay.&amp;nbsp; The output compare method can be very accurate, especially for a hardware output, but becomes more complex if the required delay exceeds the overflow period.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;If the required delay is quite long, and is many times the overflow period, a very simple method is to count the number of overflows.&amp;nbsp; If the timer runs continuously, and is not reset, the timing uncertainty will be one overflow period.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;I suspect that, for your specific application, high accuracy is not a requirement, and since you have a prescale division of 128,&amp;nbsp;the second method may suffice if you were to reduce the prescale setting to 1.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;word Tcount = 0;&amp;nbsp; /* Global variable */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void TPM_Init(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp; TPM1SC = 0x50; /* prescale = 1,&amp;nbsp;fixed system clock,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Overflow interrupt enabled&amp;nbsp;*/&lt;BR /&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;P&gt;&lt;FONT size="2"&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;&lt;FONT face="Courier New"&gt;void SetTimeout( word val)&lt;BR /&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;{&lt;BR /&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; Tcount = val;&amp;nbsp; /* Multiple of TPM overflow period */&lt;BR /&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;interrupt void TPM_Overflow_ISR(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;TPM1SC_TOF = 0;&amp;nbsp; /* Clear overflow flag */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp; if (Tcount) {&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Tcount--;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Tcount == 0) {&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Do timeout stuff */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp; }&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;If the action required on timeout is complex and lengty, it is probably not a good idea to execute within the ISR code.&amp;nbsp; The alternative is, within main() or an associated function, to periodically poll the value&amp;nbsp;of Tcount.&amp;nbsp; When it reaches zero, the value will remain at zero to indicate that timeout has occurred.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by bigmac on &lt;SPAN class="date_text"&gt;2008-02-07&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;11:55 PM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 07 Feb 2008 20:39:00 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/How-can-I-stop-a-timer/m-p/187322#M14142</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2008-02-07T20:39:00Z</dc:date>
    </item>
  </channel>
</rss>

