PSoC 6 MCU デバイスを EZI2C スレーブアドレスマッチでディープスリープから復帰する - KBA227480- Community Translated (JA)

Version 1

    Community Translated by  MoTa_728816          Version: **

     

     

    SCB_EZI2C_PDL コンポーネントはスレーブアドレスマッチでデバイスをディープスリープからウェイクアップ()させることが可能です。この機能を有効にするためには Enable Wakeup from Deep Sleep Mode パラメータを有効にしてください。1 PSoC Creator 4.2 のコンフィグレーション設定です。図 2 ModusToolbox 2.1 のデバイスコンフィグレータ設定です

     

    1. PSoC Creator 4.2 コンフィグレーション設

     

    2. ModusToolbox デバイスコンフィグレータ設

     

    注意:内蔵されている SCB 内ディープスリープに対応しているものは1つだけです。 PSoC 6 ータシートの Pinouts section: Multiple alternate function table をご参照ください、SCB のディープスリープ機能は DS (ディープスリープ) カラムに記載されています。

     

    ディープスリープに入る前に、 下記の手順で cy_syspm ドライバを使用して ディープスリープコールバック関数を登録してください

     

    1. 下記のデータフィールドをもつ cy_stc_syspm_callback_params_t ストラクチャリファレンスを定義してください。

      • void* cy_stc_syspm_callback_params_t::baseBase → ードウェアインスタンスのアドレス、ースアドレスにドライバ名が一致するもの

     

    • void* cy_stc_syspm_callback_params_t::context  ールバックがコンテクストを必要とする場合、ハンドラ関数へのコンテクスト。もしくは、この項目はと定義される。

     

     

    2. 下記のデータフィールドをもつ cy_stc_syspm_callback_t ストラクチャリファレンスを定義してください。

      • Cy_SysPmCallback cy_stc_syspm_callback_t::callback ールバックハンドラ関数

     

    • cy_en_syspm_callback_type_t cy_stc_syspm_callback_t::type  Deep Sleep enum ールバックタイプCy_SYSPM_DEEPSLEEP)

     

    • uint32_t cy_stc_syspm_callback_t::skipMod ールバック実行中にスキップされるモードのマス

     

    • cy_stc_syspm_callback_params_t* cy_stc_syspm_callback_t::callbackParams → cy_stc_syspm_callback_params_t のアドレス;コールバックはこれらの引数を使用して実行されます

     

    • struct cy_stc_syspm_callback* cy_stc_syspm_callback_t::prevItm 一つ前の項目。この項目はと定義されます。

     

    • struct cy_stc_syspm_callback* cy_stc_syspm_callback_t::nextItm 一つ後の項目。この項目はと定義されます。

     

    3. Cy_SysPm_RegisterCallback (cy_stc_syspm_callback_t * handler) を使用してコールバックを登録します

     

    4. ディープスリープに入るのに Cy_SysPm_CpuEnterDeepSleep (CY_SYSPM_WAIT_FOR_INTERRUPT) を使用します。PSoC 6 EZI2C のアドレスマッチが発生するとウェイクアップ () します。

     

    ストラクチャと API の詳細については PDL のドキュメントを参照してください

     

    ードスニペット

    cy_stc_syspm_callback_params_t Cy_SCB_EZI2C_DeepSleepCallback_param =

       {

    sEzI2C_HW,

            NULL

       };

     

    cy_stc_syspm_callback_t Cy_SCB_EZI2C_DeepSleepCallback_elements =

       {

    &Cy_SCB_EZI2C_DeepSleepCallback,

           CY_SYSPM_DEEPSLEEP,

    0U,

    &Cy_SCB_EZI2C_DeepSleepCallback_param,

           NULL,

           NULL

       };

     

     

    int main(void)

    {

       if (true != Cy_SysPm_RegisterCallback(&Cy_SCB_EZI2C_DeepSleepCallback_elements))

    {

            /* エラー処理を記述する */

    }

     

       if (CY_SYSPM_SUCCESS != Cy_SysPm_CpuEnterDeepSleep(CY_SYSPM_WAIT_FOR_INTERRUPT))

    {      

            /* エラー処理を記述する */

    }

    }