フォーラムへの返信
-
投稿者投稿
-
回答ありがとうございます。
助かりました。すみません、
問題は解決しましたが一点教えていただきたい点がありますTMS320F28379Dのベクタテーブルの記載がされている資料は
どこにあるのでしょうかspruhm8h.pdf
上記リンク先のベクタテーブル(96ページ~103ページ)は古い内容なのでしょうかご回答ありがとうございます
ご指摘の通り
割込みベクタ(0xD6C番地)へのepwm7_isrのアドレスが正しく設定がされていないことが原因でした。
(0xD8C番地に設定をしておりました)0D6c番地にepwm7_isrのアドレスを設定しましたところ
IllegalISRも発生しなくなり、プログラムのRAMコピー処理も正常に動作いたしました長々とありがとうございました。
- この返信は5 年、 2 ヶ月前に ttkkttkk さんが編集しました。
回答ありがとうございます
ePWM7についてはPHSEN=1を設定していることが原因で、
ePWM1と同期されておりました。ありがとうございました。話が戻り、割込み処理ですが
割込み関数(epwm7_isr)がLSRAM0の最初00008000に
割り当てられている場合、割込みが発生。下記のように、
割込み処理epwm7_isrより容量の大きい関数をコピーした場合
IllegalISRの不正割込みが発生することがわかりました。ramfuncs_ReadEEPROM
* 0 00088000 000000b9 RUN ADDR = 00008000
00088000 000000b9 MainLoop.obj (ramfuncs_ReadEEPROM)ramfuncs_epwm7_isr
* 0 000880b9 0000004c RUN ADDR = 000080b9
000880b9 0000004c Interrupt.obj (ramfuncs_epwm7_isr:retain)ベクタテーブルにepwm7_isrのアドレスを設定はしております。
コピー処理を行うと容量の大きいモジュールから順にRAMに割り当てられるのでしょうかたびたび申し訳ございませんが
何かわかりませんでしょうかありがとうございます
どのコードが悪いかまでは追えませんでしたが
どのあたりで飛んで行っているかまでは分かりました。
この情報をもとに詰めていきたいと思います別の質問で申し訳ないのですが
PWMの割込みモジュールが定期的に発生しているのですが
ePWM1の割込みかePWM7の割込みで来ているのかを知る方法はないのでしょうか?
割込み関数に入った箇所で何かのレジスタ(フラグ)を見れば分かる、等
あれば教えていただけませんでしょうか回答ありがとうございます。
2点質問なのですが、17日に張り付けたデータは既に1word分ずれてしまっている状態なのでしょうか
メモリブラウザで[ SP]とアクセスした箇所が 0x00000428を指していた場合、
0x00000420 か 0x0000041FがReturn Addressになっているのでしょうか?何度も申し訳ございません。
StepOver(F6)で進める場合と
StepInto(F5)で進める場合で挙動が異なり、F6で進めた場合、上記の「3fe493: 7625 ESTOP0 」で
Break at addressとなり、Memory Browserでスタック領域(0x000400)を確認しましたが
全てゼロで表示されるような結果となりました。F5の場合は、「0x200008」のアドレスで止まり、
スタック領域は更新されておりますが、以下の領域で
どこがSPに当たるのかが理解できておりません。
_stack
C054 0000 952D 0008 95EF 0008 95FB 0008 8920 0008 938B 0008 0000 0001 00C8
0018 0001 0000 0000 0000 0003 FFFF EA0A 0033 0004 001F 958C 0008 0020 0000
0000 0004 0096 FFFF 0000 0001 C1E2 0000 0001 0000 0000 0000 0000 0000 0000
:
何度も申し訳ございませんが、SPを知る方法について今一度教授お願いいたします回答ありがとうございます
コピー処理は提示の方法で相違ございません。
LOAD_SIZEの追加し再度確認してみます。最後のスタックについての確認方法がわかりません
Disassemblyウィンドウなどに表示がされるものなのでしょうか
CCSは8.1.0を使用しています。回答ありがとうございます。
cmdファイルは以下のように変更しております。PAGE 0 : /* Program Memory */
/* Program Space */
RAMLS0_5 : origin = 0x008000, length = 0x003000 /* Ram for Program */RAMM0 : origin = 0x000122, length = 0x0002DE
RAMD0 : origin = 0x00B000, length = 0x000800/* BootROM Vector */
RESET : origin = 0x3FFFC0, length = 0x000002 /* Reset Vector *//* Flash Rom */
BEGIN : origin = 0x080000, length = 0x000002 /* Program Start(Boot to FLASH) */
FLASHA : origin = 0x080002, length = 0x001FFE /* Flash Rom */
FLASHB : origin = 0x082000, length = 0x002000 /* Flash Rom */
FLASHC : origin = 0x084000, length = 0x002000 /* Flash Rom */
FLASHD : origin = 0x086000, length = 0x002000 /* Flash Rom */
FLASHEF : origin = 0x088000, length = 0x00FFFE /* Flash Rom */
FLASHEF_SUM : origin = 0x097FFE, length = 0x000002 /* Flash Rom Sum */
FLASHG : origin = 0x098000, length = 0x008000 /* Flash Rom */
FLASHH : origin = 0x0A0000, length = 0x008000 /* Flash Rom */
FLASHI : origin = 0x0A8000, length = 0x008000 /* Flash Rom */
FLASHJ : origin = 0x0B0000, length = 0x008000 /* Flash Rom */
FLASHK : origin = 0x0B8000, length = 0x002000 /* Flash Rom */
FLASHL : origin = 0x0BA000, length = 0x002000 /* Flash Rom */
FLASHM : origin = 0x0BC000, length = 0x002000 /* Flash Rom */
FLASHN : origin = 0x0BE000, length = 0x002000 /* Flash Rom */中略
ramfuncs_epwm7_isr
: LOAD = FLASHC,
RUN = RAMLS0_5,
LOAD_START( _RamfuncsLoadStart_epwm7_isr ),
LOAD_END( _RamfuncsLoadEnd_epwm7_isr ),
RUN_START( _RamfuncsRunStart_epwm7_isr ),
PAGE = 0コピー元はFLASHの定義でも試しております。(同じ現象となります)
マップファイルよりコピー処理の部分を抜粋します
ramfuncs_epwm7_isr
* 0 00084000 0000004c RUN ADDR = 00008000
00084000 0000004c Interrupt.obj (ramfuncs_epwm7_isr:retain)ramfuncs_InitSetRegisterFlash
* 0 0008404c 00000015 RUN ADDR = 0000804c
0008404c 00000015 Initial.obj (ramfuncs_InitSetRegisterFlash)ramfuncs_CtrlMainLoop
* 0 00084061 00000001 RUN ADDR = 00008061
00084061 00000001 MainLoop.obj (ramfuncs_CtrlMainLoop)上記の3モジュールのコピーだけであればESTOP0停止なし
ramfuncs_ReadEEPROM
* 0 00084000 00000089 RUN ADDR = 00008000
00084000 00000089 MainLoop.obj (ramfuncs_ReadEEPROM)ramfuncs_epwm7_isr
* 0 00084089 0000004c RUN ADDR = 00008089
00084089 0000004c Interrupt.obj (ramfuncs_epwm7_isr:retain)ramfuncs_InitSetRegisterFlash
* 0 000840d5 00000015 RUN ADDR = 000080d5
000840d5 00000015 Initial.obj (ramfuncs_InitSetRegisterFlash)ramfuncs_CtrlMainLoop
* 0 000840ea 00000001 RUN ADDR = 000080ea
000840ea 00000001 MainLoop.obj (ramfuncs_CtrlMainLoop)上記の4モジュールにすると、ESTOP0停止が発生
追加されているのは、一番上のモジュールです。
申し訳ございませんが、何かわかる点はないでしょうかすみません
プロジェクトを新規で作成しなおし、
.cmdファイルも自作したものを使うことにより
割込み自体は入るようになりました。コピー処理のモジュール単位を増やすと、
以下の箇所で止まるようになりました。
3fe493: 7625 ESTOP0TI社のフォーラムを検索し、以下のことを行ってみましたが
止まる現象は同じでした
・スタックサイズを0x200 → 0x400に変更。
・クロック設定後のコピー処理をクロック設定前に変更。申し訳ございませんが、何か対処法についてわかりましたら教授願います
ありがとうございます。
プロジェクトのプロパティを確認しましたが、TI-RTOSの表示はありませんでした。
よって、F2837xD_Headers_BIOS_cpu1.cmdのインクルードを
F2837xD_Headers_nonBIOS_cpu1.cmdに変えてみました。しかし、状況は変わりませんでした。
割込みのモジュールもDisassemblyのビューにて確認、
PieVectTable.EPWM1_INT = &epwm1_isr;
も確認はできております。実行するプログラムのモジュールをある程度削除すると
割込みが発生するようになります。度々申し訳ございませんが、再度ご教授をお願いいたします
申し訳ございません
TI-RTOS自体がよくわかっておりません。
プロジェクトのプロパティ等で使用しているかどうかがわかるのでしょうか?回答ありがとうございます
#pragma CODE_SECTION( epwm1_isr, “ramfuncs_epwm1_isr”)の記載も
FLASHからRAMへのメモリコピー処理も行っております。
上記cmdファイルは2ファイル、プロジェクト上にあり、
F2837xD_headers\cmd\F2837xD_Headers_BIOS_cpu1.cmd
2837xD_FLASH_lnk_cpu1.cmd
の両方をリンクしており、上記の記載は2837xD_FLASH_lnk_cpu1.cmdのほうで
記載しております。TI社のフォーラムにて
BIOSを使用するのがよくない?との記載されているのですが
2ファイル存在するため起こっている現象なのでしょうか?cmdファイルに関して分かっておらず申し訳ないのですが、よろしくお願いいたします
-
投稿者投稿