なんでも作っちゃう、かも。

Arduino/Make/フィジカルコンピューティング/電子工作あたりで活動しています。スタバの空きカップを使ったスタバカップアンプなど製作。最近はもっぱらArduinoと3Dプリンタの自作に興味があります。

V850付録基板でOgg Vorbisプレイヤー(7)

Posted by arms22 on 2007年06月08日 0  0

アプリレットを使って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
.endm
leaマクロで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

Leave a reply






管理者にだけ表示を許可する

該当の記事は見つかりませんでした。