PCでmsec時間測定(3) - 割り込み

blog20100626-msecTimerOpFlow

前回LinkAtmelのUSB-シリアルポート変換サンプルプログラムLink の動作を確認したので、これをベースに改造していくことに(だって一からUSBの送受信する部分書きたくないもん)。

現在考えている構成は図の通り。
  • 右のループはこの手のワンチップマイコンには高確率で搭載されているCPUクロックによる割り込みを利用。1k-10kHz位で割り込みをかけ、その度に内部のカウンタを+1。次に外部に接続されるボタンのOn/Offをチェック、変化があれば左ループに通知する。幸いにもシリコンリナックスのボードはUSB通信する必要があるからか、CPUクロックに水晶発振器を使用しているので精度は期待できそう。できればチャタリング処理もこのループでやりたい。
  • 右のループは主にPCとのやり取り。USB経由でPCからの命令を受信し設定変更。またボタンのOn/Offに変化があればそのときのカウンタ値をUSB側に送る。AT80USB162に負荷をかけたくないので、カウンタは右ループで増加するのみ。受信したPC側が前回のOn/Off変化のカウンタ値を記録しておいて、そのカウンタ値の差からOn/Off感覚を計算する。

前回は左側のループで必要なUSB経由でPCとのデータ送受信が確認できたので、今回は右側ループに必要となるUSB通信を維持したまま定期的な割り込み処理ができるかの確認。なのですが、これ、前回にソースコードを読んでいる途中でRXDでデータを受信したときに割り込み処理が使われいるのを見たので、できるだろうなとは分かっていたりします。

とりあえず、今後COMポート側の機能は不要だし変な割り込みかけられても困るので削除。Sim氏Link の記事を参考にしながら割り込み処理を追加。

blog20100626-AVRCDCandTimer_TerminalOutput

今回変更したのはcdc_task.cのみ。変更内容は
  • RXD-TXD接続なしにプログラム内でループバック。
  • 1秒に1回USB側にピリオドを送信
結果がTeratermの画面。1秒に1個ピリオドが表示されつつ、PCからの入力に対してオウム返しします。この1秒間隔内で、axion/sakura/ne/jpとキーを叩けば、このサイトのアドレスが画面に表示されることになるのですが、キータイプが遅くてなかなかsakuraが入力できませんでしたorz

[参考]AVR でタイマー割り込み (Sim's blog 2008/9/20)Link

[2010/7/2 追記] つづきLink

[2010/10/12 追記] この記事に貼りつけてあるcdc_task.cを使用したHEXファイルをアップロード。TXD-RXDの短絡不要でPCから打ち込んだ文字をそのまま返します。また1秒に1回PC側に'.'(ピリオド)を送信します。

— posted by mu at 10:51 pm   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0097 sec.
prev
2010.6
next
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30