読者です 読者をやめる 読者になる 読者になる

Lynx-EyEDの電音鍵盤 新館

広帯域制御屋の駄文とか

解ったこと

SDの制御が上手くいかなかった理由が見えてきました。ためしに今までの速度(f1/64)で動作させてもちゃんと動くので、これが真の理由ではないようです。
「スタートアップ」には書いてなかったのですが、トラ技のHPから拝借してきたソースはデータを送信するのに次のような手順を踏んでます。(一部変えています)

while(!tdre_sssr);
sstdr=data1; //データ送信
while(!tend_sssr); //(1)データの送信はすべて終わったか
while(!tdre_sssr); //(2)データバッファはあいているか
sstdr=data2; //次のデータ送信
………

となっていました。ハードウェアマニュアルを見る限り連続してデータを送信するときは(2)だけをチェックするように書いてあります。それに(1),(2)の順番でフラグのチェックを見るというのは一見、無意味です。なぜなら、データの送信すべてが終わっているのであれば、(前の送信データを送信中などの理由で)一時保管をするバッファにデータが残っているはずがありません。

と、おもいました。が、好事魔ゎそこに潜んでおりましたOrz
コメント行には次のように書いてありました
『(1)のダミーを入れないと次のtdre_sssrのフラグチェックで正しく判定されない。(tdre_sssrフラグは送信レジスタ格納後すぐには反映されない。)』

おーい。じゃあ、今まで苦労してたのはそれが原因かよ!疲れた。むしろ憑かれた。