首页 > 其他分享 >ADC中断切换通道

ADC中断切换通道

时间:2024-09-04 16:04:43浏览次数:3  
标签:adcindex 中断 adcBuff ADC GPIO adcchannel channel 切换

CH592ADC中断函数切换通道代码参考:

#include "CH59x_common.h"

#define adctest 1
volatile uint8_t adclen;
volatile uint8_t DMA_end = 0;
uint16_t adcBuff[40];

uint8_t adcindex = 0;
uint8_t adcchannel = 0;
enum channel{
      channel_0,
      channel_1,
      channel_2,
      channel_3,
};

void DebugInit(void){
    GPIOB_SetBits(bTXD2);
    GPIOB_ModeCfg(bRXD2, GPIO_ModeIN_PU);
    GPIOB_ModeCfg(bTXD2, GPIO_ModeOut_PP_5mA);
    UART2_DefInit();
}

int main(){
    uint8_t i;
    signed short RoughCalib_Value = 0; // ADC粗调偏差值
    SetSysClock(CLK_SOURCE_PLL_60MHz);

    /* 配置串口调试 */
    DebugInit();
    UART2_BaudRateCfg(1500000);
    PRINT("Start @ChipID=%02X\n", R8_CHIP_ID);

    /* 单通道采样:中断方式,选择adc通道1做采样,对应 PA5引脚, 不带数据校准功能 */
    PRINT("\n6.Single channel sampling in interrupt mode...\n");
    GPIOA_ModeCfg(GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_12 | GPIO_Pin_13, GPIO_ModeIN_Floating);
    ADC_ExtSingleChSampInit(SampleFreq_3_2, ADC_PGA_0);
    ADC_ChannelCfg(adcchannel);
    ADC_ClearITFlag();
    PFIC_EnableIRQ(ADC_IRQn);
    ADC_StartUp();

    while(1){
        mDelaymS(100);
        printf("%d  %d  %d  %d\n",adcBuff[0],adcBuff[1],adcBuff[2],adcBuff[3] );

        memset(adcBuff, 0, 4);
        ADC_ClearITFlag();
        ADC_ChannelCfg(adcchannel);
        PFIC_EnableIRQ(ADC_IRQn);
        ADC_StartUp();
    }
}

__INTERRUPT
__HIGH_CODE
void ADC_IRQHandler(void) //adc中断服务程序
{
    if(ADC_GetITStatus())
    {
        ADC_ClearITFlag();

        switch(adcchannel)
        {
            case channel_0:
                adcBuff[adcindex] = ADC_ReadConverValue();
                adcindex++;
                adcchannel = channel_1;
                ADC_ChannelCfg(adcchannel); //先选择通道,再开启新一轮采样
                ADC_StartUp();// 作用清除中断标志并开启新一轮采样
            break;

            case channel_1:
                adcBuff[adcindex] = ADC_ReadConverValue();
                adcindex++;
                adcchannel = channel_2;
                ADC_ChannelCfg(adcchannel);
                ADC_StartUp();
            break;

            case channel_2:
                adcBuff[adcindex] = ADC_ReadConverValue();
                adcindex++;
                adcchannel = channel_3;
                ADC_ChannelCfg(adcchannel);
                ADC_StartUp();
            break;

            case channel_3:
                adcBuff[adcindex] = ADC_ReadConverValue();
                adcindex++;
                adcindex = 0;
                adcchannel = channel_0;
                PFIC_DisableIRQ(ADC_IRQn);
            break;

            default:
                break;
        }
    }
}

 

标签:adcindex,中断,adcBuff,ADC,GPIO,adcchannel,channel,切换
From: https://www.cnblogs.com/gscw/p/18396714

相关文章

  • BroadcastReceiver 广播-Android四大组件 一文精讲
    目录1.广播用途与机制1.1什么时候用broadcast?1.2原理图解2.注册广播2.1静态注册2.2动态注册2.3二者区别与联系同:异:3.接受广播3.1接收系统广播3.2接收自定义附带值广播4.发送自定义广播4.1发送无序广播4.2发送有序广播4.3发送应用程序内部广播1.广播用途与......
  • 苹果系统(MacOS)资源管理器和终端的来回切换
    前言    苹果系统(MacOS)从某种程度上和Ubuntu等一众Linux系统有很多的相似的地方,很多时候非常依赖于命令行的操作,所以终端和资源管理器的配合使用就非常的关键。本博客整理出MacOS下资源管理器和终端的相互切换的方法,供大家参考。1、从控制终端打开资源管理器(Finder)......
  • CM3学习笔记(X)中断输入及悬起行为
    ##中断输入及悬起行为要理解中断的输入和悬起行为,我们首先要理解这几个概念。>中断的状态可以参考FreeRTOS中的任务的状态(仅对比参考),请结合下面的内容配合CM3官方手册7.4的图进行理解。+中断请求:可以理解为我们所说的中断触发标志位+中断悬起状态:这是一个状态位。检测到中......
  • 11.吐血整理sed入门到精通,sed语法,脚本命令,打印,替换,删除,插入,行替换,字符替换,保
    文章目录前言sed介绍1.sed介绍2.sed语法介绍3.sed脚本命令1.打印2.s替换3.删除脚本命令d3.插入脚本命令a/i4.行替换脚本命令c4.字符替换脚本y5.保存内容脚本w6.插入其他文本r6.中断退出脚本命令q脚本命令当中的地址[address]正则表达式sed[选项]1.sed-i选项2.sed-e......
  • 集成电路学习:什么是IRQ中断请求
    一、IRQ:中断请求      IRQ是中断请求(InterruptRequest)的缩写,在计算机系统中,它代表了一种机制,允许外部设备或程序通过发送信号来打断CPU的正常执行流程,从而引起CPU执行特定的中断服务程序(InterruptServiceRoutine,ISR)。二、IRQ中断请求的基本概念1、中断:   ......
  • shadcn/ui Combobox command 组合筛选下拉
    <Popoveropen={open}onOpenChange={setOpen}><PopoverTriggerasChild><Buttonrole="combobox"aria-expanded={open}className="w-fulljustify-betweenh-11bg-back......
  • Winform点击按钮Panle切换页面的实现
    一、项目结构二、主界面Main.csPanelName:panel1 三、代码实现namespace测试窗口切换{publicpartialclassMain:Form{//先定义对应的私有字段privateCmmPage_cmmPage;privateTwoPage_twoPage;publicMain()......
  • 共享LLC来减少ipi中断
    linuxkernel唤醒进程的步骤:selecttaskrq,enqueue,activetask。对于enqueue调用链是:try_to_wake_up->ttwu_queue->ttwu_queue_wakeliststaticboolttwu_queue_wakelist(structtask_struct*p,intcpu,intwake_flags){if(sched_feat(TTWU_QUEUE)&&ttwu_......
  • 家庭能源网关开发历程(三)JSY-MK-163串口中断发送接收
     前言        大家好,我是菜菜,在上一期我们主要介绍了关于JSY-MK-163串口通讯配置流程。由于上期没有打印结果,我怕有一些小伙伴还是不懂,本期我们就来实现项目主控MCU华大HC32F005的UART中断发送和接收数据的结果打印。首先,我们先看看用到UART的那些功能函数。UART功......
  • 3.3.2 IPIPE对Linux中断使能与屏蔽的改造
    点击查看系列文章=》 InterruptPipeline系列文章大纲-CSDN博客        3.3第一行之hard_local_irq_disable()                 3.3.1 Linux中断的使能与屏蔽                        3.3.1.1 中断使能与屏蔽的三重......