shimamura
2016年3月8日 9時32分
お世話になります。
Armadillo-800 EVAでマイコンの外部メモリ空間の検証を行っています。
テスト環境としては、EVAボードのCON2にメモリ空間のバス、制御信号が
ありますので、エリア5A(CS5A)にSRAM(バス幅:8ビット)を接続しています。
Hermit-At3の初期処理に、エリア5Aがアクセスできるようにマイコンのレジスタ設定を
追加しました。
①エリア5のバスは8ビットに設定
②ポート105をファンクション1(CS5A)に設定
③ポート115をファンクション1(RD)に設定
④ポート175をファンクション1(A0)に設定
※その他のピンファクションはデフォルトでOK。
上記の状態で、Hermit-At3を実行している状態(カーネル起動前)では、外部メモリに
正常にアクセス出来ることを確認しました。
しかし、カーネル実行後は、外部メモリに正常にアクセスすることが出来ませんでした。
調査したところ、カーネル実行後は、BSC関連のレジスタが全て「0」にクリアされていました。
(カーネル実行後に、上記①~④を再設定しても外部メモリにはアクセス出来ませんでしたので
他にもレジスタの状態が変わったしまったところがあると思われます。)
カーネル起動時にレジスタ状態を引き継ぐ(変更しない)方法を教えてください。
コメント
shimamura
お世話になります。
やっと時間が取れて、再びArmadillo-800 EVAでマイコンの外部メモリ空間のアクセスに
チャレンジしています。
引き続き、テスト環境としては、EVAボードのCON2にメモリ空間のバス、制御信号が
ありますので、エリア5A(CS5A)にSRAM(バス幅:8ビット)を接続しています。
eva_init() で、BSC関連のレジスタや、ポート設定(バス、制御信号の設定)を行いましたが
SRAMにはアクセス出来ませんでした。
カーネル起動前はSRAMに正常にアクセス出来るので、カーネル起動時にレジスタが
変わってしまい、設定し直さなければならないレジスタがBSC関連、GPIO関連以外に
あると思うのですが・・・
アドバイスお願いします。
at_yashi
カーネル起動前にアクセスできるのであれば、MMUの設定ですね。
SRAMの空間は、どこにマップしていますか?
固定アドレスでマップしなくても良いのであれば、ioremap()
が使えます。
Linux Device Driver の Remapping Kernel Virtual Addresses などが詳しいです。
https://static.lwn.net/images/pdf/LDD3/ch15.pdf
shimamura
shimamura
at_yashi
2016年3月8日 13時43分
GPIO に設定されているようですね。
PORTの設定をするには、
linux-3.4-at/arch/arm/mach-shmobile/board-armadillo800eva.c
のeva_init()
で、他のポートのように、設定する必要があります。linux-3.4-at/arch/arm/mach-shmobile/pfc-r8a7740.c
で gpioの設定をするためのpinmux_data
に、使っているポートが入っています。ここに入っているポートは、他の機能として選択されなければ、GPIOに設定されます。