FTM Timer Confusion

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

FTM Timer Confusion

跳至解决方案
906 次查看
Jana_muralidharan
Contributor II

So, I am trying to start the timer FTM0/FTM1 it, upon running of the timer code it stucks at the HardFault why but the same code with FTM2 works perfectly fine why?? 

the not working code

#include "MKE02Z4.h"

/* ================= GLOBALS ================= */
volatile uint8_t uartFlag = 0;

/* ================= PROTOTYPES ================= */
void init_clock(void);
void init_uart0(void);
void init_FTM1(void);
void UART_Send(const char *s);

/* ================= FTM1 ISR ================= */
void FTM1_IRQHandler(void)
{
    /* Clear overflow flag (write 0 while set) */
    FTM1->SC &= ~FTM_SC_TOF_MASK;

    uartFlag = 1;
}

/* ================= MAIN ================= */
int main(void)
{
    init_clock();
    init_uart0();
    init_FTM1();

    UART_Send("FTM1 Initialized\r\n");

    while (1)
    {
        if (uartFlag)
        {
            uartFlag = 0;
            UART_Send("A\r\n");
        }

        __WFI();   /* wait for interrupt */
    }
}

/* ================= CLOCK INIT ================= */
void init_clock(void)
{
    /*
     * Assume internal clock already configured by SDK startup
     * Bus clock = 32 MHz
     */
    SIM->BUSDIV = 0x01;   /* divide by 1 */
}

/* ================= UART0 INIT ================= */
void init_uart0(void)
{
    /* Enable UART0 clock */
    SIM->SCGC |= SIM_SCGC_UART0_MASK;

    /* UART0 pin select (TX/RX) */
    SIM->PINSEL |= SIM_PINSEL_UART0PS_MASK;

    /* Disable TX inversion (important!) */
    SIM->SOPT &= ~SIM_SOPT_TXDME_MASK;

    /*
     * 9600 baud @ 32 MHz
     * SBR = 32e6 / (16 * 9600) ≈ 208
     */
    UART0->BDH = 0x00;
    UART0->BDL = 53;

    UART0->C1 = 0x00;
    UART0->C2 = UART_C2_TE_MASK | UART_C2_RE_MASK;
}

/* ================= FTM1 INIT ================= */
void init_FTM1(void)
{
    /* Enable FTM1 clock */
    SIM->SCGC |= SIM_SCGC_FTM1_MASK;
    __DSB();

    /* ---- VERY IMPORTANT ORDER (KE02 SAFE) ---- */

    /* Stop counter completely */
    FTM1->SC = 0;

    /* Disable write protection (WRITE ONCE) */
    FTM1->MODE = FTM_MODE_WPDIS_MASK;

    /* Reset counter */
    FTM1->CNTIN = 0;
    FTM1->CNT   = 0;

    /*
     * 32 MHz / 128 = 250 kHz
     * 250000 ticks = 1 second
     */
    FTM1->MOD = 249999;

    /* Enable overflow interrupt, prescaler = 128 */
    FTM1->SC = FTM_SC_PS(7) | FTM_SC_TOIE_MASK;

    /* Enable NVIC */
    NVIC_EnableIRQ(FTM1_IRQn);

    /* START TIMER (LAST STEP ONLY) */
    FTM1->SC |= FTM_SC_CLKS(1);
}

/* ================= UART SEND ================= */
void UART_Send(const char *s)
{
    while (*s)
    {
        while (!(UART0->S1 & UART_S1_TDRE_MASK));
        UART0->D = *s++;
    }
}

 the working code

#include "MKE02Z4.h"

/* ================= GLOBALS ================= */
volatile uint8_t uartFlag = 0;

/* ================= PROTOTYPES ================= */
void init_clock(void);
void init_uart0(void);
void init_FTM2(void);
void UART_Send(const char *s);

/* ================= FTM2 ISR ================= */
void FTM2_IRQHandler(void)
{
    /* Clear overflow flag (write 0 while set) */
    FTM2->SC &= ~FTM_SC_TOF_MASK;

    uartFlag = 1;
}

/* ================= MAIN ================= */
int main(void)
{
    init_clock();
    init_uart0();
    init_FTM2();

    UART_Send("FTM2 Initialized\r\n");

    while (1)
    {
        if (uartFlag)
        {
            uartFlag = 0;
            UART_Send("A\r\n");
        }

        __WFI();   /* wait for interrupt */
    }
}

/* ================= CLOCK INIT ================= */
void init_clock(void)
{
    /*
     * Assume internal clock already configured by SDK startup
     * Bus clock = 32 MHz
     */
    SIM->BUSDIV = 0x01;   /* divide by 1 */
}

/* ================= UART0 INIT ================= */
void init_uart0(void)
{
    /* Enable UART0 clock */
    SIM->SCGC |= SIM_SCGC_UART0_MASK;

    /* UART0 pin select (TX/RX) */
    SIM->PINSEL |= SIM_PINSEL_UART0PS_MASK;

    /* Disable TX inversion (important!) */
    SIM->SOPT &= ~SIM_SOPT_TXDME_MASK;

    /*
     * 9600 baud @ 32 MHz
     * SBR = 32e6 / (16 * 9600) ≈ 208
     */
    UART0->BDH = 0x00;
    UART0->BDL = 53;

    UART0->C1 = 0x00;
    UART0->C2 = UART_C2_TE_MASK | UART_C2_RE_MASK;
}

/* ================= FTM2 INIT ================= */
void init_FTM2(void)
{
    /* Enable FTM2 clock */
    SIM->SCGC |= SIM_SCGC_FTM2_MASK;
    __DSB();

    /* ---- VERY IMPORTANT ORDER (KE02 SAFE) ---- */

    /* Stop counter completely */
    FTM2->SC = 0;

    /* Disable write protection (WRITE ONCE) */
    FTM2->MODE = FTM_MODE_WPDIS_MASK;

    /* Reset counter */
    FTM2->CNTIN = 0;
    FTM2->CNT   = 0;

    /*
     * 32 MHz / 128 = 250 kHz
     * 250000 ticks = 1 second
     */
    FTM2->MOD = 249999;

    /* Enable overflow interrupt, prescaler = 128 */
    FTM2->SC = FTM_SC_PS(7) | FTM_SC_TOIE_MASK;

    /* Enable NVIC */
    NVIC_EnableIRQ(FTM2_IRQn);

    /* START TIMER (LAST STEP ONLY) */
    FTM2->SC |= FTM_SC_CLKS(1);
}

/* ================= UART SEND ================= */
void UART_Send(const char *s)
{
    while (*s)
    {
        while (!(UART0->S1 & UART_S1_TDRE_MASK));
        UART0->D = *s++;
    }
}

 

0 项奖励
回复
1 解答
802 次查看
Jana_muralidharan
Contributor II

I actually found the error

 

It is that I used registers that are specific to only FTM2,

So, after removing the unwanted registers it worked perfectly fine.

And I found out that HardFault Error will only occur when, We use register which are not there in the first place.

 

Hey and thanks for your attention to this query thanks.....

在原帖中查看解决方案

0 项奖励
回复
2 回复数
809 次查看
Alice_Yang
NXP TechSupport
NXP TechSupport

Hi @Jana_muralidharan 

 

Please debug to check whether the FTM1 clock is enabled and verify if the counter register is functioning properly.
 
BR
Alice 
0 项奖励
回复
803 次查看
Jana_muralidharan
Contributor II

I actually found the error

 

It is that I used registers that are specific to only FTM2,

So, after removing the unwanted registers it worked perfectly fine.

And I found out that HardFault Error will only occur when, We use register which are not there in the first place.

 

Hey and thanks for your attention to this query thanks.....

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2269247%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EFTM%20%E5%AE%9A%E6%97%B6%E5%99%A8%E6%B7%B7%E4%B9%B1%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2269247%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E6%88%91%E8%AF%95%E5%9B%BE%E5%90%AF%E5%8A%A8%20FTM0%2FFTM1%20%E5%AE%9A%E6%97%B6%E5%99%A8%EF%BC%8C%E4%BD%86%E5%9C%A8%E8%BF%90%E8%A1%8C%E5%AE%9A%E6%97%B6%E5%99%A8%E4%BB%A3%E7%A0%81%E6%97%B6%E5%8D%B4%E5%87%BA%E7%8E%B0%E4%BA%86%20HardFault%20%E6%95%85%E9%9A%9C%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%EF%BC%9F%3CBR%20%2F%3E%3CBR%20%2F%3E%3CU%3E%3CEM%3E%3CSTRONG%3E%E6%97%A0%E6%B3%95%E8%BF%90%E8%A1%8C%E7%9A%84%E4%BB%A3%E7%A0%81%3C%2FSTRONG%3E%3C%2FEM%3E%3C%2FU%3E%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-markup%22%3E%3CCODE%20translate%3D%22no%22%3E%23include%20%22MKE02Z4.h%22%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20GLOBALS%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avolatile%20uint8_t%20uartFlag%20%3D%200%3B%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20PROTOTYPES%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20init_clock(void)%3B%0Avoid%20init_uart0(void)%3B%0Avoid%20init_FTM1(void)%3B%0Avoid%20UART_Send(const%20char%20*s)%3B%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20FTM1%20ISR%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20FTM1_IRQHandler(void)%0A%7B%0A%20%20%20%20%2F*%20Clear%20overflow%20flag%20(write%200%20while%20set)%20*%2F%0A%20%20%20%20FTM1-%26gt%3BSC%20%26amp%3B%3D%20~FTM_SC_TOF_MASK%3B%0A%0A%20%20%20%20uartFlag%20%3D%201%3B%0A%7D%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20MAIN%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Aint%20main(void)%0A%7B%0A%20%20%20%20init_clock()%3B%0A%20%20%20%20init_uart0()%3B%0A%20%20%20%20init_FTM1()%3B%0A%0A%20%20%20%20UART_Send(%22FTM1%20Initialized%5Cr%5Cn%22)%3B%0A%0A%20%20%20%20while%20(1)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20(uartFlag)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uartFlag%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20UART_Send(%22A%5Cr%5Cn%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20__WFI()%3B%20%20%20%2F*%20wait%20for%20interrupt%20*%2F%0A%20%20%20%20%7D%0A%7D%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20CLOCK%20INIT%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20init_clock(void)%0A%7B%0A%20%20%20%20%2F*%0A%20%20%20%20%20*%20Assume%20internal%20clock%20already%20configured%20by%20SDK%20startup%0A%20%20%20%20%20*%20Bus%20clock%20%3D%2032%20MHz%0A%20%20%20%20%20*%2F%0A%20%20%20%20SIM-%26gt%3BBUSDIV%20%3D%200x01%3B%20%20%20%2F*%20divide%20by%201%20*%2F%0A%7D%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20UART0%20INIT%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20init_uart0(void)%0A%7B%0A%20%20%20%20%2F*%20Enable%20UART0%20clock%20*%2F%0A%20%20%20%20SIM-%26gt%3BSCGC%20%7C%3D%20SIM_SCGC_UART0_MASK%3B%0A%0A%20%20%20%20%2F*%20UART0%20pin%20select%20(TX%2FRX)%20*%2F%0A%20%20%20%20SIM-%26gt%3BPINSEL%20%7C%3D%20SIM_PINSEL_UART0PS_MASK%3B%0A%0A%20%20%20%20%2F*%20Disable%20TX%20inversion%20(important!)%20*%2F%0A%20%20%20%20SIM-%26gt%3BSOPT%20%26amp%3B%3D%20~SIM_SOPT_TXDME_MASK%3B%0A%0A%20%20%20%20%2F*%0A%20%20%20%20%20*%209600%20baud%20%40%2032%20MHz%0A%20%20%20%20%20*%20SBR%20%3D%2032e6%20%2F%20(16%20*%209600)%20%E2%89%88%20208%0A%20%20%20%20%20*%2F%0A%20%20%20%20UART0-%26gt%3BBDH%20%3D%200x00%3B%0A%20%20%20%20UART0-%26gt%3BBDL%20%3D%2053%3B%0A%0A%20%20%20%20UART0-%26gt%3BC1%20%3D%200x00%3B%0A%20%20%20%20UART0-%26gt%3BC2%20%3D%20UART_C2_TE_MASK%20%7C%20UART_C2_RE_MASK%3B%0A%7D%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20FTM1%20INIT%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20init_FTM1(void)%0A%7B%0A%20%20%20%20%2F*%20Enable%20FTM1%20clock%20*%2F%0A%20%20%20%20SIM-%26gt%3BSCGC%20%7C%3D%20SIM_SCGC_FTM1_MASK%3B%0A%20%20%20%20__DSB()%3B%0A%0A%20%20%20%20%2F*%20----%20VERY%20IMPORTANT%20ORDER%20(KE02%20SAFE)%20----%20*%2F%0A%0A%20%20%20%20%2F*%20Stop%20counter%20completely%20*%2F%0A%20%20%20%20FTM1-%26gt%3BSC%20%3D%200%3B%0A%0A%20%20%20%20%2F*%20Disable%20write%20protection%20(WRITE%20ONCE)%20*%2F%0A%20%20%20%20FTM1-%26gt%3BMODE%20%3D%20FTM_MODE_WPDIS_MASK%3B%0A%0A%20%20%20%20%2F*%20Reset%20counter%20*%2F%0A%20%20%20%20FTM1-%26gt%3BCNTIN%20%3D%200%3B%0A%20%20%20%20FTM1-%26gt%3BCNT%20%20%20%3D%200%3B%0A%0A%20%20%20%20%2F*%0A%20%20%20%20%20*%2032%20MHz%20%2F%20128%20%3D%20250%20kHz%0A%20%20%20%20%20*%20250000%20ticks%20%3D%201%20second%0A%20%20%20%20%20*%2F%0A%20%20%20%20FTM1-%26gt%3BMOD%20%3D%20249999%3B%0A%0A%20%20%20%20%2F*%20Enable%20overflow%20interrupt%2C%20prescaler%20%3D%20128%20*%2F%0A%20%20%20%20FTM1-%26gt%3BSC%20%3D%20FTM_SC_PS(7)%20%7C%20FTM_SC_TOIE_MASK%3B%0A%0A%20%20%20%20%2F*%20Enable%20NVIC%20*%2F%0A%20%20%20%20NVIC_EnableIRQ(FTM1_IRQn)%3B%0A%0A%20%20%20%20%2F*%20START%20TIMER%20(LAST%20STEP%20ONLY)%20*%2F%0A%20%20%20%20FTM1-%26gt%3BSC%20%7C%3D%20FTM_SC_CLKS(1)%3B%0A%7D%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20UART%20SEND%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20UART_Send(const%20char%20*s)%0A%7B%0A%20%20%20%20while%20(*s)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20while%20(!(UART0-%26gt%3BS1%20%26amp%3B%20UART_S1_TDRE_MASK))%3B%0A%20%20%20%20%20%20%20%20UART0-%26gt%3BD%20%3D%20*s%2B%2B%3B%0A%20%20%20%20%7D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%3CEM%3E%3CSTRONG%3E%E5%B7%A5%E4%BD%9C%E4%BB%A3%E7%A0%81%3CBR%20%2F%3E%3C%2FSTRONG%3E%3C%2FEM%3E%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-cpp%22%3E%3CCODE%20translate%3D%22no%22%3E%23include%20%22MKE02Z4.h%22%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20GLOBALS%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avolatile%20uint8_t%20uartFlag%20%3D%200%3B%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20PROTOTYPES%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20init_clock(void)%3B%0Avoid%20init_uart0(void)%3B%0Avoid%20init_FTM2(void)%3B%0Avoid%20UART_Send(const%20char%20*s)%3B%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20FTM2%20ISR%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20FTM2_IRQHandler(void)%0A%7B%0A%20%20%20%20%2F*%20Clear%20overflow%20flag%20(write%200%20while%20set)%20*%2F%0A%20%20%20%20FTM2-%26gt%3BSC%20%26amp%3B%3D%20~FTM_SC_TOF_MASK%3B%0A%0A%20%20%20%20uartFlag%20%3D%201%3B%0A%7D%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20MAIN%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Aint%20main(void)%0A%7B%0A%20%20%20%20init_clock()%3B%0A%20%20%20%20init_uart0()%3B%0A%20%20%20%20init_FTM2()%3B%0A%0A%20%20%20%20UART_Send(%22FTM2%20Initialized%5Cr%5Cn%22)%3B%0A%0A%20%20%20%20while%20(1)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if%20(uartFlag)%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20uartFlag%20%3D%200%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20UART_Send(%22A%5Cr%5Cn%22)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20__WFI()%3B%20%20%20%2F*%20wait%20for%20interrupt%20*%2F%0A%20%20%20%20%7D%0A%7D%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20CLOCK%20INIT%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20init_clock(void)%0A%7B%0A%20%20%20%20%2F*%0A%20%20%20%20%20*%20Assume%20internal%20clock%20already%20configured%20by%20SDK%20startup%0A%20%20%20%20%20*%20Bus%20clock%20%3D%2032%20MHz%0A%20%20%20%20%20*%2F%0A%20%20%20%20SIM-%26gt%3BBUSDIV%20%3D%200x01%3B%20%20%20%2F*%20divide%20by%201%20*%2F%0A%7D%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20UART0%20INIT%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20init_uart0(void)%0A%7B%0A%20%20%20%20%2F*%20Enable%20UART0%20clock%20*%2F%0A%20%20%20%20SIM-%26gt%3BSCGC%20%7C%3D%20SIM_SCGC_UART0_MASK%3B%0A%0A%20%20%20%20%2F*%20UART0%20pin%20select%20(TX%2FRX)%20*%2F%0A%20%20%20%20SIM-%26gt%3BPINSEL%20%7C%3D%20SIM_PINSEL_UART0PS_MASK%3B%0A%0A%20%20%20%20%2F*%20Disable%20TX%20inversion%20(important!)%20*%2F%0A%20%20%20%20SIM-%26gt%3BSOPT%20%26amp%3B%3D%20~SIM_SOPT_TXDME_MASK%3B%0A%0A%20%20%20%20%2F*%0A%20%20%20%20%20*%209600%20baud%20%40%2032%20MHz%0A%20%20%20%20%20*%20SBR%20%3D%2032e6%20%2F%20(16%20*%209600)%20%E2%89%88%20208%0A%20%20%20%20%20*%2F%0A%20%20%20%20UART0-%26gt%3BBDH%20%3D%200x00%3B%0A%20%20%20%20UART0-%26gt%3BBDL%20%3D%2053%3B%0A%0A%20%20%20%20UART0-%26gt%3BC1%20%3D%200x00%3B%0A%20%20%20%20UART0-%26gt%3BC2%20%3D%20UART_C2_TE_MASK%20%7C%20UART_C2_RE_MASK%3B%0A%7D%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20FTM2%20INIT%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20init_FTM2(void)%0A%7B%0A%20%20%20%20%2F*%20Enable%20FTM2%20clock%20*%2F%0A%20%20%20%20SIM-%26gt%3BSCGC%20%7C%3D%20SIM_SCGC_FTM2_MASK%3B%0A%20%20%20%20__DSB()%3B%0A%0A%20%20%20%20%2F*%20----%20VERY%20IMPORTANT%20ORDER%20(KE02%20SAFE)%20----%20*%2F%0A%0A%20%20%20%20%2F*%20Stop%20counter%20completely%20*%2F%0A%20%20%20%20FTM2-%26gt%3BSC%20%3D%200%3B%0A%0A%20%20%20%20%2F*%20Disable%20write%20protection%20(WRITE%20ONCE)%20*%2F%0A%20%20%20%20FTM2-%26gt%3BMODE%20%3D%20FTM_MODE_WPDIS_MASK%3B%0A%0A%20%20%20%20%2F*%20Reset%20counter%20*%2F%0A%20%20%20%20FTM2-%26gt%3BCNTIN%20%3D%200%3B%0A%20%20%20%20FTM2-%26gt%3BCNT%20%20%20%3D%200%3B%0A%0A%20%20%20%20%2F*%0A%20%20%20%20%20*%2032%20MHz%20%2F%20128%20%3D%20250%20kHz%0A%20%20%20%20%20*%20250000%20ticks%20%3D%201%20second%0A%20%20%20%20%20*%2F%0A%20%20%20%20FTM2-%26gt%3BMOD%20%3D%20249999%3B%0A%0A%20%20%20%20%2F*%20Enable%20overflow%20interrupt%2C%20prescaler%20%3D%20128%20*%2F%0A%20%20%20%20FTM2-%26gt%3BSC%20%3D%20FTM_SC_PS(7)%20%7C%20FTM_SC_TOIE_MASK%3B%0A%0A%20%20%20%20%2F*%20Enable%20NVIC%20*%2F%0A%20%20%20%20NVIC_EnableIRQ(FTM2_IRQn)%3B%0A%0A%20%20%20%20%2F*%20START%20TIMER%20(LAST%20STEP%20ONLY)%20*%2F%0A%20%20%20%20FTM2-%26gt%3BSC%20%7C%3D%20FTM_SC_CLKS(1)%3B%0A%7D%0A%0A%2F*%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20UART%20SEND%20%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%20*%2F%0Avoid%20UART_Send(const%20char%20*s)%0A%7B%0A%20%20%20%20while%20(*s)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20while%20(!(UART0-%26gt%3BS1%20%26amp%3B%20UART_S1_TDRE_MASK))%3B%0A%20%20%20%20%20%20%20%20UART0-%26gt%3BD%20%3D%20*s%2B%2B%3B%0A%20%20%20%20%7D%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%3CEM%3E%3CSTRONG%3E%26nbsp%3B%3C%2FSTRONG%3E%3C%2FEM%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2269461%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20FTM%20Timer%20Confusion%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2269461%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%2F258109%22%20target%3D%22_blank%22%3E%40Jana_muralidharan%3C%2FA%3E%3C%2FP%3E%0A%3CBR%20%2F%3E%0A%3CDIV%3E%E8%AF%B7%E8%B0%83%E8%AF%95%E6%A3%80%E6%9F%A5%20FTM1%20%E6%97%B6%E9%92%9F%E6%98%AF%E5%90%A6%E5%90%AF%E7%94%A8%EF%BC%8C%E5%B9%B6%E9%AA%8C%E8%AF%81%E8%AE%A1%E6%95%B0%E5%AF%84%E5%AD%98%E5%99%A8%E6%98%AF%E5%90%A6%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C%E3%80%82%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3EBR%3C%2FDIV%3E%0A%3CDIV%3E%E7%88%B1%E4%B8%BD%E4%B8%9D%20%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2269468%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20FTM%20Timer%20Confusion%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2269468%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E5%AE%9E%E9%99%85%E4%B8%8A%EF%BC%8C%E6%88%91%E5%8F%91%E7%8E%B0%E4%BA%86%E9%94%99%E8%AF%AF%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%E8%BF%99%E6%98%AF%E5%9B%A0%E4%B8%BA%E6%88%91%E4%BD%BF%E7%94%A8%E4%BA%86%E4%BB%85%E9%80%82%E7%94%A8%E4%BA%8E%20FTM2%20%E7%9A%84%E5%AF%84%E5%AD%98%E5%99%A8%E3%80%81%3C%2FP%3E%3CP%3E%E5%9B%A0%E6%AD%A4%EF%BC%8C%E5%9C%A8%E5%88%A0%E9%99%A4%E4%B8%8D%E9%9C%80%E8%A6%81%E7%9A%84%E5%AF%84%E5%AD%98%E5%99%A8%E5%90%8E%EF%BC%8C%E5%AE%83%E5%B0%B1%E8%83%BD%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C%E4%BA%86%E3%80%82%3C%2FP%3E%3CP%3E%E6%88%91%E5%8F%91%E7%8E%B0%3CSTRONG%3EHardFault%20Error%20%3C%2FSTRONG%3E%E5%8F%AA%E6%9C%89%E5%9C%A8%E4%BB%A5%E4%B8%8B%E6%83%85%E5%86%B5%E4%B8%8B%E6%89%8D%E4%BC%9A%E5%8F%91%E7%94%9F%E3%80%81%20%3CEM%3E%3CSTRONG%3E%E6%88%91%E4%BB%AC%E4%BD%BF%E7%94%A8%E4%BA%86%E5%8E%9F%E6%9C%AC%E4%B8%8D%E5%AD%98%E5%9C%A8%E7%9A%84%E5%AF%84%E5%AD%98%E5%99%A8%E3%80%82%3C%2FSTRONG%3E%3C%2FEM%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CFONT%20size%3D%225%22%3E%3CSTRONG%3E%3CEM%3E%E5%98%BF%EF%BC%8C%E6%84%9F%E8%B0%A2%E6%82%A8%E5%AF%B9%E8%BF%99%E4%B8%AA%E9%97%AE%E9%A2%98%E7%9A%84%E5%85%B3%E6%B3%A8%EF%BC%8C%E8%B0%A2%E8%B0%A2.....%E3%80%82%3C%2FEM%3E%3C%2FSTRONG%3E%3C%2FFONT%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E