一、代码分享:

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. opencart 引入 TWIG 模板引擎

     1.首先将 twig 包放入 system\library 目录. 2.在 system/startup.php 文件最后添加引入语句. require_once(DIR_SYSTEM . 'lib ...

  2. oracle,mysql对敏感,关键字等处理

    oracle用""  比如,处理字段中间有空格,

  3. HTML 基础

    1.HTML  超文本标记语言 2.网页分类: 动态网页   静态网页 ①静态网页与动态网页区别:  主要:动态网页与数据库链接,静态网页不与数据库连接: ②静态网页 修改展示图片 必须修改源代码 : ...

  4. 在SpringMVC中获取request对象

    1.注解法 @Autowired private  HttpServletRequest request; 2. 在web.xml中配置一个监听 <listener> <listen ...

  5. 【leetcode】Single Number II (medium) ★ 自己没做出来....

    Given an array of integers, every element appears three times except for one. Find that single one. ...

  6. 【python】lxml

    来源:http://lxml.de/tutorial.html lxml是python中处理xml的一个非常强大的库,可以非常方便的解析和生成xml文件.下面的内容翻译了链接中的一部分 1.生成空xm ...

  7. sqlserver 解析Json字符串

    转自:https://www.simple-talk.com/sql/t-sql-programming/consuming-json-strings-in-sql-server/ http://ww ...

  8. September 8th 2016 Week 37th Thursday

    The secret of high-impact business is early preparation. 高效商务,赢在未雨绸缪. Early and best preparation is ...

  9. July 4th, Week 28th Monday, 2016

    Goals determine what you are going to be. 你的目标决定你将成为怎样的人. What are your goals? What kind of people y ...

  10. 多次快速点击相同button导致重复响应的问题

    Button在开发中经常用到,但是如果在瞬间点击多次时会出现多次响应事件的问题,今天给大家分享一下解决方法. 方法一:在Button响应事件中禁止Button允许点击, -(void)buttonAc ...