资源描述
. . .
《嵌入式系统二》课程设计报告
高速数据采集系统的设计
班级:
学号:
:
指导教师:
设计日期:2013年7月1日 至 2013年7月5日
设计题目:基于ARM的数据采集系统设计
设计的主要容:
设计嵌入式技术作为主处理器的高速数据采集系统,基于S3C44B0X处理器的高速、高精度、多通道数据采集系统,设计出一套通用性较强的数据采集系统。实现高速和高精度信号采集,显示与传输等功能。并讨论如何提高系统的速度、稳定性和可扩展性。
指导教师:
2013年6月30日
教师评阅意见书:
评阅教师:
2013 年 月 日
摘 要
近年来,随着计算机技术、电子技术等技术的发展,如何对数据进行采集和处理显得越发重要,数据采集的速度和精度是数据采集系统发展的两个主要方向。单片机、ARM、DSP 等各种微处理器的广泛应用,为数据采集系统提供了一个有效的平台。对信号进行高速和高精度的采集以与对采集数据处理的研究和设计是本课题的主要任务。
本文基于ARM7S3C44B0X处理器的高速、高精度、多通道数据采集系统,利用ARM7S3C44B0X丰富的功能接口和较高的工作频率,实现对信号的采集和数据处理的功能。本文介绍了数据采集系统的国外研究现状和发展趋势,对本系统的主要芯片进行了选型尤其是模数转换芯片AD7663的接口电路。将系统化分成各个功能单元并对各个功能模块进行分析。并提供了原理图和总体电路图,并编写了程序代码,最后提出了关于高速高精度数据采集系统设计的观点。
该系统具有成本低、功耗低、识别性能强与智能程度高等优点,具有较为广阔的应用前景。
关键词:ARM,S3C44B0X,数据采集系统,AD7663
29 / 29
一.绪论
1.1课题的背景与研究意义
随着工业技术的发展,数据采集装置具有越来越广泛的应用领域。在工业生产过程中,受产品质量、生产成本等多方面因素影响,通常需要对工业现场的一些参数进行监控。数据采集装置是解决这一问题的有效手段。在科学研究中,应用数据采集装置可获得被测对象的动态信息,是研究瞬间物理过程的有力工具, 也是获取科学奥秘的重要段之一。在生产实践中,为了得到我们需要的数据,通常需要将一些由传感器输出的模拟信号转换成数字信号。再通过计算机或者处理系统进行相应的处理。这种过程即被称为数据采集。数据采集装置在各个领域被广泛应用,己渗透到了工业现场、地质勘测、医药器械、电子通信、航空航天等各个领域,为人类更好的获取各种信息提供了便利的条件。
综上可知,研究通用化高精度数据采集技术和网络技术,可以有效提高生产管理的自动化水平,对于提高我国劳动生产率和推动经济发展具有非常重要的意义。
1.2 论文的主要容
本文以基于ARM的嵌入式系统为核心,并综合应用高精度数据采集方法和网络通信接口技术,实现了基于ARM的通用高精度数据采集装置。在分析国数据采集系统的基础上,考虑到数据的采集速度、精度和系统可扩展性, ARM7微控制器S3C44B0X,设计出一套通用性较强的数据采集系统。实现了高速和高精度信号采集,显示与传输等功能。
二.数据采集系统的总体设计
2.1 数据采集系统设计目标
本文设计了一种基于ARM7S3C44B0X处理器的高速、高精度、多通道数据采集系统。它的主要设计目标是:
(1) 实时性强。系统的主要工作是对大量的过程状态参数实时监测、数据存储、数据处理、进行实时数据分析等。因此要求硬件上必须要有实时时钟和优先级中断信息处理电路。
(2) 可靠性高。他是系统设计的一个重要要求。由于数据采集系统往往是安放在被控对象的工作环境中,所以不仅温度、湿度大,而且腐蚀多,干扰也很多,要求系统有较好的抗干扰能力和采集速度。
(3) 结构简单,功耗低,性能优良。
2.2 系统的整体设计
本文设计的高速高精度数据采集系统有硬件和软件两部分组成。而硬件部分主要完成数据采集、存储功能,软件部分则完成对硬件控制、对采集数据进行处理。
该系统的控制核心S3C44B0X。它为手持设备和一般类型应用提供了高性价比和高性能的微控制器解决方案。为了降低成本,S3C44B0X提供了丰富的置部件:8KB Cache,可选的部SRAM,LCD控制器,带自动握手的2通道UART,4通道DMA,系统管理器(片选FP/EDO/SDRAM控制器),带PWM功能的5通道定时器,I/O端口,RTC,8通道10为ADC,IIC总线接口,IIS总线接口,同步SIO接口和PLL倍频器。S3C44B0X采ARM7TDMI核,0.25um工艺的CMOS标准宏单元和存储编译器。它低功耗,精简,出色和全静态的设计特别适用于成本和功耗敏感的应用。同样S3C44B0X还采用了一种新的总线结构,即SAMBAII(SAMSUNG ARM CPU 嵌入式微处理器总线结构)。S3C44B0X的显著特性时它的CPU核,是由ARM公司设计的16或32位的ARM7TDMI最高为66MHz的 RISC处理器。微处理器S3C44B0X提供全面的,通用的片上外设,大大减少了系统电路中除处理器以外的元器件配置,从而最小化系统的成本。
系统以S3C44B0X为数据采集模块核心处理器,采用模块化方法设计,按照功能的不同,分为电源电路、通道选择电路、模数转换电路、通信电路、多路开关与信号调理电路、计算机人机交互界面部分,数据采集系统整体结构图2-2所示
模拟通道二
……
模拟通道七
模拟通道八
模拟
转换
数据
缓存
模拟通道一
多路
开关
电压
跟随
微
处
理
器
显示
键盘
2-2 高速高精度数据采集系统的电路框图
数据采集系统工作流程:传感器输入的模拟信号经过信号调理电路的处理(包括隔离、变换、放大、滤波等各种处理)以满足数模转换芯片对输入电平和信号质量的要求,然后通过多路开关进行信号选择,选通的信号由高性能高速电压反馈放大器AD8021的进一步的处理获得更精确,精度更高的模拟信号,在微处理器的控制下模拟信号通过16位逐次渐近型模数转换器AD7663的转换处理存入数据缓存,进一步通过S3C44B0X处理器的控制的显示、键盘模块实现人机交换功能。同时多路开关的选择与控制有微处理器控制。
软件部分的设计分为两个部分,分别为数据采集系统控制软件和数据程序处理两个部分。软件设计共包括五部分:通道选择,数据采集处理,数据存储,数据显示和键盘控制。
三.数据采集模块的硬件设计与实现
本设计主要有五个模块,分别是:多路开关与信号调理模块,模数转换模块,存储模块,键盘模块,显示模块。
3.1 多路开关与信号调理模块设计
3.1.1 信号调理模块
信号采集系统中,绝大多数模拟量输入都带有大量的噪声不能直接输入到模数转换器中去,需要对信号进行调理。信号调理电路用来对传感器输入的信号进行隔离,变换,放大,滤波等各种处理,以满足模数转换芯片对输入电平和信号质量的要求。调理电路如图3-1所示。
图3-1 信号调理电路
AD623是高精度、低噪声的仪表放大器,R1是输入限流电阻,R2是增益电阻,调节此电阻的值可改变AD623的增益G,算式为G=100/R1(kΩ)+1。
MAX291是滤波器,截止频率其由电容C1决定。若设为100Hz:fc(kHz)=1000/3C1(pF),计算得C1取值为3300pF。使用中还要注意:MAX291的零点漂移达-200mV~-400mV,因而可在输出端串接一个10μF左右的钽电容,隔去MAX291引入的直流分量[8]。
3.1.2 多路开关的选择
本系统选用的是8通道的模拟数据选择器MAX308,输出哪路信号通过总线控制。带串行接口的16位模数转换集成电路(ADC),它包含有跟踪/保持电路的一个低漂移、低噪声、掩埋式齐纳电压基准电源。它的转换速度快、功率消耗底、采样速率高达308 kb/s点,满量程输入电压围为±5V,功耗为210mW。可与大多数流行的数字信号处理器的串行接口直接接口,该输入可以接收TTL或CMOS的信号电平,时钟频率0.1-5.5MHz,其电路图如图3-2所示。
图3-2 多路开关MAX308
IN1~IN8是模拟输入通道,模拟信号由此输入。A0~A2是通道选择信号,其选择由微处理器S3C44B0X控制。
3.2 模数转换模块
模数转换是把数据采集系统采集到的模拟信号转换成系统可以识别并处理的数字信号。它的精度与速度如何将影响到系统的现实性和系统的性能。本设计采用的是,本模块的设计目的就是为了实现这功能[9]。
3.2.1 信号驱动放大器信息
本模块由两部分组成:信号驱动放大器AD8021与具有低噪声、高精度和出色的长期稳定特性的基准电压源ADR421提供基准电压的模数转换芯片AD7663。
信号驱动放大器AD8021是一款出众的高性能,高速电压反馈放大器,可以用于16bit分辨率系统。AD8021具有低压噪声和低电流噪声,是当今的高速低噪声运算放大器产品中静态电源电流(7mA ±5V)最低的产品。AD8021工作电压围较宽,为±2.25V~±12V,也可以采用5V单电源供电,因此非常适合高速低功耗仪器仪表。输出禁用引脚可以将静态电源电流进一步降低至1.3 mA。与同类放大器相比,AD8021不仅技术性能出众,而且价格优势明显,静态电流也低得多。AD8021是一款高速、通用放大器,非常适合各种增益配置,可以用于信号处理链路以与控制环路。AD8021
图3-3 信号驱动AD8021
采用标准8引脚SOIC与MSOP封装,工作温度围为:-40°C~+85°C。芯片电路如图3-3所示。
传感器输入的信号通过多路开关与信号调理模块处理后得到比较符合要求的模拟信号,进一步通过信号驱动放大电路AD8021的处理得到精度较高的、稳定的模拟信号,通过分辨率高,采样速率高,功耗小的模数转换芯片AD7663的作用,输出符合要求的数字信号,完成模数转换。
3.2.2 模数转换芯片的选择
A/D转换器实际上是将模拟信号转换成数字量的装置,其转换工程主要包括采样、量化、编码三个步骤。
A/D芯片是数据采集系统的关键部件,它的性能往往直接影响整个系统的技术指标,目前市面上A/D转换器的品种较多,每种芯片具有不同的控制方式和应用条件。比较常用的ADC按转换电路结构和工作原理主要分为四类:积分型AD转换器、逐次逼近型、并行比较型ADC、∑-Δ转换器。其中,积分型模数转换器的采样速度和带宽都非常低,但它们的精度可以做得很高,并且抑制高频噪声和固定的低频干扰(如50Hz或60Hz)的能力,使其对于嘈杂的工业环境以与不要求高转换速率的应用有用(如热电偶输出的量化)。逐次逼近型模数转换器在 1 个时钟周期只能完成 1 位转换。N位转换需要N个时钟周期,故这种模数转换器采样速率不高,输入带宽也较低。它的优点是原理简单,便于实现,不存在延迟问题,适用于中速率而分辨率要求较高的场合。并行比较式 A/D 转换器原理直观,转换速度极快(最高1GHz的采样速率),常用于数字通信和高速数据采集领域。缺点是功耗大,制造成本高且易产生离散的、不确定的误码输出。∑-Δ模数转换器采样速率较低,但采样精度会做得很高,且成本低廉,一般限于对低频较窄的转换。
图3-5 模数转换接口电路
对于一般的工业采集系统在保证精度和速度的条件下,要尽量提高采样速度,以满足实时采集、实时处理和实时控制的要求。通常选择逐次逼近型或并行比较型AD转换器。A/D转换器的性能参数主要有:转换精度,转换速率、输入量程以与转换误差等,根据这些参数本系统中选择开关电容结构的16位并行A/D转换器AD7663。模数转换接口电路如图3-5所示。
A/D7663的输入阻抗仅为3.41kΩ,若MAX308输出的信号直接输入A/D7663进行A/D转换时,会产生较大的增益误差。因此,必须用阻抗极低的信号源来驱动AD7663的输入端,这里选用了信号驱动放大器AD8021。
为了实现高速高精度数据采集与存储的同步,解决ADC和控制器之间速度匹配问题,保证采集数据的完整性,本系统设计了高速高精度的转换器AD7663和74H273作数据采集缓冲器的设计方案,使数据的采集和传输速率进行有效的匹配,实现了数据的实时采集。AD转换是数据采集的核心,它决定着系统数据采集的精度和速度,本设计采用的是AD7663模数转换器,AD7663是一款16位、250KSPS、低功耗、逐次逼近型模数转换器,采用5V单电源供电,并提供8位或16位并行口和一个串行口。AD7663具有分辨率高、采样速率高、功耗小等优点,在高速高精度的数据采集系统中得到了广泛的应用。
图3-6模数转换接口电路
AD7663负责实现模数转换的功能,它支持串行和并行方式输出,在本设计中AD7663与S3C44B0X以16位并行总线的方式连接。S3C44B0X将总线设备分为8个BANK进行访问,AD7663挂在BANK3上,因此将BANK3的使能信号nGCS3接到AD7663的片选引脚/CS上,复位信号nRESET接到AD7663的RESET,总线读信号nOE接AD7663的/RD。此外,S3C44B0X通过两个I/O(nCAS0连至/CNVST,GPG3连至BUSY)来控制AD7663的A/D转换过程。
3.3 存储模块设计
3.3.1 存储模块电路设计
传统的数据采集系统由于数据传输速率比较低,数据量比较小,一般可以完成实时分析和处理,所以存储问题并不突出,但高速高精度数据采集系统的数据传输速率很高并且数量很大,采集速度到达一定的限度就无法进行实时分析和处理,这是需要选择适当的存储方式就行存储。
高速高精度数据采集系统的存储要解决两方面的问题,一是存储器的低存储速度与A/D转换器数据端口的高输出速率的匹配问题。二是存储器的容量要大,其原因是高速数据采集会在很短时间产生巨大的数据流,存储系统的容量应满足设计要求。解决A/D转换器与存储器之间的速度匹配问题有两个:一是对高速A/D的数据进行锁存,二是对数据进行高速存储。本设计采用的是对高速的数据进行锁存。选择的芯片是SST39VF160 Flash Rom。
SST39VF160是2MB的Flash芯片,芯片供电电压为2.7~3.6V,符合JEDEC标准输出引脚,可擦写100000个周期,数据保存能力达100年。擦除时间分别为:扇区擦除时间与块擦除时间都是18ms,片擦除时间70ms。利用翻转或数据采集来确定编程是否完成。芯片部结构与电路图如3-8图所示。
图3-8 SST39VF1630芯片部结构图
通过利用微处理器对SST39VF160进行写命令字节的形式来进行数据的读写操作。保持CE#信号低的同时拉低WE#信号写入命令字节,在WE#或CE#信号的下降沿(有出现最晚的来确定)锁存地址总线,而数据总线在WE#或CE#(有出现最早的来确定)信号上升沿被锁存。
本设计是以SST39VF160为设计芯片,详细的介绍在S3C44B0X上进行Flash ROM接口设计。Flash ROM接口设计首先应该确定硬件电路连接,然后设置好S3C44B0X存储器,再按照命令字读、擦除、写操作Flash。本节编写了SectorErase()扇区,BlockErase ()块和ChipErase()芯片擦除函数,以与一个测试主函数来验证读写擦除操作是否正确。
Flash存储器在系统常用于存放程序代码,系统上电或复位后从此获取指令并开始执行。因此,应将存有程序代码的Flash存储器配置到ROM/SRAM的Bank0位置,即将S3C44B0X的nGCS0的引脚接至SST39VF160的n CE引脚;SST39VF160的nOE引脚接S3C44B0X的nOE引脚;nWE引脚接S3C44B0X的nWE;由于SST39VF160的数据宽度是16位。所以将S3C44B0X的引脚OM1接地,OM0通过一上拉电阻接+3.3V,使其工作在16位模式;将SST39VF160的地址总线A19~A0与S3C44B0X的地址总线ADDR1~ADDR20相连,地址线偏移了一位,这是因为S3C44B0X是按字节编址的,而SST39VF160的数据是以每一个16位作为一个数据单元;16位数据总线DQ15~DQ0与S3C44B0X的低16位数据总线DATA31~DATA16相连。Flash的地址空间为0x00000000~0x000FFFFF。与S3C44B0X芯片连接电路如图3-9。
图3-9 Flash ROM连接电路图
其引脚功能描述为:
SCLK:系统时钟;
nSCS:片选;
SCKE:时钟使能;
A0~A11:行/列地址复用线;
BA0~BA1:BANK选通地址;
SRAS:行地址使能。
3.3.2 硬件和存储器设置
由于ARM是32位处理器,以字节为单位编制,数据处理可以以32位进行,存储方式有大小端之分。在这里,将ARM芯片上的EDIAN端接地,选取小段存储方式。SST39VF160是16位数据宽度的,因此还必须设置ARM数据总线宽度,即设置OM[1:0]为01,将Bank0数据总线宽度设置成16位。
BANKCON0寄存器设置中包含了Tacs、Tcos、Tacc、Toch、Tcah、Tpac和PMC7个参数。对它们的设置分别为(此程序段在BootLoader的配置程序中)。
Bank 0 Parameters
B0_Tacs EQU 0x0 ; 0个时钟周期
B0_Tcos EQU 0x0 ; 0个时钟周期
B0_Tacc EQU 0x6 ; 6个时钟周期
B0_Toch EQU 0x0 ; 0个时钟周期
B0_Tcah EQU 0x0 ; 0个时钟周期
B0_Tacp EQU 0x0 ; 0个时钟周期
B0_PMC EQU 0x0 ;正常(1data)
除了Tacc之外,其他值均设为零,Tacc的值要大于芯片的读周期时间,由于S3C44B0X处理器的时钟频率为64MHz,周期大约为15ns,SST39VF160读写时间周期为70ns,所以,Tacc在这里设置为6个时钟周期,即0x6[11]。
3.4 键盘模块设计
键盘的结构一般分为两种形式:线性键盘和矩阵键盘。本设计采用的是4×4矩阵键盘。矩阵键盘的案件按N行M列排队每个键盘占据行列的一个交点,需要的I/O口数目是N+M,容许的最大按键数为N×M。
键盘扫描过程就是有规律的时间间隔查看键盘矩阵,以确定是否有键被按下。一旦处理器判定有一个键被按下,键盘扫描程序就会滤掉抖动,然后再判定是哪个键被按下。每个键被分配一个称为扫描码的唯一标示符,应用程序利用该扫描码来判断应按下了什么键。
3.4.1 键盘线路模块设计
3-10 键盘连接电路图
本设计采用S3C44B0X通用I/O引脚的GPE4~GPE7为行线输入端,GPF5~GPF8为列线输出端,与4×4的键盘相连。通过软件延迟的方式来消除按键抖动,并通过循环扫描的方式得到具体的按键值。
由于通用的I/O口有限,而又需要大量的按键输入,这就要求一种合理的按键结构,即用尽量少的I/O口实现尽可能多的键盘输入。本设计的电路连接方式如图3-10示,以8个I/O口实现16键键盘。GPE4~GPF7为行线输入端,GPF5~GPF8为列线输出端,如图3-10[12]。
3.4.2 寄存器的设置
使用到的I/O口的各个特殊寄存器的地址定义如下:
通用I/O特殊寄存器:
#define rPCONE(*(volatile unsigned *)0x1d20028)
#define rPDATE(*(volatile unsigned *)0x1d2002c)
#define rPUPE(*(volatile unsigned *)0x1d20030)
#define rPCONF(*(volatile unsigned *)0x1d20034)
#define rPDATF(*(volatile unsigned *)0x1d20038)
#define rPUPF (*(volatile unsigned *)0x1d2003c)
对使用的GPE和GPF引脚寄存器进行配置,列输出引脚GF5~GF8在开始时拉低,便于按键发生时,使得行线的输入信号遍地。程序如下:
void InitKey(void)
{
rPCONE &= 0xff;
rPUPE |= 0xf0;
rPCONF = (rPCONF & 0x3ff) | 0x92400; //设置GPF5-8为输出,其他位保持不变
rPUPF |= 0x1e0; //连接键盘的输出都置低电平
rPDATF &= 0x1f;
}
四.数据采集系统的软件设计
硬件电路提供了系统运行的必须环境,还需要软件部分控制才能够运行。本章介绍高数高精度数据数据采集系统的软件设计。软件设计分为数据模数转换模块的程序设计,存储器模块的软件设计,键盘模块的程序设计,LCD显示模块的程序设计和主程序设计。由于C语言具有了可读性强、效率高、易于维护等优点。因此本系统数据采集系统采用C语言进行编写,实现对数据采集模块的控制,数据的处理和显示存储等功能。本章介绍主要的程序模块。
4.1 主程序流程
开始
初始化系统
选择采样通道
AD数据转换
挨打、
写入储存器
添加数据并显示
图4-1 数据采集模块程序框图
系统的主程序所要实现的功能主要是实现系统的初始化、系统芯片之间的信息交流、相应的处理程序。本设计采用模块化编程方式,达到编写不同功能的子程序,实现具体操作的目的。系统的基本流程是,上电复位后,系统首先进行初始化,然后根据相关程序命令转入到相应的子程序模块,完成相应的功能。程序流程图4-1所示。
主程序如下:
#include"adc.h"
#include"flash.h"
#include"lcd.h"
#include"keyboard.h"
#define addrstar 0 //定义flash起始地址
*函数名:init_system
*作用:初始化系统
void init_system(void)
{
LCD_Init();//初始化LCD
InitKey();//初始化键盘
SectorErase(addrstar);//擦除从addrstar开始的一个扇区
init_adc();//初始化ad转换器AD7663
reset_adc();//复位AD7663
}
*函数名:switch_chanel
*作用:通过键盘来选择采样通道
*按数字键边切换到对应通道
char switch_chanel(char chanel)
{
char keynum;
keynum=ReadKey();//读取键盘值
switch(keynum)
{
case 1:chanel=1;break;
case 2:chanel=2;break;
case 3:chanel=3;break;
case 4:chanel=4;break;
case 5:chanel=5;break;
case 6:chanel=6;break;
case 7:chanel=7;break;
case 8:chanel=8;break;
default:break;
}
return chanel;
}
int main(void)
{
INT16U data1,data2;
char chanel;
int i=0,x,y;
init_system();//初始化系统
while(1)
{
chanel=switch_chanel(chanel);//选择采样通道
ADC_CHANEL(chanel);//切换通道
data=read_adc(chanel);//读取AD转换数据
SectorErase(addrstar);//擦除addrstar开始的一个扇区
WordPrograme(addrstar,data);//将数据写入扇区
data2=ReadFlash(addrstar);//将数据从flash中读出来
y=(int )((data*1.0/65536)*240);//将采样的值转换成x,y坐标
x=i;
LCD_PutPixel(x,y,color);//将点显示在LCD上
i++;
if(i==320)//一屏显示完
i=0;
}
}
4.2 数据转换程序
开始
初始化AD
采样通道选择
转换是否完成
返回
启动转换
图4-2 AD数据转换程序流程图
AD7663是一款16位、250KSPS、低功耗、逐次逼近型模数转换器,采用5V单电源供电,并提供8位或16位并行口和一个串行口。AD7663具有分辨率高、采样速率高、功耗小等优点。其模拟输入接到连接到外部引脚IN端。
系统初始化函数void init _ADC();实现AD模块的功能设置,如电压基准的选择,本系统为了提高采集的精确性和准确度而选用外部精确的2.5V基准电压;模拟输入通道选择IN作为模拟信号输入端,多路开关的操作达到切换采集通道的目的AD转换程序,系统AD根据命令进行相应转换采取单次转换方式。AD数据转换程序流程图如图4-2所示。
#include"adc.h"
void delay(INT32U time)
{
while(time--);
}
*函数:init_adc
*作用:初始化AD7663
*参数:无
void init_adc(void)
{
RESET_DOWN;
CNVST_UP;
CS_DOWN;
RD_DOWN;
}
*函数名:reset_adc
*作用:复位AD7663
*参数:无
void reset_adc(void)
{
RESET_UP;
delay(20);
RESET_DOWN;
}
INT16U read_adc(int chanel)
{
INT16U data;
ADC_CHANEL(chanel);
CS_DOWN;
RD_DOWN;
CNVST_DOWN;
delay(20);
CNVST_UP;
while(!Busy);
data=ADCDATA;
return data;
}
另外还有数据存储程序与LCD驱动程序,程序清单。
心得体会
本次设计最终得以顺利完成,非常感我的指导老师。从论文选题直到论文的最终完成,他都给予我尽心尽力的指导。武老师有着过硬的专业知识,以与严谨的治学态度,在这次设计中,我在武老师的领导下对自己所学的专业知识有了进一步的巩固。
通过本次课程设计,使我对ARM嵌入式开发有了一定的掌握和理解,巩固了我在ARM课程中所学的基本理论知识和实验技能,使我对ARM课程有了更深入的了解。进一步激发了我对所学专业学习的兴趣;提高了我的思考与实践能力。在本论文的写作中,我也参照了许多的著作和文章,许多学者的科研成果与写作思路给我很大启发,在此向这些学者们表示由衷的感。
在这次设计中,我克服了许多困难,最后几经修改终至完成。但由于才疏学浅,疏漏之处在所难免,还望老师批评。
参考文献
[1] 田轶.基于 ARM7 的高速高精度数据采集系统设计与实现.大学硕士论文,2011.5
[2] 博.基于ARM的多通道数据采集器的设计与实现.工程大学硕士论文,2011.3
[3] 刚,海兰.一种高速高精度数据采集系统设计.大学-ADI联合实验室论文,2006
[4] 王典洪,汪萍,娟.基于ARM的多路高精度数据采集系统设计与研究.中国矿业大学硕士论文,2009
[5] 莉君,庄晓奇,欧阳才校.基于S3C2440的多路高精度数据采集系统设计.机床与液压,2010,(1):72-74
[6] 宋晓波.基于ARM的通用高精度数据采集系统装置的研究.理工大学硕士论文,2011,3
[7] 波.基于ARM处理器的数据采集系统的设计.科技大学硕士论文,2009.5
[8] 跃.基于SOC单片机的多路数据采集系统设计.理工大学硕士论文,2011.5
[9] 戎,立波.基于ARM处理器的高速高精度数据采集系统设计. 科技信息,2011,(7):459-460
[10] 周立功,华等编著.深入浅出ARM7—LPC213x/214x.:航空航天大学, 2006
[11] 任杰.基于嵌入式技术的数据采集系统的设计与实现.长安大学硕士论文,2009
flash.c程序源代码
#include"flash.h"
*函数名:CheckToggleBit
*参数:无
*作用:等待写操作完成
int CheckToggleBit(void)//等待写操作完成函数
{
volatile INT16U oldstatus,newstatus;
oldstatus=*((volatile INT16U *)0x0);//读取任意地址处的数据
while(1)
{
newstatus=*((volatile INT16U *)0x0);
if((oldstatus&0x40)==(newstatus &0x40))
{
break;
}
else
{
oldstatus=newstatus;
}
}
return 1;
}
void SectorErase(INT32U sa)//扇区擦除函数
{
WriteFlash(0x5555,0xaa);
WriteFlash(0x2aaa,0x55);
WriteFlash(0x5555,0x80);
WriteFlash(0x5555,0xaa);
WriteFlash(0x2aaa,0x55);
WriteFlash(sa,0x30);
CheckToggleBit();
}
*函数名:WordPrograme
*参数:address写入的地址data,写入的参数
*作用:向地址address写入两字节数据data
int WordPrograme(INT32U address,INT16U data)//字写入,每次写入两个字节
{
WriteFlash(0x5555,0xaa);
WriteFlash(0x2aaa,0x55);
WriteFlash(0x5555,0xa0);
WriteFlash(address,data);
return(CheckToggleBit());
}
lcd.c源程序代码
#include"lcd.h"
void LCD_Init(void)
{
rREDLUT = 0xfdb96420;//使用8种颜色,下同
rGREENLUT = 0xfdb96420;
rBLUELUT = 0xfdb40;//使用4种颜色
//8位单扫描
rLCDCON1=ENVID_DS|(DISMODE<<5)|(MMODE<<7)|(WDLY<<8)|(WLH<<10)|(CLKVAL<<12);
rLCDCON2=(LINEVAL)|(HOZVAL<<10)|(LINEBLANK<<21);
rLCDCON3=0x0;//禁止自刷先模式
//彩色模式MODESEL,设置LCDBANK和LCDBASEU
rLCDSADDR1=MODESEL|(LCDBANK<<2)|LCDBASEU;
//设置MVAL和LCDBASEL
rLCDSADDR2=(MVAL<<21)|(LCDBASEL)|(MVAL<<21);
rLCDSADDR3=PAGEWIDTH|(OFFSIZE<<9);
rDITHMODE=0x0;//抖动模式寄存器
rDP1_2=0xa5a5;//抖动模式占空比,默认值
rDP4_7=0xba5da65;
rDP3_5=0xa5a5f;
rDP2_3=0xd6b;
rDP5_7 =0xeb7b5ed;
rDP3_4 =0x7dbe;
rDP4_5=0x7ebdf;
rDP6_7=0x7fdfbfe;
rLCDCON1=ENVID_EN|rLCDCON1;//使能LCD
}
void LCD_PutPixel(int x,int y,unsigned char color)
{
if(x<SCR_XSIZE&&y<SCR_YSIZE)
*(((unsigned int *)(FrameBUffer))+y*SCR_XSIZE+x)=color;
}
void LCD_DrawHLine(int x,int y,int dx,int linewdith,unsigned int color)
{
int i;
while((linewdith--)>0)
{
for(i=0;i<dx;i++)
{
LCD_PutPixel(x, y,color);
}
}
}
展开阅读全文