CAT709メモ


eCos on CAT709

  • 05/08
    eCosを使うことを考えるとRTCの制御部分をパッケージとして作成したほうがいいかもしれない。そうなるとDP83902AのMACアドレスの初期化をどこでやるかなどあるんだけど。とりあえず先の話。
    05/11:wallclock/sh/cat709に移動してとりあえず妥協する。RTC制御部分をドライバとしてパッケージにするのが面倒なので。
  • 05/14:hello.c、GDBで表示されない問題について
    devs_eth_sh_cat709.inlでのdp83902a_eth0_priv_data.interruptをCYGNUM_HAL_INTERRUPT_IRQ_IRQ3からCYGNUM_HAL_INTERRUPT_LAN==14にすると表示される。なんかよくわからん。 redbootに制御を戻すように改造したhello.cは、相変わらず二度動作させると固まる。
  • 05/15:eCosアプリ
    eCosアプリの起動シーケンスを追ってみた
    install/lib/target.ld
    ENTRY(__reset)
    
    
    _reset@hal/sh/arch/v2_0/include/hal_var_bank.inc
      _reset_platform@hal/sh/arch/v2_0/src/vector.S
        hal_post_reset_init@hal/sh/sh3/v2_0/include/variant.inc
    
        complete_setup@hal/sh/arch/v2_0/src/vector.S
          hal_mon_init@hal/sh/cat709/v2_0/include/platform.inc
    
          hal_platform_init@hal/sh/cat709/v2_0/src/plf_misc.c
          cyg_hal_invoke_constructors@hal/sh/arch/v2_0/src/hal_misc.c
    
          cyg_start@

    install/lib/target.ld ENTRY(__reset) -> ENTRY(_cyg_start)にすると レッドブートに制御が戻るみたいだ。GDBの場合はリセットされる。 それから、devs_eth_sh_cat709.inlでのdp83902a_eth0_priv_data.interruptがCYGNUM_HAL_INTERRUPT_IRQ_IRQ3でもOKだった。またまたよくわからん。からくりを調べてみないと。
  • 05/15:eCosアプリ:twothreads.c
    examples/twothreads.cでprintfの表示がおかしい問題の調査。 langage/c/libc/stdio/v2_0/src/output/vfnprintf.cxxのPRINTマクロでbufにアクセスしているところで表示がおかしくなってた。結局、コンパイラの-O2を外すことでうまく動作するようになった。
  • 05/22:gdb stub
    割り込み番号 ETH:37, SCIF:59, SCI:26
    GDBのシリアルポートを使った動かし方
    (gdb) set remotebaud 38400
    (gdb) target remote /dev/ttyS0
    (gdb) load
    (gdb) c
    gdbで実行
    hal_default_isr: func = 80016480, vector = 37, data = 0
    vector = 37, gdb_vector = 37
    HAL_CTRLC_ISR: result = 1
    redbootから実行
    hal_default_isr: func = 8c025160, vector = 37, data = 0
    vector = 37, gdb_vector = 37
    HAL_CTRLC_ISR: result = 1
    割り込み処理の流れ
    hal_default_isr@hal/common/v2_0/src/hal_misc.c
      HAL_CTRLC_ISR( vector, data ) -> result (CYG_ISR_HANDLED==1)
        cyg_ctrlc_isr@hal/common/v2_0/src/hal_if.c
          cyg_hal_user_break@hal/common/v2_0/src/hal_misc.c
      return result
  • 05/30:gdb over eth
    イーサネット経由でリモートからGDBでデバッグを開始すると、 IRQ3の割り込みレベルが15に引き上げられる*みたいだ。
     ※デバッグ未開始時の割り込みレベルは0
     ※*hal_interrupt_update_level@hal/sh/sh3/v2_0/src/var_misc.cあたり

    このためAX88796からの割り込みを受け付けるようになるのだが、 eth経由でGDBがうまく動作しないのは、この割り込み処理の設定が 悪いためなのかもしれない。 なぜかというとGDBデバッグを開始しても割り込みレベルを0の ままにしておけばtwothreadsが動作するから。
    SHの割り込みトリガ(デフォルトは立下りエッジで検出、 RedBoot?起動後はICR1は0x0000に設定されている)が、 AX88796のものと一致しているか今後調べてみよう。
     ※hal_interrupt_configure@@hal/sh/sh3/v2_0/src/var_misc.cあたり。
  • 05/30:gdb over eth[2]
    %%hal_platform_init@hal/sh/cat709/v2_0/src/plf_misc.cで、 CYGPKG_DEVS_ETH_SH_CAT709が定義されている場合に、 hal_interrupt_configureを使って IRQ3の割り込みをレベルで検出するように設定する処理を追加してみた。 これでeth経由でのGDBでデバッグできるようになった? もう少しテストしてからパッチを更新してみようと思います。%%

PLD-PGM, JTAG-tools, CAT709

  • 05/27:ROMライタ
    借りていたROMライターを返却しなければならなくなった。 小遣い程度でフラッシュに書き込む方法ないかな?と思ってたけど、PLD-PGMとJTAG-TOOLを使うと出来るかもしれない。現在実験中です。
  • 05/28:ROMライタ[2]
    PLD-PGMを使ってフラッシュROMに書き込することができた。 ただしものすごく時間がかかる(redbootで1時間ぐらい)。 redbootのデバッグはRAMバージョンを使うしかないかな。
  • 06/14:接続ケーブル
    PLD-PGMとCAT709を接続するケーブルを作ろうと思ってます。 圧着端子を使おうと思ってるのですが、 ネットでハウジングやコンタクトをいろいろ探してみてるんだけど、 ピン数が一致するものがなかなか見つけられないです。 (14*2ピンと20*2ピンが必要) みつかっても1000個単位でしか売ってくれないとか... それからジャンパーピンのコンタクトだけ手に入れば、 いろいろブレッドボードで実験できるのに... きれいに仕上げようと思わなければ別にいいんですが。