<?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>8-bit MicrocontrollersのトピックRe: 2 Timerinterrupts with HC908QY4A; Wrong Time?? Beginner-Problem?</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/2-Timerinterrupts-with-HC908QY4A-Wrong-Time-Beginner-Problem/m-p/128170#M1567</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Sebastian,&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 is not entirely clear what you are trying to do with the timer channels.&amp;nbsp; Are you trying to generate an output pulses using&amp;nbsp;output compare, or perhaps a software time delay?&amp;nbsp; You will need to post the code you are using to set up the TIM module, and also the ISR code for each timer channel and the timer overflow interrupt.&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;Your problem might be because the channel 1 ISR takes longer than 16 microseconds (51 bus cycles) to complete, so the channel 0 interrupt does not get serviced quickly enough.&amp;nbsp; It may not be feasible to have such a short period between interrupts for channel 0 when other ISRs need to execute.&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;With a prescale value of 1, the timer overflow period will be 20.48 milliseconds, so the interrupt&amp;nbsp;probably occurs&amp;nbsp;after the timer starts a new&amp;nbsp;cycle.&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;BR /&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 26 Aug 2006 02:32:14 GMT</pubDate>
    <dc:creator>bigmac</dc:creator>
    <dc:date>2006-08-26T02:32:14Z</dc:date>
    <item>
      <title>2 Timerinterrupts with HC908QY4A; Wrong Time?? Beginner-Problem?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/2-Timerinterrupts-with-HC908QY4A-Wrong-Time-Beginner-Problem/m-p/128169#M1566</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi all&lt;/DIV&gt;&lt;DIV&gt;(&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-happy.gif"&gt;&lt;IMG alt=":smileyhappy:" class="emoticon emoticon-smileyhappy" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-happy.gif" title="Smiley Happy" /&gt;&lt;/A&gt; my first post)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I tried to program two timer interrupts.&lt;/DIV&gt;&lt;DIV&gt;Busclock 3.2MHz&lt;/DIV&gt;&lt;DIV&gt;Timer 0 : 16us (15.938us)&lt;/DIV&gt;&lt;SPAN&gt;Timer&amp;nbsp;1 : 4096us (4095.958us) &lt;/SPAN&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I use Codewarrior / Processor Expert.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;If I only program Timer0 with 16us (Timer1 unused), the InterruptTimer0&amp;nbsp;comes every 16us, which is ok.&lt;/DIV&gt;&lt;DIV&gt;BUT if I use Timer0 with 16us AND Timer1 with 4096us the InterruptTimer0&amp;nbsp;comes every 20'480us??? (Timer Interrupt 1 comes every 40196us as I wish)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Why 20480us, not the wanted 16us??&amp;nbsp; BTW: 20480us is 5 * 4096us!&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Please Help me!&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am new to 8Bit-Programming/Codewarrior.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;With Regards&lt;/DIV&gt;&lt;DIV&gt;Sebastian&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 25 Aug 2006 02:29:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/2-Timerinterrupts-with-HC908QY4A-Wrong-Time-Beginner-Problem/m-p/128169#M1566</guid>
      <dc:creator>mojo</dc:creator>
      <dc:date>2006-08-25T02:29:09Z</dc:date>
    </item>
    <item>
      <title>Re: 2 Timerinterrupts with HC908QY4A; Wrong Time?? Beginner-Problem?</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/2-Timerinterrupts-with-HC908QY4A-Wrong-Time-Beginner-Problem/m-p/128170#M1567</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Sebastian,&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 is not entirely clear what you are trying to do with the timer channels.&amp;nbsp; Are you trying to generate an output pulses using&amp;nbsp;output compare, or perhaps a software time delay?&amp;nbsp; You will need to post the code you are using to set up the TIM module, and also the ISR code for each timer channel and the timer overflow interrupt.&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;Your problem might be because the channel 1 ISR takes longer than 16 microseconds (51 bus cycles) to complete, so the channel 0 interrupt does not get serviced quickly enough.&amp;nbsp; It may not be feasible to have such a short period between interrupts for channel 0 when other ISRs need to execute.&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;With a prescale value of 1, the timer overflow period will be 20.48 milliseconds, so the interrupt&amp;nbsp;probably occurs&amp;nbsp;after the timer starts a new&amp;nbsp;cycle.&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;BR /&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 26 Aug 2006 02:32:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/2-Timerinterrupts-with-HC908QY4A-Wrong-Time-Beginner-Problem/m-p/128170#M1567</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2006-08-26T02:32:14Z</dc:date>
    </item>
    <item>
      <title>Re: 2 Timerinterrupts with HC908QY4A   -&gt;  TIM based PWM with High Frequency</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/2-Timerinterrupts-with-HC908QY4A-Wrong-Time-Beginner-Problem/m-p/128171#M1568</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;Thanks a lot for your reply. &lt;IMG alt=":smileyvery-happy:" class="emoticon emoticon-smileyvery-happy" id="smileyvery-happy" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-very-happy.gif" title="Smiley Very Happy" /&gt;&lt;BR /&gt;You have right. The ISRs takes too long. &lt;IMG alt="Smiley Sad" class="emoticon emoticon-smileysad" id="smileysad" src="https://community.nxp.com/i/smilies/16x16_smiley-sad.png" title="Smiley Sad" /&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;What I want to do:&lt;BR /&gt;I try to get TIM based PWMs:&lt;BR /&gt;- 2 PWM-Outputs&lt;BR /&gt;- 1 Timer for a systemclocktick, which my SW uses&lt;BR /&gt;- the frequency MUST be at least 200Hz -&amp;gt; cycle duration &amp;lt; 5ms&lt;BR /&gt;- and the resolution at least 1/250&lt;BR /&gt;- some inputs to control the PWMs, an ADC-Input, ext.IRQ,... (each pin is used)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;This was my Solution:&lt;BR /&gt;- Channel 0 :&amp;nbsp; 4096us (256 * 16us)&lt;/DIV&gt;&lt;BLOCKQUOTE dir="ltr"&gt;&lt;DIV&gt;Each 4096us-Timerinterrupt increments my systemclocktick, starts my period (Signal High) and sets an PulseTime-counter(,which is between 0-255)&lt;BR /&gt;&amp;nbsp;... of both PWMs&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;- Channel 1 : 16us&lt;/DIV&gt;&lt;BLOCKQUOTE dir="ltr"&gt;&lt;DIV&gt;&amp;nbsp;Each 16us-Timerinterrupt decrements the PulseTime-counter and if zero the the pulse time is reached-&amp;gt; (Signal Low)&lt;BR /&gt;&amp;nbsp;... of both PWMs&lt;/DIV&gt;&lt;/BLOCKQUOTE&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;My idea was to have a high frequency and a resolution of 256.&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;BUT now I have to resign, because 16us seems impossible. I implemented my idea, but the fastest 2nd Timer I can use is 90us. (without my TimerInterrupt-Code : 50us)&lt;/DIV&gt;&lt;DIV&gt;I tried to quicken my 2 Timer ISRs, but the changes were marginal.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Please tell me, if you know a better solution for this problem!&lt;BR /&gt;I suspect that I am doing something wrong (design error), because my understanding of the HC08 and its compare-logic is small.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Sebastian&lt;BR /&gt;&amp;nbsp;(excuse my English)&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;SPAN class="msg_source_code"&gt;&lt;SPAN class="text_smallest"&gt;Code:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;PRE&gt;ISR(tim1_Interrupt)
{
  TWREG var;                           /* Union used for correct access to the 16-bit IO register */&lt;/PRE&gt;&lt;DIV&gt;&amp;nbsp;var.b.high = TCH1H;&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; /* Load of actual value of the compare register */&lt;BR /&gt;&amp;nbsp;var.b.low = TCH1L;&lt;BR /&gt;&amp;nbsp;var.w += CmpVal;&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;&amp;nbsp; /* Add value corresponding with periode */&lt;BR /&gt;&amp;nbsp;TCH1H = var.b.high;&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; /* Store it to compare register */&lt;BR /&gt;&amp;nbsp;TCH1L = var.b.low;&lt;BR /&gt;&amp;nbsp;/* TSC1: CH1F=0 */&lt;BR /&gt;&amp;nbsp;clrReg8Bits(TSC1, 0x80);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Reset interrupt request flag */&lt;BR /&gt;&amp;nbsp;tim1_OnInterrupt();&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; /* Invoke user event */&amp;nbsp; //...where my code is&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;1 ISR with a 40us Timerinterrupt (generated by Freescale Codewarrior):&lt;/DIV&gt;&lt;DIV&gt;void tim0_Init(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;/* TMODH: BIT15=1,BIT14=1,BIT13=1,BIT12=1,BIT11=1,BIT10=1,BIT9=1,BIT8=1 */&lt;BR /&gt;&amp;nbsp;setReg8(TMODH, 0xFF);&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; /* Set modulo register to maximal value */&lt;BR /&gt;&amp;nbsp;/* TMODL: BIT7=1,BIT6=1,BIT5=1,BIT4=1,BIT3=1,BIT2=1,BIT1=1,BIT0=1 */&lt;BR /&gt;&amp;nbsp;setReg8(TMODL, 0xFF);&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;&lt;BR /&gt;&amp;nbsp;/* TSC: TOF=0,TOIE=0,TSTOP=1,TRST=1,??=0,PS2=0,PS1=0,PS0=0 */&lt;BR /&gt;&amp;nbsp;setReg8(TSC, 0x30);&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; /* Set up (output) compare mode */&lt;BR /&gt;&amp;nbsp;/* TSC0: CH0F=0,CH0IE=0,MS0B=0,MS0A=1,ELS0B=0,ELS0A=0,TOV0=0,CH0MAX=0 */&lt;BR /&gt;&amp;nbsp;setReg8(TSC0, 0x10);&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;&lt;BR /&gt;&amp;nbsp;SetCV((word)0x007F );&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; /* Store appropriate value to the compare register according to the selected high speed CPU mode */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//(0x007F = 128d-1 =&amp;gt; 128* (1/3,2MHz) = 40us&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;/* TSC: TRST=1 */&lt;BR /&gt;&amp;nbsp;setReg8Bits(TSC, 0x10);&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; /* Reset counter */&lt;BR /&gt;&amp;nbsp;/* TSC0: CH0F=0 */&lt;BR /&gt;&amp;nbsp;clrReg8Bits(TSC0, 0x80);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Reset request flag and */&lt;BR /&gt;&amp;nbsp;/* TSC0: CH0IE=1 */&lt;BR /&gt;&amp;nbsp;setReg8Bits(TSC0, 0x40);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* enable Compare interrupt */&lt;BR /&gt;}&lt;/DIV&gt;&lt;DIV&gt;&lt;BR /&gt;ISR(tim0_Interrupt)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;TWREG var;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Union used for correct access to the 16-bit IO register */&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;var.b.high = TCH0H;&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; /* Load of actual value of the compare register */&lt;BR /&gt;&amp;nbsp;var.b.low = TCH0L;&lt;BR /&gt;&amp;nbsp;var.w += CmpVal;&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;&amp;nbsp; /* Add value corresponding with periode */&lt;BR /&gt;&amp;nbsp;TCH0H = var.b.high;&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; /* Store it to compare register */&lt;BR /&gt;&amp;nbsp;TCH0L = var.b.low;&lt;BR /&gt;&amp;nbsp;/* TSC0: CH0F=0 */&lt;BR /&gt;&amp;nbsp;clrReg8Bits(TSC0, 0x80);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Reset interrupt request flag */&lt;BR /&gt;&amp;nbsp;tim0_OnInterrupt();&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; /* Invoke user event */&lt;BR /&gt;}&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;SPAN class="msg_source_code"&gt;&lt;SPAN class="text_smallest"&gt;Code:&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;PRE&gt;My try for a quicker Timer-ISR  :ISR(tim1_Interrupt){  if (TCH0L==0){    TCH0L = 0x80;     //(=128d =&amp;gt; 128 * (1/3,2MHz) = 40us  }else {    TCH0L = 0x00;    TCH0H++;    }  /* TSC1: CH1F=0 */  clrReg8Bits(TSC1, 0x80);             /* Reset interrupt request flag */   tim1_OnInterrupt();                  /* Invoke user event */}&lt;/PRE&gt;&lt;/DIV&gt;&lt;P&gt;Message Edited by mojo on &lt;SPAN class="date_text"&gt;2006-08-28&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;01:11 PM&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 02 Nov 2020 14:45:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/2-Timerinterrupts-with-HC908QY4A-Wrong-Time-Beginner-Problem/m-p/128171#M1568</guid>
      <dc:creator>mojo</dc:creator>
      <dc:date>2020-11-02T14:45:07Z</dc:date>
    </item>
    <item>
      <title>Re: 2 Timerinterrupts with HC908QY4A   -&gt;  TIM based PWM with High Frequency</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/2-Timerinterrupts-with-HC908QY4A-Wrong-Time-Beginner-Problem/m-p/128172#M1569</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Sebastian,&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;Does your system tick have to be every 4.096 milliseconds - the idea would be to match this to the PWM cycle period of 5 milliseconds.&amp;nbsp; In this case it would seem feasible to use unbuffered PWM on each of the two TIM channels, and modify TMOD for a value of 15999 (0x3E7F), assuming a prescale value of&amp;nbsp;1,&amp;nbsp;to provide the 200 Hz PWM frequency.&amp;nbsp; You could then use the TIM overflow interrupt for your tick processing.&amp;nbsp; Of course you would need to suitably scale your PWM setting for the range 0-15999.&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;Alternatively, you could increase the PWM frequency to give a period of 4.096 milliseconds, with a suitable TMOD value.&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;For unbuffered PWM you would set the TIM channel to toggle on overflow, and clear the output on each output compare.&amp;nbsp; You would need to enable the OC interrupt only when the PWM value needed to alter,&amp;nbsp;to change the TIM channel register value during the ISR.&amp;nbsp; Otherwise you wouldn't&amp;nbsp;need TIM channel interrupts to be 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;Would this scenario meet your requirements?&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>Tue, 29 Aug 2006 02:00:34 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/2-Timerinterrupts-with-HC908QY4A-Wrong-Time-Beginner-Problem/m-p/128172#M1569</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2006-08-29T02:00:34Z</dc:date>
    </item>
    <item>
      <title>Re: 2 Timerinterrupts with HC908QY4A   -&gt;  TIM based PWM with High Frequency</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/2-Timerinterrupts-with-HC908QY4A-Wrong-Time-Beginner-Problem/m-p/128173#M1570</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi Mac&lt;BR /&gt;&lt;BR /&gt;You gave me the needed hint! Thank you very much.&lt;BR /&gt;&lt;BR /&gt;I had to read through the PWM-part of de manual a lot of times before I really understand how to implement my problem with the several interrupts.&lt;BR /&gt;&lt;BR /&gt;But now it works satisfactorily. Thanks to you.&lt;BR /&gt;&lt;BR /&gt;Greetings from Switzerland.&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 19 Sep 2006 16:51:44 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/2-Timerinterrupts-with-HC908QY4A-Wrong-Time-Beginner-Problem/m-p/128173#M1570</guid>
      <dc:creator>mojo</dc:creator>
      <dc:date>2006-09-19T16:51:44Z</dc:date>
    </item>
  </channel>
</rss>

