0837嵌入式体系结构综合实验报告_arm体系结构实验报告
0837嵌入式体系结构综合实验报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“arm体系结构实验报告”。
重庆理工大学
嵌入式体系结构综合实验报告
题目:基于LPC2114的定时数据采集与通讯程序设计
二级学院 计算机科学与工程学院 专 业 计算机科学与技术
班 级 0837-1 学生姓名 冉晨 学号 10803070119 教 师 刘政 时 间 2010/11/14 成 绩
目录
一、实验名称-------------3
二、实验目的-------------3
三、实验设备与环境----3
四、实验基本原理-------3
五、实验内容(包括主要算法分析与流程图)--4
六、实验源程序及分析-5
七、实验运行结果及分析-----------------------------7
八、实验心得体会-------8
一、实验名称
基于LPC2114的定时数据采集与通讯程序设计
二、实验目的 使用EasyARM2114板上AIN0和AIN1输入模拟量, 定时1mS中断采样,然后采样的电压每秒通过UART串口传送到PC机串口助手显示.三、实验设备与环境
EasyARM2114实验板,PC机,Windows XP操作系统, H-JTAG串口,实验相关数据线, ARM Developer Suite相关软件,串口调试助手.四、实验基本原理
本设计任务选用了Philips的LPC2114微处理器作为现场控制的核心。设计采用定时中断方式,要求每1ms采集一点,LPC2114将采集所转换的数据存储在ADDR(A/D数据存储器)中, A/D采样结果也采用中断读取.然后程序通过SPI实现UART通讯, 传送到PC机串口助手显示, 其中的电压值为实际采样值,每秒显示完后换行,同时要求串口发送采用中断.五、实验内容(包括主要算法分析与流程图)
设置P0,P1,P0.27,P0.28连接定时器初始化初始化串口模式A/D初始化数据采集并传送显示(每秒换行)中断 该实验最主要的算法实现在于中断的实现(包括实现UART的中断和数据采集后的A/D采样结果),结合代码分析: void __irq IRQ_ADC(){
count++;
if(count%2==1)
{
ADC_Data=ADDR;//存入寄存器数据
ADC_Data=(ADC_Data>>6)&0x3FF;
ADC_Data=ADC_Data*3300;
ADC_Data=ADC_Data/1024;//换算
sum1+=ADC_Data;//存入电压AIN0总值
}
else
{
ADC_Data=ADDR;
ADC_Data=(ADC_Data>>6)&0x3FF;
ADC_Data=ADC_Data*3300;
ADC_Data=ADC_Data/1024;//换算
sum2+=ADC_Data;// 存入电压AIN1总值
}
VICVectAddr=0x00;//通知VIC中断处理结束 } 关于ADC的初始化: void ADC_Init(){
ADCR=
(3)
//选择通道
((Fpclk/1000000-1)
(0
(0
(1
//PDN=1模式为正常工作
(0
(1
(1
//EDGE=1
VICVectCntl2=0x32;
VICVectAddr=(uint32)IRQ_ADC;
VICVIntEnable |=0x00040000;
}
六、实验源程序及分析
#include“config.h” #include“stdio.h” #define UART_BPS 115200 uint8 comERR;int count=0;uint32 ADC_Data;long sun1=0,sum2=0;int v1=0,v2=0;int pSd=0,pRd=0;char SdBuff[100],RdBuff[20];void Time0Init()//定时器初始化 {
T0PR=9;
T0MCR=0x03;
T0MR1=1106/2;
T0TCR=0x03;
T0TCR=0x01;
T0EMR=0xC0;
} void __irq IRQ_UART_Exception()//通讯发送中断 {
switch(U0IIR&0x0f)
{
case 0x06:
comERR=U0LSR;
break;
case 0x04:
while((U0LSR & 0x01)==1)
{
RdBuff[pRd++]=U0RBR;
if(pRd>=100)pRd=0;
}
break;
case 0x0c:
while((U0LSR&0x01)==1)
{
RdBuff[pRd++]=U0RBR;
if(pRd>=100)pRd=0;
}
break;
case 0x02:
if(SdBuff[pSd]!=' ')U0THR=SdBuff[pSd++];
break;
}
VICVectAddr=0x00;
} void UART0_SendStr()//输出到显示屏 {
sprintf(SdBuff,“Voltage0 is %dmV
Voltage0 is %dmVn”,v1,v2);
for(pSd=0;pSd
uint16 Fdiv;
U0LCR=0x03;
Fdiv=(Fpclk/16)/UART_BPS;
U0DLM=Fdiv/256;
U0DLL=Fdiv%256;
U0LCR=0x03;
U0LER=ox07;
U0FCR=0x87;
VICVectCntl1=0x26;
VICVectAddr1=(uint32)IRQ_UART_Exception;
VICIntEnable |=0x00000040;} void __irq IRQ_ADC()//内部中断 {
count++;
if(count%2==1)
{
ADC_Data=ADDR;
ADC_Data=(ADC_Data>>6)&0x3FF;
ADC_Data=ADC_Data*3300;
ADC_Data=ADC_Data/1024;
sum1+=ADC_Data;
}
else
{
ADC_Data=ADDR;
ADC_Data=(ADC_Data>>6)&0x3FF;
ADC_Data=ADC_Data*3300;
ADC_Data=ADC_Data/1024;
sum2+=ADC_Data;
}
VICVectAddr=0x00;} void ADC_Init()//A/D初始化 {
ADCR=
(3)
|
((Fpclk/1000000-1)
(0
|
(0
|
(1
|
(0
|
(1
|
(1
|
VICVectCntl2=0x32;
VICVectAddr=(uint32)IRQ_ADC;
VICVIntEnable |=0x00040000;
} int main(){ //设置引脚
PINSEL0=0x00000005;
PINSEL1=0x01400000;
VICIntEnable=0x00000000;
Time0Init();
UART0_Ini();
ADC_Init();
while(1)
{
if(count>=1000)
{
v1=sum1/500;
v2=sum2/500;
count=0;
sum1=0;
sum2=0;
UART0_SendStr();
}
}
return 0;}
七、实验运行结果及分析
由UART串口发送至屏幕显示,每秒输出后中断直接换行.八、实验心得体会
通过该次实验,我对LPC2114有了比较全面的研究.由于内置了宽范围的串行通信接口,它们也非常适合于通信网关、协议转换器、嵌入式软件调制解调器以及其它各种类型的应用。给我比较深刻的印象的功能就是UART通讯方面.这次实验让我对UART发送信息的过程有了一个全面的了解,对SPI接口的使用有了一个初步的认识.但是仍然还是有很多不理解的地方,比如中断的详细流程和实现,都比较模糊.我想应该能在以后的学习中逐步地完善,达到进步.总之,这次实验让我收获颇丰,对嵌入式也有了一个理性的认识.9