かずブログ

Orange Tiny Terror
ひたすら弾くだけ! ギター・トレーニング
地獄のメカニカル・トレーニング・フレーズ 暴走するクラシック名曲編
HERCULES GS432B
冒険野郎マクガイバー シーズン1〈日本語完全版〉
冒険野郎マクガイバー シーズン2〈日本語完全版〉
冒険野郎マクガイバー シーズン3〈日本語完全版〉
Destination (通常盤)
circus (DVD付)
SanDisk UltraII メモリースティックPRO Duo 4GB 転送速度15MB/Sec SDMSPDH-004G-J61
SanDisk microSD Memory Kit 2GB SDSDQ-2048-J3K

PIO転送のDMA化完了!

今日まで、PIO転送のIDE HDDの、PIO書き込み部分をDMA化する作業をしていました。
Linuxに用意されているDMA関連処理(request_dmaとか)を使用してやるのですが、どうもこの処理にいくらか問題があるようで、ずいぶんハマりました。
また、IDEドライバも処理がよくわからなくて、大変でした。

実際にPIO転送する部分をDMAに置き換えることにしていたのですが、どうやらそこに渡される書き込みサイズは実際のデータの1/4のサイズが渡されるらしく、知らずに元のサイズのまま書き込みをしていたら、タイムアウトが発生してしまっていました。

本当はIDEのドライバを上から順に追っていけばよいのですが、あまり時間がなかったもので…。
結局全部は調べ切れていませんが、現象や関連処理から察するに、4KBのデータをPIOに書き込むと完了割り込みか何かが発生し、それで書き込み処理が完結するのだと思います。
かずは1KBしか書いていなかったので、書き込みが完了しなくて割り込みが発生せず、タイムアウトになってしまっていたのではないかと思います。

動いたときは嬉しかったです。この楽しさがあるから組み込みはやめられませんね。
アプリ開発では味わえない感覚です。

2006/07/05(Wed) 22:50:14 [135] かず

投稿パス:

名前:  題名:


パスワード: 

Next >> [ガソリンスタンドの不思議]
Back >> [気になるノートPCその2]