PSoC 4Sシリーズで追加のタイマーを使用する – KBA230963 - Community Translated (JA)

Version 1

    Community Translated by NoTa_4591161 Expert    Version: **

     

    Translation - English: Using Additional Timers in PSoC 4S Series – KBA230963

     

    質問: PSoC® 4Sシリーズでどのように「タイマーの追加」を行えばよろしいでしょうか?

     

    回答:ウォッチドッグタイマー(WDT)は、予期しないファームウェア実行パスまたはCPUの機能を危険にさらす電圧低下がある場合に、デバイスを自動的にリセットするために使用されます。WDTは、ILOによって生成されたLFCLKから実行されます。タイマーは、リセットを回避するためにファームウェアで定期的に処理する必要があります。そうしない場合には、タイマーが経過してデバイスがリセットされます。WDTは、低電力モードで割り込みソースまたはウェイクアップソースとして使用できます。

    WDTの他に、WDT0WDT1、およびWDT23つの追加の汎用タイマーがあります。これらの3つのタイマーは、ILOまたはWCOからクロック供給され、WCO_WDT_CLKENレジスタへの書き込みによって選択されます。これらのタイマーは、アクティブ、スリープ、およびディープスリープモードで実行でき、割り込みを生成できます。

     

    1.デフォルトのシステムクロックの設定

     

     

                            

    Timer01 Hzタイマーとして構成する2は、デフォルトでILOを使用します)

    解決策1

    2示すように、クロックエディターを使用して構成します

     

    2. 設定後にシステムクロックを構成する

        

     

    プロジェクトのビルド中に、プロジェクトの基礎となるコードは、cyfitter_cfg.cファイルのstatic void ClockSetup(void)APIでクロック構成情報を生成します

    main.cファイル、コールバック関数を呼び出し、次のコードスニペットに示すように、タイマカウンターを有効にする必要があります。

     

        /* 特定のDeepSleepタイマーカウンターのISRコールバック関数を設定します */

    CySysTimerSetInterruptCallback(CY_SYS_TIMER0 Timer0_1s_isr;

    /* 指定したDeepSleepタイマーカウンターを有効にします */

    CySysTimerEnable(CY_SYS_TIMER0_MASK );

     

    その後、デバイスは1秒ごとにvoid Timer0_1s_isrvoid APIで実行されます。

     

    解決策2

    クロックエディターでは設定を行わず、次のコードを使用してタイマーを構成します。

     

    void Timer0_1s_isr(void

    {

     

    //ユーザーはここにアプリケーションコードを配置できます。割り込みが発生すると、コードはここにジャンプします。

    }

    #define ENABLE_WDT_TIMER0_IN_CLICKEDITOR   (0u)

     

     

        #if (!ENABLE_WDT_TIMER0_IN_CLICKEDITOR )

        /* ここでタイマーソースを設定し、WCOまたはILOを選択 */

    CySysClkSetTimerSource(CY_SYS_CLK_TIMER_SRC_ILO);

    /* タイマーモード、フリーランニングまたは割り込み、カウンター01の一致で生成される割り込み、counter2のビットトグルで設定します */

    CySysTimerSetMode(CY_SYS_TIMER0, CY_SYS_TIMER_MODE_INT );

    /* サイクルを取得するためにmatch値を使用します */

    CySysTimerSetMatch(CY_SYS_TIMER0, 0x9C3E );

        /* ビットを有効にする:0 - カウンターフリーラン; 1 – match上のカウンターをクリア */

    CySysTimerSetClearOnMatch(CY_SYS_TIMER0, 1);

     

        #endif

        /* 特定のDeepSleepタイマーカウンターのISRコールバック関数を設定します */

    CySysTimerSetInterruptCallback(CY_SYS_TIMER0, Timer0_1s_isr);

    /* 指定したDeepSleepタイマーカウンターを有効にします */

    CySysTimerEnable(CY_SYS_TIMER0_MASK );