相反,我看不到错误或编译器中有bug;—).我试图在ATTiny1606
上使用TCA0
来产生一个PWM来调暗一些LED.问题是中断永远不会被调用.系统在20MHz的内部振荡器上运行,配置正确.
TCA0 configuration个
int main(void)
{
// ...
TCA0.SINGLE.PER = 0xFFFF;
TCA0.SINGLE.CMP0 = 0x1FFF;
TCA0.SINGLE.INTCTRL = TCA_SINGLE_OVF_bm | TCA_SINGLE_CMP0_bm;
TCA0.SINGLE.CTRLB = TCA_SINGLE_WGMODE_SINGLESLOPE_gc;
TCA0.SINGLE.CTRLA = TCA_SINGLE_CLKSEL_DIV2_gc | TCA_SINGLE_ENABLE_bm;
sei();
// ...
while (1)
{
// ...
}
}
Interrupt routines个
ISR(TCA0_OVF_vect)
{
PORTA.OUTCLR = PIN6_bm;
TCA0.SINGLE.INTFLAGS = TCA_SINGLE_OVF_bm;
}
ISR(TCA0_CMP0_vect)
{
PORTA.OUTSET = PIN6_bm;
TCA0.SINGLE.INTFLAGS = TCA_SINGLE_CMP0_bm;
}
中断永远不会被调用.即使我在里面放了一个延迟(我知道这永远不应该这样做)为了测试的目的,程序仍然在运行.所以也许我忘了在控制寄存器中设置一些位,或者我错过了什么?