SSブログ

MC9RS08KA8シミュレータでMTIMモジュールの誤った実装を見つけた [CodeWarrior]このエントリーを含むはてなブックマーク#

このレポートは、MC9RS08KA8 の Full Chip Simulation で見つけた MTIM モジュールの誤った実装に関するものです。

法とモジュロ・レジスタの関係

MTIM モジュールは、周期的にイベントや割り込みを発生させる簡単なタイマです。 MTIM モジュロ・レジスタ (MTIMMOD) と名づけられた8ビットのレジスタがあり、イベントの発生周期を決めます。 MTIM モジュールは、8ビットのカウンタ (MTIMCNT) の値と MTIMMOD の値を比較し、 MTIMCNT の値が MTIMMOD の値が一致したときにプリスケーラからのクロックが来たら、オーバーフロー・イベントを発生します。 このため、イベントの発生周期は、 (MTIMMOD + 1) にプリスケーラ・クロックの周期を掛けたものになります。

シミュレーションでイベント発生周期を確認した

パラメータで指定した100µ秒単位の待ち時間をつくる関数を作成しました。

void wait_100us(byte n) {
  MTIM2SC  = 0x30;      // Stop & Reset MTIM
  MTIM2CLK = 0x01;      // Prescale BUSCLK*2
  MTIM2MOD = 249;       // 100usec
  MTIM2SC  = 0x00;      // Start MTIM
  while (n-- > 0) {
    while (!MTIM2SC_TOF) ;  // Wait for the flag
    MTIM2SC_TOF = 0;    // Clear the flag
  }
}

BUSCLK が 5MHz に調節されていれば、 MTIM イベントは、 100µ秒ごとに発生します。 マイコンにプログラムを書き込む前にシミュレーションで MTIM イベント発生周期を確認しました。 "MTIM2SC_TOF = 0;" にブレーク・ポイントをしかけると、以下のサイクルでシミュレーションがとまりました。

CPU CyclesDifference
745-
1243498
1741498
2239498
2737498
3235498
3733498

クロック数の差分は、500になることが期待されたのですが、実際には、498になってしまいました。 変ですね。

MTIMCNT が、 (MTIMMOD - 1) の時に切れる

プリスケーラ・クロックの周期を長くすることで、 MTIMCNT カウンタが (MTIMMOD - 1) から 0 に戻っている事を確認しました。 これは、 MC9RS08KA8 データシートにある MITM モジュールの "Functional Description" に反する誤った実装です。

MC9RS08KA8には、二つの MTIM モジュール MTIM1 と MTIM2 があります。 どちらの MTIM モジュールも誤った実装をされていることを確認しました。

2009-03-25 追記

Service Request からの報告によると、この問題は追跡番号 MTWX34191 としてバグとして認定されたとのことです。

参考文献

HCS08 Unleashed: Designer's Guide to the HCS08 Microcontrollers

HCS08 Unleashed: Designer's Guide to the HCS08 Microcontrollers

  • 作者: Fabio Pereira
  • 出版社/メーカー: Booksurge Llc
  • 発売日: 2007/11/13
  • メディア: ペーパーバック

nice!(0)  コメント(0)  トラックバック(0)  このエントリーを含むはてなブックマーク#

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

トラックバックの受付は締め切りました

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。