一、代码分享:

1、ADC头文件

#ifndef ADC_H_
#define ADC_H_ #include "common.h"
typedef enum
{
// ---------------------------------ADC0-------------------------
ADC0_DP0 = 0, // PTE20
ADC0_SE0 = 0, ADC0_DP1 = 1, // PTE16
ADC0_SE1 = 1, ADC0_DP2 = 2, // PTE18
ADC0_SE2 = 2, ADC0_DP3 = 3, // PTE22
ADC0_SE3 = 3, ADC0_DM0 = 4, // PTE21
ADC0_SE4a= 4, ADC0_DM1 = 5, // PTE17
ADC0_SE5a= 5, ADC0_DM2 = 6, // PTE19
ADC0_SE6a= 6, ADC0_DM3 = 7, // PTE23
ADC0_SE7a= 7, ADC0_SE4b= 4, // PTE29 不支持软件ADC,传递进软件触发ADC,会当作 a通道处理 ADC0_SE5b= 5, // PTD1 不支持软件ADC,传递进软件触发ADC,会当作 a通道处理 ADC0_SE6b= 6, // PTD5 不支持软件ADC,传递进软件触发ADC,会当作 a通道处理 ADC0_SE7b= 7, // PTD6 不支持软件ADC,传递进软件触发ADC,会当作 a通道处理 ADC0_SE8, // PTB0 ADC0_SE9, // PTB1 ADC0_RES0, // 保留 ADC0_SE11, // PTC2 ADC0_SE12, // PTB2 ADC0_SE13, // PTB3 ADC0_SE14, // PTC0 ADC0_SE15, // PTC1 ADC0_RES1, // 保留 ADC0_RES2, // 保留 ADC0_RES3, // 保留 ADC0_RES4, // 保留 ADC0_RES5, // 保留 ADC0_RES6, // 保留 ADC0_RES7, // 保留 ADC0_SE23, // PTE30 DAC0_OUT = ADC0_SE23, // PTE30 DAC0输出 ,传入 ADC函数会当作 ADC0_SE23 处理 ADC0_RES8, // 保留 ADC0_RES9, // 保留 Temp0_Sensor, // Temperature Sensor,内部温度测量,可用ADC函数
Bandgap0, // 温度补偿结构带隙基准源 不支持ADC
ADC0_RES10, // 保留
VREFH0, // 参考高电压,可用ADC函数 ,结果恒为 2^n-1
VREFL0, // 参考低电压,可用ADC函数 ,结果恒为 0
Module0_Dis, // 不支持 ADC } ADCn_Ch_e; typedef enum //ADC模块
{
ADC0,
ADC1
} ADCn_e; //精度位数
typedef enum ADC_nbit
{
ADC_8bit = 0x00,
ADC_10bit = 0x02,
ADC_12bit = 0x01,
ADC_16bit = 0x03
} ADC_nbit; enum HardwareAverage
{
sample4 = 0,
sample8 = 1,
sample16 = 2,
sample32 = 3,
}; //外部函数接口声明 extern void adc_init (ADCn_Ch_e); //ADC初始化
extern uint16_t adc_once (ADCn_Ch_e, ADC_nbit); //采集一次一路模拟量的AD值
extern uint16_t ad_ave(ADCn_Ch_e adcn_ch, ADC_nbit bit, uint8_t N); //均值滤波 extern void adc_stop (ADCn_e); //停止ADC转换 #endif

2、ADC主文件

#include "adc.h"

ADC_MemMapPtr ADCN[1] = {ADC0_BASE_PTR}; //定义一个指针数组保存 ADCN 的地址
void adc_start(ADCn_Ch_e adcn_ch, ADC_nbit bit) ; /*!
* @brief ADC初始化
* @param ADCn_Ch_e ADC通道
* @since v5.0
* @note 此初始化仅支持软件触发,不是每个通道都支持ADC 软件触发,
具体说明见 ADCn_Ch_e 的注释说明
* Sample usage: adc_init (ADC0_SE10 ); //初始化 ADC0_SE10 ,使用 PTA7 管脚
*/
void adc_init(ADCn_Ch_e adcn_ch)
{ uint8_t adcn = adcn_ch >> 5 ;
//uint8_t ch = adcn_ch & 0x1F;
//ADC_MemMapPtr adc_ptr = ADCN[adcn]; switch(adcn)
{
case ADC0: /* ADC0 */
SIM_SCGC6 |= (SIM_SCGC6_ADC0_MASK ); //开启ADC0时钟
SIM_SOPT7 &= ~(SIM_SOPT7_ADC0ALTTRGEN_MASK | SIM_SOPT7_ADC0PRETRGSEL_MASK);
SIM_SOPT7 |= SIM_SOPT7_ADC0TRGSEL(0);
break; default:
ASSERT(0);
} switch(adcn_ch)
{ case ADC0_SE0:
port_init(PTE20, ALT0);
break;
case ADC0_SE1:
port_init(PTE16, ALT0);
break;
case ADC0_SE2:
port_init(PTE18, ALT0);
break;
case ADC0_SE3:
port_init(PTE22, ALT0);
break;
case ADC0_SE4a:
port_init(PTE21, ALT0);
break;
case ADC0_SE5a:
port_init(PTE17, ALT0);
break;
case ADC0_SE6a:
port_init(PTE19, ALT0);
break;
case ADC0_SE7a:
port_init(PTE23, ALT0);
break;
case ADC0_SE8:
port_init(PTB0, ALT0);
break;
case ADC0_SE9:
port_init(PTB1, ALT0);
break;
case ADC0_SE11:
port_init(PTC2, ALT0);
break;
case ADC0_SE12:
port_init(PTB2, ALT0);
break;
case ADC0_SE13:
port_init(PTB3, ALT0);
break;
case ADC0_SE14:
port_init(PTC0, ALT0);
break;
case ADC0_SE15:
port_init(PTC1, ALT0);
break;
case ADC0_SE23:
port_init(PTE30, ALT0);
break; case Temp0_Sensor: // Temperature Sensor,内部温度测量,可用ADC函数
break;
case VREFH0: // 参考高电压,可用ADC函数 ,结果恒为 2^n-1
break;
case VREFL0: // 参考低电压,可用ADC函数 ,结果恒为 0
break; default:
ASSERT(0); //断言,传递的管脚不支持 ADC 单端软件触发,请换 其他管脚
break;
} } uint16_t adc_once(ADCn_Ch_e adcn_ch, ADC_nbit bit) //采集某路模拟量的AD值
{
ADCn_e adcn = (ADCn_e)(adcn_ch >> 5) ; uint16_t result = 0; adc_start(adcn_ch, bit); //启动ADC转换 while (( ADC_SC1_REG(ADCN[adcn], 0 ) & ADC_SC1_COCO_MASK ) != ADC_SC1_COCO_MASK); //只支持A通道
result = ADC_R_REG(ADCN[adcn], 0);
ADC_SC1_REG(ADCN[adcn], 0) &= ~ADC_SC1_COCO_MASK;
return result;
}
/*************************************************************************
* 野火嵌入式开发工作室
*
* 函数名称:ad_ave
* 功能说明:多次采样,取平均值
* 参数说明:ADCx 模块号( ADC0、 ADC1)
* ADC_Channel 通道号
* ADC_nbit 精度( ADC_8bit,ADC_12bit, ADC_10bit, ADC_16bit )
* N 均值滤波次数(范围:0~255)
* 函数返回:16位无符号结果值
* 修改时间:2012-2-10
* 备 注:修改苏州大学的例程
*************************************************************************/ uint16_t ad_ave(ADCn_Ch_e adcn_ch, ADC_nbit bit, uint8_t N) //均值滤波
{
uint32_t tmp = 0;
uint8_t i;
//ASSERT( ((adcn == ADC0) && (ch >= AD8 && ch <= AD18)) || ((adcn == ADC1) && (ch >= AD4a && ch <= AD17)) ) ; //使用断言检测ADCn_CHn是否正常 for(i = 0; i < N; i++)
tmp += adc_once(adcn_ch,bit);
tmp = tmp / N;
return (uint16_t)tmp;
}
/*!
* @brief 启动ADC软件采样(不支持B通道)
* @param ADCn_Ch_e ADC通道
* @param ADC_nbit ADC精度( ADC_8bit,ADC_12bit, ADC_10bit, ADC_16bit )
* @since v5.0
* @note 此函数内部调用,启动后即可等待数据采集完成
* Sample usage: adc_start(ADC0_SE10, ADC_8bit);
*/
void adc_start(ADCn_Ch_e adcn_ch, ADC_nbit bit)
{
ADCn_e adcn = (ADCn_e)(adcn_ch >> 5) ;
uint8_t ch = (uint8_t)(adcn_ch & 0x1F); //初始化ADC默认配置
ADC_CFG1_REG(ADCN[adcn]) = (0
//| ADC_CFG1_ADLPC_MASK //ADC功耗配置,0为正常功耗,1为低功耗
| ADC_CFG1_ADIV(2) //时钟分频选择,分频系数为 2^n,2bit
| ADC_CFG1_ADLSMP_MASK //采样时间配置,0为短采样时间,1 为长采样时间
| ADC_CFG1_MODE(bit)
| ADC_CFG1_ADICLK(0) //0为总线时钟,1为总线时钟/2,2为交替时钟(ALTCLK),3为 异步时钟(ADACK)。
); ADC_CFG2_REG(ADCN[adcn]) = (0
//| ADC_CFG2_MUXSEL_MASK //ADC复用选择,0为a通道,1为b通道。
//| ADC_CFG2_ADACKEN_MASK //异步时钟输出使能,0为禁止,1为使能。
| ADC_CFG2_ADHSC_MASK //高速配置,0为正常转换序列,1为高速转换序列
| ADC_CFG2_ADLSTS(0) //长采样时间选择,ADCK为4+n个额外循环,额外循环,0为20,1为12,2为6,3为2
); //写入 SC1A 启动转换
ADC_SC1_REG(ADCN[adcn], 0 ) = (0
| ADC_SC1_AIEN_MASK // 转换完成中断,0为禁止,1为使能
//| ADC_SC1_DIFF_MASK // 差分模式使能,0为单端,1为差分
| ADC_SC1_ADCH( ch ) //输入通道选择位
); //ADC_SC1_REG(ADCN[adcn], 1 ) = 0;
} /*!
* @brief 停止ADC软件采样
* @param ADCn_e ADC模块号( ADC0、 ADC1)
* @since v5.0
* Sample usage: adc_stop(ADC0);
*/
void adc_stop(ADCn_e adcn)
{
ADC_SC1_REG(ADCN[adcn], 0) = (0
| ADC_SC1_AIEN_MASK // 转换完成中断,0为禁止,1为使能
//| ADC_SC1_DIFF_MASK // 差分模式使能,0为单端,1为差分
| ADC_SC1_ADCH(Module0_Dis) //输入通道选择,此处选择禁止通道
);
}

二、使用方法:

uint16_t t=0;
adc_init(ADC0_DP0); //ADC初始化 while(1)
{
t = adc_once(ADC0_DP0, ADC_16bit); //采集一次一路模拟量的AD值
}

智能车学习(三)—— ADC学习的更多相关文章

  1. java_web学习(三) eclipse_jsp学习

    1.首先打开eclipse,新建一个Dynamac web project项目文件 2.在WebContent单击右键创建JSP File 3.过程 4.简单的jsp代码 运行结果: 5.导出war文 ...

  2. Html学习(三) 分类学习

    代码: <h1>这是一级分类吗</h1> <h2>这是二级分类吗</h2> <h3>这是三级分类吗 </h3> 效果: 介绍: ...

  3. 智能车学习(十五)——K60野火2013版例程

    一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_ ...

  4. 智能车学习(二)—— GPIO学习

    一.概述 使用的是蓝宇的底层,主要有初始化管脚,设置管脚状态,反转管脚状态等. 二.代码重述: 1.头文件gpio.h #ifndef GPIO_H //防止重复定义(gpio_H 开头) #defi ...

  5. [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点

    深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...

  6. 20175314 《Java程序设计》第三周学习总结

    20175314 <Java程序设计>第三周学习总结 教材学习内容总结 编程语言的发展事是从面向机器(汇编.机器)到面向过程(C)再到面向对象(Java) 成员变量: 1.成员变量定义在类 ...

  7. (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待

    selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ...

  8. HTTP学习三:HTTPS

    HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...

  9. 20145213《Java程序设计》第三周学习总结

    20145213<Java程序设计>第三周学习总结 教材学习内容总结 正所谓距离产生美,上周我还倾心于Java表面的基础语法.其简单的流程结构,屈指可数的基本类型分类,早已烂熟于心的运算符 ...

  10. 20145304 Java第三周学习报告

    20145304 <Java程序设计>第三周学习总结 教材学习内容总结 1.定义类: 类定义时使用class关键词,建立实例要使用new关键词. 代码如下: /*定义类 书上例子 衣服的型 ...

随机推荐

  1. c++ macro

     C++ Code  12345678910111213141516171819202122232425262728293031   /* version: 1.0 author: hellogise ...

  2. Pythonj~module

    常数,变量 特殊变量:__xxx__  可以被直接引用 private函数:_xxx __xxx__ 外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public. 导入 ...

  3. zsh 通信脚本

    server #!/bin/zsh #zsh TCP server script zmodload zsh/net/tcp #listening port ztcp -l #This is a fil ...

  4. codeforces 507B. Painting Pebbles 解题报告

    题目链接:http://codeforces.com/problemset/problem/509/B 题目意思:有 n 个piles,第 i 个 piles有 ai 个pebbles,用 k 种颜色 ...

  5. 【leetcode】Balanced Binary Tree(middle)

    Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary ...

  6. JS 保留两位小数问题收集

    1.使用四舍五入的方法,保留小数点后的两位小数: toFixed里面的参数表示保留的小数的位数,范围是0-20,超过20位就会报错了 <script> var num=22.127456; ...

  7. [Android Pro] 使用apktool工具遇到could not decode arsc file的解决办法

    转:http://www.cnblogs.com/sage-blog/p/4323049.html 最近使用APKtool工具反编译APK老是提示不成功,错误如下: Exception in thre ...

  8. September 12th 2016 Week 38th Monday

    After all, tomorrow is another day. 不管怎样,明天又是全新的一天. Another day? Maybe.  Remember when you reach for ...

  9. Mac下java开发环境的搭建与开发工具的安装

    一.安装JDK 1.根据你当前环境的需要,下载相应的JDK并安装,安装步骤与其他Mac软件安装方法相同,我安装的是jdk1.8.0_74.jdk,mac中jdk1.8的默认位置:/Library/Ja ...

  10. Android WebView 支持H5的定位Js

    //启用数据库 webSettings.setDatabaseEnabled(true); String dir = this.getApplicationContext().getDir(" ...