(日々の記録)デジタルオシロを買った。受信もUSIで動かそうとしてはまる。簡単には動かない(4/2/2014)AVRマイコンTinyシリーズ特有のUSI(汎用シリアルインターフェース)を使ったUART関数の開発に難儀している。このほど送信部が完成した。これで同時処理の中でCPUに負担をかけないUARTの送信が可能になった。これまでに開発したソフトUARTの受信部はピンチェンジ割り込みなので非同期にデータを読めるがGPIOでビットを拾っているので、その間は割り込みも受けない。受信は、送信と違って、データを読み終わって始めて次の処理に移るものなので、送信ほど同時処理にこだわる必要はない。送信部だけUSIというのもバランスが悪い。乗りかかった舟でもある。受信もUSIを使って作り直すことにした。この前に懲りて、受信は最初からAtmelのソースコード(AV307)を見せてもらった。いやあ相変わらずえらい複雑なことをやっているなあ。そもそも変数名が長すぎて、英語を母国語にしない人間にとっては判じ物を見るようだ。ふーむ、ピンチェンジ割り込みは汎用のI/Oピンのときだけ有効で、USIに入った途端、止まるようだ。これはかえって都合が良い。ピンチェンジ割り込みの受信中に更なる割り込みを止めておく必要がない。USIによる受信は、送信と違って8ビットのシフトレジスターを一巡させるだけでデータが読めるはずだ。ボーレートタイマーの割り込みが送信と共用になるのでその仕分けをする必要がある。Atmelのソースと同様、受信フラグを新設する。たいした手間も取らずにUSIを使った受信部のコード開発が終わった。