SSブログ

イマイチでも(なんとか)使う [PICkit3]

(2012.01.27)
先日、”Stimulusが使えるようになってシミュレータを利用するメリットを感じた”と書いたのですが、やっぱり”イマイチ”な部分が出てきて悩まされています。

実機では入る割り込み(TMR2、IOC、NCO)がMPLAB SIMでは入りません(要求フラグが立っても割り込みハンドラが呼び出されない)。”StimulusでPIRbits.TMR2IFをセットすると割り込みハンドラが呼び出される”と思ったのも勘違いでした。

シミュレーション開始から100μSインターバルでPIRbits.TMR2IFをセットするようにStimulusを設定したところ、TMR2の割り込みハンドラが呼び出されました。

『しめしめ、これなら行ける!』と思ったのですが・・・

色々試していて、StimulusのPIRbits.TMR2IF設定とTMR2割り込みハンドラの呼び出しが一致しないことに気付きました。

結局、割り込みハンドラを呼び出していたのは、インターバル(=1ms)が正しくシミュレートできていないTMR0割り込みでした。(シミュレーション開始から600μS以内にTMR0割り込みが3回入っていた)

Stimulusについて判ったことは以下の通りです。

(1)リセットするとStimulusのシミュレーション時刻は0クリアされる。

(2)”Run==>Break”を繰り返す間も、シミュレーション時刻は経過し、Stimulusの設定に応じた割り込み要求信号等が設定される。

(3)以下のように設定すると、(ほぼ)所定の時刻にTMR2割り込みハンドラを呼び出すことが出来る。
 時刻  TMR2IF TMR0 TMR2
150μS     1   FF      00
250μS     1   FF      00
350μS     1   FF      00

ただし、TMR0割り込みハンドラも呼び出される。

(4)IOCAFを設定するとIOCIFが設定される(2012.01.31 誤りでした)入力信号を変えてもIOCIFは設定されない。以下のように設定すると、(ほぼ)所定の時刻にIOC割り込みハンドラを呼び出すことが出来る。
  時刻   RA2  IOCAF2  IOCIF  TMR0
     0μS    1                    FF  
1100μS    0        1         1       FF
1150μS    1         1          0       <== IOCIE = 0なのでIOCIFも0のまま
1250μS    0         1          1       FF
1350μS    1         1          1       FF

ただし、TMR0割り込みハンドラも呼び出される。

(5)StimulusでADIFを設定すると(ADON=0でも)AD割り込みハンドラを呼び出すことができる。AD割り込みハンドラ内にブレー・ポイントを設定しておくと、(ほぼ)所定の時刻にシミュレーションを停止できる。(その後、シミュレーションを再開することもできる)

これで、なんとかシリアル通信の制御ロジックをデバッグするつもりです。

にほんブログ村 IT技術ブログへ
に

ほんブログ村 ネットブログ コミュニティサイトへ
にほんブログ村 IT技術ブログ オープンソースへ


nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:日記・雑感

nice! 0

コメント 0

コメントを書く

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

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

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