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