2013-01-18 35 views
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! 

因此,在最後一行它應該是編程中斷,但沒有發生,我不知道爲什麼。任何想法?提前致謝。

回答

1

TIFR寄存器是特殊,寫1到一個位將其設置爲0。

編輯迴應評論:

你不應該儘量做與寄存器什麼,因爲我可以從您提供的少量信息中分辨出來。也就是說,不要試圖使用中斷機制來運行處理程序。在你想要觸發中斷的代碼中,你可以自己調用處理程序。您可能還想同時調整啓用位或清除標誌 - 我不知道您要做什麼。

如果您希望處理程序像運行中斷一樣運行,那麼您首先需要禁用中斷。通常這樣做的方法是

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

    my_interrupt_handler(); 

    SREG = sreg; 
} 
+0

謝謝,但我想我不明白。你可以再詳細一點嗎?我應該做什麼白衣這個登記冊? – caro

相關問題