STM32MP1 - IPCC
プロセッサ間通信コントローラ

1.0 版

こんにちは、STM32 プロセッサ間通信コントローラ（IPCC）モジュールのプレゼンテーションへようこそ。ここでは、CPU 間の信号メッセージ交換に使われているモジュールの主な機能を説明します。

1

概要

2

• 通信チャネル管理用のノンブロッキング信号授受が可能• メッセージ利用可能割込み• フローオン割込み通知• 通信方法：• 単方向：方向ごとに専用のチャネル• 半二重：単一共有双方向チャネル

アプリケーション側の利点• ノンブロッキングメッセージ交換• チャネルフロー制御• CPU の CSleep および CStop モードのサポート• 最大 2 つの双方向チャネル• チャネルデータは共有 RAM に格納

STM32 製品内部に統合されたプロセッサ間通信コントロー
ラモジュールによって、割込み信号の授受が可能になり、マイクロコントローラがノンブロッキング方式でメッセージを交換できるようになります。このモジュールにより、専用チャネルを使用してプロセッサ A からプロセッサ B にメッセージを送信する単方向通信が可能になります。また、単一の共有チャネルを使用してプロセッサ A とプロセッサ B の間で通信する半二重（メッセージ - 応答）通信も可能になります。アプリケーションは、ノンブロッキングで割込みベースのメッセージ交換とチャネルフロー制御の恩恵を受けます。プロセッサ間通信
コントローラによって、CPU を CSleep、CStop、およびCStandby モードからウェイクアップできます。
チャネルデータの格納場所は、プロセッサ間通信コントローラの一部ではなく、共有メモリに格納されます。

2ブロック図

3

IPCC
割込み管理

AHB インタフェース

スレーブ AHB

CPU1
チャネル [N:0]
ステータス

HCLK

CPU2
チャネル [N:0]
ステータス

[N]

[N]

[N]

[N]

CPU1 RXCPU1 RX 占有

CPU1 TX

CPU1 TX 解放

CPU2 RXCPU2 RX 占有

CPU2 TX

CPU2 TX 解放

プロセッサ間通信コントローラは AHB のスレーブモジュールです。これは、レジスタを含む「AHB インタフェース」と「割込み管理」部分で構成されています。
各チャネルには、1 つの CPU の送信ステータスと他の CPUの受信ステータスを示す単一のステータスフラグがあります。
各 CPU には独自のステータスマスクがあり、各チャネルのレジスタビットをセットまたはクリアします。レジスタ領域は 2つの領域（CPU ごとに 1 つずつ）に分割されています。各領域には、CPU に関連付けられたレジスタが含まれており、リード・モデファイ・ライト・アクセスの競合を防止します。
CPU ごとに専用の割込みが提供されます。

3

チャネルの管理

4• 各チャネルには以下の機能• 次のどちらかに関連付けられた方向• CPU1 から送信して CPU2 で受信、または CPU2 から送信して CPU1 で受信• 単一の読出し専用チャネルステータスフラグ（ビット CHnF）• 送信側 CPU によって「占有」に設定可能（ビット CHnS）• 受信側 CPU によって「解放」にクリア可能（ビット CHnC）• 割込みマスク• 送信側 CPU チャネル解放マスク（ビット CHnFM）• 受信側 CPU チャネル占有マスク（ビット CHnOM）
送信側 CPU
占有のセット
チャネルステータスCHnF
受信側 CPU
解放をクリア

送信側 CPU解放マスク

送信側 CPU TX 解放

受信側 CPU
占有マスク

受信側 CPU RX 占有

チャネルは、送信側 CPU から受信側 CPU への方向に関連付けられています。
送信側 CPU では、チャネル N レジスタ設定ビット（CHnS）を使用してチャネルステータスを 「占有」に設定することにより、チャネルが占有されるように通知できます。
受信側 CPU がチャネル N 占有マスクレジスタビット（CHnOM）でチャネル占有割込みのマスクを解放していた場
合、受信側 CPU に対して RX 占有割込み（メッセージ利用可能）が生成されます。
受信側 CPU は、チャネル N レジスタクリアビット（CHnC）を使用してチャネルステータスを「解放」に設定することにより、チャネルが解放されるように通知できます。
送信側 CPU がチャネル N 解放マスクレジスタビット（CHnFM）でチャネル解放割込みのマスクを解放していた場
合、送信側 CPU に対して TX 解放割込み（フローオン）が生成されます。

4

IPCC 手順5

単方向送信スタート

チャネル N
ステータス読出し

チャネル解放チャネルデータ書込みチャネル N
ステータスを占有にセット終了

チャネル占有チャネル NTX 解放割込みのマスク解放

TX 解放割込
みを待機チャネル NTX 解放割込みをマスク

TX 解放割込み

TX 解放割込を受信

単方向手順では、専用チャネルを介して送信側から受信側にメッセージを転送できます。
単方向手順を使用してメッセージを送信するには、チャネルステータスフラグをチェックします。チャネルステータスフラグがチャネル占有（フローオフ）を示している場合、つまり、受信側が前のメッセージでチャネルデータバッファを解放していないため、チャネル解放割込みのマスクを解放します。チャネ
ルが受信側によって解放されると、チャネル解放割込み（フローオン）が生成されます。チャネル解放割込みが生成されると、チャネル解放割込みをマスクして、メッセージをチャネルデータバッファに書き込むことができます。その後、チャネルステータスフラグが占有に設定され、それにより受信側に対してチャネル占有割込みがトリガされます。
チャネルステータスフラグが解放であることが確認された場
合は、直ちにメッセージをチャネルデータバッファに書き込むことができます。

5

IPCC 手順

6

単方向受信

Rx 占有割込み

チャネルステータスの読出しどのチャネルが占有されているかを判別

チャネル NRx
占有割込みをマスク

チャネルデータ読出し

チャネル N
ステータスを解放にセット

チャネル NRx
占有割込みのマスク解放

終了

チャネル占有割込みが生成されると、受信側はどのチャネルが占有されているかを判別し、適切なチャネル占有割込みをマスクします。その後、チャネルデータバッファからメッセージを読み取ることができます。読み取られると、チャネルステー
タスフラグは解放（フローオン）にクリアされ、チャネル占有割込みのマスクが解放されます。

6

IPCC 手順7

送信側：半二重メッセージ送信と応答待機• メッセージ送信および応答受信のために解放ステータスを使用
スタート

チャネル N
ステータスの読出しメッセージの送信
チャネル解放チャネル N（メッセージ）の書込み

応答の受信
チャネル N
ステータスを占有にセット

チャネル N のRX 割込みをマスク

チャネル NのTX 解放割込みのマスク解放どのチャネルが解放かを判別

チャネル N（応答）の読出しチャネル占有

前のメッセージへの応答を待機

TX 解放割込みを待機

TX 解放割込み終了

チャネルステータスの読出し半二重手順では、単一の共有バッファを使用して、送信側から受信側にメッセージを転送した後、受信側から送信側に送り返される応答を受信できます。
半二重手順では、送信側は最初にチャネルステータスフラグを確認します。チャネルステータスフラグがチャネルが占有されている（フローオフ）ことを示している場合、つまり、受信側が前のメッセージへの応答をまだ送信していないため、送信側は応答（ソフトウェアフラグ）を待ちます。
チャネルが空いている場合は、メッセージをチャネルデータバッファに書き込むことができます。その後、チャネルステー
タスフラグが占有に設定され、それにより受信側に対してチャネル占有割込みがトリガされ、チャネル解放割込みがマスクされます。チャネル解放割込みは、受信側から送信された応答が利用できることを示します。
チャネル解放割り込み（応答準備完了）が生成されると、送信側は解放されたチャネルを判別し、対応するチャネル解放割込みをマスクします。その後、チャネルデータバッファから応答を読み取ることができます。
7

IPCC 手順8

受信側：半二重メッセージ受信と応答送信• メッセージ受信および応答送信のために占有ステータスを使用メッセージの受信
Rx 占有割込み

チャネルステータスの読出しどのチャネルが占有されているか判別
チャネル NのRx
占有割込みをマスク

応答の送信
チャネル N（メッセージ）の読出し

終了

スタート

チャネル N（応答）の書込み

チャネル N ス
テータスを解放にセット
チャネル NのRx
占有割込みマスク解放

終了

チャネル占有割込み（メッセージ利用可能）が生成されると、受信側はどのチャネルが占有されているかを判別し、対応するチャネル占有割込みをマスクします。その後、チャネルデータバッファからメッセージを読み取ることができます。チャネルは、受信側がチャネルデータバッファに応答を送信した後にのみ解放されます。 応答がチャネルデータバッファで受信されると、チャネルステータスフラグは解放（応答準備完了）にクリアされ、チャネル占有割込みのマスクが解放されます。

8

割込み
割込みイベント

説明

CPU1 TX 解放

CPU1 の送信チャネルステータスが解放にクリアされました。

CPU1 RX 占有

CPU1 の受信チャネルステータスが占有にセットされました。

CPU2 TX 解放

CPU2 の送信チャネルステータスが解放にクリアされました。

CPU2 RX 占有

CPU2 の受信チャネルステータスが占有にセットされました。

これは、プロセッサ間通信コントローラの割込みの概要です。
各 CPU には、独自の送信チャネルに関連付けられた TX 解放割込みがあります。
各 CPU には、送信側 CPU チャネルに関連付けられた RX占有割込みがあります。

9低電力モード
システムモード

説明

RUN

アクティブ。ペリフェラル割込みによって、CPU は CSleep、CStop、および CStandby モードを終了します。

SLEEP停止。ペリフェラルレジスタの内容は保たれます。

Stop/
LP-Stop

停止。ペリフェラルレジスタの内容は保たれます。

LPLV-Stop

停止。ペリフェラルレジスタの内容は保たれます。

STANDBY

パワーダウン状態。ペリフェラルは、システム Standby モード終了後に再初期化する必要があります。

これは、特定の低電力設定モードでのペリフェラルのステー
タスの概要です。プロセッサ間通信コントローラは、Sleepモードと Stop モードで状態を変更できません。Standby モードでは、プロセッサ間通信コントローラの内容は失われます。
プロセッサ間通信コントローラは、CPU が Run モードにあるときは常に Run モードになります。プロセッサ間通信コント
ローラは、CRun、CSleep、CStop、CStandby モードでCPU に割り込み、ウェイクアップできます。

10

関連ペリフェラル

11• これは、IPCC コントローラに関連するペリフェラルの一覧です。詳細については、必要に応じてこれらのペリフェラルのトレーニングを参照してください。
• リセットおよびクロック制御（RCC）• 拡張割込みおよびイベントコントローラ（EXTI）• 割込み（NVIC）

これは、プロセッサ間通信コントローラモジュールに関連するペリフェラルの一覧です。プロセッサ間通信コントローラモ
ジュールを正しく設定して使用するには、これらのペリフェラ
ル間のすべての関係に精通している必要があります。

11