PSoC 6 MCU デバイスを EZI2C スレーブアドレスマッチでディープスリープから復帰する - KBA227480- Community Translated (JA)
- RSS フィードを購読する
- 新着としてマーク
- 既読としてマーク
- ブックマーク
- 購読
- 印刷用ページ
- 不適切なコンテンツを報告
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))
{
/* エラー処理を記述する */
}
}