V850付録基板でOgg Vorbisプレイヤー(7)
Posted by arms22 on 2007年06月08日

アプリレットを使ってV850の周辺機能のレジスタ設定ファイルを作成しました。
gccでコンパイルを通す為にいくつかの修正を加えます。
1.レジスタ定義ファイルの作成
まずgccにはV850のレジスタ定義がないのでレジスタ定義ファイルを作成します。PDFからレジスタ一覧をコピーし型を合わせてヘッダファイルにします。v850es_jg2.hとアセンブラ用にv850es_jg2.incを作成しました。
macrodriver.hを次のように書き換えv850es_jg2.hをインクルードします。
#pragma io → #include "v850es_jg2.h"crte.sとsystem.sでv850es_jg2.incをインクルードします。
.include "v850es_jg2.inc"
2.アセンブラファイルの修正(crte.s)
mov命令を書き換えます。
TOPPERS/JSPのコードを参考にlea(load effective address)といマクロを作成します。
.macro lea name, destination mov hilo(?name), ?destination .endmleaマクロでmov命令を次のように書き換えます。
mov #__ep, ep → lea __ep, ep省略表記を修正します。
st.w r0, [r13] → st.w r0, 0[r13]
mainの引数は要らないので次の行をコメントアウトします。
ld.w $__argc, r6 -- set argc movea $__argv, gp, r7 -- set argv
3.vectorテーブルの作成(inttab.s)
TOPPERS/JSPのコードを参考にjrとnopを挿入するマクロでvectorテーブルを作成します。
4.リンカスクリプトの作成(v850.ld)
TOPPERS/JSPのコードを参考にリンカスクリプトを作成します。vectorテーブルをROMの先頭に配置するようにします。
inttab.sで次のようにセクションを記述し、
.section ".vector", "ax" .align 4 InterruptHandler RESET, __start ReservedHandler NMI ...リンカスクリプトで次のように配置します。
MEMORY { IROM(raxi) : org = 0x00000000, len = 256k IRAM(wax) : org = 0x03FF9000, len = 24k }; SECTIONS { .vector : AT(0) { *(.vector) } >IROM ...gccでコンパイルが通るように修正したソースはこちら。
devdrv.zip レジスタ定義ヘッダファイルも含みます。
Ads by Google
0 Comments
Leave a reply
該当の記事は見つかりませんでした。