<?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: QG8 Timer problem in 8-bit Microcontrollers</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/QG8-Timer-problem/m-p/140516#M5648</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Perhaps I missed it, but I can't find anywhere in your code examples where the TPM interrupts are enabled. The code lines,&lt;BR /&gt;&lt;BR /&gt;====&amp;gt; mov #$28,TPMC1SC ; Enable output compare interrupt, edge-PWM&lt;BR /&gt;====&amp;gt; mov #$28,TPMC0SC&lt;BR /&gt;&lt;BR /&gt;will not enable interrupts. Bit #6 is the interrupt enable bit.&lt;BR /&gt;&lt;BR /&gt;The following lines will enable interrupts:&lt;BR /&gt;&lt;BR /&gt;====&amp;gt; mov #$68,TPMC1SC ; CH0 - This sets the interrupt enable bit&lt;BR /&gt;====&amp;gt; mov #$68,TPMC0SC ; CH1 - This sets the interrupt enable bit&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 26 Dec 2006 20:19:21 GMT</pubDate>
    <dc:creator>thisobj</dc:creator>
    <dc:date>2006-12-26T20:19:21Z</dc:date>
    <item>
      <title>QG8 Timer problem</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/QG8-Timer-problem/m-p/140515#M5647</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Greetings all&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Task:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Use the timer module to create a series of pulses with predefined length.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;My solution:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Setup the timer module as edge-aligned PWM and set teh proper frequency and duty cycle. Then activate output compare interrupt and count the number of output compares until the desired pulses has been met. Then set the duty cycle to zero to stop the pulses.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;*******************************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Code implementation #1:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This code almost works. If i set PulseCount = 10, then the first two output compares happens right after each other, so theres no pulse to be measured on the output. The final 8 pulses gets transmitted just fine.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I've tried resetting the main counter in the PushUpBtn and PushDwnBtn with no change in behaviour.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;**************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; Initialization code&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #28000&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMMOD&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC1V&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC0V&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;mov #$0F,TPMSC ; Store settings - No TOF interrupt needed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mov #$28,TPMC1SC ; Enable output compare interrupt, edge-PWM&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mov #$28,TPMC0SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;**************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; PushUpBtn&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;PushUpBtn:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pshhx&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #PULSE_LEN&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC0V ; Set the pulse length&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pulhx&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rts&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;PushDwnBtn:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pshhx&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #PULSE_LEN&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC1V ; Set the pulse length&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pulhx&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rts&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;***************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; isrTPMCH1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; Timer output compare interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; This interrupt is used to count the number&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; of pulses sent to AP110. It decrements the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; PulseCount and stops the PWM when it reaches&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; 0x00 in PulseCount&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;isrTPMCH1:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;lda TPMC1SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;and #$7F ; Clear the output compare flag&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sta TPMC1SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dbnz PulseCount,isrTPMCH1End&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC1V&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;isrTPMCH1End:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rti&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;***************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; isrTPMCH0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; See description of isrTPMCH1&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;isrTPMCH0:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;lda TPMC0SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;and #$7F ; Clear the output compare flag&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sta TPMC0SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dbnz PulseCount,isrTPMCH0End&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC0V&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;isrTPMCH0End:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rti&lt;/SPAN&gt;&lt;BR /&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;SPAN&gt;Code implementation #2:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;This code won't work at all. The output compare interrupt triggers fine, but the output stage on the pins never change. I can't figure out why this happens?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;**************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; Initialization code&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #28000&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMMOD&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC1V&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC0V&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;mov #$0F,TPMSC ; Store settings - No TOF interrupt needed.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mov #$28,TPMC1SC ; Enable output compare interrupt, edge-PWM&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;mov #$28,TPMC0SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;**************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; PushUpBtn&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;PushUpBtn:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pshhx&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bclr TPMC0SC_CH0IE,TPMC0SC ; Disable interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMCNT ; Reset the main counter&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #PULSE_LEN&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC0V ; Set the pulse length&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;lda TPMC0SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;and #$7F ; Clear the output compare flag&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ora #$40 ; Enable interrupt @output compare&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sta TPMC0SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pulhx&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rts&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;PushDwnBtn:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pshhx&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bclr TPMC1SC_CH1IE,TPMC1SC ; Disable interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMCNT ; Reset the main counter&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #PULSE_LEN&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC1V ; Set the pulse length&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;lda TPMC1SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;and #$7F ; Clear the output compare flag&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ora #$40 ; Enable interrupt @output compare&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sta TPMC1SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;pulhx&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rts&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;***************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; isrTPMCH1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; Timer output compare interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; This interrupt is used to count the number&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; of pulses sent to AP110. It decrements the&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; PulseCount and stops the PWM when it reaches&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; 0x00 in PulseCount&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;isrTPMCH1:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;lda TPMC1SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;and #$7F ; Clear the output compare flag&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sta TPMC1SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dbnz PulseCount,isrTPMCH1End&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC1V&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bclr TPMC1SC_CH1IE,TPMC1SC ; Disable interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;isrTPMCH1End:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rti&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;***************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; isrTPMCH0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;; See description of isrTPMCH1&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;isrTPMCH0:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;lda TPMC0SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;and #$7F ; Clear the output compare flag&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sta TPMC0SC&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dbnz PulseCount,isrTPMCH0End&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;ldhx #0&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;sthx TPMC0V&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;bclr TPMC0SC_CH0IE,TPMC0SC ; Disable interrupt&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;isrTPMCH0End:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;rti&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;;*******************************************************************************&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;In both code implementations the vector table looks like this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;ORG $FFF2&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dc.w isrTPMCH1&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;dc.w isrTPMCH0&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Anyone got some ideas how to get the timer module to send out 10 well-defined pulses if i set PulseCount = 10?&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 18 Dec 2006 21:58:03 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/QG8-Timer-problem/m-p/140515#M5647</guid>
      <dc:creator>Kaare</dc:creator>
      <dc:date>2006-12-18T21:58:03Z</dc:date>
    </item>
    <item>
      <title>Re: QG8 Timer problem</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/QG8-Timer-problem/m-p/140516#M5648</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Perhaps I missed it, but I can't find anywhere in your code examples where the TPM interrupts are enabled. The code lines,&lt;BR /&gt;&lt;BR /&gt;====&amp;gt; mov #$28,TPMC1SC ; Enable output compare interrupt, edge-PWM&lt;BR /&gt;====&amp;gt; mov #$28,TPMC0SC&lt;BR /&gt;&lt;BR /&gt;will not enable interrupts. Bit #6 is the interrupt enable bit.&lt;BR /&gt;&lt;BR /&gt;The following lines will enable interrupts:&lt;BR /&gt;&lt;BR /&gt;====&amp;gt; mov #$68,TPMC1SC ; CH0 - This sets the interrupt enable bit&lt;BR /&gt;====&amp;gt; mov #$68,TPMC0SC ; CH1 - This sets the interrupt enable bit&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 26 Dec 2006 20:19:21 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/QG8-Timer-problem/m-p/140516#M5648</guid>
      <dc:creator>thisobj</dc:creator>
      <dc:date>2006-12-26T20:19:21Z</dc:date>
    </item>
  </channel>
</rss>

