Yes you right but like I said, I tested with TPM1 and in my post SIM->SCGC6 register is a copy/past mistake. So in the original code, SIM->SCGC6 register is properly set to TPM0 clock gate
Problem sill there ....
#include "MKL25Z4.h"
#include "TPM.h"
void TPM_init(void)
{
SIM->SCGC6 |= SIM_SCGC6_TPM0_MASK;//TPM0 clock activé
SIM->SOPT2 |= SIM_SOPT2_TPMSRC(0x03);//TPM clock source -> MCGIRCLK
TPM0->SC = TPM_SC_CMOD(0x00);//LPTPM desactivé
TPM0->SC |= TPM_SC_PS(0x02);//Prescaler /4 => 4MHz/4 = 4MHz => T = 1µs
}
void TPM0_delai_us(int t)
{
TPM0->MOD = TPM_MOD_MOD(t);//t*1µs
TPM0->SC |= TPM_SC_TOF_MASK;//Reset TOF bit
TPM0->SC |= TPM_SC_CMOD(0x01);//LPTPM activé compteur interne
while((TPM0->SC & TPM_SC_TOF_MASK)!=TPM_SC_TOF_MASK);
TPM0->SC |= TPM_SC_TOF_MASK;//clear TOF bit
}
void TPM0_delai_ms(int t)
{
int i;
TPM0->MOD = TPM_MOD_MOD(1000);//t*1µs
TPM0->SC |= TPM_SC_TOF_MASK;//Reset TOF bit
TPM0->SC |= TPM_SC_CMOD(0x01);//LPTPM activé compteur interne
for(i=0;i<=t;i++)
{
while((TPM0->SC & TPM_SC_TOF_MASK)!=TPM_SC_TOF_MASK);
TPM0->SC |= TPM_SC_TOF_MASK;//clear TOF bit
}
}