carcon999のブログ

12年間Y!ブログの記載を移行しました。電子工作関連の記事が多いです。

SDカードの読み込み

少し時間が取れるようになったので。(ああ夏休み)

イメージ 3

SDカードを再試食しました。だいぶ前(この記事のころ)に、一度試食して動かないので、一度ポイしたものです。Interfaceのサンプルプロジェクトここからダウンロード可能cq_sh7262_hew.zipに入っているfftestのサンプルを動かすとブログラムが飛び無応答になる現象が発生していました。
恐らく、例のSH2Aのデバッガバージョンアップが影響しているのは想定が付きます。
最初ハマッたのは、ダウンロードのプログレスバーが中央部分までは、いままでと同じように遷移するのですが、中央から最後まで一気に終了するので、ちゃんとダウンロードされてないのでは?と思いかなり遠回りをしたのですが、結局は関係なかったみたいです。

動かすと、Dammy関数(期待しない割り込み)にJUMPしていたり、暴走してプログラムが終了できなくなり、タスクマネージャーのお世話になります。(結構おせわになったな・・・・)

じゃあ、どうするか?(どうしたか?)
・SCI2 -> SCI0を利用するように改造。(これは私の環境に合わせてポートを変更したかった)
レジスタバンクを利用する。
・私のSH-2Aボードで動くようにする。(多分5/17のVersionアップ版)

■resetprg.c
これは、まともに動作するプロジェクトのものを利用します。
また、私はレジスタバンクを利用したいので、
INTC.IBNR.WORD = 0x4000をPowerON_Reset_PC内で定義しました。
また、効果があるか分かりませんが、IRQ割り込み要求レジスタをクリアするように下記も追加しました。
INTC.IRQRR.WORD = 0x0000;

■vect.h
レジスタバンクを利用するので、利用する3つの割り込みに、resbankを追加
#pragma interrupt INT_CMT_CMI0(resbank)
#pragma interrupt INT_SCIF_SCIF0_RXI0(resbank)
#pragma interrupt INT_SCIF_SCIF0_TXI0(resbank)

■main.c
レジスタバンクを利用するので、ifuncを追加
#pragma ifunc INT_CMT_CMI0, disk_timerproc

■scif.c
レジスタバンクを利用するので、ifuncを追加
#pragma ifunc INT_SCIF_SCIF0_RXI0
#pragma ifunc INT_SCIF_SCIF0_TXI0

あと、セクションの設定も少し変更したな・・・とりあえず変更した設定を載せておきましょう。
イメージ 2


結論としては、サンプルプログラムが動作し、2GのSDカードから、データが読み出せることを検証できました。もちろん100円のショップの基板で!(使えるもんですね。)

まあ、この先は、自分のプログラムにFatFsを移植する作業が残っていますけど・・・
※移植前に、動く環境を確認しておくことが重要だったりしますね。(経験上、どっちの問題か分からなくなるので。)

イメージ 1

同じようなことでハマッている方のヒントになれば幸いです。