You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Philips 80C552微控制器ADC中断服务程序创建:找不到中断向量

解决ADC转换完成中断(ADCI标志)找不到中断向量的问题

1. 先确认中断向量的真实命名/编号

很多MCU的ADC转换完成中断不会直接用"ADCI"作为向量名,常见情况包括:

  • 向量名采用缩写或合并命名,比如ADC1_IRQHandler、ADC1_2_IRQHandler(对应多ADC共享中断)
  • 部分芯片的ADCI属于通用ADC中断的子触发源,没有独立向量

解决方法:

  • 直接查**芯片原厂参考手册(RM)**的「中断向量表」章节,里面会明确列出所有中断的编号、向量名称以及对应的触发事件,这是最权威的依据
  • 检查芯片的启动文件(如startup_xxx.s),IVT里的向量定义会直接关联到ISR函数名,比如:
    DCD     ADC1_IRQHandler            ; ADC1
    

2. 在通用ADC中断服务程序中处理ADCI事件

如果确实没有独立的ADCI向量,说明该中断复用在通用ADC中断下,只需在通用ISR里通过标志位判断触发源:

void ADC1_IRQHandler(void)
{
    // 检查ADCI转换完成标志(寄存器位需参考手册确认)
    if ((ADC1->SR & ADC_SR_ADCI) != 0)
    {
        // 此处编写你的转换完成处理逻辑
        // 读取转换结果、更新数据缓冲区等

        // 必须清除ADCI标志,避免重复触发中断
        ADC1->SR &= ~ADC_SR_ADCI;
    }

    // 可在此添加其他ADC中断的处理(如溢出、DMA完成等)
    if ((ADC1->SR & ADC_SR_OVR) != 0)
    {
        // 处理溢出中断
        ADC1->SR &= ~ADC_SR_OVR;
    }
}

3. 确保中断配置正确

  • 使能ADCI对应的中断允许位:比如在ADC->CR1寄存器中设置EOCIE位(不同芯片命名可能不同,以手册为准)
  • 配置NVIC使能对应ADC中断通道:
    // 使能ADC1中断
    NVIC_EnableIRQ(ADC1_IRQn);
    // 设置中断优先级(根据需求调整)
    NVIC_SetPriority(ADC1_IRQn, 2);
    

4. 排查芯片型号限制

部分低端MCU可能不支持独立的ADC转换完成中断,此时可以:

  • 改用轮询方式检测ADCI标志
  • 配置DMA传输完成中断来间接实现转换完成的触发

内容的提问来源于stack exchange,提问作者N.I.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 02:57:12