0

AVR AT90S2313 の割り込みフラグの設定に問題があります。通常、割り込みはハードウェア カウンターによるセットアップです。必要なときに(特定の瞬間に)プログラミングの方法でこのフラグを設定したい。私はすべてのコードを C で書いています:

SEI();                  //enable globall interupt
TIMSK | = (1<<TOIE1);    //enable interrupt from timer 1
TIFR | = (1<<TOV1);      //enable interruption (setting bit) - IT DOESN"T WORKS!

したがって、最後の行ではプログラミングが中断されているはずですが、何も起こらず、理由がわかりません。何か案が?前もって感謝します。

4

1 に答える 1

1

TIFRレジスタは、ビットに1を書き込むと0に設定されるという点で特別です。

コメントに応じて編集します。

あなたが提供したわずかな情報から私が知る限り、あなたはレジスターで何もしてはいけません。つまり、割り込みメカニズムを使用してハンドラーを実行しようとしないでください。コード内で割り込みをトリガーするポイントで、ハンドラーを自分で呼び出すだけです。また、イネーブルビットの調整またはフラグのクリアを同時に行うこともできます。何をしようとしているのかわかりません。

ハンドラーを割り込みに応答して動作しているかのように実行する場合は、最初に割り込みを無効にする必要があります。これを行う通常の方法は

void function_to_trigger_handler()
{
     uint8_t sreg = SREG;
     cli();

     my_interrupt_handler();

     SREG = sreg;
}
于 2013-01-20T06:00:18.630 に答える