<?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: MPC5744 etimer capture fail in one channal in MPC5xxx</title>
    <link>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714855#M9483</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Hi, Petr&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;Thank You!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;void eTimer_Init(uint8_t EtimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; volatile struct ETIMER_tag *pETIMERn;&lt;/P&gt;&lt;P&gt;switch(EtimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; pETIMERn-&amp;gt;ENBL.R = 0x0; // disable Timer0 channels&lt;/P&gt;&lt;P&gt;/* Configure the channel */&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.R = 0x3804; // Counts only rising edge of the MC_CLK (100MHz in RUN0), divide by 1, count up, count repeatedly, rollover&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.CNTMODE = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.PRISRC = 0x1F;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.SECSRC = DspiNumber;&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;CH[DspiNumber].COMP1.R = 0xFFFF;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.R = 0x0264;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL3.R = 1;&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber+1].CTRL1.R = 0xF004; // Counts only rising edge of the MC_CLK (100MHz in RUN0), divide by 1, count up, count repeatedly, rollover&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.CNTMODE = 3;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.PRISRC = 0x10+DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.SECSRC = DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].COMP1.R = 0xFFFF;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].CCCTRL.R = 0x0264;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].CTRL3.R = 1;&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.PRISRC = 0x1F;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CPT1MODE = 2;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CPT2MODE = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CFWM = 2;&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.LENGTH = 0;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.ONCE = 0;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.SECSRC = DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.CNTMODE = 1;*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber].COMP1.R = 0xFFFF;&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.R = 0x0264; // compare on COMP1 when counting up, COMP2 when counting down&lt;BR /&gt; // CAPT2 on falling edge, CAPT1 on rising edge, 2 entries&lt;BR /&gt; // free-running mode&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ONESHOT = 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CTRL3.R = 1;&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CTRL3.B.ROC = 3;&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;ENBL.B.ENBL |= (1&amp;lt;&amp;lt;DspiNumber)||(1&amp;lt;&amp;lt;(DspiNumber+1)); // Enable Timer0 channel 1&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 1; // starts the input capture process&lt;BR /&gt; //pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ONESHOT = 1;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;void eTimer_EnableChannal(uint8_t eTimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; volatile struct ETIMER_tag *pETIMERn;&lt;/P&gt;&lt;P&gt;switch(eTimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;ENBL.B.ENBL |= (1&amp;lt;&amp;lt;DspiNumber); // Enable Timer0 channel 1&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void eTimer_Value(uint8_t EtimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; double counts[2];&lt;BR /&gt; uint32_t capture_ch[4],capture_ch1[4],edge[5];&lt;BR /&gt; uint8_t eTimerSTS = 0;&lt;/P&gt;&lt;P&gt;double freq,period,duty,pulseH,pulseL;&lt;/P&gt;&lt;P&gt;volatile struct ETIMER_tag *pETIMERn;&lt;BR /&gt; eTimer_Channal.duty = 0;&lt;BR /&gt; eTimer_Channal.Freq = 0;&lt;BR /&gt; eTimer_Channal.Period = 0;&lt;/P&gt;&lt;P&gt;switch(EtimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].CCCTRL.B.ARM = 1;&lt;BR /&gt; while(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber].STS.R))&lt;BR /&gt; { //(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 == 0x0)||(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 == 0x0)&lt;BR /&gt; // Delayms(100);&lt;BR /&gt; // if(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber].STS.R)) eTimerSTS = 1;&lt;BR /&gt; }&lt;BR /&gt; while(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber+1].STS.R))&lt;BR /&gt; { //(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 == 0x0)||(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 == 0x0)&lt;BR /&gt; // Delayms(100);&lt;BR /&gt; // if(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber].STS.R)) eTimerSTS = 1;&lt;BR /&gt; }&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 0; // stop the input capture process&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 = 0x1;&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 = 0x1;&lt;/P&gt;&lt;P&gt;capture_ch[0] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT1.R; //First rising edge&lt;BR /&gt; capture_ch[1] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT2.R; //First falling edge&lt;BR /&gt; capture_ch[2] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT1.R; //Second rising edge&lt;BR /&gt; capture_ch[3] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT2.R; //Second falling edge&lt;/P&gt;&lt;P&gt;capture_ch1[0] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT1.R; //First rising edge&lt;BR /&gt; capture_ch1[1] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT2.R; //First falling edge&lt;BR /&gt; capture_ch1[2] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT1.R; //Second rising edge&lt;BR /&gt; capture_ch1[3] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT2.R; //Second falling edge&lt;/P&gt;&lt;P&gt;edge[1] = capture_ch1[0]*65536 + capture_ch[0]; // save 1st rising edge&lt;BR /&gt; edge[2] = capture_ch1[1]*65536 + capture_ch[1]; // save 1st falling edge&lt;BR /&gt; edge[3] = capture_ch1[2]*65536 + capture_ch[2]; // save 2nd rising edge&lt;BR /&gt; edge[4] = capture_ch1[3]*65536 + capture_ch[3]; // save 2nd falling edge&lt;/P&gt;&lt;P&gt;if(edge[3]&amp;gt;edge[1])&lt;BR /&gt; {&lt;BR /&gt; counts[0] = edge[3] - edge[1];&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; counts[0] = (0xFFFFFFFF - edge[1] +1) + edge[3];&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;eTimer_Channal.Freq = (float)100000000.0/counts[0];&lt;BR /&gt; eTimer_Channal.Period = counts[0] / (float)100000.0;&lt;/P&gt;&lt;P&gt;if(edge[2]&amp;gt;edge[1])&lt;BR /&gt; {&lt;BR /&gt; counts[1] = edge[2] - edge[1];&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; counts[1] = (0xFFFFFFFF - edge[1] +1) + edge[2];&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pulseH = counts[1] / (float)100000.0;&lt;BR /&gt; pulseL = eTimer_Channal.Period-pulseH;&lt;/P&gt;&lt;P&gt;eTimer_Channal.duty = counts[1]*100/counts[0];//pulseH/eTimer_Channal.Period *100;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].STS.R = 0x00C0; // clear eTimern channel n's capture1/2 flags&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].STS.R = 0x00C0; // clear eTimern channel n's capture1/2 flags&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I fail to get duty. (eTimer1,channal4);&lt;/P&gt;&lt;P&gt;Clipping&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 27 Sep 2017 09:05:57 GMT</pubDate>
    <dc:creator>pingli</dc:creator>
    <dc:date>2017-09-27T09:05:57Z</dc:date>
    <item>
      <title>MPC5744 etimer capture fail in one channal</title>
      <link>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714853#M9481</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,NXP&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;look the file ,6 Measure signal parameters:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void eTimer_Init(uint8_t EtimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; volatile struct ETIMER_tag *pETIMERn;&lt;/P&gt;&lt;P&gt;switch(EtimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; pETIMERn-&amp;gt;ENBL.R = 0x0; // disable Timer0 channels&lt;/P&gt;&lt;P&gt;/* Configure the channel */&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.R = 0x38C1;//0x2001;//0x3801; // Counts only rising edge of the MC_CLK (100MHz in RUN0), divide by 1, count up, count repeatedly, rollover&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.PRISRC = 0x18;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CPT1MODE = 2;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CPT2MODE = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.LENGTH = 0;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.ONCE = 0;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.SECSRC = DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.CNTMODE = 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;CH[DspiNumber].COMP1.R = 0xFFFF;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.R = 0x0264; // compare on COMP1 when counting up, COMP2 when counting down&lt;BR /&gt; // CAPT2 on falling edge, CAPT1 on rising edge, 2 entries&lt;BR /&gt; // free-running mode&lt;BR /&gt;/*&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ONESHOT = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CFWM = 2;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL3.R = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL3.B.ROC = 3;&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;ENBL.B.ENBL |= (1&amp;lt;&amp;lt;DspiNumber); // Enable Timer0 channel 1&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 1; // starts the input capture process&lt;BR /&gt; //pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ONESHOT = 1;&lt;BR /&gt;*/&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;void eTimer_EnableChannal(uint8_t eTimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; volatile struct ETIMER_tag *pETIMERn;&lt;/P&gt;&lt;P&gt;switch(eTimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;ENBL.B.ENBL |= (1&amp;lt;&amp;lt;DspiNumber); // Enable Timer0 channel 1&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void eTimer_Value(uint8_t EtimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; uint32_t counts;&lt;BR /&gt; uint32_t capture_ch[4];&lt;BR /&gt; uint8_t eTimerSTS = 0;&lt;/P&gt;&lt;P&gt;float freq,period,duty,pulseH,pulseL;&lt;/P&gt;&lt;P&gt;volatile struct ETIMER_tag *pETIMERn;&lt;BR /&gt; eTimer_Channal.duty = 0;&lt;BR /&gt; eTimer_Channal.Freq = 0;&lt;BR /&gt; eTimer_Channal.Period = 0;&lt;/P&gt;&lt;P&gt;switch(EtimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 1;&lt;BR /&gt; while((pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 == 0x0)||(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 == 0x0))&lt;BR /&gt; { //(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 == 0x0)||(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 == 0x0)&lt;BR /&gt; // Delayms(100);&lt;BR /&gt; // if(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber].STS.R)) eTimerSTS = 1;&lt;BR /&gt; }&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 0; // stop the input capture process&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 = 0x1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 = 0x1;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; capture_ch[0] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT1.R; //First rising edge&lt;BR /&gt; capture_ch[1] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT2.R; //First falling edge&lt;BR /&gt; capture_ch[2] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT1.R; //Second rising edge&lt;BR /&gt; capture_ch[3] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT2.R; //Second falling edge&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; counts = capture_ch[2] - capture_ch[0];&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; eTimer_Channal.Freq = (float)(100000000.0/counts);&lt;BR /&gt; eTimer_Channal.Period = (counts / (float)100000.0)*1000000;&lt;/P&gt;&lt;P&gt;counts = capture_ch[1] - capture_ch[0];&lt;/P&gt;&lt;P&gt;pulseH = (counts /100000.0)*1000000;&lt;BR /&gt;// eTimer_Channal.duty = pulseH/period*100;&lt;BR /&gt; eTimer_Channal.duty = ((uint16_t)((capture_ch[1] - capture_ch[0])*1000)/(uint16_t)(capture_ch[2] - capture_ch[0]));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PWM:25Hz&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;why I get the &amp;nbsp;duty&amp;nbsp;fail&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;clipping&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Sep 2017 02:47:26 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714853#M9481</guid>
      <dc:creator>pingli</dc:creator>
      <dc:date>2017-09-27T02:47:26Z</dc:date>
    </item>
    <item>
      <title>Re: MPC5744 etimer capture fail in one channal</title>
      <link>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714854#M9482</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If the channel is counting MC_CLK/1 (100MHz) and you measure 25Hz PWM signal, then expected counts per period will be 100e6 / 25 = 4 000 000 counts. The eTimer has just 16bit counter, thus for low frequency input signal you have to handle counter overflows or use slower internal counting clock (this way you will lose the precision).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Another possibility could be usage of cascaded counters, which serves overflow counting in HW.&lt;/P&gt;&lt;P&gt;The example using cascaded counters is here: &lt;A _jive_internal="true" href="https://community.nxp.com/docs/DOC-104285"&gt;https://community.nxp.com/docs/DOC-104285&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BR, Petr&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Sep 2017 05:34:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714854#M9482</guid>
      <dc:creator>PetrS</dc:creator>
      <dc:date>2017-09-27T05:34:41Z</dc:date>
    </item>
    <item>
      <title>Re: MPC5744 etimer capture fail in one channal</title>
      <link>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714855#M9483</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Hi, Petr&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;Thank You!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;void eTimer_Init(uint8_t EtimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; volatile struct ETIMER_tag *pETIMERn;&lt;/P&gt;&lt;P&gt;switch(EtimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; pETIMERn-&amp;gt;ENBL.R = 0x0; // disable Timer0 channels&lt;/P&gt;&lt;P&gt;/* Configure the channel */&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.R = 0x3804; // Counts only rising edge of the MC_CLK (100MHz in RUN0), divide by 1, count up, count repeatedly, rollover&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.CNTMODE = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.PRISRC = 0x1F;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.SECSRC = DspiNumber;&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;CH[DspiNumber].COMP1.R = 0xFFFF;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.R = 0x0264;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL3.R = 1;&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber+1].CTRL1.R = 0xF004; // Counts only rising edge of the MC_CLK (100MHz in RUN0), divide by 1, count up, count repeatedly, rollover&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.CNTMODE = 3;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.PRISRC = 0x10+DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.SECSRC = DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].COMP1.R = 0xFFFF;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].CCCTRL.R = 0x0264;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].CTRL3.R = 1;&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.PRISRC = 0x1F;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CPT1MODE = 2;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CPT2MODE = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CFWM = 2;&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.LENGTH = 0;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.ONCE = 0;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.SECSRC = DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.CNTMODE = 1;*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber].COMP1.R = 0xFFFF;&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.R = 0x0264; // compare on COMP1 when counting up, COMP2 when counting down&lt;BR /&gt; // CAPT2 on falling edge, CAPT1 on rising edge, 2 entries&lt;BR /&gt; // free-running mode&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ONESHOT = 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CTRL3.R = 1;&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CTRL3.B.ROC = 3;&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;ENBL.B.ENBL |= (1&amp;lt;&amp;lt;DspiNumber)||(1&amp;lt;&amp;lt;(DspiNumber+1)); // Enable Timer0 channel 1&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 1; // starts the input capture process&lt;BR /&gt; //pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ONESHOT = 1;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;void eTimer_EnableChannal(uint8_t eTimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; volatile struct ETIMER_tag *pETIMERn;&lt;/P&gt;&lt;P&gt;switch(eTimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;ENBL.B.ENBL |= (1&amp;lt;&amp;lt;DspiNumber); // Enable Timer0 channel 1&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void eTimer_Value(uint8_t EtimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; double counts[2];&lt;BR /&gt; uint32_t capture_ch[4],capture_ch1[4],edge[5];&lt;BR /&gt; uint8_t eTimerSTS = 0;&lt;/P&gt;&lt;P&gt;double freq,period,duty,pulseH,pulseL;&lt;/P&gt;&lt;P&gt;volatile struct ETIMER_tag *pETIMERn;&lt;BR /&gt; eTimer_Channal.duty = 0;&lt;BR /&gt; eTimer_Channal.Freq = 0;&lt;BR /&gt; eTimer_Channal.Period = 0;&lt;/P&gt;&lt;P&gt;switch(EtimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].CCCTRL.B.ARM = 1;&lt;BR /&gt; while(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber].STS.R))&lt;BR /&gt; { //(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 == 0x0)||(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 == 0x0)&lt;BR /&gt; // Delayms(100);&lt;BR /&gt; // if(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber].STS.R)) eTimerSTS = 1;&lt;BR /&gt; }&lt;BR /&gt; while(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber+1].STS.R))&lt;BR /&gt; { //(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 == 0x0)||(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 == 0x0)&lt;BR /&gt; // Delayms(100);&lt;BR /&gt; // if(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber].STS.R)) eTimerSTS = 1;&lt;BR /&gt; }&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 0; // stop the input capture process&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 = 0x1;&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 = 0x1;&lt;/P&gt;&lt;P&gt;capture_ch[0] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT1.R; //First rising edge&lt;BR /&gt; capture_ch[1] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT2.R; //First falling edge&lt;BR /&gt; capture_ch[2] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT1.R; //Second rising edge&lt;BR /&gt; capture_ch[3] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT2.R; //Second falling edge&lt;/P&gt;&lt;P&gt;capture_ch1[0] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT1.R; //First rising edge&lt;BR /&gt; capture_ch1[1] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT2.R; //First falling edge&lt;BR /&gt; capture_ch1[2] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT1.R; //Second rising edge&lt;BR /&gt; capture_ch1[3] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT2.R; //Second falling edge&lt;/P&gt;&lt;P&gt;edge[1] = capture_ch1[0]*65536 + capture_ch[0]; // save 1st rising edge&lt;BR /&gt; edge[2] = capture_ch1[1]*65536 + capture_ch[1]; // save 1st falling edge&lt;BR /&gt; edge[3] = capture_ch1[2]*65536 + capture_ch[2]; // save 2nd rising edge&lt;BR /&gt; edge[4] = capture_ch1[3]*65536 + capture_ch[3]; // save 2nd falling edge&lt;/P&gt;&lt;P&gt;if(edge[3]&amp;gt;edge[1])&lt;BR /&gt; {&lt;BR /&gt; counts[0] = edge[3] - edge[1];&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; counts[0] = (0xFFFFFFFF - edge[1] +1) + edge[3];&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;eTimer_Channal.Freq = (float)100000000.0/counts[0];&lt;BR /&gt; eTimer_Channal.Period = counts[0] / (float)100000.0;&lt;/P&gt;&lt;P&gt;if(edge[2]&amp;gt;edge[1])&lt;BR /&gt; {&lt;BR /&gt; counts[1] = edge[2] - edge[1];&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; counts[1] = (0xFFFFFFFF - edge[1] +1) + edge[2];&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pulseH = counts[1] / (float)100000.0;&lt;BR /&gt; pulseL = eTimer_Channal.Period-pulseH;&lt;/P&gt;&lt;P&gt;eTimer_Channal.duty = counts[1]*100/counts[0];//pulseH/eTimer_Channal.Period *100;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].STS.R = 0x00C0; // clear eTimern channel n's capture1/2 flags&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].STS.R = 0x00C0; // clear eTimern channel n's capture1/2 flags&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I fail to get duty. (eTimer1,channal4);&lt;/P&gt;&lt;P&gt;Clipping&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Sep 2017 09:05:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714855#M9483</guid>
      <dc:creator>pingli</dc:creator>
      <dc:date>2017-09-27T09:05:57Z</dc:date>
    </item>
    <item>
      <title>Re: MPC5744 etimer capture fail in one channal</title>
      <link>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714856#M9484</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #51626f; background-color: #ffffff;"&gt;Hi,Petr&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void eTimer_Init(uint8_t EtimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; volatile struct ETIMER_tag *pETIMERn;&lt;/P&gt;&lt;P&gt;switch(EtimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; pETIMERn-&amp;gt;ENBL.R = 0x0; // disable Timer0 channels&lt;/P&gt;&lt;P&gt;/* Configure the channel */&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.R = 0x3804; // Counts only rising edge of the MC_CLK (100MHz in RUN0), divide by 1, count up, count repeatedly, rollover&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.CNTMODE = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.PRISRC = 0x1F;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.SECSRC = DspiNumber;&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;CH[DspiNumber].COMP1.R = 0xFFFF;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.R = 0x0264;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL3.R = 1;&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber+1].CTRL1.R = 0xF004; // Counts only rising edge of the MC_CLK (100MHz in RUN0), divide by 1, count up, count repeatedly, rollover&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.CNTMODE = 3;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.PRISRC = 0x10+DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.SECSRC = DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].COMP1.R = 0xFFFF;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].CCCTRL.R = 0x0264;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].CTRL3.R = 1;&lt;/P&gt;&lt;P&gt;/*&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.PRISRC = 0x1F;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CPT1MODE = 2;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CPT2MODE = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.CFWM = 2;&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.LENGTH = 0;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.ONCE = 0;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.SECSRC = DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].CTRL1.B.CNTMODE = 1;*/&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber].COMP1.R = 0xFFFF;&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.R = 0x0264; // compare on COMP1 when counting up, COMP2 when counting down&lt;BR /&gt; // CAPT2 on falling edge, CAPT1 on rising edge, 2 entries&lt;BR /&gt; // free-running mode&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ONESHOT = 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CTRL3.R = 1;&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CTRL3.B.ROC = 3;&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;ENBL.B.ENBL |= (1&amp;lt;&amp;lt;DspiNumber)||(1&amp;lt;&amp;lt;(DspiNumber+1)); // Enable Timer0 channel 1&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 1; // starts the input capture process&lt;BR /&gt; //pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ONESHOT = 1;&lt;/P&gt;&lt;P&gt;}&lt;/P&gt;&lt;P&gt;void eTimer_EnableChannal(uint8_t eTimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; volatile struct ETIMER_tag *pETIMERn;&lt;/P&gt;&lt;P&gt;switch(eTimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;ENBL.B.ENBL |= (1&amp;lt;&amp;lt;DspiNumber); // Enable Timer0 channel 1&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;void eTimer_Value(uint8_t EtimerN,uint8_t DspiNumber)&lt;BR /&gt;{&lt;BR /&gt; double counts[2];&lt;BR /&gt; uint32_t capture_ch[4],capture_ch1[4],edge[5];&lt;BR /&gt; uint8_t eTimerSTS = 0;&lt;/P&gt;&lt;P&gt;double freq,period,duty,pulseH,pulseL;&lt;/P&gt;&lt;P&gt;volatile struct ETIMER_tag *pETIMERn;&lt;BR /&gt; eTimer_Channal.duty = 0;&lt;BR /&gt; eTimer_Channal.Freq = 0;&lt;BR /&gt; eTimer_Channal.Period = 0;&lt;/P&gt;&lt;P&gt;switch(EtimerN)&lt;BR /&gt; { //choose base eTimer address&lt;BR /&gt; case 0 : pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; case 1 : pETIMERn = &amp;amp;ETIMER_1; break;&lt;BR /&gt; case 2 : pETIMERn = &amp;amp;ETIMER_2; break;&lt;BR /&gt; default: pETIMERn = &amp;amp;ETIMER_0; break;&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 1;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].CCCTRL.B.ARM = 1;&lt;BR /&gt; while(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber].STS.R))&lt;BR /&gt; { //(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 == 0x0)||(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 == 0x0)&lt;BR /&gt; // Delayms(100);&lt;BR /&gt; // if(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber].STS.R)) eTimerSTS = 1;&lt;BR /&gt; }&lt;BR /&gt; while(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber+1].STS.R))&lt;BR /&gt; { //(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 == 0x0)||(pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 == 0x0)&lt;BR /&gt; // Delayms(100);&lt;BR /&gt; // if(!(0x0080 &amp;amp; pETIMERn-&amp;gt;CH[DspiNumber].STS.R)) eTimerSTS = 1;&lt;BR /&gt; }&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].CCCTRL.B.ARM = 0; // stop the input capture process&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF1 = 0x1;&lt;BR /&gt;// pETIMERn-&amp;gt;CH[DspiNumber].STS.B.ICF2 = 0x1;&lt;/P&gt;&lt;P&gt;capture_ch[0] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT1.R; //First rising edge&lt;BR /&gt; capture_ch[1] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT2.R; //First falling edge&lt;BR /&gt; capture_ch[2] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT1.R; //Second rising edge&lt;BR /&gt; capture_ch[3] = pETIMERn-&amp;gt;CH[DspiNumber].CAPT2.R; //Second falling edge&lt;/P&gt;&lt;P&gt;capture_ch1[0] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT1.R; //First rising edge&lt;BR /&gt; capture_ch1[1] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT2.R; //First falling edge&lt;BR /&gt; capture_ch1[2] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT1.R; //Second rising edge&lt;BR /&gt; capture_ch1[3] = pETIMERn-&amp;gt;CH[DspiNumber+1].CAPT2.R; //Second falling edge&lt;/P&gt;&lt;P&gt;edge[1] = capture_ch1[0]*65536 + capture_ch[0]; // save 1st rising edge&lt;BR /&gt; edge[2] = capture_ch1[1]*65536 + capture_ch[1]; // save 1st falling edge&lt;BR /&gt; edge[3] = capture_ch1[2]*65536 + capture_ch[2]; // save 2nd rising edge&lt;BR /&gt; edge[4] = capture_ch1[3]*65536 + capture_ch[3]; // save 2nd falling edge&lt;/P&gt;&lt;P&gt;if(edge[3]&amp;gt;edge[1])&lt;BR /&gt; {&lt;BR /&gt; counts[0] = edge[3] - edge[1];&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; counts[0] = (0xFFFFFFFF - edge[1] +1) + edge[3];&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;eTimer_Channal.Freq = (float)100000000.0/counts[0];&lt;BR /&gt; eTimer_Channal.Period = counts[0] / (float)100000.0;&lt;/P&gt;&lt;P&gt;if(edge[2]&amp;gt;edge[1])&lt;BR /&gt; {&lt;BR /&gt; counts[1] = edge[2] - edge[1];&lt;BR /&gt; }&lt;BR /&gt; else&lt;BR /&gt; {&lt;BR /&gt; counts[1] = (0xFFFFFFFF - edge[1] +1) + edge[2];&lt;BR /&gt; }&lt;/P&gt;&lt;P&gt;pulseH = counts[1] / (float)100000.0;&lt;BR /&gt; pulseL = eTimer_Channal.Period-pulseH;&lt;/P&gt;&lt;P&gt;eTimer_Channal.duty = counts[1]*100/counts[0];//pulseH/eTimer_Channal.Period *100;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber].STS.R = 0x00C0; // clear eTimern channel n's capture1/2 flags&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].STS.R = 0x00C0; // clear eTimern channel n's capture1/2 flags&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I get duty fail.&lt;/P&gt;&lt;P&gt;eTimer1 ,channal4;&lt;/P&gt;&lt;P&gt;Clipping&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Sep 2017 09:08:14 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714856#M9484</guid>
      <dc:creator>pingli</dc:creator>
      <dc:date>2017-09-27T09:08:14Z</dc:date>
    </item>
    <item>
      <title>Re: MPC5744 etimer capture fail in one channal</title>
      <link>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714857#M9485</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;you have wrong setting for cascaded channel, it should be&lt;/P&gt;&lt;P&gt;// pETIMERn-&amp;gt;CH[DspiNumber+1].CTRL1.R = 0xF004; // Counts only rising edge of the MC_CLK (100MHz in RUN0), divide by 1, count up, count repeatedly, rollover&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber&lt;SPAN style="color: #ff0000;"&gt;+1&lt;/SPAN&gt;].CTRL1.B.CNTMODE = &lt;SPAN style="color: #ff0000;"&gt;7&lt;/SPAN&gt;;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber&lt;SPAN style="color: #ff0000;"&gt;+1&lt;/SPAN&gt;].CTRL1.B.PRISRC = 0x10+DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber&lt;SPAN style="color: #ff0000;"&gt;+1&lt;/SPAN&gt;].CTRL1.B.SECSRC = DspiNumber;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].COMP1.R = 0xFFFF;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].CCCTRL.R = 0x0264;&lt;BR /&gt; pETIMERn-&amp;gt;CH[DspiNumber+1].CTRL3.R = 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also as you are using prescaler=128, you need to add this into relevant calculations.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BR, Petr&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Sep 2017 09:45:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714857#M9485</guid>
      <dc:creator>PetrS</dc:creator>
      <dc:date>2017-09-27T09:45:10Z</dc:date>
    </item>
    <item>
      <title>Re: MPC5744 etimer capture fail in one channal</title>
      <link>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714858#M9486</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,Pert&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you very much!&lt;/P&gt;&lt;P&gt;In the&amp;nbsp;Example-MPC5744P-eTimer-frequency_measurement-v1_0-GHS614,&lt;/P&gt;&lt;P&gt;channal 0 input,why I &amp;nbsp; need konw"&amp;nbsp;&lt;SPAN&gt;while(!(0x0080 &amp;amp; ETIMER_0.CH[1].STS.R))"&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;while(!(0x0080 &amp;amp; ETIMER_0.CH[1].STS.R)){} // wait for channel 1's capture2 flag&lt;BR /&gt; while(!(0x0080 &amp;amp; ETIMER_0.CH[0].STS.R)){}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 27 Sep 2017 10:33:28 GMT</pubDate>
      <guid>https://community.nxp.com/t5/MPC5xxx/MPC5744-etimer-capture-fail-in-one-channal/m-p/714858#M9486</guid>
      <dc:creator>pingli</dc:creator>
      <dc:date>2017-09-27T10:33:28Z</dc:date>
    </item>
  </channel>
</rss>

