我在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!
所以,在最后一行它应该是编程中断,但没有任何事情发生,我不知道为什么。任何的想法?提前谢谢。
答案 0 :(得分:1)
TIFR寄存器的特殊之处在于,将1写入位会将其设置为0。
编辑以回复评论:
据我所知,你提供的信息很少,你不应该对寄存器做任何事情。也就是说,不要尝试使用中断机制来运行处理程序。在您想要触发中断的代码中,只需自己调用处理程序即可。您可能还想同时调整启用位或清除标志 - 我不知道您要做什么。
如果您希望处理程序像响应中断一样运行,那么您将首先要禁用中断。通常的方法是
void function_to_trigger_handler()
{
uint8_t sreg = SREG;
cli();
my_interrupt_handler();
SREG = sreg;
}