相反,我看不到错误或编译器中有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;
}

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

推荐答案

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

Microchip Studio configuration

当我创建项目时,我 Select 了错误的微控制器(ATTiny406而不是ATTiny1606).真是一团糟!现在一切都工作正常,中断被正确调用.

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

谢谢你帮了我@hcheung

C++相关问答推荐

如何避免使用相对路径包含在c中

segfault在C中使用getline()函数

为什么这个C程序代码会产生以下结果?

#If指令中未定义宏?

struct 上的OpenMP缩减

使用C时,Windows CMD中的argc参数是否包含重定向命令?

在CLANG中调试预处理器宏

将 struct 传递给函数

S的这种管道实施有什么问题吗?

为什么我从CSV文件中进行排序和搜索的代码没有显示数据的所有结果?

为什么用非常数指针变量改变常量静态变量时会出现分段错误?

如何在GDB中查看MUSL的源代码

通过描述符查找文件路径时出现问题

指向不同类型的指针是否与公共初始序列规则匹配?

这段代码用于在C中以相反的顺序打印数组,但它不起作用

C标准关于外部常量的说明

C中的回文数字

如何逐位读取二进制文件?

当循环变量在溢出时未定义时,可以进行哪些优化?

char* 上的 free() 被 valgrind 识别为无效