zoukankan      html  css  js  c++  java
  • 单片机TM4C123学习(十):ADC采样模块

    1.头文件

    #include "tiva_adc.h"                // ADC

    2.引脚

    3.初始化

    // ADC初始化
    // 光敏电阻(PE0)为通道3,存在序列0中,硬件平均为8个点
    adc_init(TIVA_ADC1 , Channel_3, Sequence0, GPIOE, Pin0, 8);

      // 滑动变阻器为通道2
      adc_init(TIVA_ADC1 , Channel_2, Sequence1, GPIOE, Pin1, 8);

    //具体函数内容
    //channel:0-11
    //sequence:0-3
    void adc_init(uint32_t adc, uint32_t channel, uint32_t sequence, uint32_t GPIO, uint32_t PIN, int average_num) { //参数转换 uint32_t adc_base; uint32_t adc_gpio; //选择ADC0或ADC1 if(adc == TIVA_ADC0) adc_base = ADC0_BASE; else if(adc == TIVA_ADC1) adc_base = ADC1_BASE; //选择GPIO switch(GPIO) { case GPIOA:{adc_gpio = SYSCTL_PERIPH_GPIOA;break;} case GPIOB:{adc_gpio = SYSCTL_PERIPH_GPIOB;break;} case GPIOC:{adc_gpio = SYSCTL_PERIPH_GPIOC;break;} case GPIOD:{adc_gpio = SYSCTL_PERIPH_GPIOD;break;} case GPIOE:{adc_gpio = SYSCTL_PERIPH_GPIOE;break;} case GPIOF:{adc_gpio = SYSCTL_PERIPH_GPIOF;break;} } SysCtlPeripheralEnable(adc); // 开ADC0/ADC1 GPIOPinTypeADC(GPIO, PIN); // 选择管脚 // 开启ADC // adc:ADC0 或 ADC1 // sequence: 选择序列 // 最后一个参数:优先级 ADCSequenceConfigure(adc_base, sequence, ADC_TRIGGER_PROCESSOR, 0); ADCHardwareOversampleConfigure(adc_base, average_num); // 设置硬件8个数取一次均值 ADCSequenceStepConfigure(adc_base, sequence, 0, channel | ADC_CTL_IE | ADC_CTL_END); // 使能ADCx sequencex 中断 if(adc == TIVA_ADC0) ADCIntRegister(adc_base, sequence, ADC0Handler); else ADCIntRegister(adc_base, sequence, ADC1Handler); ADCIntEnable(adc_base, sequence); if(adc == TIVA_ADC0) // ADC0 { switch(sequence) { case 0:IntEnable(INT_ADC0SS0);break; case 1:IntEnable(INT_ADC0SS1);break; case 2:IntEnable(INT_ADC0SS2);break; case 3:IntEnable(INT_ADC0SS3);break; } } else // ADC1 { switch(sequence) { case 0:IntEnable(INT_ADC1SS0);break; case 1:IntEnable(INT_ADC1SS1);break; case 2:IntEnable(INT_ADC1SS2);break; case 3:IntEnable(INT_ADC1SS3);break; } } ADCSequenceEnable(adc_base, sequence); // 通道配置好之后进行只能 ADCIntClear(adc_base, sequence); // 清除中断标志 }

    4.获取采样值

    // 获取采样值,0-4095,对应0-3.3V
        adc_val = adc_get_value(TIVA_ADC1, Sequence0)*3.3/4096;
    
    // 具体函数内容
    
    uint16_t adc_get_value(uint32_t adc, uint8_t sequence)
    {
        if(adc == TIVA_ADC0)    // ADC0
        {
            ADCProcessorTrigger(ADC0_BASE, sequence);
            switch(sequence)
            {
                case Sequence0:    return ADC0_sequence0_value;
                case Sequence1:    return ADC0_sequence1_value;
                case Sequence2:    return ADC0_sequence2_value;
                case Sequence3:    return ADC0_sequence3_value;
                default:                 return 0;
            }
        }
        else                                    // ADC1
        {
            ADCProcessorTrigger(ADC1_BASE, sequence);
            switch(sequence)
            {
                case Sequence0:    return ADC1_sequence0_value;
                case Sequence1:    return ADC1_sequence1_value;
                case Sequence2:    return ADC1_sequence2_value;
                case Sequence3:    return ADC1_sequence3_value;
                default:                 return 0;
            }
        }
    }
  • 相关阅读:
    IOS开发mapkit学习笔记
    IOS的两种框架设计思想
    关于创建及使用多线程的几种方法
    Linux基础入门 之挑战:历史命令
    20172018网络攻防第三周
    20172018网络攻防第二周
    Linux基础入门实验楼挑战之数据提取
    iconfont字体图标的使用方法超简单!
    CSS中的绝对定位(absolute)误区
    获取对象属性的点方法和中括号法的区别
  • 原文地址:https://www.cnblogs.com/pursuit1996/p/5070525.html
Copyright © 2011-2022 走看看