找回密码
 立即注册
查看: 163|回复: 4

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-02 08:27:01
已绑定手机

1

主题

1

回帖

9

积分

新手上路

积分
9
发表于 2025-6-2 08:45:29 | 显示全部楼层 |阅读模式
//多文件编程,这里是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[50] = {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[6*i]*256)+adc_samples_buff[7*i])*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[50];
extern bit DMAFinished;
extern unsigned int xdata Pin_EC[8];
#endif

回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-02 08:27:01
已绑定手机

1

主题

1

回帖

9

积分

新手上路

积分
9
发表于 2025-6-2 08:51:02 | 显示全部楼层
这个是全体工程,很神奇的是之前进去过ADC_DMA中断,但改了一下motor函数就进不去了

ADC_DMA有问题.zip

371.45 KB, 下载次数: 1

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:98
  • 最近打卡:2025-06-15 09:46:00

733

主题

1万

回帖

1万

积分

管理员

积分
16603
发表于 2025-6-2 11:02:57 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-06-04 17:48:34
已绑定手机

0

主题

1

回帖

6

积分

新手上路

积分
6
发表于 2025-6-4 17:48:34 | 显示全部楼层
interrupt 48,中断号不是最大支持到32吗,是不是得做个中断跳转。

点评

可以看下手册这个章节 [attachimg]102679[/attachimg]  详情 回复 发表于 2025-6-4 18:29
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:207
  • 最近打卡:2025-06-15 14:11:16
已绑定手机

67

主题

1906

回帖

4279

积分

荣誉版主

无情的代码机器

积分
4279
发表于 2025-6-4 18:29:30 | 显示全部楼层
jsry*** 发表于 2025-6-4 17:48
interrupt 48,中断号不是最大支持到32吗,是不是得做个中断跳转。


可以看下手册这个章节
截图202506041829191618.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-16 04:36 , Processed in 0.121316 second(s), 77 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表