单片机TM4C123学习(十):ADC采样模块
1.头文件
#include "tiva_adc.h" // ADC
2.引脚

3.初始化
// ADC初始化
// 光敏电阻(PE0)为通道3,存在序列0中,硬件平均为8个点
adc_init(TIVA_ADC1 , Channel_3, Sequence0, GPIOE, Pin0, );
// 滑动变阻器为通道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, ); ADCHardwareOversampleConfigure(adc_base, average_num); // 设置硬件8个数取一次均值 ADCSequenceStepConfigure(adc_base, sequence, , 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 :IntEnable(INT_ADC0SS0);break;
case :IntEnable(INT_ADC0SS1);break;
case :IntEnable(INT_ADC0SS2);break;
case :IntEnable(INT_ADC0SS3);break;
}
}
else // ADC1
{
switch(sequence)
{
case :IntEnable(INT_ADC1SS0);break;
case :IntEnable(INT_ADC1SS1);break;
case :IntEnable(INT_ADC1SS2);break;
case :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 ;
}
}
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 ;
}
}
}
单片机TM4C123学习(十):ADC采样模块的更多相关文章
- 单片机TM4C123学习(七):I2C模块(温度传感器)
I2C(Inter Intergrated Circuit)总线是Philips公司推出的一种用于IC器件之间连接的二线制串行扩展总线,它通过两根信号线(SDA-串行数据线:SCL-串行时钟线)在连接 ...
- 单片机TM4C123学习(九):PWM
1.头文件与变量定义 #include "tiva_pwm.h" // PWM 2.初始化 // PWM 初始化,频率为1000,占空比为0 M1PWM7_init(, ); // ...
- 单片机TM4C123学习(八):SPI接口D/A
1.头文件和变量定义(不是很清楚) #include "driverlib/ssi.h" #include "driverlib/i2c.h" #include ...
- DSP基础学习-ADC采样
DSP基础学习-ADC采样 彭会锋 2015-04-27 22:30:03 在查看ADC采样例程的时候我发现了下面的代码挺有意思的 EALLOW; GpioCtrlRegs.GPAMUX2.bit.G ...
- STM32中基于DMA的ADC采样实例之MQ-2烟雾传感器
最近学习了一下STM32中的ADC采样,由于手头正好有一个MQ-2的烟雾传感器,所以正好可以测试一把.体验ADC采样的过程.下面介绍一下这个MQ-2烟雾传感器. 1.MQ-2烟雾传感器简介 MQ-2气 ...
- 智能车学习(十五)——K60野火2013版例程
一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_ ...
- 使用STM8SF103 ADC采样电压(转)
源:使用STM8SF103 ADC采样电压 硬件环境: STM8SF103 TSSOP20封装 因为项目需要用到AD采样电池电压,于是便开始了使用STM8S ADC进行采样,也就有了下文. 手册上对S ...
- 强化学习(十六) 深度确定性策略梯度(DDPG)
在强化学习(十五) A3C中,我们讨论了使用多线程的方法来解决Actor-Critic难收敛的问题,今天我们不使用多线程,而是使用和DDQN类似的方法:即经验回放和双网络的方法来改进Actor-Cri ...
- 强化学习(十五) A3C
在强化学习(十四) Actor-Critic中,我们讨论了Actor-Critic的算法流程,但是由于普通的Actor-Critic算法难以收敛,需要一些其他的优化.而Asynchronous Adv ...
随机推荐
- mac osx 快捷键符号以及意义 触发角:锁屏
快捷键中常用符号⌘(command).⌥(option).⇧(shift).⇪(caps lock).⌃(control).↩(return).⌅(enter). OSX快捷键 快捷键中常用符号 ⌘( ...
- knockout 学习实例4 css
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 使用jquery的delay方式模拟sleep
javascript中并没有原生sleep函数可供调用,一般来说为了实现sleep功能,大都是采用SetTimeout来模拟,以下片段采用jquery的delay方法来模拟,也算是提供了另外一个视角吧 ...
- Sonar升级遇到的那些事儿
目录 背景 如何升级 如何回滚 问题解决 参考 背景 目前我们用SonarQube版本是4.0,这次准备升级到最新版本5.1, 以便支持以后的JavaScript的项目. 如何升级 我们可以直接跨越版 ...
- Intel汇编语言程序设计学习笔记1
第一章 汇编器链接器:汇编器将汇编语言翻译成机器语言,链接器将单个文件合并为可执行文件 intel 80X86系列处理器的汇编语言与VAX或者motorala 68x00等系统的汇编是否相同?不相同, ...
- GIS理论(墨卡托投影、地理坐标系、地面分辨率、地图比例尺、Bing Maps Tile System)
[注]原文 http://www.cnblogs.com/beniao/archive/2010/04/18/1714544.html 墨卡托投影(Mercator Projection),又名&qu ...
- 约瑟夫(环)问题(Josephus problem)
问题描述:皇帝决定找出全国中最幸运的一个人,于是从全国选拔出 n 个很幸运的人,让这 n 个人围着圆桌进餐,可是怎么选择出其中最幸运的一个人呢?皇帝决定:从其中一个人从 1 开始报数,按顺序数到第 k ...
- PHP文件读写操作之文件写入代码
在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...
- 解决eclipse中安装AIX2插件问题
为了做webservice,查了下,需要用到AXIS2(当然也有别的方法,貌似更复杂,详情可以参看:java开发webservice的几种方式).可试了N次,下载的codegen和service插件始 ...
- postman+newman+jenkins
1.postman: http://itfish.net/article/59864.html(网上参考资料) 1)安装(要用爬墙软件): 进入下面地址https://chrome.google.co ...