板子依旧是英倍特的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中断方式采集数据的更多相关文章

  1. 01 Zabbix采集数据方式

    Zabbix采集数据方式 1. zabbix采集数据方式: 基于专用agent   被监控的设备上面安装agent软件,这个agent必须在设备上面有采集数据的权限 基于SNMP,  net-snmp ...

  2. Tcp方式采集CNC兄弟设备数据

    先说下为了采集CNC兄弟设备的数据可谓是一波三折. 因为首次接触brother设备(CNC)是直接在设备上设置IP.用户名.密码,然后直连PC,用Ftp可以查看和下载CNC brother设备里的数据 ...

  3. C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)

    第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...

  4. php中CURL实现模拟登录并采集数据

    在php中采集我们用的是简单的采集方式(例如file_get_contents)就无法做到了,但是如果想模拟登录用户并采集利用它就没办法了,我们可利用CURL函数来实现模拟登录并采集数据 这里要说一些 ...

  5. DMA为什么比轮询、中断方式性能要卓越非常多?(你不懂)

    本文原创为freas_1990,转载请标明出处:http://blog.csdn.net/freas_1990/article/details/35735397 假设是计算机专业出身的同学,都听过一个 ...

  6. S5PV210 串口实验(中断方式)

    结合之前的串口实验(轮询方式)与中断体系分析,我们来做下中断方式的串口接收实验. start.S .global _start .global IRQ_handle _start: /* 关 Watc ...

  7. RTX——第19章 SVC 中断方式调用用户函数(后期补历程)

    以下内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解如何采用 SVC 中断方式调用用户函数. 当用户将 RTX 任务设置为工作在非特权级模式 ...

  8. 服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana

    服务追踪数据使用 RabbitMQ 进行采集 + 数据存储使用 Elasticsearch + 数据展示使用 Kibana https://www.cnblogs.com/xishuai/p/elk- ...

  9. Linux串口编程(中断方式和select方式)

    Linux下的串口编程,在嵌入式开发中占据着重要的地位,因为很多的嵌入式设备都是通过串口交换数据的.在没有操作系统的我们可以使用UART的中断来出来数据的接受和发送,而在Linux操作系统下,我们也可 ...

随机推荐

  1. canvas 利用canvas中的globalCompositeOperation 绘制刮奖 效果

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...

  2. HDU 4913 Least common multiple(2014 Multi-University Training Contest 5)

    题意:求所有自己的最小公倍数的和. 该集合是  2^ai  * 3^bi 思路:线段树. 线段树中存的是  [3^b * f(b)]   f(b)表示 因子3 的最小公倍数3的部分  为 3^b的个数 ...

  3. python 语法常用 lambda

    Python中lambda表达式学习 http://blog.csdn.net/imzoer/article/details/8667176

  4. Apache +Tomcat的负载均衡与集群配置

    实验拓扑图: 一.搭配环境 (1).Tomcat的安装和配置 Tomcat_a的ip:192.168.55.229 Tomcat_b的ip:192.168.55.231 Tomcat的需要安装jdk和 ...

  5. 原生javascript和jquery实现简单的ajax例子

    后台C#代码 public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/p ...

  6. lightoj1030

    //Accepted 1688 KB 0 ms //http://kicd.blog.163.com/blog/static/126961911200910168335852/ //链接里的例子讲的很 ...

  7. javascript之DOM篇二(操作)

    一.创建DOM元素 createElement:document.createElement(' 所要创建的元素标签名'): <!DOCTYPE html><html>< ...

  8. Qt Creator提示"Qt没有被正确安装,请运行make install"的解决办法

    笔者最近使用Qt在开发一些小程序,觉得这个框架设计确实很好,使用了信号和槽解决了组件之间的通讯问题,可以说是基于C++语言上一个非常大的创新,大大提高了开发人员的编码效率,也使整个C++语言更加抽象. ...

  9. Bug严重级别分类

    BUG等级划分,一般划分为:严重BUG.较严重BUG.一般性BUG.建议性BUG A类—严重错误,包括以下各种错误: 1. 由于程序所引起的死机,非法退出 2. 死循环 3. 数据库发生死锁 4. 因 ...

  10. (实用篇)PHP中单引号与双引号的区别分析

    在PHP中,我们可以使用单引号或者双引号来表示字符串.不过我们作为开发者,应该了解其中的区别.单引号与双引号对于定义字符一个是可以解析变量一个是会把变量直接输出来,同时单引号与双引号在字符处理上单引号 ...