Sim's blog

電子工作はじめてみました

オンチップデバッグを動かすための変更点

2007-04-17 22:40:49 | V850
jsskさん調査によれば、appliletでシステムの「オンチップディバグ設定」タブのオンチップディバグ設定を「使用する」に変更することで、デバッガが使えるコードを生成することができます。この変更を行わないと「F0c34: オンチップ・デバッグで使用する予約領域への書き込みはできません。(address 0000)」というエラーが出てデバッガを動かすことができません。

appliletを使えば、デバッガの動くコードと動かないコードが作れるので、違いを調べてみました。方法は、オンチップデバッガ設定を「使用する」と「使用しない」の2種類の設定で生成されたコードの差分を取りました。フォルダーの名前が違うと差分が多くなるので、最初に作ったフォルダーは生成した後で別名に変えて、2番目に作るフォルダーは最初に作ったフォルダーと同じ名前にしました。

先に結論を言うと変更点はけっこう多いのでappliletでスケルトンを作る方がよっぽど楽です。さらに追い討ちをかけるように、実はオンチップデバッガを動かすための情報はユーザーズ・マニュアルの27章に全て書いてありました(先にマニュアル調べればよかった><)。

とりあえず、差分を載せておきます。

(1) オンチップデバッグモードを有効にする(crte.s)
        mov      0, r11                 -- normal mode
        st.b    r11, PRCMD[r0]
        st.b    r11, OCDM[r0]


(2) security id(system.s)
        .section "SECURITY_ID", text
        .byte CG_SECURITY0              -- Security ID head
        .byte CG_SECURITY1
        .byte CG_SECURITY2
        .byte CG_SECURITY3
        .byte CG_SECURITY4
        .byte CG_SECURITY5
        .byte CG_SECURITY6
        .byte CG_SECURITY7
        .byte CG_SECURITY8
        .byte CG_SECURITY9              -- Security ID tail


(3) ROMの予約領域とRAMの予約領域を確保する(inttab.s)
-- Secures 2 KB space for monitor ROM section
	.section "MonitorROM", const
	.space 0x800, 0xff
-- Secures 12 byte space for monitor RAM section
	.section "MonitorRAM", bss
	.lcomm monitorramsym, 12, 4 	-- defines monitorramsym symbol


(4) デバッグ用の割り込みベクター(inttab.s)
	.section "DBG0"			-- Secures DBG0 interrupt vector for debugging
	.space 4, 0xff


(5) デバッグで使うUART0の割り込みベクター(inttab.s)
	.section "INTUA0R", text	-- Secures interrupt vector for serial communication	
	.space 4, 0xff
	
	.section "INTUA0T", text	-- Secures interrupt vector for serial communication	
	.space 4, 0xff


(6) デバッグで使うUART0を有効にする(port.c)
        PMC3 |= 0x03;


(7) リンク用ファイルへの追加(850.dir)
MROMSEG : !LOAD ?R V0x03f800 {
	MonitorROM = $PROGBITS ?A MonitorROM;
};

MRAMSEG : !LOAD ?RW V0x03ffeff4{
	MonitorRAM = $NOBITS ?AW MonitorRAM;
};


詳しくはユーザーズ・マニュアルの27.2 DCUを使用しない方法をご覧ください。ROMを2kバイト、RAMを16バイト、デバッグ用にとられてしまうようです。

4/18 追記 jsskさんに差分の抜けを教えていただきました。

(8)security id定義(system.inc)

.set CG_SECURITY0, 0xff
.set CG_SECURITY1, 0xff
.set CG_SECURITY2, 0xff
.set CG_SECURITY3, 0xff
.set CG_SECURITY4, 0xff
.set CG_SECURITY5, 0xff
.set CG_SECURITY6, 0xff
.set CG_SECURITY7, 0xff
.set CG_SECURITY8, 0xff
.set CG_SECURITY9, 0xff

(提供 jsskさん)

セキュリティIDについてはユーザーズ・マニュアルの27.3 ROMセキュリティ機能に載っています。system.incというのはアセンブラのincludeファイルです。