フォーラムへの返信
-
投稿者投稿
-
エミュレータ―の CPU Reset実行時には、CPUへのリセット信号は出力されていませんが、
どのようにして初期化しているのでしょうか?CPU Reset前後のレジスタの内容を添付します。
EPWM,ADC,CAN全て初期化されているようです。尚、CCSは6.2.0で、GELファイルはサンプルのf28065.gelをそのまま使用しています。
Attachments:
返信ありがとうございます。
Gelファイルの中身を確認しました。
OnReset(int nErrorCode)
{
C28x_Mode();
Unlock_CSM();
Device_Cal();
CLA_Clock_Enable(); /* Enable CLA clock – allows to debugger to set CLA breakpoints after reset */// EMU_BOOT_SARAM(); /* Set EMU Boot Variables – Boot to SARAM */
// EMU_BOOT_FLASH(); /* Set EMU Boot Variables – Boot to flash */CLAのクロックが有効化されていることを確認しました。
ところで、上記処理では、EPWMなど他のレジスタの初期化は行っていないようですが、
実際にはCPU Reset後に初期化されています。
どのような仕組みで初期化しているのでしょうか。すみません。どうしても理解できないので教えてください。
SysCtrlRegs.PCLKCR3.bit.CLA1ENCLKの初期値を確認したところ
CPU Reset後:1 → Resume 後:0
CPU Reset後:1 → Restart後:1
となっています。本来であれば、CPU Reset後は0に初期化されるべきだと思いますが、
0の状態でもCPU Resetを行うと1にセットされてしまいます。
同じレジスタのCOMxENCLK,DMAENCLK,USB0ENCLKは0に初期化されるようです。
これはエミュレータの仕様でしょうか?原因が分かりました。
CLAのクロックを有効化していないことが原因でした。
SysCtrlRegs.PCLKCR3.bit.CLA1ENCLK = 1;
を追加したところ正常に動作しました。返信ありがとうございます。
リンク先の内容を確認しましたが、memcpyについては、InitFlash()の後に実行していますし、
CLA以外の機能については問題なく動作するため現象が異なるように思います。
また、CLAについてはconstデータは使用していないため、constデータのmemcpyは行っていません。 -
投稿者投稿