打印
[技术问答]

adc监测结果范例程序

[复制链接]
771|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
shen_hao|  楼主 | 2017-10-27 16:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     EADC_Open(EADC, EADC_CTL_DIFFEN_SINGLE_END);  //设置为单端,不就采样一次结果吗??????
    EADC_SetInternalSampleTime(EADC, 6);
    EADC_ConfigSampleModule(EADC, 0, EADC_ADINT0_TRIGGER, 2);// 另外,明明是软件触发,不能设置软件触发源,必须设置为ADINT0
    EADC_ENABLE_CMP0(EADC, 0, EADC_CMP_CMPCOND_LESS_THAN, 0x800, 0x5);//当大于或者等于0x800才能算一次
    EADC_ENABLE_CMP1(EADC, 0, EADC_CMP_CMPCOND_GREATER_OR_EQUAL, 0x800, 0x5);
    EADC_ENABLE_SAMPLE_MODULE_INT(EADC, 0, 0x1);
    EADC_CLR_INT_FLAG(EADC, (0x1 << 3)); //开启ADINT3也不见在handler中清楚中断
    EADC_ENABLE_INT(EADC, (0x1 << 3));
    NVIC_EnableIRQ(ADC03_IRQn);
//开启两个cmp中断
    EADC_CLR_INT_FLAG(EADC, (0x1 << 4));
    EADC_ENABLE_CMP_INT(EADC, 0);
    EADC_CLR_INT_FLAG(EADC, (0x1 << 5));
    /* Enable ADC comparator 1 interrupt */
    EADC_ENABLE_CMP_INT(EADC, 1);
    g_u32AdcCmp0IntFlag = 0;
    g_u32AdcCmp1IntFlag = 0;
    EADC_START_CONV(EADC, 0x1); //开始
    while((g_u32AdcCmp0IntFlag == 0) && (g_u32AdcCmp1IntFlag == 0));

//我的问题:既然要大于0x800五次,那至少不得采样5次,我不理解????开启了ADINT3也没有清零???我上一个贴子是在询问差分,主要是结果理解不了????这是官方程序肯定没错




沙发
玛尼玛尼哄| | 2017-10-27 19:25 | 只看该作者
if(g_u32AdcCmp0IntFlag == 1)
    {
        printf("Comparator 0 interrupt occurs.\nThe conversion result of channel 2 is less than 0x800\n");
    }
    else
    {
        printf("Comparator 1 interrupt occurs.\nThe conversion result of channel 2 is greater than or equal to 0x800\n");
    }
主要是这个,那个就是那个函数,意思是发生了5次后就置位那个标志位。

使用特权

评论回复
板凳
wanduzi| | 2017-10-28 20:00 | 只看该作者
监测程序嘛,为了防止误判,因此采样连续超过五次再置位标志位。这个跟硬件无关,是一种软件行为。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

79

主题

230

帖子

2

粉丝