Mini2440裸机程序之ADC

发布者:science56最新更新时间:2019-11-18 来源: 51hei关键字:Mini2440  裸机程序  ADC 手机看文章 扫描二维码
随时随地手机看文章

源代码及注释


#define GLOBAL_CLK  1

#include
#include
#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h"
#include "mmu.h"
#include "memtest.h"
#include "Mylib.h"

#define LED1 (1 << (5 * 2))
#define LED2 (1 << (6 * 2))
#define LED3 (1 << (7 * 2))
#define LED4 (1 << (8 * 2))
#define LEDS (LED1 | LED2 | LED3 | LED4)

#define LED1_ON   ~(1<<5)
#define LED2_ON   ~(1<<6)
#define LED3_ON   ~(1<<7)
#define LED4_ON   ~(1<<8)

#define LED1_OFF   (1<<5)
#define LED2_OFF   (1<<6)
#define LED3_OFF   (1<<7)
#define LED4_OFF   (1<<8)

void init()

    cal_cpu_bus_clk();//在MyLib.h中有定义

    Uart_Init(0,115200);//PCLK、波特率为115200

    Uart_Select(0);//选择串口0

    My_Logo();//在MyLib.h中有定义 
}

int ADC_Test()
{
    int temp;

    rADCCON = (1<<14)|(0x31<<6)|(0<<3);//预分频器使能、预分频值为49、通道0
    rADCCON |=0x1;// A/D开始转换,开始之后,此位被清除
    while(rADCCON&0x1);//检测有没有开始
    while(!(rADCCON&0x8000));//检测转换是否结束
    temp = rADCDAT0&0x3ff;//返回转换值,正常A/D转换的数值只能通过ADCDAT0寄存器的[9:0]位读取 

    return temp;
}

void Main(void)
{
    int temp,Value;
    U8 key;
    init();
    MMU_Init();//内存初始化

    rGPBCON = LEDS;   //初始化LED相应引脚为输出
    rGPBDAT = rGPBDAT|(LED1_OFF)|(LED2_OFF)|(LED3_OFF)|(LED4_OFF); // LED 灭
    rGPBDAT &= ~(0x1);
  
    Uart_Printf("nnnPress 'Enter' to refresh the Screenn");//终端提示

    while(1)
    { 
           temp = ADC_Test();//调用A/D转换函数
   
           Value = ((3300/1024)*temp)*1000;//转换成电压值,单位mV,Value值比实际值放大了1000倍
   
           key=Uart_Getch();//等待从键盘接收按键
   
           Beep(2000,100);//蜂鸣器发声函数
   
   
           // 刷新A/D转换,原因很简单,我们往往在等待按键时调整电位器
           temp = ADC_Test();
   
           Value = ((3300/1024)*temp)*1000;
   
           rGPBCON = LEDS;   //还原GPB的配置,原因调用了蜂鸣器发声函数,改变了GPB原先的配置
  
   
          if(key==ENTER_KEY)//判断是否按了Enter键
          {
               key=0;//按键清零
   
               rGPBDAT = (~temp)&(~0x1);//输出到LED显示,务必把GPB0清零,否则你将会有麻烦 ^|^
    
               Uart_Printf("nnn%d %% 1000000 %(V%)n",Value);//把电压值输出到终端显示 
          }
          else
          {
               key=0;
   
               Uart_Printf("nnnPress the 'Enter' key!n");//按键非Enter键,提示按键
          }
    }
}


程序结果



关键字:Mini2440  裸机程序  ADC 引用地址:Mini2440裸机程序之ADC

上一篇:ARM历程四-LCD
下一篇:2440裸机编程之一 C语言调用汇编语言编程

推荐阅读最新更新时间:2024-11-01 18:51

基于ISA总线的ADC板卡设计
1 引言    模数转换器是工业测量和控制系统中数据采集子系统的重要部件,它是测控现场的模拟信号源与数字计算机之间的接口,其任务是把现场中连续变化的被测信号转换成离散信号,再由工控计算机作进一步的数据处理。这就要求系统将所采集的模拟数据信号尽可能真实地、不失真地显示给控制人员,为此,笔者研制了基于ISA总线的A/D转换板卡。该板卡以AD574为A/D转换核心,在ISA总线技术的基础上,利用较少的外围元件来实现多通道、高精度的A/D转换。该板卡具有32路单端信号输入,电压范围为0V~12V,转换位数为12bit/8bit任选,同时具有自检功能。本文主要介绍该板卡的硬件组成原理和软件实现方法。 2硬件电路    本转换卡的
[嵌入式]
mini2440之ads下dma测试
在网上找到一个dma的ads工程,将其dma功能整到了原来的ads工程TQ2440_Test里面 用下面的main.c换下原来TQ2440_Test的main.c http://download.csdn.net/detail/songqqnew/3636198 之所以要介绍DMA,因为它对性能太重要了!只有活用了DMA,CPU的性能才能上去!S3c2410有四个DMA,每个DMA支持工作方式基本相同,但支持的source Dest可能略有不同,具体见Datasheet。 这里具体DMA CONTROL寄存器(DCON)的配置说明,进而引出DMA的各种工作方式。 Atomic transfer:指的是DMA的单次原子操作,
[单片机]
STM32系列ADC采样频率及相应时间的确定
一、采样频率的确定 1.首先确定ADC 的时钟,这里需要看你的RCC的设置。在采用固件库的基础上,设定ADC的采样频率相对来说是很容易的。 (1)由时钟控制器提供的ADCCLK 时钟和PCLK2(APB2 时钟)同步。CLK 控制器为ADC 时钟提供一个专用的可编程预分频器。 (2) 一般情况下在程序 中将 PCLK2 时钟设为 与系统时钟 相同 RCC_HCLKConfig(RCC_SYSCLK_Div1); RCC_PCLK2Config(RCC_HCLK_Div1); RCC_PCLK1Config(RCC_HCLK_Div2); (3)在时钟配置寄存器(RCC_C
[单片机]
s3c2440硬件篇之八:ADC和触摸屏接口
ADC和触摸屏接口 一。简介:S3C2440的CMOS模数转换器可以接收8个通道的模拟信号的输入,并将其转换为10位的二进制数据。在2.5MHZ的A/D转换时钟下,最大的转换速率可以达到500KSPS(SPS:samples per second,每秒采样的次数)。 我们从上面的结构图和数据手册可以知道,该ADC模块总共有8个通道可以进行模拟信号的输入,分别是AIN0、AIN1、AIN2、AIN3、YM、YP、XM、XP。那么ADC是怎么实现模拟信号到数字信号的转换呢?首先模拟信号从任一通道输入,然后设定寄存器中预分频器的值来确定AD转换器频率,最后ADC将模拟信号转换为数字信号保存到ADC数据寄存器0中(ADCDA
[单片机]
s3c2440硬件篇之八:<font color='red'>ADC</font>和触摸屏接口
STM32的ADC多通道DMA使用方法
类似的问题 为什么我采集5条通道的电压,而采集到的值却都是第一条的呢? 我什么时候需要使用DMA功能? Ⅰ 关于ADC的一些知识 STM32的ADC是一种12位逐次逼近型的模拟数字转换器。它有多达18条通道,可测量16个外部和2个内部信号源。 各通道的A/D转换可以单次、连续、扫描或间断模式执行。 ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器ADC_DR中。 其实就是说,一个ADC,可检测18条通道,我们外接的只有16条。而结果只保存在一个寄存器ADC_DR中。 要使用ADC1采集多条通道,那么就需要对采集的通道进行分组排序。STM32的ADC可以把转换组织成两组:规则组和注
[单片机]
STM32的<font color='red'>ADC</font>多通道DMA使用方法
mini2440系统移植篇之u-boot分析
1. Bootloader概念 系统上电后,需要一段程序来初始化重要的硬件,有些程序是固化在固件firmwware上的,如PC的BIOS。然后是Bootloader,如PC上的GRUB。对于嵌入式系统来说,一般只有Bootloader,它负责初始化内核运行的硬件环境,如内存,然后调用操作系统内核。一般最终产品它只需要启动内核就足够了,为了方便开发,还可以增强Bootloader功能,比如网络功能,通过网络下载文件,烧写文件到Flash中。 2. 嵌入式系统结构 嵌入式系统一般包含4部分。 1、引导加载程序,包括固化在固件的boot代码(可选)和Bootloader。 2、Linux内核 3、文件系统,包括根文件系统和其他挂载
[单片机]
stm32f407之三ADC交替采样(操作寄存器)
stm32f407之三ADC交替采样(操作寄存器) 三ADC交替采样 在多ADC模式中,ADC1为主,ADC2或ADC3为从,交替或者同时触发,工作模式取决于ADC_CCR寄存器的MULTI 。 多ADC模式中,转换后的数据可以多模式的数据寄存器(ADC_CDR)中读取。状态可以在多模式的状态寄存器(ADC_CSR)读取。 多ADC模式下的DMA传输方式: 方式1:每个AD转换完都发出DMA请求,多模式的数据寄存器(ADC_CDR)用低位保存转换结果。 1st request: ADC_CDR = ADC1_DR 2nd request: ADC_CDR = ADC2_DR 3rd request: ADC_CDR =
[单片机]
12位ADC为输入频率提供高质量动态性能
      2009 年 3月 2 日德州仪器 (TI) 宣布推出一款速率为 550 MSPS 的单通道 12 位模数转换器 (ADC),该器件可提供超过 200 MHz 的信号带宽,可充分满足分辨率、准确度以及线性度至关重要的应用领域的应用需求。该新型管线式 ADC 可针对高于 500 MHz 的输入频率 (IF) 提供业界最广的无寄生动态范围 (SFDR) 以及最高的信噪比 (SNR),从而不仅可为数字预失真 (DPD) 解决方案实现更高效的功率放大器线性化,为影像与通信系统实现更广的覆盖范围与更高的灵敏度,而且还可为宽带测试与测量设备实现更高的精确度重要特性      • 针对高于 500 MHz 的 IF 提供最高线性
[模拟电子]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved