STM32WB - HSEM
ハードウェアセマフォ

1.0 版

STM32 ハードウェアセマフォ（HSEM）モジュールのプレゼンテーションにようこそ。複数のプロセス間で共有されるリソースのアクセス許可と同期の管理に用いられるモジュールの主な機能の説明を行います。

1

概要

2

• アクセス許可と同期の管理• 同一 CPU 上で動作する異なるプロセス間• 異なる CPU 間• 32 セマフォ• 2 種類のロック機構• 2 ステップ書込み、読戻しロック• 1 ステップ読出しロック• セマフォ解放割込み生成

アプリケーション側の利点• 共有リソース間のアクセス競合の防止• プロセス間同期の保証• ノンブロッキングセマフォ処理

STM32 マイクロコントローラの中に組み込まれている
HSEM モジュールは、プロセスの同期と、共有リソースに対するアクセス許可の管理に使用されるセマフォを備えています。このモジュールには、2 ステップロック機構と高速 1 ステップロック機構が搭載されています。アプリケーションは、ノンブロッキング割込みベースのセマフォを通じたプロセス同期と共有可能リソースによる恩恵を受けます。

2

ブロック図3HSEM
AHB インタフェース

割込み管理Core ID クリア
スレーブ AHB

セマフォ
0～31

AHB マスタ ID

書込み／読出し読出しロックCPU1割込み

CPU1 割込みリクエスト

CPU2割込み

CPU2 割込みリクエスト

HCLK

HSEM モジュールは AHB バス上にあります。
セマフォを含んでいる「AHB インタフェース」と、割込みの分配を処理する「割込み管理」ブロックから構成されています。
各 CPU に専用の割込みが備わっています。それぞれのCPU には、セマフォのためのイネーブル、ステータス、マスク、クリアレジスタがあります。
それぞれのセマフォは、2 ステップ手順におけるセマフォの書込みロック、ならびにセマフォステータスの読戻しに用いられる 2 個のレジスタ（書込み／読出しレジスタ）で構成されています。書込み／読出しレジスタは、セマフォの解放にも使用されます。読出しロックレジスタは、1 ステップ手順においてセマフォを読出しロックするために使用されます。
AHB バスマスタ ID は、どの CPU がセマフォにアクセスしているかを識別するために使用されます。この ID は、ロック時にセマフォの中に格納され、セマフォステータスから Core IDとして読み戻すことができます。
STM32WB マイクロコントローラでは、CPU1 がCore ID0x03、CPU2 がCore ID 0x01 を使用します。
3

セマフォの手順

4

2 ステップ書込みロック機構

書込み（LOCK = 0）

リセット

書込み（CoreID & Process ID & LOCK = 1）

ロック

解放

読出し

書込み（CoreID または Process ID）
または書込み（LOCK = 1）

書込み（CoreID & Process ID & LOCK = 0）

読出し

2 ステップ書込みロック手順において、「解放」されているセマフォは、セマフォの書込み／読出しレジスタに‘1’を書き込むことによってロックされます。書込み中に使用された Core IDと Process ID は、セマフォの中に格納されます。 プロセスは、書込み／読出しレジスタを読み戻すことによって、セマフォがそれによりロックされていることを確認する必要があります。読み戻されたセマフォの Core ID と Process ID が、セマフォをロックしているプロセスによって書き込まれた値と一致している場合、そのプロセスによりロックされたことになります。Core ID か Process ID が一致しない場合には、そのセマフォは別のプロセスによってロックされています。
ロックされたセマフォは、対応する Core ID と Process ID を用いて LOCK ビットに‘0’を書き込むことによってのみアンロック可能です。
Core ID もしくは Process ID に書き込むか、LOCK ビットに‘1’を書き込むと、セマフォはロックされたままとなります。

4セマフォの手順

5

1 ステップ読出しロック機構

読出しロック

リセット

ロック

解放

読出し

読出しロック

書込み（CoreID & Process ID & LOCK = 0）

1 ステップ読出しロック手順において、「解放」されているセマフォは、セマフォの読出しロックレジスタを読み出すことによってロックされます。読出し中に使用された Core ID は、読出しサイクル中にセマフォの中に格納されます。CPU によって読み出されたセマフォ Core ID 値が CPU による値と一致し、かつ Process ID = 0x0000 である場合、そのセマフォはCPU によりロックされたことになります。1 ステップ読出しロッ
ク手順では、Process ID はありません。1 ステップ読出しロッ
ク手順によってロックされた場合、Process ID は 0x0000 が読み出されます。Core ID が一致しないか、Process ID が0x0000 ではない場合には、そのセマフォは別のCPUかプロセスによってロックされています。
ロックされたセマフォは、対応する Core ID と Process ID を用いて LOCK ビットに‘0’を書き込むことによってのみアンロック可能です。
2 ステップと 1 ステップのロック手順は、同時に使用できます。
この場合、2 ステップロック手順は、Process ID の値に0x0000 を使用することはできません。
5セマフォの手順

6

Core ID のクリア
• CPU によってロックされたすべてのセマフォは、セマフォクリアレジスタを通じてクリアすることが出来ます。
• CPU が正常動作しなくなった場合に、ロックされたセマフォのクリアが可能• Core ID と Key 値を書き込みます。

誤動作している CPU からロックされたセマフォをクリアする
場合、HSEM_KEYR レジスタに Key 値を書き込み、HSEM_CR レジスタに Key 値と Core ID を書き込むことによってクリアできます。そうすることで、対応する Core ID によってロックされたセマフォがすべてクリアされ、有効時には、セマフォ解放割込みが生成されます。

6

HSEM 割込み割込みイベント

7

説明

INT0_SEM

CPU1 に対するセマフォ解放割込み生成

INT1_SEM

CPU2 に対するセマフォ解放割込み生成

これは、HSEM 割込みイベントの概要です。
セマフォが解放されると、CPU に対して割込みが生成可能です。それぞれの CPU には、セマフォイネーブル（IER）、ステータス（ISR）、マスキング前ステート（MISR）、クリア（ICR）レジスタのセットが備わっています。

7低電力モード
モード

8

説明

RUN有効。ペリフェラル割込みによって、CPU が CSleep モードと CStop モードから復帰します。

SLEEP停止。

STOP

STOP0 モード、STOP1 モード、STOP2 モードで停止します。

STANDBY

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

ここでは、特定の低電力設定モードにおけるペリフェラルのステータスの概要を示します。
HSEM は、システム SLEEP モードと STOP モードでは状態を変更できません。
STANBY モードでは、HSEM の内容は失われます。
HSEM は、システム が RUN モードのときにのみ変更可能です。
HSEM は、CRun、CSleep、CStop の各モードにある CPUの割込みとウェイクアップが可能です。

8

アプリケーション例

9• 共有リソースの管理• RCC、PWR、AES、RNGなど• ペリフェラルアクセスの前にセマフォをロック• 終了したセマフォを解放• プロセスの同期• 入力待ちのプロセス A がセマフォをロックして、SLEEP に移行• 入力があるとプロセス B がロックして別のセマフォを解放し、これによりプロセス A がウェイ
クアップ
• プロセス A がそのセマフォを解放

セマフォは次の処理に使用できます。
1：保護された方法でのレジスタの読出しと修正と書込み、または、AES 暗号エンジン、乱数発生器（RNG）などの機能の共有を可能とする共有リソースへのアクセス
2：別プロセスからの入力を待っているプロセスによって使用される場合などのプロセス間同期

9関連ペリフェラル

10• これは、HSEM コントローラに関連したペリフェラルのリストです。詳細については、必要に応じてこれらのトレーニングを参照してください。
• リセットおよびクロック制御（RCC）• 割込み（NVIC）• 非同期イベント／割込み制御（AIEC）

これは、HSEM モジュールに関連したペリフェラルのリストです。ユーザは、HSEM モジュールを正しく設定して使用するために、これらのペリフェラルの間のすべての関係に精通していることが望まれます。

10