MB9D560 Series 2CPU モード時の注意

MB9D560 Series
2CPU モード時の注意
32-Bit Microcontroller
Spansion® TraveoTM Family
APPLICATION NOTE
Publication Number MB9D560_AN708-00007
CONFIDENTIAL
Revision 1.0
Issue Date July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
対象製品
本アプリケーションノートに記載されている内容の対象製品は、下記のとおりです。
シリーズ名
MB9D560
2
CONFIDENTIAL
品種型格(パッケージサフィックスは除く)
MB9DF564MAE/F565MAE/F566MAE
MB9DF564MGE/F565MGE/F566MGE
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
Table of Contents
1.
2.
3.
4.
5.
6.
7.
はじめに ......................................................................................................................................... 6
1.1
この文書について................................................................................................................ 6
1.2
開発環境 ........................................................................................................................... 6
メモリアクセスについて ................................................................................................................ 7
2.1
メモリアクセス経路 ............................................................................................................ 7
2.2
推奨するメモリアクセス方法 .............................................................................................. 8
2.3
推奨する方法を行わなかった場合....................................................................................... 9
2.3.1
複数コアからリードモディファイライトを行う場合 ......................................... 9
2.3.2
コアが意図しない動作をする場合 ...................................................................... 9
2.3.3
メモリアクセス禁止条件を満たす場合............................................................. 10
レジスタアクセスについて .......................................................................................................... 11
3.1
ビットバンドユニット ...................................................................................................... 11
3.2
推奨するレジスタアクセス方法 ........................................................................................ 11
3.3
推奨する方法を行わなかった場合..................................................................................... 12
3.3.1
ビットバンドユニットを使用しない場合 ......................................................... 12
3.3.2
キーコード入力レジスタに書き込む場合 ......................................................... 13
3.3.3
ロック解除レジスタに書き込む場合 ................................................................ 14
3.3.4
連続書き込み禁止レジスタに書き込む場合 ..................................................... 15
3.3.5
プロテクション・キー設定レジスタに書き込む場合 ....................................... 15
3.3.6
保護解除レジスタを使用する場合 .................................................................... 16
ペリフェラルの使用につて .......................................................................................................... 17
4.1
推奨するペリフェラル使用方法 ........................................................................................ 17
4.2
推奨する方法を行わなかった場合..................................................................................... 20
4.2.1
ペリフェラルを設定する場合 ........................................................................... 20
4.2.2
ペリフェラルから読み出しを行う場合............................................................. 20
4.2.3
同じペリフェラルを使用する場合 .................................................................... 21
4.2.4
例外ハンドラ開始アドレスを設定する場合 ..................................................... 21
4.2.5
CAN を設定する場合 ........................................................................................ 22
4.2.6
ソフトウェアリセットを行う場合 .................................................................... 22
参考文書 ....................................................................................................................................... 26
付録 .............................................................................................................................................. 27
6.1
コア間で同期をとる方法 ................................................................................................... 27
主な変更内容 ................................................................................................................................ 30
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
3
V1.1
A P P L I C A T I O N
N O T E
Figures
Figure 2-1 メモリ接続図 ............................................................................................................................ 7
Figure 2-2 同じアドレスへのリードモディファイライト例 ...................................................................... 9
Figure 2-3 RAM アクセス中の RAM 診断実行例 ...................................................................................... 10
Figure 3-1 ビット操作を行うソースコード例.......................................................................................... 12
Figure 3-2 同じレジスタへのビット操作例 ............................................................................................. 12
Figure 3-3 キーコード入力レジスタへの書き込み例 ............................................................................... 13
Figure 3-4 ロック解除レジスタへの書き込み例 ...................................................................................... 14
Figure 3-5 連続書き込み禁止レジスタへの書き込み例 ........................................................................... 15
Figure 3-6 プロテクション・キー設定レジスタへの書き込み例 ............................................................. 15
Figure 4-1 例外ハンドラ開始アドレス設定例(CPU0) ......................................................................... 18
Figure 4-2 例外ハンドラ開始アドレス設定例(CPU1) .......................................................................... 18
Figure 4-3 推奨する CAN 設定例 ............................................................................................................. 19
Figure 4-4 推奨するソフトウェアリセット発行例 .................................................................................. 19
Figure 4-5 複数コアからの設定例 ........................................................................................................... 20
Figure 4-6 複数コアからのデータ読み出し例.......................................................................................... 20
Figure 4-7 他コアにより使用不可能になる例.......................................................................................... 21
Figure 4-8 CAN プリスケーラ設定中に CAN 設定実施例......................................................................... 22
Figure 4-9 ハードウェアウォッチドッグレジスタライト保護シーケンス違反例 .................................... 23
Figure 4-10 ソフトウェアウォッチドッグレジスタライト保護シーケンス違反例 .................................. 23
Figure 4-11 ハードウェアウォッチドッグカウンタクリア保護トリガシーケンス違反例 ....................... 24
Figure 4-12 ソフトウェアウォッチドッグカウンタクリア保護トリガシーケンス違反例 ....................... 24
Figure 4-13 ソフトウェアリセットビットセット後のシーケンス実施例(ハードウェアウォッチドッグ)
.......................................................................................................................................................... 25
Figure 4-14 ソフトウェアリセットビットセット後のシーケンス実施例(ソフトウェアウォッチドッグ)
.......................................................................................................................................................... 25
Figure 6-1 フラグを使用した同期例 ........................................................................................................ 27
Figure 6-2 EAM をセマフォとして使用した同期例 .................................................................................. 28
Figure 6-3 コア間通信を使用した同期例 ................................................................................................. 29
4
CONFIDENTIAL
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
Tables
Table 1-1 開発環境 .................................................................................................................................... 6
Table 2-1 メモリアクセス経路と禁止事項 ................................................................................................. 7
Table 2-2 メモリアクセス禁止条件 ......................................................................................................... 10
Table 3-1 キーコード入力レジスタ ......................................................................................................... 13
Table 3-2 ロック解除レジスタ................................................................................................................. 14
Table 3-3 連続書き込み禁止レジスタ ...................................................................................................... 15
Table 3-4 保護対象レジスタ書き込みブロック開始条件 .......................................................................... 16
Table 4-1 ペリフェラル使用例................................................................................................................. 17
Table 4-2 例外ハンドラ開始アドレス設定レジスタ ................................................................................ 21
Table 4-3 ウォッチドッグに関するシーケンス........................................................................................ 22
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
5
V1.1
A P P L I C A T I O N
N O T E
1. はじめに
1.1
この文書について
本アプリケーションノートは、スパンション製マイコン Traveo ファミリ MB9D560 の利用を検討されてい
る方を対象としています。
MB9D560 は CPU コアを 2 個搭載しています。そのため、ペリフェラルやメモリの使用にはデュアルコアマ
イコン特有の注意が必要になります。
本アプリケーションノートでは CPU コアが複数あることによるソフトウェア実装時の注意点について記載
します。
1.2
開発環境
本アプリケーションノートに記載されている内容は Table 1-1 に示す環境で開発されています。
Table 1-1 開発環境
6
CONFIDENTIAL
マイコン
MB9DF566MGB
統合開発環境
MULTI v6.1.4
評価ボード
MB2198-770-02-E0
最適化
Optimize for Speed
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
2. メモリアクセスについて
2.1
メモリアクセス経路
本マイコンには以下のメモリが実装されています。




TCRAM
TCFLASH
EAM
WorkFLASH
全てのコアが全てのメモリに対してアクセスすることが可能です。
TCRAM、TCFLASH はコアごとに実装されており、アクセス経路によって制限事項があります。経路ごと
の制限事項は Table 2-1 の通りです。
Figure 2-1 メモリ接続図
TCRAM#0
B0TCM#0
TCRAM#1
B1TCM#0
B0TCM#1
B1TCM#1
ATCM#0
ATCM#1
TCFLASH#0
CPU#0
AXIマスタ
CPU#1
AXIスレーブ
AXIマスタ
TCFLASH#1
AXIスレーブ
High Performance Matrix (HPM)
EAM
WorkFLASH#0
WorkFLASH#1
Table 2-1 メモリアクセス経路と禁止事項
アクセス先
経路
自コアの TCRAM
自コア-TCM-TCRAM
-
他コアの TCRAM
自コア-AXI マスタ-AXI スレーブ-他コア-TCM-TCRAM
-
自コアの TCFLASH
他コアの TCFLASH
自コア-TCM-TCFLASH
ライトアクセス
自コア-AXI マスタ-TCFLASH
リードアクセス
自コア-AXI マスタ-AXI スレーブ-他コア-TCM-TCFLASH
ライトアクセス
自コア-AXI マスタ-TCFLASH
リードアクセス
EAM
自コア-AXI マスタ-EAM
-
WorkFLASH
自コア-AXI マスタ-WorkFLASH
-
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
禁止事項
7
V1.1
A P P L I C A T I O N
2.2
N O T E
推奨するメモリアクセス方法
以下のようにメモリの用途に合わせて、CPU のメモリ保護(MPU)を使用するかメモリアクセス時にコア
間で同期をとるようにしてください。これによりメモリ内のデータが意図しない値に書き換わることを防ぐ
ことが可能です。
CPU のメモリ保護(MPU)の使用方法については ARM® Architecture Reference Manual ARM® v7-A and ARM®
v7-R edition(ARM DDI 0406B)を参照してください。
コア間での同期のとりかたは「6.1 コア間で同期をとる方法」を参照してください。
 メモリに対して単一コアのみがアクセスする場合
CPU のメモリ保護(MPU)を使用して自コアが対象外の領域に対してアクセスしないようにしてくださ
い。
 メモリに対して単一コアのみが書き込みを行う場合
CPU のメモリ保護(MPU)を使用して自コアが対象外の領域に対して書き込みを行わないようにしてく
ださい。
 同じメモリに対して複数コアが書き込みを行う場合
コアごとに書き込みを行うアドレスを分けることで、同じアドレスに対して複数コアが書き込みを行わな
いようにしてください。
CPU のメモリ保護(MPU)を使用して自コアが対象外の領域に対して書き込みを行わないようにしてく
ださい。
 同じアドレスに対して複数コアが書き込みを行う場合
コア間で同期をとることで、一方のコアが書き込み処理実行中に他コアが同じアドレスに対して書き込み
を行わないようにしてください。
Table 2-2 の機能を使用する場合は以下のようにしてください。
 コア間で同期をとり、全てのコアが操作対象のメモリにアクセスしていないことを確認してから機能を実
行してください。
 機能実行中は全てのコアが操作対象のメモリにアクセスすることがないようにしてください。
8
CONFIDENTIAL
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
2.3
N O T E
推奨する方法を行わなかった場合
「2.2 推奨するメモリアクセス方法」に記載している方法を行わなかった場合に起こりうる問題について以
下に記します。
2.3.1
複数コアからリードモディファイライトを行う場合
複数のコアから同じアドレスに対してリードモディファイライトを行うと、タイミングによって操作対象ビ
ット以外のビットの値を変更してしまう可能性があります。Figure 2-2 に例を記します。
Figure 2-2 同じアドレスへのリードモディファイライト例
[コアごとのアドレス0x04000000に対する操作]
CPU0 : [bit1]に"1"を書き込む。
CPU1 : [bit14]に"1"を書き込む。
アドレス
0x04000000
CPU0
アドレス0x04000000に
格納されているデータ
CPU1
0x0000
値読み出し
0x0000
読み出した値の
bit1を"1"にする
値読み出し
0x0000
CPU0のビット操作が
反映前の値に対して
ビット操作を行う。
読み出した値の
bit14を"1"にする
0x0002書き込み
0x4000書き込み
アドレス0x04000000
のbit1は"0"になる。
2.3.2
0x0002
0x4000
コアが意図しない動作をする場合
コアが意図しない動作をした場合、コアからの意図しない書き込みによってメモリ内のデータが破壊されて
しまうことがあります。CPU のメモリ保護(MPU)を使用することによって、自コアが対象外の領域に対
して書き込みを行うことを防ぐことができます。
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
9
V1.1
A P P L I C A T I O N
2.3.3
N O T E
メモリアクセス禁止条件を満たす場合
一方のコアによって Table 2-2 の条件が満たされているときにもう一方のコアが Table 2-2 の禁止事項を実行
した場合、バスエラーとなります。Figure 2-3 に例を記します。
Table 2-2 メモリアクセス禁止条件
ペリフェラル
条件
TCFCFGn_FCFGR の WE ビットが"0"
TCFLASH
TCFCFGn_FCFGR の WE ビットが"1"
自動アルゴリズム実行中
禁止事項
TCFLASH への書き込みまたは消去
TCFLASH への TCM インタフェース経由の
読み出し
TCFLASH への TCM インタフェース経由の
読み出し
RAM 診断中
RAM へのアクセス
RAM 初期化中
RAM へのアクセス
WFCFGxx_CR の WE ビットが"0"
WorkFLASH への書き込み
コマンドシーケンサがアイドル状態以外
WorkFLASH へのアクセス
TCRAM
WorkFLASH
n: ペリフェラルが接続されている Cortex-R5F コアの番号(n=0, 1)
xx:ユニット番号(xx=00, 01, 02, 03)
Figure 2-3 RAM アクセス中の RAM 診断実行例
アドレス
0x06000000
CPU0
TCRAM1
値読み出し
0x0000
CPU1
RAM診断起動
診断処理
読み出した値の
bit1を"1"にする
診断処理
0x0002書き込み
バスエラー発生
診断処理中のアクセスのためバスエラーになる。
10
CONFIDENTIAL
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
3. レジスタアクセスについて
3.1
ビットバンドユニット
本マイコンではレジスタに対してビット操作を行う方法にビットバンドユニットを使用する方法がありま
す。ビットバンドユニットによりビットバンドエイリアス領域の 1 バイトにアクセスすることで、ビットバ
ンド領域の対応する 1 ビットを操作することができます。ビットバンドユニットによるビット操作では操作
対象ビット以外のビットの値は変化しません。ビットバンド対応しているレジスタのビット操作を行う場合
はビットバンドユニットを使用してください。
ビットバンドユニットの使用方法はハードウェアマニュアルを参照してください。
※提供している IO ヘッダーファイル内の定義を使用してレジスタアクセスを行った場合、ビットバンド対
応しているレジスタへのアクセスはビッドバンドユニットを使用したアクセスになります。
3.2
推奨するレジスタアクセス方法
レジスタへのアクセスは以下のようにしてください。
 複数コアによるレジスタアクセスについて
コアごとにアクセスするレジスタを分け、複数コアから同じレジスタに対してアクセスすることがないよ
うにしてください。
 ビットバンド対応しているレジスタのビット操作について
ビットバンド対応しているレジスタのビット操作を行う場合はビットバンドユニットを使用してくださ
い。
 保護解除レジスタへの書き込みタイミングについて
保護解除レジスタ(Table 3-4)への書き込み後は、他の処理を行うことなく保護対象レジスタへの書き込
みを行ってください。
 Memory & Config Group の保護解除レジスタへの書き込みについて
Memory & Config Group には IRC が含まれているため、Memory & Config Group にあるレジスタの保護を
解除する前に必ず全ての割り込みを禁止にしておいてください。
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
11
V1.1
A P P L I C A T I O N
3.3
N O T E
推奨する方法を行わなかった場合
「3.2 推奨するレジスタアクセス方法」に記載している方法を行わなかった場合に起こりうる問題について
以下に記します。
3.3.1
ビットバンドユニットを使用しない場合
C 言語でビットバンドユニットを使用しないレジスタアクセスによるビット操作を行うコードを実装した
場合、コンパイル後のアセンブラコードではリードモディファイライトの処理になります。そのため、複数
コアから同じレジスタに対してビット操作を行うと、タイミングによって操作対象ビット以外のビットの値
を変更してしまう可能性があります。Figure 3-1、Figure 3-2 に例を記します。
Figure 3-1 ビット操作を行うソースコード例
[CPU0の処理]
12ビット 4ch A/DコンバータのA/D モード設定レジスタ(ADMD)のST([bit3:0])に"2"を書き込む。
C言語
ADC4SH00_ADMD_ST = 2;
コンパイル
MOV
ADD
LDRH
MOV
BFI
STRH
アセンブラ
R1, 0x390
R1, R1, 0xb2000000
; アドレス : 0xB2000390
R0, [R1]
; 値読み出し
R2, 2
R0, R2, 0, 4
; [bit3:0]を操作
R0, [R1]
; 値書き込み
[CPU1の処理]
12ビット 4ch A/DコンバータのA/D モード設定レジスタ(ADMD)のCT([bit11:8])に"9"を書き込む。
C言語
ADC4SH00_ADMD_CT = 9;
コンパイル
MOV
ADD
LDRH
MOV
BFI
STRH
アセンブラ
R1, 0x390
R1, R1, 0xb2000000 ; アドレス : 0xB2000390
R0, [R1]
; 値読み出し
R2, 9
R0, R2, 8, 4
; [bit11:8]を操作
R0, [R1]
; 値書き込み
Figure 3-2 同じレジスタへのビット操作例
[コアごとのADC4SH00_ADMDに対する操作]
CPU0 : [bit3:0]に"2"を書き込む。
CPU1 : [bit11:8]に"9"を書き込む。
CPU0
ADC4SH00_ADMD
CPU1
ADC4SH00_ADMDに
格納されているデータ
0x0000
値読み出し
0x0000
読み出した値の
[bit3:0]を"2"にする
値読み出し
0x0000
CPU0のビット操作が
反映前の値に対してビット操作を行う。
読み出した値の
[bit11:8]を"9"にする
0x0002書き込み
0x0900書き込み
0x0002
0x0900
ADC4SH00_ADMDの
[bit3:0]は"0"になる。
ADC4SH00_ADMD : 12ビット 4ch A/Dコンバータインタ A/D モード設定レジスタ
12
CONFIDENTIAL
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
キーコード入力レジスタに書き込む場合
3.3.2
キーコード入力レジスタ(Table 3-1)を動作させるにはキーコードを決められた順番で連続的に書き込む必
要があります。複数コアから同じキーコード入力レジスタに対してキーコードの書き込みを行うと、タイミ
ングによってキーコードの書き込みが意図しない順番になる可能性があります。Figure 3-3 に例を記します。
以下のレジスタはキーコード機能を搭載していない型格ではキーコードの書き込みは不要です。キーコード
機能を搭載していない型格では以下のレジスタに対する書き込みは無効となります。型格ごとのキーコード
機能の有無はデータシートの型格オプションを参照してください。




GPIO_KEYCDR
PPC_KEYCDR
KEYCDR
DACxx_KEYCDR(xx=00, 01)
Table 3-1 キーコード入力レジスタ
レジスタ略称
レジスタ名
機能
GPIO キーコードレジスタ
対象レジスタの誤書込み保護解除
PPC キーコードレジスタ
対象レジスタの誤書込み保護解除
LAMERT
LIN アシストモード障害試験レジスタ
疑似障害設定の有効/無効
CIF1
制御レジスタ
FlexRay マクロに対してリセットを出力
LCK
ロックレジスタ
READY コマンドの書き込み許可
キーコードレジスタ
対象レジスタの誤書込み保護解除
16 ビットデッドタイママイナス制御
デッドタイム機能のマイナス制御に対する設定
レジスタ
反映
キーコードレジスタ
対象レジスタの誤書込み保護解除
演算制御指示レジスタ
定数パラメータ保護対象レジスタの保護解除
GPIO_KEYCDR
PPC_KEYCDR
KEYCDR
*1
*1
*1
WFGnn_DTMNS
DACxx_KEYCDR
*1
MVACC
nn:チャネル番号(xx=00~03)
xx:チャネル番号(xx=00, 01)
*1:キーコード機能搭載型格のみキーコードの書き込みが必要。
※コアごとにレジスタが分かれているレジスタは他コアからアクセスするとバスエラーとなるため Table
3-1 には記載していません。
Figure 3-3 キーコード入力レジスタへの書き込み例
CPU0
MVACC
MVAOMS
CPU1
定数パラメータ
保護解除コード1
定数パラメータ
保護解除コード2
定数パラメータ
保護解除コード3
解除コード3の次の書き込み
が解除コード1になる。
定数パラメータ
保護解除コード4
値書き込み
キーコードを書き込む順番が正しくないため、
保護が解除されず、書き込みが行われない。
MVACC
MVAOMS
定数パラメータ
保護解除コード2
定数パラメータ
保護解除コード3
定数パラメータ
保護解除コード4
: モータ演算アクセラレータ 演算制御指示レジスタ
: モータ演算アクセラレータ 動作モード設定レジスタ
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
定数パラメータ
保護解除コード1
13
V1.1
A P P L I C A T I O N
N O T E
ロック解除レジスタに書き込む場合
3.3.3
ロック解除レジスタ(Table 3-2)が保護対象としているレジスタに対して書き込みを行う場合、ロック解除
後に書き込みを行う必要があります。複数コアから同じロック解除レジスタに対してロック解除値及びロッ
ク値の書き込みを行うと、タイミングによって保護対象レジスタへの書き込みが行われない可能性がありま
す。Figure 3-4 に例を記します。
Table 3-2 ロック解除レジスタ
レジスタ略称
レジスタ名
機能
EXCFG_UNLOCK
EXCFG ロック解除レジスタ
BootROM ハードウェアインタフェースの各レジスタを保護
NMID_UNLOCK
NMID ロック解除レジスタ
NMI 分配ユニットの各レジスタを保護
MPUHm_UNLOCK
MPU AHB ロック解除レジスタ
MPU AHB モジュールの各レジスタを保護
MVACC
演算制御指示レジスタ
定数パラメータ保護対象レジスタを保護
m:モジュールのインスタンス"m"であることを示す(m=0)
※コアごとにレジスタが分かれているレジスタは他コアからアクセスするとバスエラーとなるため Table
3-2 には記載していません。
Figure 3-4 ロック解除レジスタへの書き込み例
CPU0
EXCFG_UNLOCK
EXCFG_SVCINACT
CPU1
ロック解除値書き込み
値書き込み
ロック解除値書き込み
ロック値書き込み
値書き込み
CPU0により既にロック値が書き込まれているため、
保護された状態での書き込み処理となり、書き込み
が行われない。
: BootROMハードウェアインタフェース EXCFG ロック解除レジスタ
EXCFG_UNLOCK
EXCFG_SVCINACT : BootROMハードウェアインタフェース EXCFG 非アクティブセットスーパバイザコールベクタレジスタ
14
CONFIDENTIAL
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
3.3.4
N O T E
連続書き込み禁止レジスタに書き込む場合
複数コアから連続書き込み禁止レジスタ(Table 3-3)に対して書き込みを行うと、タイミングによって連続
書き込み禁止レジスタへ連続で書き込みが行われる可能性があります。Figure 3-5 に例を記します。
Table 3-3 連続書き込み禁止レジスタ
レジスタ略称
レジスタ名
機能
WorkFLASH 設定保護キーレジスタ
WFCFGxx_CPR
対象レジスタへの設定値書き込み保護解除
xx:ユニット番号(xx=00, 01, 02, 03)
※コアごとにレジスタが分かれているレジスタは他コアからアクセスするとバスエラーとなるため Table
3-3 には記載していません。
Figure 3-5 連続書き込み禁止レジスタへの書き込み例
CPU0
WFCFG00_CPR
CPU1
設定保護キー値書き込み
設定保護キー値書き込み
バスエラー発生
連続書き込み禁止レジスタに対して2回連続
で書き込みを行っているためバスエラーとなる。
WFCFG00_CPR
3.3.5
: WorkFLASH 設定保護キーレジスタ
プロテクション・キー設定レジスタに書き込む場合
複数コアからプロテクション・キー設定レジスタ(SYSC_PROTKEYR)に対して書き込みを行うと、タイ
ミングによってロック解除値を書き込んだコアとプロテクション対象レジスタへ書き込みを行ったコアが
一致しない可能性があります。Figure 3-6 に例を記します。
Figure 3-6 プロテクション・キー設定レジスタへの書き込み例
CPU0
SYSC_PROTKEYR
SYSC_RUNCKER
CPU1
ロック解除値書き込み
ロック解除値書き込み
値書き込み
バスエラー発生
直前でロック解除を行ったコアとは異なるコアからの
書き込みのためバスエラーとなる。
SYSC_PROTKEYR
SYSC_RUNCKER
: プロテクションレジスタ群 プロテクション・キー設定レジスタ
: RUNプロファイルレジスタ群 RUNクロック許可レジスタ
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
15
V1.1
A P P L I C A T I O N
3.3.6
N O T E
保護解除レジスタを使用する場合
ロック値を書き込むことで保護対象レジスタをロックするレジスタとは異なり、Table 3-4 の保護解除レジス
タは以下のいずれかの処理が行われると保護対象レジスタへの保護を開始します。
 保護対象レジスタへの書き込み
 保護対象レジスタと同じグループのレジスタへの書き込み
他コアからのアクセスによっても保護を開始するものがあり、保護された状態で保護対象レジスタへの書き
込みを行うとバスエラーとなります。
特に Memory & Config Group には IRC が含まれているため、割り込みが発生することによって保護を解除し
ていたレジスタが再度保護されてしまいます。そのため、Memory & Config Group に属するレジスタの保護
を解除する場合は、必ず事前に全ての割り込みを禁止にしておいてください。
Table 3-4 保護対象レジスタ書き込みブロック開始条件
ペリフェラル名
保護解除レジスタ名
[グループ名]
<略称>
System Controller (SYSC)
[MCU Config Group]
TCFLASH
[Memory & Config Group]
WorkFLASH
[Memory & Config Group]
ハードウェア
ウォッチドッグ
[MCU Config Group]
ソフトウェア
ウォッチドッグ
[MCU Config Group]
書き込み処理ごとの保護開始有無
自コア Tw
自コア Gw
他コア Tw
他コア Gw
保護開始
保護開始
バスエラー
保護開始
保護開始
保護開始
バスエラー
保護開始
保護開始
バスエラー
保護開始
保護開始*2
バスエラー
保護開始
保護開始*2
バスエラー
プロテクション・キー設定
レジスタ
<SYSC_PROTKEYR>
TCFLASH0/1/2/3 設定保護
キーレジスタ
<TCFCFGn_FCPROTKEY>
バスエラー
*1
WorkFLASH00/01/02/03
設定保護キーレジスタ
保護開始*1
<WFCFGxx_CPR>
ハードウェアウォッチド
ッグプロテクション
レジスタ
バスエラー
*1
<HWDG_PROT>
ソフトウェアウォッチド
ッグプロテクション
レジスタ
バスエラー
*1
<SWDGn_PROT>
n:ペリフェラルが接続されている Cortex-R5F コアの番号(n=0, 1)
xx:ユニット番号(xx=00, 01, 02, 03)
自コア Tw:自コアから保護対象レジスタへ書き込み。
自コア Gw:自コアから保護対象レジスタと同グループのレジスタ*3 へ書き込み。
他コア Tw:他コアから保護対象レジスタへ書き込み。
他コア Gw:他コアから保護対象レジスタと同グループのレジスタ*3 へ書き込み。
*1:同グループの異なるペリフェラルのレジスタへの書き込みは影響なし。
*2:同ペリフェラルの保護対象外レジスタへの書き込みは影響なし。
*3:同ペリフェラルの保護対象外レジスタへの書き込みも含む。
16
CONFIDENTIAL
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
4. ペリフェラルの使用につて
4.1
推奨するペリフェラル使用方法
ペリフェラルを使用する際は以下のようにしてください。
 アクセスするチャネルについて
コアごとにアクセスするチャネルを分けてください。Table 4-1 に例を記します。
 例外ハンドラ開始アドレスに設定するアドレスについて
例外ハンドラ開始アドレスの設定は全てのコアで共通の設定となるため、以下の点に注意してください。
−
設定は片方のコアでのみ行ってください。
−
−
設定した内容は全てのコアに対して反映されます。
全てのコアにおいて、例外発生時に遷移しても問題ないアドレスを設定してください。
Figure 4-1、Figure 4-2 に設定例を記します。
 CAN の設定について
コアごとに CAN の設定を行う場合、CAN プリスケーラの設定が完了したことを確認してから CAN の設
定を行ってください。Figure 4-3 に例を記します。
 ソフトウェアリセットの実施タイミングについて
ソフトウェアリセットは以下のシーケンスが実行中でないことを確認してから行ってください。Figure 4-4
に例を記します。
−
ウォッチドッグレジスタライト保護シーケンス
−
ウォッチドッグカウンタクリア保護トリガシーケンス
 ソフトウェアリセットビットセット後の処理について
CPU 動作モードに関わらず、ソフトウェアリセットビットをセットした後はウォッチドッグにおける全て
のシーケンスを実行しないでください。
ソフトウェアリセットビットセット後、リセットが発行されるまでには時間がかかります。ソフトウェア
リセットビットをセットしてからリセットが発行されるまでの時間は不定のため、支障がない限りはリセ
ットが発行されるまで処理を行わず、無限ループでリセット発行を待つようにしてください。Figure 4-4
に例を記します。
Table 4-1 ペリフェラル使用例
コア
使用するペリフェラル
WorkFLASH#0
CAN
CPU0
ch0
32 ビットフリーランタイマ ch0
32 ビットフリーランタイマ ch2
12 ビット A/D コンバータ
ch0
12 ビット A/D コンバータ
ch2
WorkFLASH#1
CAN
CPU1
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
ch1
32 ビットフリーランタイマ ch1
32 ビットフリーランタイマ ch3
12 ビット A/D コンバータ
ch1
12 ビット A/D コンバータ
ch3
17
V1.1
A P P L I C A T I O N
N O T E
Figure 4-1 例外ハンドラ開始アドレス設定例(CPU0)
[ CPU0 ]
sample.c
sample.ld
#pragma ghs section text=".EX_UNDEF"
void ex_undef(void)
{
GPIO_PODR2 = 0x01;
while(1);
}
#pragma ghs section text=default
MEMORY
{
tcmram_tcm
tcflash_bsect_tcm
tcflash_ssectb_tcm
tcflash_ssecta_tcm
eam
tcflash_bsect_cpu0
tcflash_ssectb_cpu0
tcflash_ssecta_cpu0
}
#pragma ghs section text=".EX_SVC"
void ex_svc(void)
{
GPIO_PODR2 = 0x02;
while(1);
}
#pragma ghs section text=default
ORIGIN = 0x00000000, LENGTH = 0x020000
ORIGIN = 0x00800000, LENGTH = 0x100000
ORIGIN = 0x00FE0000, LENGTH = 0x010000
ORIGIN = 0x00FF0000, LENGTH = 0x010000
ORIGIN = 0x02800000, LENGTH = 0x001000
ORIGIN = 0x05000000, LENGTH = 0x100000
ORIGIN = 0x05FE0000, LENGTH = 0x010000
ORIGIN = 0x05FF0000, LENGTH = 0x010000
DEFAULTS
{
TCFLASH_BSECT_CPU0
EX_UNDEF_BASE_ADDRESS
EX_SVC_BASE_ADDRESS
EX_PABORT_BASE_ADDRESS
EX_DABORT_BASE_ADDRESS
EX_UNDEF_BASE_ADDRESS_ROM
EX_SVC_BASE_ADDRESS_ROM
EX_PABORT_BASE_ADDRESS_ROM
EX_DABORT_BASE_ADDRESS_ROM
}
#pragma ghs section text=".EX_PABORT"
void ex_pabort(void)
{
GPIO_PODR2 = 0x04;
while(1);
}
#pragma ghs section text=default
#pragma ghs section text=".EX_DABORT"
void ex_dabort(void)
{
GPIO_PODR2 = 0x08;
while(1);
}
#pragma ghs section text=default
:
:
:
:
:
:
:
:
CPU0でのみ例外ハンドラ開始
アドレスの設定を行う。
各CPU専用空間にセクションを定義。
プログラム実行時にコアがTCM経由でアクセスするためのアドレス。
SECTIONS
{
void ex_conf(void)
{
EXCFG_UNLOCK = 0xACC5B007;
while ( EXCFG_CNFG_LST == 1 );
EXCFG_UNDEFINACT = (uint32_t)(&ex_undef);
EXCFG_SVCINACT = (uint32_t)(&ex_svc);
EXCFG_PABORTINACT = (uint32_t)(&ex_pabort);
EXCFG_DABORTINACT = (uint32_t)(&ex_dabort);
EXCFG_CNFG_SWAP = 1;
= 0x05000000
= 0x00FE0000
= 0x00FE0100
= 0x00FE0200
= 0x00FE0300
= TCFLASH_BSECT_CPU0 + EX_UNDEF_BASE_ADDRESS
= TCFLASH_BSECT_CPU0 + EX_SVC_BASE_ADDRESS
= TCFLASH_BSECT_CPU0 + EX_PABORT_BASE_ADDRESS
= TCFLASH_BSECT_CPU0 + EX_DABORT_BASE_ADDRESS
.EX_UNDEF
.EX_SVC
.EX_PABORT
.EX_DABORT
EX_UNDEF_BASE_ADDRESS
EX_SVC_BASE_ADDRESS
EX_PABORT_BASE_ADDRESS
EX_DABORT_BASE_ADDRESS
ABS
ABS
ABS
ABS
: > tcflash_ssectb_tcm
:>.
:>.
:>.
.ROM.EX_UNDEF
.ROM.EX_SVC
.ROM.EX_PABORT
.ROM.EX_DABORT
ROM_NOCOPY( .EX_UNDEF ) EX_UNDEF_BASE_ADDRESS_ROM
ROM_NOCOPY( .EX_SVC
) EX_SVC_BASE_ADDRESS_ROM
ROM_NOCOPY( .EX_PABORT ) EX_PABORT_BASE_ADDRESS_ROM
ROM_NOCOPY( .EX_DABORT ) EX_DABORT_BASE_ADDRESS_ROM
ABS
ABS
ABS
ABS
: > tcflash_ssectb_cpu0
:>.
:>.
:>.
}
共通空間にセクションを定義。
プログラムをAXI経由で書き込むためのアドレス。
EXCFG_UNLOCK = 0xB007ECF6;
while ( EXCFG_CNFG_LST == 0 );
}
Figure 4-2 例外ハンドラ開始アドレス設定例(CPU1)
[ CPU1 ]
sample.c
#pragma ghs section text=".EX_UNDEF"
void ex_undef(void)
{
GPIO_PODR2 = 0x10;
while(1);
}
#pragma ghs section text=default
#pragma ghs section text=".EX_SVC"
void ex_svc(void)
{
GPIO_PODR2 = 0x20;
while(1);
}
#pragma ghs section text=default
#pragma ghs section text=".EX_PABORT"
void ex_pabort(void)
{
GPIO_PODR2 = 0x40;
while(1);
}
#pragma ghs section text=default
#pragma ghs section text=".EX_DABORT"
void ex_dabort(void)
{
GPIO_PODR2 = 0x80;
while(1);
}
#pragma ghs section text=default
sample.ld
MEMORY
{
tcmram_tcm
tcflash_bsect_tcm
tcflash_ssectb_tcm
tcflash_ssecta_tcm
eam
tcflash_bsect_cpu1
tcflash_ssectb_cpu1
tcflash_ssecta_cpu1
}
:
:
:
:
:
:
:
:
ORIGIN = 0x00000000, LENGTH = 0x020000
ORIGIN = 0x00800000, LENGTH = 0x100000
ORIGIN = 0x00FE0000, LENGTH = 0x010000
ORIGIN = 0x00FF0000, LENGTH = 0x010000
ORIGIN = 0x02800000, LENGTH = 0x001000
ORIGIN = 0x07000000, LENGTH = 0x100000
ORIGIN = 0x07FE0000, LENGTH = 0x010000
ORIGIN = 0x07FF0000, LENGTH = 0x010000
DEFAULTS
{
TCFLASH_BSECT_CPU0
EX_UNDEF_BASE_ADDRESS
EX_SVC_BASE_ADDRESS
EX_PABORT_BASE_ADDRESS
EX_DABORT_BASE_ADDRESS
EX_UNDEF_BASE_ADDRESS_ROM
EX_SVC_BASE_ADDRESS_ROM
EX_PABORT_BASE_ADDRESS_ROM
EX_DABORT_BASE_ADDRESS_ROM
}
= 0x07000000
= 0x00FE0000
= 0x00FE0100
= 0x00FE0200
= 0x00FE0300
= TCFLASH_BSECT_CPU0 + EX_UNDEF_BASE_ADDRESS
= TCFLASH_BSECT_CPU0 + EX_SVC_BASE_ADDRESS
= TCFLASH_BSECT_CPU0 + EX_PABORT_BASE_ADDRESS
= TCFLASH_BSECT_CPU0 + EX_DABORT_BASE_ADDRESS
各CPU専用空間にセクションを定義。
プログラム実行時にコアがTCM経由でアクセスするためのアドレス。
SECTIONS
{
CPU1では例外ハンドラ開始アドレスの設定を行わないため、
これらの関数はCPU1の関数からは参照されない状態になるが、
最適化によって削除されないようにすること。
.EX_UNDEF
.EX_SVC
.EX_PABORT
.EX_DABORT
EX_UNDEF_BASE_ADDRESS
EX_SVC_BASE_ADDRESS
EX_PABORT_BASE_ADDRESS
EX_DABORT_BASE_ADDRESS
ABS
ABS
ABS
ABS
: > tcflash_ssectb_tcm
:>.
:>.
:>.
.ROM.EX_UNDEF
.ROM.EX_SVC
.ROM.EX_PABORT
.ROM.EX_DABORT
ROM_NOCOPY( .EX_UNDEF ) EX_UNDEF_BASE_ADDRESS_ROM
ROM_NOCOPY( .EX_SVC
) EX_SVC_BASE_ADDRESS_ROM
ROM_NOCOPY( .EX_PABORT ) EX_PABORT_BASE_ADDRESS_ROM
ROM_NOCOPY( .EX_DABORT ) EX_DABORT_BASE_ADDRESS_ROM
ABS
ABS
ABS
ABS
: > tcflash_ssectb_cpu1
:>.
:>.
:>.
}
共通空間にセクションを定義。
プログラムをAXI経由で書き込むためのアドレス。
18
CONFIDENTIAL
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
Figure 4-3 推奨する CAN 設定例
CPU0
CAN ch0
CAN ch1
CANプリスケーラ
CPU1
設定値書き込み
設定値書き込み
設定値書き込み
CPU0のメモリ内にフラグを用意する。
フラグの値を参照することでCANプリスケーラの
設定が完了しているかを判断する。
CANプリスケーラ
設定完了フラグセット
CANプリスケーラの設定完了フラグ読み出し
フラグON
設定値書き込み
設定値書き込み
CANプリスケーラの
設定完了を確認して
から設定を行う。
Figure 4-4 推奨するソフトウェアリセット発行例
ハードウェア
ウォッチドッグ
CPU0
ソフトウェア
ウォッチドッグ0
リセット
コントロール0
EAM
ソフトウェア
ウォッチドッグ1
CPU1
プロテクションレジスタに
キーを書き込み
プロテクションレジスタに
キーを書き込み
設定値書き込み
プロテクションレジスタに
キーを書き込み
設定値書き込み
ソフトウェア
ウォッチドッグ1
設定完了フラグ
セット
設定値書き込み
トリガ0書き込み
CPU1のメモリ内にフラグを用意する。
フラグの値を参照することでソフトウェアウォッチドッグ1
の設定が完了しているかを判断する。
トリガ1書き込み
値読み出し
0x0000
0xFFFF書き込み
書き込み成功
トリガ0書き込み
トリガ0書き込み
トリガ1書き込み
トリガ1書き込み
ソフトウェアウォッチドッグ1設定完了フラグ読み出し
フラグON
値読み出し
0xFFFF
読み出した値 = 0xFFFF
⇒ トリガ0/1書き込み中のため
書き込みが完了するまで待つ。
値読み出し
0x0000
0xFFFF書き込み
書き込み成功
値読み出し
0xFFFF
0x0000書き込み
書き込み成功
EAMの値が0x0000でないときは
トリガ0/1への書き込みは
行わない。
値読み出し
0xFFFF
ソフトウェアリセットビットセット
- トリガ0/1への書き込みが完了したのを確認後にソフトウェアリセットビットをセットする。
- ソフトウェアリセットビットセット後はトリガ0/1への書き込みは行わない。
リセット発行
リセット発行
トリガ0書き込み
トリガ0書き込み
トリガ1書き込み
トリガ1書き込み
トリガ0書き込み
トリガ1書き込み
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
19
V1.1
A P P L I C A T I O N
4.2
N O T E
推奨する方法を行わなかった場合
「4.1 推奨するペリフェラル使用方法」に記載している方法を行わなかった場合に起こりうる問題について
以下に記します。
4.2.1
ペリフェラルを設定する場合
複数のコアから同じペリフェラルの同じチャネルに対して異なる設定を行った場合、後から行われた設定に
よって上書きされるため、ペリフェラルは最後に設定された内容で動作します。Figure 4-5 に例を記します。
Figure 4-5 複数コアからの設定例
CPU0
ADC ch0
CPU1
設定A
設定Aで動作
設定B
以降、
設定Bで動作
設定Aの内容は設定Bに上書きされるため、
以降は設定Bの内容で動作する。
4.2.2
ペリフェラルから読み出しを行う場合
複数コアから同じペリフェラルの同じチャネルに対してデータの読み出しを行った場合、読み出しを行った
順番によって読み出される値が異なるものがあります。これにより読み出しが行われるタイミングによって
読み出し結果が異なることになります。Figure 4-6 に例を記します。
Figure 4-6 複数コアからのデータ読み出し例
UART ch0
CPU0
CPU1
データ受信(0xAA55)
受信完了割り込み
受信完了割り込み
受信データ読み出し
0xAA55
受信データ読み出し
0x0000
後から読み出しを行った側は受信データを取得
することができない。
20
CONFIDENTIAL
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
4.2.3
N O T E
同じペリフェラルを使用する場合
複数コアから同じペリフェラルの同じチャネルを使用した場合、タイミングによってペリフェラルの状態確
認後にペリフェラルが使用できない状態に遷移している可能性があります。Figure 4-7 に例を記します。
Figure 4-7 他コアにより使用不可能になる例
WorkFLASH
CPU0
CPU1
ステータスビット読み出し
レディ状態
ステータスビット読み出し
レディ状態
実行コマンド書き込み
実行コマンド書き込み
バスエラー発生
ペリフェラルが実行中に実行コマンドを書き込んだ
ためバスエラーとなる。
4.2.4
例外ハンドラ開始アドレスを設定する場合
Table 4-2 のレジスタにて例外ハンドラの開始アドレスを設定することが可能です。ただし、全てのコアで共
通の設定となるため、アドレスを設定したコアと例外が発生したコアに関わらず、設定したアドレスにジャ
ンプします。
例)CPU0 で例外ハンドラの開始アドレスを設定したときに、CPU1 で例外が発生した場合の処理の流れ
1.
2.
3.
CPU0 にて例外ハンドラの開始アドレスにアドレス”0x00FE0000”を設定
1.の処理完了後、CPU1 にて定常処理実行中に例外発生
CPU1 の処理がアドレス”0x00FE0000”にジャンプする(CPU0 では例外が発生していないので、ジ
ャンプせずに定常処理を続行する)
ジャンプ先のアドレスが例外ハンドラの処理の先頭でなかった場合、誤動作を起こす原因となります。
Table 4-2 例外ハンドラ開始アドレス設定レジスタ
レジスタ略称
EXCFG 非アクティブセット 未定義命令ベクタレジスタ
EXCFG_SVCINACT
EXCFG 非アクティブセット スーパバイザコールベクタレジスタ
EXCFG_PABORTINACT
EXCFG 非アクティブセット プリフェッチアボートベクタレジスタ
EXCFG_DABORTINACT
EXCFG 非アクティブセット データアボートベクタレジスタ
EXCFG_UNDEFACT
EXCFG アクティブセット 未定義命令ベクタレジスタ
EXCFG_SVCACT
EXCFG アクティブセット スーパバイザコールベクタレジスタ
EXCFG_PABORTACT
EXCFG アクティブセット プリフェッチアボートベクタレジスタ
EXCFG_DABORTACT
EXCFG アクティブセット データアボートベクタレジスタ
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
レジスタ名
EXCFG_UNDEFINACT
21
V1.1
A P P L I C A T I O N
4.2.5
N O T E
CAN を設定する場合
ハードウェアの構成上、CAN プリスケーラの設定中は CAN の設定を行うことができません。CAN プリス
ケーラの設定中に CAN の設定を行うと設定値が意図しない値に変化してしまいます。Figure 4-8 に例を記し
ます。
Figure 4-8 CAN プリスケーラ設定中に CAN 設定実施例
CPU0
CAN ch0
CANプリスケーラ
CAN ch1
CPU1
設定値書き込み
設定値書き込み
設定値書き込み
設定値書き込み
4.2.6
CANプリスケーラ設定中の設定のため、
設定値が変化してしまい、正しく設定が
行われない。
ソフトウェアリセットを行う場合
ハードウェアウォッチドッグ、ソフトウェアウォッチドッグともにソフトリセット(ソフトウェアリセット)
ではプロテクションレジスタ及び、トリガ 0/1 レジスタはクリアされずリセット後もリセット時のシーケン
スが維持されます。そのため Table 4-3 にあるシーケンス実行中にソフトウェアリセットが発行されると、
リセット前後でシーケンス違反が起こります。
Figure 4-9、Figure 4-10 にウォッチドッグレジスタライト保護シーケンス実行中にソフトウェアリセットを
行った例を記します。
Figure 4-11、Figure 4-12 にウォッチドッグカウンタクリア保護トリガシーケンス実行中にソフトウェアリセ
ットを行った例を記します。
Figure 4-13、Figure 4-14 にソフトウェアリセットビットセット後にウォッチドッグカウンタクリア保護トリ
ガシーケンスを実行した例を記します。
Table 4-3 ウォッチドッグに関するシーケンス
シーケンス
22
CONFIDENTIAL
用途
ウォッチドッグレジスタライト保護シーケンス
ウォッチドッグの設定を行うレジスタへの書き込み保護解除
ウォッチドッグカウンタクリア保護トリガシーケンス
ウォッチドッグカウンタのクリアを行う
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
Figure 4-9 ハードウェアウォッチドッグレジスタライト保護シーケンス違反例
ハードウェア
ウォッチドッグ
CPU0
ソフトウェア
ウォッチドッグ0
リセット
コントロール1
ソフトウェア
ウォッチドッグ1
CPU1
プロテクションレジスタに
キーを書き込み
設定値書き込み
プロテクションレジスタに
キーを書き込み
ソフトウェアリセットビットセット
リセット発行
リセット発行
プロテクションレジスタに
キーを書き込み
プロテクションレジスタに
キーを書き込み
バスエラー発生
プロテクションレジスタに対して
2回連続で書き込みを行うこと
になるため、バスエラーとなる。
Figure 4-10 ソフトウェアウォッチドッグレジスタライト保護シーケンス違反例
ハードウェア
ウォッチドッグ
CPU0
ソフトウェア
ウォッチドッグ0
リセット
コントロール0
ソフトウェア
ウォッチドッグ1
CPU1
プロテクションレジスタに
キーを書き込み
設定値書き込み
プロテクションレジスタに
キーを書き込み
設定値書き込み
プロテクションレジスタに
キーを書き込み
ソフトウェアリセットビットセット
リセット発行
リセット発行
プロテクションレジスタに
キーを書き込み
プロテクションレジスタに
キーを書き込み
バスエラー発生
プロテクションレジスタに対して
2回連続で書き込みを行うこと
になるため、バスエラーとなる。
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
23
V1.1
A P P L I C A T I O N
N O T E
Figure 4-11 ハードウェアウォッチドッグカウンタクリア保護トリガシーケンス違反例
ハードウェア
ウォッチドッグ
CPU0
ソフトウェア
ウォッチドッグ0
リセット
コントロール1
ソフトウェア
ウォッチドッグ1
CPU1
トリガ0書き込み
トリガ0書き込み
トリガ1書き込み
トリガ1書き込み
トリガ0書き込み
トリガ1書き込み
トリガ0書き込み
ソフトウェアリセットビットセット
リセット発行
リセット発行
トリガ0書き込み
トリガ0書き込み
ウォッチドッグ
エラー発生
トリガ0に対して2回連続で書き
込みを行うことになるため、
ウォッチドッグエラーとなる。
Figure 4-12 ソフトウェアウォッチドッグカウンタクリア保護トリガシーケンス違反例
ハードウェア
ウォッチドッグ
CPU0
ソフトウェア
ウォッチドッグ0
リセット
コントロール0
ソフトウェア
ウォッチドッグ1
CPU1
トリガ0書き込み
トリガ1書き込み
トリガ0書き込み
トリガ1書き込み
トリガ0書き込み
ソフトウェアリセットビットセット
リセット発行
リセット発行
トリガ0書き込み
トリガ0書き込み
ウォッチドッグ
エラー発生
トリガ0に対して2回連続で書き
込みを行うことになるため、
ウォッチドッグエラーとなる。
24
CONFIDENTIAL
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
Figure 4-13 ソフトウェアリセットビットセット後のシーケンス実施例(ハードウェアウォッチドッグ)
ハードウェア
ウォッチドッグ
CPU0
ソフトウェア
ウォッチドッグ0
リセット
コントロール1
ソフトウェア
ウォッチドッグ1
CPU1
ソフトウェアリセットビットセット
トリガ0書き込み
リセット発行
リセット発行
トリガ0書き込み
トリガ0書き込み
ウォッチドッグ
エラー発生
トリガ0に対して2回連続で書き
込みを行うことになるため、
ウォッチドッグエラーとなる。
Figure 4-14 ソフトウェアリセットビットセット後のシーケンス実施例(ソフトウェアウォッチドッグ)
ハードウェア
ウォッチドッグ
CPU0
ソフトウェア
ウォッチドッグ0
リセット
コントロール0
ソフトウェア
ウォッチドッグ1
CPU1
ソフトウェアリセットビットセット
トリガ0書き込み
リセット発行
リセット発行
トリガ0書き込み
トリガ0書き込み
トリガ0に対して2回連続で書き
込みを行うことになるため、
ウォッチドッグエラーとなる。
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
ウォッチドッグ
エラー発生
25
V1.1
A P P L I C A T I O N
N O T E
5. 参考文書
[1]. 32 ビット・マイクロコントローラ MB9D560 シリーズハードウェアマニュアル
[2]. 32-bit Microcontroller MB9D560 シリーズ DATA SHEET
26
CONFIDENTIAL
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
6. 付録
6.1
コア間で同期をとる方法
コア間で同期をとる方法として以下の 3 つの例を記します。
1.
2.
3.
メモリまたはレジスタをフラグとして使用する(Figure 6-1)
EAM をセマフォとして使用する(Figure 6-2)
コア間通信を使用する(Figure 6-3)
Figure 6-1 フラグを使用した同期例
[処理内容]
ADCに対して処理No.1~3を昇順に行う。各コアで行う処理は以下の通り。
CPU0 : 処理No.1、No.3を行う。
CPU1 : 処理No.2を行う。
CPU0の
メモリ
CPU0
ADC
CPU1
のメモリ
CPU1
処理No.1完了フラグ読み出し
フラグOFF
特定の周期で
ポーリングする
処理No.1実行
処理実行結果
フラグがONになるまで
処理No.2は行わない。
フラグがONになるまで
処理No.3は行わない。
処理No.1完了フラグセット
処理No.2完了フラグ読み出し
フラグOFF
特定の周期で
ポーリングする
処理No.1完了フラグ読み出し
フラグON
処理No.2実行
処理実行結果
処理No.2完了フラグセット
処理No.2完了フラグ読み出し
フラグON
処理No.3実行
処理実行結果
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
27
V1.1
A P P L I C A T I O N
N O T E
Figure 6-2 EAM をセマフォとして使用した同期例
[処理内容]
ADCに対して処理No.1~6を排他的に行う。各コアで行う処理は以下の通り。
CPU0 : 処理No.1~3を行う。
CPU1 : 処理No.4~6を行う。
CPU0
ADC
EAM
CPU1
t1:LDREX命令実行~STREX命令実行("ロード値-1")の時間
t2:STREX命令失敗~再度LDREX命令実行の時間
t3:"0x0000"をロード~再度LRDEX命令実行の時間
t4:LDREX命令実行~STREX命令実行("ロード値+1")の時間
必ず t1 < t2 かつ、 t3 > t4 となるようにすること。
セマフォカウンタ初期化
("0x0001"を書き込み)
LDREX命令実行
0x0001
LDREX命令実行
0x0001
ロードした値が
1以上か判定
STREX命令実行
("ロード値-1"を書き込み)
STREX命令失敗
ロードした値が
1以上か判定
t1
STREX命令実行("ロード値-1"を書き込み)
STREX命令成功
t2
処理No.1~3実行
処理実行結果
LDREX命令実行
0x0000
ロードした値<1のためセマフォの
取得を断念。
t3経過後にリトライ。
LDREX命令実行
0x0000
ロードした値が
1以上か判定
STREX命令実行("ロード値+1"を書き込み)
STREX命令成功
t3
LDREX命令実行
0x0001
STREX命令実行
("ロード値-1"を書き込み)
STREX命令成功
ロードした値が
1以上か判定
処理No.4~6実行
処理実行結果
LDREX命令実行
0x0000
STREX命令実行
("ロード値+1"を書き込み)
STREX命令成功
28
CONFIDENTIAL
t4
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
Figure 6-3 コア間通信を使用した同期例
[処理内容]
ADCに対して処理No.1~6を昇順に行う。各コアで行う処理は以下の通り。
CPU0 : 処理No.1~3を行う。
CPU1 : 処理No.4~6を行う。
CPU0
メールボックス
ADC
CPU1
処理No.1~3実行
処理実行結果
リクエストを受信するまで
処理No.4~6は行わない。
使用可能なメールボックスがあるか確認
使用可能なメールボックスあり
リクエスト送信元設定
設定完了
リクエスト送信設定
リクエスト送信開始
受信割込み
リクエストクリア
アクノリッジ
処理No.4~6実行
処理実行結果
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
29
V1.1
A P P L I C A T I O N
N O T E
7. 主な変更内容
ページ
場所
-
-
変更箇所
Revision 1.0
30
CONFIDENTIAL
Initial release
MB9D560_AN708-00007-1v0-J, July 16, 2015
v1.1
A P P L I C A T I O N
N O T E
免責事項
本資料に記載された製品は、通常の産業用, 一般事務用, パーソナル用, 家庭用などの一般的用途 (ただし、用途の限定はあ
りません) に使用されることを意図して設計・製造されています。(1) 極めて高度な安全性が要求され、仮に当該安全性が
確保されない場合、社会的に重大な影響を与えかつ直接生命・身体に対する重大な危険性を伴う用途 (原子力施設における
核反応制御, 航空機自動飛行制御, 航空交通管制, 大量輸送システムにおける運行制御, 生命維持のための医療機器, 兵器シ
ステムにおけるミサイル発射制御等をいう) 、ならびに(2) 極めて高い信頼性が要求される用途 (海底中継器, 宇宙衛星等を
いう) に使用されるよう設計・製造されたものではありません。上記の製品の使用法によって惹起されたいかなる請求また
は損害についても、Cypress は、お客様または第三者、あるいはその両方に対して責任を一切負いません。半導体デバイス
はある確率で故障が発生します。当社半導体デバイスが故障しても、結果的に人身事故, 火災事故, 社会的な損害を生じさ
せないよう、お客様において、装置の冗長設計, 延焼対策設計, 過電流防止対策設計, 誤動作防止設計などの安全設計をお願
いします。本資料に記載された製品が、外国為替及び外国貿易法、米国輸出管理関連法規などの規制に基づき規制されてい
る製品または技術に該当する場合には、本製品の輸出に際して、同法に基づく許可が必要となります。
商標および注記
このドキュメントは、断りなく変更される場合があります。本資料には Cypress が開発中の Cypress 製品に関する情報が記
載されている場合があります。Cypress は、それらの製品に対し、予告なしに仕様を変更したり、開発を中止したりする権
利を有します。このドキュメントに含まれる情報は、現状のまま、保証なしに提供されるものであり、その正確性, 完全性,
実施可能性および特定の目的に対する適合性やその市場性および他者の権利を侵害しない事を保証するものでなく、また、
明示, 黙示または法定されているあらゆる保証をするものでもありません。Cypress は、このドキュメントに含まれる情報を
使用することにより発生したいかなる損害に対しても責任を一切負いません。
Copyright © 2015 Cypress Semiconductor Corp. All rights reserved.
商標:Cypress, Cypress ロゴ,Spansion®, Spansion ロゴ (図形マーク), MirrorBit®, MirrorBit® Eclipse™, ORNAND™, Easy
DesignSim™, Traveo™及びこれらの組合せは、米国・日本ほか諸外国における Cypress Semiconductor Corp.の商標です。第三
者の社名・製品名等の記載はここでは情報提供を目的として表記したものであり、各権利者の商標もしくは登録商標となっ
ている場合があります。
July 16, 2015, MB9D560_AN708-00007-1v0-J
CONFIDENTIAL
31
V1.1