free counter using fm1 with mke06z128

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

free counter using fm1 with mke06z128

990 次查看
Iotelctronic
Contributor III

I am setting up a free counter to perform an upward count on MKE06Z128VQH4 using FTM1. My configuration is done via ConfigTool, as shown in the image. My current application uses an interrupt triggered by a rising/falling edge KBI to measure pulse signals. I already measured this signal with a logic analyzer, and it gives me approximately 480 µs for one pulse and 960 µs for another.

Since I configured my counter with a clock = 20 MHz and a prescaler = 16, I consider each tick to be 0.8 µs. Therefore, the counter values should be very close or fairly close to the expected values. However, the measured values are far from what I expected. I’m sharing my test code.

 

void interruption_kbi(void)
   {

       uint16_t now = FTM1->CNT;
       uint16_t dt;

       if (now >= last_time)
           dt = now - last_time;
       else
           dt = (0xFFFF - last_time) + now + 1;

       last_time = now;
      
       valor_timer = dt;
       
       timerarr[countim]=valor_timer;
       countim++;       

       KBI_ClearInterruptFlag(KBI0);
   }

count.JPGcount.JPG

the result is:

timerarr[0]	uint16_t	451	
timerarr[1]	uint16_t	317	
timerarr[2]	uint16_t	307	
timerarr[3]	uint16_t	64540	
timerarr[4]	uint16_t	1767	
timerarr[5]	uint16_t	1173	
timerarr[6]	uint16_t	2343	
timerarr[7]	uint16_t	61048	
timerarr[8]	uint16_t	1751	
timerarr[9]	uint16_t	1174	
timerarr[10]	uint16_t	2347	
timerarr[11]	uint16_t	60455	
timerarr[12]	uint16_t	1750	
timerarr[13]	uint16_t	2344	
timerarr[14]	uint16_t	61050	
timerarr[15]	uint16_t	1171	

 

0 项奖励
回复
2 回复数

968 次查看
Celeste_Liu
NXP Employee
NXP Employee

Hello @Iotelctronic ,

Thanks for your post.

From the ConfigTool screenshot, it appears that you configured the FTM in edge‑aligned mode and set the timer output frequency to 200 Hz. This means you have effectively enabled the timer period function, causing the counter to wrap around at the MOD value rather than at 0xFFFF.

I recommend trying the following two approaches:
1.  Configure the counter as a true free‑running timer to avoid periodic wrap‑around
This allows CNT to increment continuously from 0x0000 to 0xFFFF.
Disable the timer-related settings in ConfigTool and add the following initialization code:

 

FTM1->SC = 0;


FTM1->MODE |= FTM_MODE_FTMEN_MASK;
FTM1->CNTIN = 0;
FTM1->MOD = 0xFFFF;
FTM1->CNT = 0;


FTM1->SC = FTM_SC_CLKS(1) | FTM_SC_PS(4); // CLKS=01 System clock, PS=100 /16

 
2. Keep the current ConfigTool configuration (200 Hz), but correct the wrap‑around logic in the ISR
In this case, the counter wraps at the configured MOD value rather than at 0xFFFF, so the wrap‑around calculation should use FTM1->MOD.
Updated ISR example:


void interruption_kbi(void)
{
uint16_t now = FTM1->CNT;
uint16_t mod = FTM1->MOD;
uint16_t dt;

if (now >= last_time)
dt = now - last_time;
else
dt = (mod - last_time) + now + 1;

last_time = now;
timerarr[countim++] = dt;

KBI_ClearInterruptFlag(KBI0);
}

 

Hope it helps.

BR

Celeste

0 项奖励
回复

904 次查看
Iotelctronic
Contributor III

thank you for the response, I used the first method by configuring it manually, I verified that the counter is working well, however I am no longer using the counter with kbi, now I am using input capture which I think is better.

%3CLINGO-SUB%20id%3D%22lingo-sub-2313170%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%E4%BD%BF%E7%94%A8%20mke06z128%20%E7%9A%84%20FM1%20%E5%85%8D%E8%B4%B9%E8%AE%A1%E6%95%B0%E5%99%A8%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2313170%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%20class%3D%22%22%3E%3CSPAN%3E%E6%88%91%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%20FTM1%20%E8%AE%BE%E7%BD%AE%E4%B8%80%E4%B8%AA%E8%87%AA%E7%94%B1%E8%AE%A1%E6%95%B0%E5%99%A8%EF%BC%8C%E4%BB%A5%E4%BE%BF%E5%AF%B9%20MKE06Z128VQH4%20%E8%BF%9B%E8%A1%8C%E5%90%91%E4%B8%8A%E8%AE%A1%E6%95%B0%E3%80%82%E6%88%91%E7%9A%84%E9%85%8D%E7%BD%AE%E6%98%AF%E9%80%9A%E8%BF%87%20ConfigTool%20%E5%B7%A5%E5%85%B7%E5%AE%8C%E6%88%90%E7%9A%84%EF%BC%8C%E5%A6%82%E5%9B%BE%E6%89%80%E7%A4%BA%E3%80%82%E6%88%91%E5%BD%93%E5%89%8D%E7%9A%84%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E4%BD%BF%E7%94%A8%E7%94%B1%E4%B8%8A%E5%8D%87%2F%E4%B8%8B%E9%99%8D%E6%B2%BFKBI%E8%A7%A6%E5%8F%91%E7%9A%84%E4%B8%AD%E6%96%AD%E6%9D%A5%E6%B5%8B%E9%87%8F%E8%84%89%E5%86%B2%E3%80%82%E6%88%91%E5%B7%B2%E7%BB%8F%E7%94%A8%E9%80%BB%E8%BE%91%E5%88%86%E6%9E%90%E4%BB%AA%E6%B5%8B%E9%87%8F%E4%BA%86%E8%BF%99%E4%B8%AA%E4%BF%A1%E5%8F%B7%EF%BC%8C%E5%AE%83%E7%BB%99%E4%BA%86%E6%88%91%E4%B8%80%E4%B8%AA%E8%84%89%E5%86%B2%E5%A4%A7%E7%BA%A6%20480%20%C2%B5s%EF%BC%8C%E5%8F%A6%E4%B8%80%E4%B8%AA%E8%84%89%E5%86%B2%E7%BB%99%E4%BA%86%E6%88%91%E5%A4%A7%E7%BA%A6%20960%20%C2%B5s%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CP%20class%3D%22%22%3E%3CSPAN%3E%E7%94%B1%E4%BA%8E%E6%88%91%E9%85%8D%E7%BD%AE%E7%9A%84%E8%AE%A1%E6%95%B0%E5%99%A8%E6%97%B6%E9%92%9F%E9%A2%91%E7%8E%87%E4%B8%BA%2020%20MHz%EF%BC%8C%E9%A2%84%E5%88%86%E9%A2%91%E5%99%A8%E4%B8%BA%2016%EF%BC%8C%E5%9B%A0%E6%AD%A4%E6%88%91%E8%AE%A4%E4%B8%BA%E6%AF%8F%E4%B8%AA%E5%88%BB%E5%BA%A6%E4%B8%BA%200.8%20%C2%B5s%E3%80%82%E5%9B%A0%E6%AD%A4%EF%BC%8C%E8%AE%A1%E6%95%B0%E5%99%A8%E5%80%BC%E5%BA%94%E9%9D%9E%E5%B8%B8%E6%8E%A5%E8%BF%91%E6%88%96%E7%9B%B8%E5%BD%93%E6%8E%A5%E8%BF%91%E9%A2%84%E6%9C%9F%E5%80%BC%E3%80%82%E7%84%B6%E8%80%8C%EF%BC%8C%E6%B5%8B%E9%87%8F%E5%80%BC%E4%B8%8E%E6%88%91%E7%9A%84%E9%A2%84%E6%9C%9F%E7%9B%B8%E5%8E%BB%E7%94%9A%E8%BF%9C%E3%80%82%E6%88%91%E5%9C%A8%E5%88%86%E4%BA%AB%E6%88%91%E7%9A%84%E6%B5%8B%E8%AF%95%E4%BB%A3%E7%A0%81%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CP%20class%3D%22%22%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3Evoid%20interruption_kbi(void)%0A%20%20%20%7B%0A%0A%20%20%20%20%20%20%20uint16_t%20now%20%3D%20FTM1-%26gt%3BCNT%3B%0A%20%20%20%20%20%20%20uint16_t%20dt%3B%0A%0A%20%20%20%20%20%20%20if%20(now%20%26gt%3B%3D%20last_time)%0A%20%20%20%20%20%20%20%20%20%20%20dt%20%3D%20now%20-%20last_time%3B%0A%20%20%20%20%20%20%20else%0A%20%20%20%20%20%20%20%20%20%20%20dt%20%3D%20(0xFFFF%20-%20last_time)%20%2B%20now%20%2B%201%3B%0A%0A%20%20%20%20%20%20%20last_time%20%3D%20now%3B%0A%20%20%20%20%20%20%0A%20%20%20%20%20%20%20valor_timer%20%3D%20dt%3B%0A%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20timerarr%5Bcountim%5D%3Dvalor_timer%3B%0A%20%20%20%20%20%20%20countim%2B%2B%3B%20%20%20%20%20%20%20%0A%0A%20%20%20%20%20%20%20KBI_ClearInterruptFlag(KBI0)%3B%0A%20%20%20%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%20class%3D%22%22%3E%3CSPAN%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22count.JPG%22%20style%3D%22width%3A%20766px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22count.JPG%22%20style%3D%22width%3A%20766px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22count.JPG%22%20style%3D%22width%3A%20766px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22count.JPG%22%20style%3D%22width%3A%20766px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F375731iA05229D2A55845B1%2Fimage-size%2Flarge%3Fv%3Dv2%26amp%3Bpx%3D999%22%20role%3D%22button%22%20title%3D%22count.JPG%22%20alt%3D%22count.JPG%22%20%2F%3E%3Cspan%20class%3D%22lia-inline-image-caption%22%20onclick%3D%22event.preventDefault()%3B%22%3Ecount.JPG%3C%2Fspan%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%3CP%20class%3D%22%22%3E%3CSPAN%3E%E7%BB%93%E6%9E%9C%E6%98%AF%3C%2FSPAN%3E%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3Etimerarr%5B0%5D%09uint16_t%09451%09%0Atimerarr%5B1%5D%09uint16_t%09317%09%0Atimerarr%5B2%5D%09uint16_t%09307%09%0Atimerarr%5B3%5D%09uint16_t%0964540%09%0Atimerarr%5B4%5D%09uint16_t%091767%09%0Atimerarr%5B5%5D%09uint16_t%091173%09%0Atimerarr%5B6%5D%09uint16_t%092343%09%0Atimerarr%5B7%5D%09uint16_t%0961048%09%0Atimerarr%5B8%5D%09uint16_t%091751%09%0Atimerarr%5B9%5D%09uint16_t%091174%09%0Atimerarr%5B10%5D%09uint16_t%092347%09%0Atimerarr%5B11%5D%09uint16_t%0960455%09%0Atimerarr%5B12%5D%09uint16_t%091750%09%0Atimerarr%5B13%5D%09uint16_t%092344%09%0Atimerarr%5B14%5D%09uint16_t%0961050%09%0Atimerarr%5B15%5D%09uint16_t%091171%09%3C%2FCODE%3E%3C%2FPRE%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2313695%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20free%20counter%20using%20fm1%20with%20mke06z128%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2313695%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F257315%22%20target%3D%22_blank%22%3E%40Iotelctronic%3C%2FA%3E%E3%80%81%3C%2FP%3E%0A%3CP%3E%E8%B0%A2%E8%B0%A2%E6%82%A8%E7%9A%84%E5%B8%96%E5%AD%90%E3%80%82%3C%2FP%3E%0A%3CP%3E%E4%BB%8E%E9%85%8D%E7%BD%AE%E5%B7%A5%E5%85%B7%E6%88%AA%E5%9B%BE%E4%B8%AD%E5%8F%AF%E4%BB%A5%E7%9C%8B%E5%87%BA%EF%BC%8C%E6%82%A8%E5%B0%86%20FTM%20%E9%85%8D%E7%BD%AE%E4%B8%BA%E8%BE%B9%E7%BC%98%E5%AF%B9%E9%BD%90%E6%A8%A1%E5%BC%8F%EF%BC%8C%E5%B9%B6%E5%B0%86%E5%AE%9A%E6%97%B6%E5%99%A8%E8%BE%93%E5%87%BA%E9%A2%91%E7%8E%87%E8%AE%BE%E7%BD%AE%E4%B8%BA%20200%20Hz%E3%80%82%E8%BF%99%E6%84%8F%E5%91%B3%E7%9D%80%E6%82%A8%E5%B7%B2%E6%9C%89%E6%95%88%E5%90%AF%E7%94%A8%E4%BA%86%E5%AE%9A%E6%97%B6%E5%99%A8%E5%91%A8%E6%9C%9F%E5%8A%9F%E8%83%BD%EF%BC%8C%E4%BD%BF%E8%AE%A1%E6%95%B0%E5%99%A8%E5%9C%A8%20MOD%20%E5%80%BC%E8%80%8C%E4%B8%8D%E6%98%AF%200xFFFF%20%E5%A4%84%E7%BB%95%E4%B8%80%E5%9C%88%E3%80%82%3C%2FP%3E%0A%3CDIV%3E%E6%88%91%E5%BB%BA%E8%AE%AE%E5%B0%9D%E8%AF%95%E4%BB%A5%E4%B8%8B%E4%B8%A4%E7%A7%8D%E6%96%B9%E6%B3%95%EF%BC%9A%3C%2FDIV%3E%0A%3CDIV%3E1.%20%20%E5%B0%86%E8%AE%A1%E6%95%B0%E5%99%A8%E9%85%8D%E7%BD%AE%E4%B8%BA%E7%9C%9F%E6%AD%A3%E7%9A%84%E8%87%AA%E7%94%B1%E8%BF%90%E8%A1%8C%E5%AE%9A%E6%97%B6%E5%99%A8%EF%BC%8C%E4%BB%A5%E9%81%BF%E5%85%8D%E5%91%A8%E6%9C%9F%E6%80%A7%E7%BC%A0%E7%BB%95%3C%2FDIV%3E%0A%3CDIV%3E%E8%BF%99%E4%BD%BF%E5%BE%97%20CNT%20%E5%8F%AF%E4%BB%A5%E4%BB%8E%200x0000%20%E5%88%B0%200xFFFF%20%E8%BF%9E%E7%BB%AD%E9%80%92%E5%A2%9E%E3%80%82%3CBR%20%2F%3E%E7%A6%81%E7%94%A8%20ConfigTool%20%E4%B8%AD%E4%B8%8E%E5%AE%9A%E6%97%B6%E5%99%A8%E7%9B%B8%E5%85%B3%E7%9A%84%E8%AE%BE%E7%BD%AE%EF%BC%8C%E5%B9%B6%E6%B7%BB%E5%8A%A0%E4%BB%A5%E4%B8%8B%E5%88%9D%E5%A7%8B%E5%8C%96%E4%BB%A3%E7%A0%81%EF%BC%9A%3C%2FDIV%3E%0A%3CDIV%3E%0A%3CBR%20%2F%3E%0A%3CP%3EFTM1-%26gt%3BSC%20%3D%200%EF%BC%9B%3C%2FP%3E%0A%3CP%3E%3CBR%20%2F%3EFTM1-%26gt%3BMODE%20%7C%3D%20FTM_MODE_FTMEN_MASK%EF%BC%9B%3CBR%20%2F%3EFTM1-%26gt%3BCNTIN%20%3D%200%EF%BC%9B%3CBR%20%2F%3EFTM1-%26gt%3BMOD%20%3D%200xFFFF%EF%BC%9B%3CBR%20%2F%3EFTM1-%26gt%3BCNT%20%3D%200%EF%BC%9B%3C%2FP%3E%0A%3CP%3E%3CBR%20%2F%3EFTM1-%26gt%3BSC%20%3D%20FTM_SC_CLKS(1)%20%7C%20FTM_SC_PS(4)%3B%20%2F%2F%20CLKS%3D01%20%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%92%9F%EF%BC%8CPS%3D100%20%2F16%3C%2FP%3E%0A%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3E2.%E4%BF%9D%E7%95%99%E5%BD%93%E5%89%8D%E7%9A%84%20ConfigTool%20%E9%85%8D%E7%BD%AE%EF%BC%88200%20Hz%EF%BC%89%EF%BC%8C%E4%BD%86%E7%BA%A0%E6%AD%A3%20ISR%20%E4%B8%AD%E7%9A%84%E7%8E%AF%E7%BB%95%E9%80%BB%E8%BE%91%3C%2FDIV%3E%0A%3CDIV%3E%E5%9C%A8%E8%BF%99%E7%A7%8D%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E8%AE%A1%E6%95%B0%E5%99%A8%E4%BC%9A%E5%9C%A8%E9%85%8D%E7%BD%AE%E7%9A%84%20MOD%20%E5%80%BC%E8%80%8C%E4%B8%8D%E6%98%AF%200xFFFF%20%E5%A4%84%E7%BC%A0%E7%BB%95%EF%BC%8C%E5%9B%A0%E6%AD%A4%E7%BC%A0%E7%BB%95%E8%AE%A1%E7%AE%97%E5%BA%94%E4%BD%BF%E7%94%A8%20FTM1-%26gt%3BMOD%E3%80%82%3CBR%20%2F%3E%E6%9B%B4%E6%96%B0%20ISR%20%E7%A4%BA%E4%BE%8B%EF%BC%9A%3C%2FDIV%3E%0A%3CDIV%3E%0A%3CP%3E%3CBR%20%2F%3Evoid%20interruption_kbi(void)%3CBR%20%2F%3E%7B%3CBR%20%2F%3Euint16_t%20now%20%3D%20FTM1-%26gt%3BCNT%3B%3CBR%20%2F%3Euint16_t%20mod%20%3D%20FTM1-%26gt%3BMOD%3B%3CBR%20%2F%3Euint16_t%20dt%EF%BC%9B%3C%2FP%3E%0A%3CP%3E%E5%A6%82%E6%9E%9C%20(now%26gt%3B%3D%20last_time)%3CBR%20%2F%3Edt%20%3D%20now%20-%20last_time%3B%3CBR%20%2F%3E%E5%90%A6%E5%88%99%3CBR%20%2F%3Edt%20%3D%20(mod%20-%20last_time)%20%2B%20now%20%2B%201%EF%BC%9B%3C%2FP%3E%0A%3CP%3Elast_time%20%3D%20now%3B%3CBR%20%2F%3Etimerarr%5Bcountim%2B%2B%5D%20%3D%20dt%EF%BC%9B%3C%2FP%3E%0A%3CP%3EKBI_ClearInterruptFlag(KBI0)%3B%3CBR%20%2F%3E%7D%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CP%3E%E5%B8%8C%E6%9C%9B%E5%AF%B9%E4%BD%A0%E6%9C%89%E6%89%80%E5%B8%AE%E5%8A%A9%E3%80%82%3C%2FP%3E%0A%3CP%3EBR%3C%2FP%3E%0A%3CP%3E%E8%A5%BF%E8%8E%B1%E6%96%AF%E7%89%B9%3C%2FP%3E%0A%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2317824%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20free%20counter%20using%20fm1%20with%20mke06z128%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2317824%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%3CSPAN%3E%E6%84%9F%E8%B0%A2%E6%82%A8%E7%9A%84%E5%9B%9E%E5%A4%8D%EF%BC%8C%E6%88%91%E4%BD%BF%E7%94%A8%E4%BA%86%E7%AC%AC%E4%B8%80%E7%A7%8D%E6%96%B9%E6%B3%95%EF%BC%8C%E6%89%8B%E5%8A%A8%E9%85%8D%E7%BD%AE%E4%BA%86%E5%AE%83%EF%BC%8C%E6%88%91%E9%AA%8C%E8%AF%81%E4%BA%86%E8%AE%A1%E6%95%B0%E5%99%A8%E8%BF%90%E8%A1%8C%E8%89%AF%E5%A5%BD%EF%BC%8C%E4%BD%86%E6%98%AF%E6%88%91%E4%B8%8D%E5%86%8D%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%20kbi%20%E7%9A%84%E8%AE%A1%E6%95%B0%E5%99%A8%EF%BC%8C%E7%8E%B0%E5%9C%A8%E6%88%91%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%E8%BE%93%E5%85%A5%E6%8D%95%E8%8E%B7%EF%BC%8C%E6%88%91%E8%AE%A4%E4%B8%BA%E8%BF%99%E6%9B%B4%E5%A5%BD%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E