FTM Timer Confusion

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 
451件の閲覧回数
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 解決策
347件の閲覧回数
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 返答(返信)
354件の閲覧回数
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 件の賞賛
返信
348件の閲覧回数
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%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%E3%81%AE%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%3ESO%E3%80%81%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%20FTM0%2FFTM1%20%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E3%81%99%E3%82%8B%E3%81%A8%E3%80%81%E3%82%BF%E3%82%A4%E3%83%9E%E3%83%BC%20%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E3%81%A8%20HardFault%20%E3%81%A7%E5%81%9C%E6%AD%A2%E3%81%97%E3%81%BE%E3%81%99%E3%81%8C%E3%80%81FTM2%20%E3%81%AE%E5%90%8C%E3%81%98%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E5%AE%8C%E5%85%A8%E3%81%AB%E6%AD%A3%E5%B8%B8%E3%81%AB%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%E3%81%AA%E3%81%9C%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%3CU%3E%3CEM%3E%3CSTRONG%3E%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%AA%E3%81%84%E3%82%B3%E3%83%BC%E3%83%89%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%E4%BD%9C%E6%A5%AD%E3%82%B3%E3%83%BC%E3%83%89%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%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%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%3EFTM1%20%E3%82%AF%E3%83%AD%E3%83%83%E3%82%AF%E3%81%8C%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%80%81%E3%81%8A%E3%82%88%E3%81%B3%E3%82%AB%E3%82%A6%E3%83%B3%E3%82%BF%E3%83%BC%20%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%8F%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E3%81%A9%E3%81%86%E3%81%8B%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%97%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%E3%80%82%3C%2FDIV%3E%0A%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%0A%3CDIV%3EBR%3C%2FDIV%3E%0A%3CDIV%3E%E3%82%A2%E3%83%AA%E3%82%B9%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%9F%E9%9A%9B%E3%81%AB%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%81%BE%E3%81%97%E3%81%9F%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%E3%81%9D%E3%82%8C%E3%81%AF%E3%80%81FTM2%E3%81%AB%E7%89%B9%E6%9C%89%E3%81%AE%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82%3C%2FP%3E%3CP%3ESO%E3%80%81%E4%B8%8D%E8%A6%81%E3%81%AA%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF%E3%82%92%E5%89%8A%E9%99%A4%E3%81%97%E3%81%9F%E5%BE%8C%E3%81%AF%E3%80%81%E5%AE%8C%E5%85%A8%E3%81%AB%E6%AD%A3%E5%B8%B8%E3%81%AB%E5%8B%95%E4%BD%9C%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%3C%2FP%3E%3CP%3E%E3%81%9D%E3%81%97%E3%81%A6%E3%80%81%20%3CSTRONG%3EHardFault%20%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AF%3C%2FSTRONG%3E%3CEM%3E%3CSTRONG%3E%E3%80%81%E3%81%9D%E3%82%82%E3%81%9D%E3%82%82%E5%AD%98%E5%9C%A8%E3%81%97%E3%81%AA%E3%81%84%E3%83%AC%E3%82%B8%E3%82%B9%E3%82%BF%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AB%E3%81%AE%E3%81%BF%E7%99%BA%E7%94%9F%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%8C%E3%82%8F%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%97%E3%81%9F%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%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%82%E3%81%93%E3%81%AE%E8%B3%AA%E5%95%8F%E3%81%AB%E3%81%94%E6%B3%A8%E7%9B%AE%E3%81%84%E3%81%9F%E3%81%A0%E3%81%8D%E3%81%82%E3%82%8A%E3%81%8C%E3%81%A8%E3%81%86%E3%81%94%E3%81%96%E3%81%84%E3%81%BE%E3%81%99%E3%80%82%3C%2FEM%3E%3C%2FSTRONG%3E%3C%2FFONT%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E