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 回答