2010年1月1日金曜日

B046 : uMP3 PLAYERへFreeRTOSをポーティングする

B046 : uMP3 PLAYERはAtmelのATmega328Pを使っている。
FreeRTOSにはATmega323への対応がある。

基本的にはカーネルティックタイマ周辺のレジスタ設定を変更するだけで使用できる。

  • TIMSKをTIMSK1に変更する。ATmega328PにはTIMSKというレジスタは存在しない。
  • portCOMPARE_MATCH_A_INTERRUPT_ENABLEのビット定義を修正する。_BV(OCIE1A)
  • 割り込みハンドラ名を修正する。TIMER1_COMPA_vect
portCOMPARE_MATCH_A_INTERRUPT_ENABLEは値でハードコーディングされていて気づくまでに無駄な時間を費やしてしまった。
基本に戻ってシミュレータでハードウェアタイマがきちんと動作しているのか確認すると、タイマオーバーフロー時の割り込み有効フラグが設定されていないことに気づく。
修正した結果が_BV(OCIE1A)というわけ。
ハードウェア依存箇所の値によるハードコーディングはできれば避けてほしいなぁと思う。

使用したFreeRTOSのバージョンは6.0.1。
バージョンが上がっても幅広いデバイスをきちんとサポートし続けている。
今のところすごく信用のできるオープンソースプロジェクトだ。

0 件のコメント:

コメントを投稿