ATTiny1606 定时器 TCA0 中断未触发

问题描述 投票:0回答:1

我看不到错误或者编译器中有错误;-)。我正在尝试在

TCA0
上使用
ATTiny1606
来生成 PWM 来调暗一些 LED。问题是中断永远不会被调用。系统在内部振荡器 @ 20MHz 下运行并且配置正确。

TCA0配置

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)
    {
        // ...
    }
}

中断例程

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;
}

中断永远不会被调用。即使我为了测试目的而在里面添加了延迟(我知道这永远不应该这样做),程序仍然在运行。所以也许我忘记在控制寄存器中设置一些位或者我错过了什么?

c interrupt avr
1个回答
0
投票

很抱歉打扰您,由于配置错误,在编译时未正确设置中断。问题不在于预处理器、编译器或任何其他东西。问题出在屏幕前的用户。经过大量时间调试代码和程序集后,我发现我的配置中有一个错误:

当我创建项目时,我选择了错误的微控制器(

ATTiny406
而不是
ATTiny1606
)。真是一团糟!现在一切工作正常并且中断被正确调用。

我不会删除这个问题。也许它会帮助有同样错误的人!

非常感谢您的帮助@hcheung

© www.soinside.com 2019 - 2024. All rights reserved.