FX3にウォッチドッグタイマーを実装 - KBA223337 - Community Translated (JA)

Version 1

    Community Translated by keni_4440091 Expert           Version: **

     

    Translation - English: Implementing Watchdog Timer in FX3 – KBA223337

     

    質問:

    FX3ファームウェアにどのようにしてウォッチドッグタイマーを実装しますか?

     

    回答:

    下記の例を考えてみます:

    #define CY_FX_WATCHDOG_PERIOD 5000 //ウォッチドッグタイマーを5秒に設定

    #define CY_FX_WATCHDOG_CLEAR_PERIOD 3000
    //
    ウォッチドッグクリアタイマーを3秒に設定

     

    CyU3PTimer WdClearTimer;

     

    void TimerInit(void)

    {

         CyU3PReturnStatus_t apiRetStatus = CY_U3P_SUCCESS;

         CyU3PSysWatchDogConfigure(CyTrue, (CY_FX_WATCHDOG_PERIOD); //ここではCY_FX_WATCHDOG_PERIODミリ秒単位です。

         CyU3PDebugPrint (4, "WatchDog Timer Created\r\n");

      
    apiRetStatus = CyU3PTimerCreate(&WdClearTimer, WatchDogTimerClearCb, 0, CY_FX_WATCHDOG_CLEAR_PERIOD, CY_FX_WATCHDOG_CLEAR_PERIOD, 1);                              //ここでCY_FX_WATCHDOG_CLEAR_PERIOD はミリ秒単位です。

    if (apiRetStatus != CY_U3P_SUCCESS)
    {

            CyU3PDebugPrint (4, "TimerCreate failed, Error Code = %d\r\n", apiRetStatus);

    }

    }

     

    無限「for loop」の前にTimerInit()関数を呼び出します。( for ( ;  )

     

    注意:

    1. サンプルコードの一部で、CY_FX_WATCHDOG_PERIODはウォッチドッグタイマーのリセット期間です。つまり、ウォッチドッグタイマーがこの期間の前にクリアされない場合、FX3はリセットされます。従って、もう一つのタイマー「WdClearTimer」が時間切れになる前にウォッチドッグタイマーをクリアするために生成されています。
    2. CY_FX_WATCHDOG_CLEAR_PERIODの値はCY_FX_WATCHDOG_PERIODの値よりも少なくする必要があります。
    3. WdClearTimerタイマーは、下記に定義されているコールバックWatchDogTimerClearCbを生成します:

     

    void WatchDogTimerCb (uint32_t nParam)

    {

    CyU3PSysWatchDogClear();
    }