【AT91SAM3S】ADC中断方式采集数据
板子依旧是英倍特的EK-SAM3S。ADC部分的原理图如下:

PB1是一个复用引脚,在这里被用作AD功能,对应芯片上的AD5。即,使用片内ADC的5通道测VR1上2号引脚的电压。
实验采用了SysTick定时器产生中断方式来采集ADC数据。SysTick中断发生时,开启ADC转换。ADC转换结束时,产生中断,在ADC中断处理函数中读取ADC采集到的数据。转换后,通过UART输出,到PC端显示。
SysTick和ADC的中断处理函数如下:
uint32_t time_stamp = 0;
WEAK void SysTick_Handler( void )
{
uint32_t status;
time_stamp++;
/* simply to get 1s interval*/
if (time_stamp % 1000 == 0) //1秒采集一次ADC数据
{
status = ADC_GetStatus( ADC ) ;
/* if conversion is done*/
if ( (status & ADC_ISR_EOC5) == ADC_ISR_EOC5 )
{
ADC_StartConversion( ADC ) ;//开启ADC转换
}
}
}
/**
* \brief Default SUPC interrupt handler for ADC.
*/
WEAK void ADC_IrqHandler( void )
{
uint32_t status;
status = ADC_GetStatus(ADC);
if ( (status & ADC_ISR_RXBUFF) == ADC_ISR_RXBUFF )
{
conversionDone = 1; //设置转换完成标志
ADC_ReadBuffer( ADC, adc_values, 1 ) ;
}
}
主函数:
int main()
{
int i;
WDT_Disable(WDT);
SysTick_Config(BOARD_MCK / 1000); //配置SysTick
ADC_Initialize(ADC,ID_ADC); //初始化ADC
ADC_cfgFrequency(ADC,15,4);
ADC_check(ADC,BOARD_MCK);
ADC_EnableChannel(ADC,ADC_CHANNEL_5); //使能5号通道 PB1
NVIC_EnableIRQ(ADC_IRQn); //使能ADC中断
ADC_StartConversion(ADC);
ADC_ReadBuffer(ADC,adc_values,BUFFER_SIZE);
ADC_EnableIt(ADC,ADC_IER_RXBUFF);
while(1)
{
while(!conversionDone);//等待转换完成标志
if ( conversionDone )
{
for ( i = 0 ; i < BUFFER_SIZE ; i++ )
{
printf( "Vol:%d mv\r\n", (adc_values[i] * 3300 /4095) ) ; //通过串口输出电压值
}
conversionDone = 0 ;
}
}
}
连上串口线,PC端会看到一些电压数据发过来。转动变阻器,可以看到电压值会不断地变化,变阻器转到底,辉县市0mv和3300mv。说明咱们测量的还凑合了。

【AT91SAM3S】ADC中断方式采集数据的更多相关文章
- 01 Zabbix采集数据方式
Zabbix采集数据方式 1. zabbix采集数据方式: 基于专用agent 被监控的设备上面安装agent软件,这个agent必须在设备上面有采集数据的权限 基于SNMP, net-snmp ...
- Tcp方式采集CNC兄弟设备数据
先说下为了采集CNC兄弟设备的数据可谓是一波三折. 因为首次接触brother设备(CNC)是直接在设备上设置IP.用户名.密码,然后直连PC,用Ftp可以查看和下载CNC brother设备里的数据 ...
- C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...
- php中CURL实现模拟登录并采集数据
在php中采集我们用的是简单的采集方式(例如file_get_contents)就无法做到了,但是如果想模拟登录用户并采集利用它就没办法了,我们可利用CURL函数来实现模拟登录并采集数据 这里要说一些 ...
- DMA为什么比轮询、中断方式性能要卓越非常多?(你不懂)
本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/35735397 假设是计算机专业出身的同学,都听过一个 ...
- S5PV210 串口实验(中断方式)
结合之前的串口实验(轮询方式)与中断体系分析,我们来做下中断方式的串口接收实验. start.S .global _start .global IRQ_handle _start: /* 关 Watc ...
- RTX——第19章 SVC 中断方式调用用户函数(后期补历程)
以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解如何采用 SVC 中断方式调用用户函数. 当用户将 RTX 任务设置为工作在非特权级模式 ...
- 服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana
服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana https://www.cnblogs.com/xishuai/p/elk- ...
- Linux串口编程(中断方式和select方式)
Linux下的串口编程,在嵌入式开发中占据着重要的地位,因为很多的嵌入式设备都是通过串口交换数据的.在没有操作系统的我们可以使用UART的中断来出来数据的接受和发送,而在Linux操作系统下,我们也可 ...
随机推荐
- 使用Git进行代码管理的心得
使用GitHub进行代码托管的方法 我是直接下载 Github for Windows ,这个软件自带一个 Github 客户端 和一个 Git shell,其中Github是图形化界面,对初学者来说 ...
- Nginx 支持 CI 框架的配置并禁止使用 ip 访问
#CIserver { listen 80; server_name www.ci.com; index index.php index ...
- 无任何网络提供程序接受指定的网络路径(系统服务里没有workstation服务)
今天同事访问公司服务器时,提示“无任何网络提供程序接受指定的网络路径”,网络ping正常,把防火墙关掉,再次尝试问题如故. 于是上网搜索: 1.服务停止:一般有workstation,server,c ...
- JavaAppArguments
- C++中不同数据类型的互相转换
1.string --> char * char * p = (char*)str.c_str(); 2.char * -->string char *p = "aaa& ...
- ubuntu13.04 nfs配置
开发板和主机之间共享文件,常常需要配置nfs服务: 服务器端安装:root#:apt-get install nfs-common root#:apt-get install nfs-kernel-s ...
- 《TCP/IP详解卷1:协议》第2章 链路层-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- iOS学习之六种传值方式
iOS页面传值方式 应用于: 两个互动的界面:1)页面一跳转到页面二,页面一的textField的值传给页面二的label.2)A页面跳转到B页面,B页面再跳转回A页面(注册页面跟登录页面) 两个不互 ...
- iOS学习之手势
UIGestureRecognizer 为了完成手势识别,必须借助于手势识别器--UIGestureRecognizer,利用UIGestureRecognizer,能轻松识别用户在某个view上面做 ...
- PC缺少一个或多个网络协议 qq可登录(win10)
打开适配器连接 1打开网络适配器 2卸载microsoft 3 网络客户端 4重启