AVR-USB(8)

.26 2010 AVR-USB comment(0) trackback(0)
SYNCのチェックをきちんとやるようにしたら安定してパケットが受信できるようになりました。めでたしめでたし。
せっかく最初のパケットが見られるようになったのですが、最初はSETUPパケットで、その直後にDATA0パケットが続きます。
そのDATA0パケットが重要なのでそれを見たいのですが、どうもそっちはうまく受信できないようです。
入ってきたデータのPIDを見ると明らかにDATA0になっていないというか上位4bitと下位4bitが相補的になっていないのです。

SYNCがずれているっぽいので割り込みがかかるタイミングに問題がありそうです。
いろいろ調べてみるとAVRは割り込み中に他の割り込み要因が成立すると、処理中の割り込みが終わった後すぐに次の割り込みに飛ぶようです。
Pendingがキーワードです。

そんなわけで処理がだいたい終わってSE0状態になったら(もう立ち上がりは来ないはずなので)割り込み要求レジスタをクリアします。

結果…
ときどきそれっぽいものが受信できました。ただ、かなりの確率で最初の数byteを受信できていない(次のパケットが来るまでに処理が終わっていない)のでもう少し工夫しないといけないようです。
ちなみにEOPのSE0状態に入ってから次のパケットのSYNCfieldまでは最低でもSE0:2bit + J:2bitの計4bit time = 32clkあるはずです。

あー試験勉強w
関連記事

  • comment
  • secret
  • 管理者にだけ表示を許可する

trackbackURL:http://yuranos.blog11.fc2.com/tb.php/38-ba27dda8