まともな波形がロジアナにでてきた。ロジアナの波形を見ながら、ちまちまと直していく。そのうち、正しい文字が出てくるようになった。1秒ごとのレスポンスUART出力が重なって見にくいので、これを押さえる。よーし、上手く読んでいるようだ。雨の京都の枝垂桜が美しい(3/30/2014)たまには電子工作以外の話題をご紹介しておこう。何年か前にも書いた京都の小学校の同窓会の話である。この間は大津の石山寺だったが、今度は京都御苑の中の宮家別邸が会場だ。これまで音信不通だった同級生の一人が何十年ぶりかで来るよという誘いにのり、また京都まで足を延ばした。会場となった別邸は、旧九条家が茶会に使っていた拾翠(しょうすい)亭で、桂離宮などと同じように申し込めば誰でも利用できるそうだ。御苑の西南部に位置する。小ぶりだが舟遊びが出来るくらいの池があり、藤棚の船溜まりがある。東山を借景とした庭が見事である。ここを貸し切って優雅に懐石弁当を賞味した。生憎の雨だったが、お庭の緑は雨の方が映える。酒類の持ち込みは禁止されているのが少し物足らない(男共は辛抱しきれず夕刻、二次会に走った)。50年ぶりに参加した同級生とも再会でき、今回も有意義な同級会だった。今年は男が少し増えて6名。在学時50名程度のクラスで、70を越した男女が20人近く集まれるということは幸せなことだ。みんなの話題が介護の苦労の話ばかりで少々閉口した。景気づけに自分のスピーチの時は「私は2039年のケネディ暗殺の調査公開を見るまで死ねない」と宣言した。生きていれば90才なかばである。桜の時期で、一次会のあとは雨の上がった御苑内の桜見物も楽しんだ。なかでも「出水(でみず)の枝垂れ」で有名な枝垂桜が、ちょうど盛りで(3/30)、実に優雅で見ごたえのある花の姿を見せてくれた。おみやげに錦(にしき)市場の三木鶏卵の出し巻きを買って帰る。ここの卵焼きはちょっと他では味わえない微妙な味付けと風味で是非お勧めである。バッファー付き送信関数の開発でまたつまずく(4/6/2014)電子工作に戻ろう。UARTは送受信ともUSIになったのだが、今ひとつ課題が残っている。送信関数が1バイトの送信が終わるまで元に戻ってこないことだ。このあいだは割り込み可能なので、同時処理も出来るのだが、デバッグやモニターなどでなるべく外乱を少なくしたい時には大きな障害になる。これは、送信関数にデータバッファーを取り入れれば解決する。ユーザーの1バイト送信関数は、このバッファーに書き込むだけで、実際の送信は、割り込みルーチンでUSIを使って行う。今後のためにも、バッファー付き送信関数は用意しておきたい。それにそんなに難しくない。これが予想以上に難航したのである。送ったデータがどうもオーバーラン(用意したバッファー以上にデータを書きこんでいる)しているのは、まあ良いとしても、途中から暴走する。同じルーチンで、最初は良くても、暫く時間を空けて送信すると、つまり、一度バッファーをすべて読み出して空にすると、次は、全くデータを拾わなくなる。ボーレートタイマーが止まらず暴走している。他の処理との干渉を疑うが、関係するようなところは何もない。何度もメモに、最初と2番目からの条件の差を列挙して、一つづつつぶしていくが、違いを見出すことができない。設定の順序を換えただけ。USIは難しい(4/7/2014)ところが、やることがなくなって、USI周りのコマンドの順序を何気なく換えていたところ、突然、正常に戻った。やったことは、4ビットカウンターのカウント値を設定するUSISR(USIステイタスレジスター)と、USIそのものの全体の構成を決めるレジスターUSICR(USI制御レジスター)の設定順を逆さまにしただけである。普通なら、まず構成を決めるUSICRを実行して、3線動作、クロック元、割り込み許可などを設定し、そのあと、各種のフラグをクリアし、4ビットカウンターの初期値を決めるUSISRを実行するのが筋だと思う。ところが最初は問題ないのだが、次からはこの順番だと暴走する。USICRの設定を一番最後にやる必要がある。ペンディングになっている割り込みのフラグをクリアしていないで、動作指定をいきなりやると前の条件で動き出すということなのかもしれない。何のことはない順番を換えただけで直った。釈然としない解決だが、少なくとも暴走は止まった。このUSISRは、頭4ビットが、各種の割り込みのリクエストをクリアするフラグで、下4ビットがカウンターになっているという、どうも変則的なレジスターなのだが、こんなところに落とし穴があるとは気がつかなかった。バッファーのハンドリングがうまく行っていないので完全とはいえないが、とりあえずこれでバッファー付きの送受信が出来るUARTライブラリが出来たようである。ここ1週間これにかかりきりだった。バッファーオーバーフローも何ともみっともない解決(4/8/2014)残っていたトラブル、バッファーオーバーフローだが、簡単に原因がわかるだろうと甘く見ていたが、これも一筋縄ではいかなかった。リングバッファーの終端と、バッファー満杯で待つ場所を一緒にしたせいなのだろうか、リングバッファーが始点に戻るところに、送信の割り込みがぶつかり、データポインターが乱されているような感じだ。ポインターをいじるコードを、割り込みを止めるcliとseiで、はさむが好転しない。時間遅れが出て、時々字が乱れる。何べんもロジックを確認するが間違っていない。万策が尽きて、やりたくはなかったのだが、試しにバッファーの満杯を待つ地点を最終端から前にずらしてみた。何と、これだけで、ぴったり直ってしまった。どれだけ長いメッセージを持ってきても問題なく出力する。