コード例 #1
0
ファイル: main.c プロジェクト: Arcko/trochili
/*!
    \brief      main function
    \param[in]  none
    \param[out] none
    \retval     none
*/
int main(void)
{
    /* system clocks configuration */
    irc40k_config();
    systick_config();
  
    gd_eval_ledinit(LED2);
    gd_eval_keyinit(KEY_TAMPER,KEY_MODE_EXTI);
    delay_1ms(50);

    /* enable write access to FWDGT_PSC and FWDGT_RLD registers.
       FWDGT counter clock: 40KHz(IRC40K) / 64 = 0.625 KHz */
    fwdgt_config(625,FWDGT_PSC_DIV64);
    fwdgt_enable();

    /* check if the system has resumed from FWDGT reset */
    if (RESET != rcu_flag_get(RCU_FLAG_FWDGTRST)){
        gd_eval_ledon(LED2);
        rcu_reset_flag_clear();
      
        while(1);
    }else{
        gd_eval_ledoff(LED2);
    }

    while (1);
}
コード例 #2
0
ファイル: gd32e10x_rcu.c プロジェクト: oscarh/mbed-os
/*!
    \brief      wait for oscillator stabilization flags is SET or oscillator startup is timeout
    \param[in]  osci: oscillator types, refer to rcu_osci_type_enum
                only one parameter can be selected which is shown as below:
      \arg        RCU_HXTAL: high speed crystal oscillator(HXTAL)
      \arg        RCU_LXTAL: low speed crystal oscillator(LXTAL)
      \arg        RCU_IRC8M: internal 8M RC oscillators(IRC8M)
      \arg        RCU_IRC48M: internal 48M RC oscillators(IRC48M)
      \arg        RCU_IRC40K: internal 40K RC oscillator(IRC40K)
      \arg        RCU_PLL_CK: phase locked loop(PLL)
      \arg        RCU_PLL1_CK: phase locked loop 1
      \arg        RCU_PLL2_CK: phase locked loop 2
    \param[out] none
    \retval     ErrStatus: SUCCESS or ERROR
*/
ErrStatus rcu_osci_stab_wait(rcu_osci_type_enum osci)
{
    uint32_t stb_cnt = 0U;
    ErrStatus reval = ERROR;
    FlagStatus osci_stat = RESET;

    switch (osci) {
        /* wait HXTAL stable */
        case RCU_HXTAL:
            while ((RESET == osci_stat) && (HXTAL_STARTUP_TIMEOUT != stb_cnt)) {
                osci_stat = rcu_flag_get(RCU_FLAG_HXTALSTB);
                stb_cnt++;
            }

            /* check whether flag is set or not */
            if (RESET != rcu_flag_get(RCU_FLAG_HXTALSTB)) {
                reval = SUCCESS;
            }
            break;

        /* wait LXTAL stable */
        case RCU_LXTAL:
            while ((RESET == osci_stat) && (LXTAL_STARTUP_TIMEOUT != stb_cnt)) {
                osci_stat = rcu_flag_get(RCU_FLAG_LXTALSTB);
                stb_cnt++;
            }

            /* check whether flag is set or not */
            if (RESET != rcu_flag_get(RCU_FLAG_LXTALSTB)) {
                reval = SUCCESS;
            }
            break;

        /* wait IRC8M stable */
        case RCU_IRC8M:
            while ((RESET == osci_stat) && (IRC8M_STARTUP_TIMEOUT != stb_cnt)) {
                osci_stat = rcu_flag_get(RCU_FLAG_IRC8MSTB);
                stb_cnt++;
            }

            /* check whether flag is set or not */
            if (RESET != rcu_flag_get(RCU_FLAG_IRC8MSTB)) {
                reval = SUCCESS;
            }
            break;

        /* wait IRC48M stable */
        case RCU_IRC48M:
            while ((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)) {
                osci_stat = rcu_flag_get(RCU_FLAG_IRC48MSTB);
                stb_cnt++;
            }

            /* check whether flag is set or not */
            if (RESET != rcu_flag_get(RCU_FLAG_IRC48MSTB)) {
                reval = SUCCESS;
            }
            break;

        /* wait IRC40K stable */
        case RCU_IRC40K:
            while ((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)) {
                osci_stat = rcu_flag_get(RCU_FLAG_IRC40KSTB);
                stb_cnt++;
            }

            /* check whether flag is set or not */
            if (RESET != rcu_flag_get(RCU_FLAG_IRC40KSTB)) {
                reval = SUCCESS;
            }
            break;

        /* wait PLL stable */
        case RCU_PLL_CK:
            while ((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)) {
                osci_stat = rcu_flag_get(RCU_FLAG_PLLSTB);
                stb_cnt++;
            }

            /* check whether flag is set or not */
            if (RESET != rcu_flag_get(RCU_FLAG_PLLSTB)) {
                reval = SUCCESS;
            }
            break;

        /* wait PLL1 stable */
        case RCU_PLL1_CK:
            while ((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)) {
                osci_stat = rcu_flag_get(RCU_FLAG_PLL1STB);
                stb_cnt++;
            }

            /* check whether flag is set or not */
            if (RESET != rcu_flag_get(RCU_FLAG_PLL1STB)) {
                reval = SUCCESS;
            }
            break;
        /* wait PLL2 stable */
        case RCU_PLL2_CK:
            while ((RESET == osci_stat) && (OSC_STARTUP_TIMEOUT != stb_cnt)) {
                osci_stat = rcu_flag_get(RCU_FLAG_PLL2STB);
                stb_cnt++;
            }

            /* check whether flag is set or not */
            if (RESET != rcu_flag_get(RCU_FLAG_PLL2STB)) {
                reval = SUCCESS;
            }
            break;

        default:
            break;
    }

    /* return value */
    return reval;
}