每当我想要设置中断标志

时间:2013-01-18 22:18:01

标签: timer flags avr interruption

我在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 个答案:

答案 0 :(得分:1)

TIFR寄存器的特殊之处在于,将1写入位会将其设置为0。

编辑以回复评论:

据我所知,你提供的信息很少,你不应该对寄存器做任何事情。也就是说,不要尝试使用中断机制来运行处理程序。在您想要触发中断的代码中,只需自己调用处理程序即可。您可能还想同时调整启用位或清除标志 - 我不知道您要做什么。

如果您希望处理程序像响应中断一样运行,那么您将首先要禁用中断。通常的方法是

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

     my_interrupt_handler();

     SREG = sreg;
}