ホーム › フォーラム › Texas Instruments › マイコン › C2000 › CodeStartBranch.asmのファイルについて
-
投稿者投稿
-
CodeStartBranch.asmのファイルについて
度々お世話になります
F2837xD_CodeStartBranch.asmを編集し、
GPIOポートの入力を検出することによってそのポートがHの場合は、_c_int00_に
Lの場合は別のエントリーポイントに飛ぶ(別のプログラムを実行させる)といった仕組みは可能なのでしょうか
- このトピックは ttkkttkkが5 年前に変更しました。
ttkkttkkさん
はい、可能です。
ただし、code_startに追加される場合、Linker Command Fileでは、セクション”codestart”はブランチ命令分のサイズ(2WORD)しか確保されておりません。GPIOの入力確認と分岐命令の追加コード分は、Linker Command Fileにて拡張して頂く必要がありますので、ご注意ください。
ご確認のほど、よろしくお願いいたします。
回答ありがとうございます。
すみませんが、確認させてください。
ブランチ命令分のサイズが確保されている箇所は/* Flash Rom */
BEGIN : origin = 0x080000, length = 0x000002 /* Program Start(Boot to FLASH) */上記のlengthのサイズが2wordしかないため
拡張する必要があるということでしょうかttkkttkkさん
はい、ご認識のとおりです。
”BEGIN”は Flash ROMのセクタA(FLASHA)の領域の一部を使用しています。そのため、”BEGIN”を拡張の際は、”FLASHA”の開始アドレス(origin)とサイズ(length)も調整頂く必要があります。
ご確認のほど、よろしくお願いいたします。
すみません、一点追加で質問させてください。
上記の2プログラムをCodeStartBranch.asmで分けるような
サンプルプログラムはありますか申し訳ありませんが、ご希望のサンプルコード・プロジェクトはございません。
以上、よろしくお願いいたします。
了解しました。
回答ありがとうございます。何度もすみません
上記 F28377のControlCARDで 試そうとしておりますが
BootModeで使用するGPIO84, GPIO72は
当該プログラムの切り替えポートとしては利用不可でしょうかttkkttkkさん
Zx_BOOTCTRLがデフォルトの場合、GPIO72,84はBootROMが Flash ROMのコードを実行するかを判断するために使用されます。code_startファンクションは、この判定のあとに実行されるものになりますので、利用することは難しいものと考えます。
以上、よろしくお願いいたします。
すみません、もしわかりましたら教えてください
CodeStartBranch.asmを以下のように改造を行い、
.if WD_DISABLE == 1
LB wd_disable ;Branch to watchdog disable code
.else
;;;;;;;;;;;;;;;;; GPIO86 がL時にmain_testへ飛ばせるかどうかのテスト
MOVW DP, #0x1FC
MOVL @0x8, ACC
TBIT @0x11, #0x6
SB TESTL1, NTC
;;;;;;;;;;;;;;;;;
LB _c_int00 ;Branch to start of boot._asm in RTS library
.endifデバッガ接続でGPIO86をLにしたところ、正常にTESTL1ラベルのコードが
開始されるのですが、デバッガ未接続で起動させると
TESTL1ラベルのコードが開始されませんでした原因について何かわかりましたら回答をお願いいたします
ttkkttkkさん
デバッガ未接続時にTESTL1が実行されないとのことですが、_c_int00からのコードが実行されるということでしょうか。それとも、全く動作していないように見えるということでしょうか。
デバッガを接続してご確認いただいたときには、通常の動作(GPIO86=H)を確認したあと、CCSの”CPU Reset”でリセットからご確認されていると思います。CCSの”CPU Reset”では一部のレジスタはリセットされません。代表的なもので、クロック関連とウォッチドッグ関連があります。
CPUクロックは、電源ON後は10MHzで動作しています。一度通常動作を実行されますと、おそらく200MHzを設定されているかと思いますので、その差は20倍になり、見た目上動作していないように見える場合がございます。
また、サンプルプログラムでは、ウォッチドッグをディセーブルに設定していますので、同様にCPU Resetを実行されても、ディセーブルとなります。
デバッガ未接続で電源ONした場合、CPUクロックは10MHz動作かつウォッチドッグはイネーブルとなり、TESTL1ラベル以降で、これらの設定を行わない場合にウォッチドッグによるリセットが発生している可能性が高くなります。
まずは、TESTL1ラベルの処理にて、ウォッチドッグをディセーブルに設定してご確認いただけますでしょうか。
ご確認のほど、よろしくお願いいたします。
回答ありがとうございます。
デバッガ未接続時にTESTL1が実行されないとのことですが、_c_int00からのコードが実行されるということでしょうか。それとも、全く動作していないように見えるということでしょうか。
これは後者の「全く動作していないように見える」です
_c_int00モジュール、TESTL1以降のモジュールどちらも
GPIO出力にてトグル操作をしていますが、何も出力されていなかったため
そのように判断しました。ひとまず、TESTL1ラベル処理でWDTをdisableにして一度試します。
WDTのdisable部分を追加してデバッガなしで起動したところ
実行されていることが確認できました。
ありがとうございました。 -
投稿者投稿