红颜如霜 发表于 2025-6-2 08:45:29

求助!! ADC_DMA中断进不去,标志位始终没改变,ADC_DMA是在ADC之后初始化的

//多文件编程,这里是ADC_DMA.c文件
#include "STC8A8K64D4.H"
#include "ADC.h"
#include <intrins.h>
#include "oled.h"
#include "delay.h"
#include "adc_dma.h"
unsigned char xdata adc_samples_buff = {0};

void DMA_ADC_Isr() interrupt 48
{
      if(DMA_ADC_STA & 0x01)
      {
                DMA_ADC_STA = 0x00;//清零中断标志位
                DMA_ADC_RXAH = ((unsigned char)&adc_samples_buff); //ADC转换数据存储地址,即ADC DMA的目的地址
                DMA_ADC_RXAL = ((unsigned char)&adc_samples_buff);
                adc_dma_complete = 1;//转换完成
                DMA_ADC_CR = 0xc0;      //启动ADC_DMA转换
      }
         
}

void adc_dma_init()
{
      
    DMA_ADC_STA &= 0x00;                  //清零中断标志位
    DMA_ADC_CFG = 0x80;       // 开启DMA完成中断 ADC_DMA中断优先级最高
      DMA_ADC_RXAH = ((unsigned char)&adc_samples_buff); //ADC转换数据存储地址,即ADC DMA的目的地址
    DMA_ADC_RXAL = ((unsigned char)&adc_samples_buff);
      DMAFinished = 1;                  //初始化完成标志位
    DMA_ADC_CFG2 = 0x00;      // 单次转换
    DMA_ADC_CHSW0 = 0x00;   // 关闭高通道
    DMA_ADC_CHSW1 = 0xff;   // 开启低通道
    DMA_ADC_CR = 0xC0;                  //允许 ADC_DMA 功能 开始 ADC_DMA 操作
}

void adc_dma_voltage()
{
      float xdata voltage;//存放ADC采样值计算后的电压值
      unsigned char i;
      if(adc_dma_complete)
      {
                adc_dma_complete = 0;
                for (i=0;i<8;i++)
                {
                        voltage = ((adc_samples_buff*256)+adc_samples_buff)*15/4096;
                        (voltage>9) ? (Pin_EC = 1) : (Pin_EC = 0);
                        //OLED_ShowNum(10,7,7,1,8);
                        OledShowFloatWithoutPole2(i*16,7,voltage,2);
                }
               
      }   
}
//这里是ADC_DMA.h文件
#ifndef __ADC_DMA_H_
#define __ADC_DMA_H_

void adc_dma_init();
void adc_dma_voltage();
extern bit adc_dma_complete;
extern unsigned char xdata adc_samples_buff;
extern bit DMAFinished;
extern unsigned int xdata Pin_EC;
#endif

红颜如霜 发表于 2025-6-2 08:51:02

这个是全体工程,很神奇的是之前进去过ADC_DMA中断,但改了一下motor函数就进不去了{:cahan:}

神农鼎 发表于 2025-6-2 11:02:57



深圳国芯人工智能有限公司-实验箱



此处 BMM 就是指 DMA

jsryveti 发表于 2025-6-4 17:48:34

interrupt 48,中断号不是最大支持到32吗,是不是得做个中断跳转。

ercircle 发表于 2025-6-4 18:29:30

jsryveti 发表于 2025-6-4 17:48
interrupt 48,中断号不是最大支持到32吗,是不是得做个中断跳转。


可以看下手册这个章节

页: [1]
查看完整版本: 求助!! ADC_DMA中断进不去,标志位始终没改变,ADC_DMA是在ADC之后初始化的