ARM秒表设计.docx

上传人:b****6 文档编号:6756966 上传时间:2023-01-10 格式:DOCX 页数:13 大小:328.35KB
下载 相关 举报
ARM秒表设计.docx_第1页
第1页 / 共13页
ARM秒表设计.docx_第2页
第2页 / 共13页
ARM秒表设计.docx_第3页
第3页 / 共13页
ARM秒表设计.docx_第4页
第4页 / 共13页
ARM秒表设计.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

ARM秒表设计.docx

《ARM秒表设计.docx》由会员分享,可在线阅读,更多相关《ARM秒表设计.docx(13页珍藏版)》请在冰豆网上搜索。

ARM秒表设计.docx

ARM秒表设计

EasyARM2131开发板实验报告

实验名称:

学生姓名:

报告成绩:

 

图1.18EasyARM2l3l元件布局图

 

(结合UARTO、定时器0设计的实验)

实验目的:

\.7

2345

1)结合UART0和定时器0,设计一个秒表复习UART0和定时器0的工作原理和应用熟悉掌握ARM中的程序应用,将理论结合实际通过本次实验,将以前学的进行结合使用,以检验自己的学习质量更加熟练了ARM的实验环境

实验仪器:

硬件:

Easy-ARM实验开发板一套

计算机一台(内装有ADS1.2及EasyJTAG仿真器)

软件:

Windowsxp系统,ADS1.2集成开发环境

实验原理:

1.中断:

LPC2131通过向量中断控制器(VIC)管理中断。

外设中断信号需要经过2个开关才能到达ARM内核,真正产生异常,逻辑示意图如图4.129所示。

如果在VIC中使能了相应外设的中断,外设中断才能到达VIC并向内核发送中断请求;只有使能了内核中断IRQ或者FIQ,内核才能真正产生异常。

使用VIC的IRQ中断处理过程如图4.130所示:

用户程序首先要初始化VIC使能相关中断,然后正常运行用户程序(如图4.130中的①);

当有IRQ中断产生时,VIC将会根据中断源设置VICVectAddr寄存器为相应中断服务程序的地址(如图4.130中的②),

切换处理器工作模式为IRQ模式,并跳转到异常向量表的IRQ中断入

口0x00000018处(如图4.130中的③);

读取VICVectAddr寄存器的值然后放入PC程序指针,跳转到相应中断

服务程序(如图4.130中的④);

并返回原中断点(如图4.130

中断服务中执行相应的中断处理,清除中断标志,(如图4.130中的⑤);中断服务完成后,切换回原来的模式,

中的⑥)。

图4J,30憧用VIC的IRQ申範处理过握

2.UARTO查询:

(1)特性:

16字节收发FIFO;

寄存器位置符合16C550工业标准;

接收器FIFO触发点可为1,4,8和14字节;内置波特率发生器;

LPC2131包含使能实现软件流控制的机制。

(2)结构:

UART接收器模块UxRx监视串行输入线RxD的有效输入。

UARTRx移位寄存器(UxRSR)通过RxD接收有效的字符。

当UxRSR接收到一个有效字符时,它将该字符传送到UARTRx缓冲寄存器FIFO中,等待CPU或主机通过主机接口进行访问。

UART发送器模块UxTx接收CPU或主机写入的数据并将数据缓存到UARTTx保持寄存器FIF(UxTHR)中。

UARTTx移位寄存器(UxTSR)读取UxTHR中的数据并将数据通过串行输出管脚TxD发送。

UART波特率发生器模块UxBRG产生UARTTx模块所使用的定时。

UxBRG模块时钟源为VPB时钟(pcik)。

主时钟与UxDLL和UxDLM寄存器所定义的除数相除得到UARTTx模块使用的时钟。

该时钟为16倍过采样时钟NBAUDOUT。

中断接口包含寄存器UxIER和UxIIR。

中断接口接收几个由UxTx和UxRx发出的单时钟宽度的使能信号。

UxTx和UxRx的状态信息保存在UxLSR中。

UxTx和UxRx的控制信息保存在UxLCR中。

UART的结构如图4.16所示:

VPB接口提供CPU或主机与UART之间的通信连接。

PSEl

PSFE

R'jRJTE

*丹严2】

AR

t.lft

荃4花UART方推图

3.定时器:

(1)概述:

LPC2131具有2个32位可编程定时/计数器,均具有4路捕获、4比较路匹配并输出电路。

定时器对外设时钟(pcik)周期进行计数,可选择产生中断或根据4个匹配寄存器的设定,在到达指定的定时值时执行其它动作(输出高/低电平、

翻转或者无动作)。

它还包括4个捕获输入,用于在输入信号发生跳变时捕获定时器值,并可选择产生中断。

可用于对内部事件进行计数的间隔定时器,或者通

过捕获输入实现脉宽调制,亦可作为自由运行的定时器。

定时器0和定时器1除了外设基地址以外,其它都相同。

(2)定时器特性:

带可编程32位预分频器的32位定时器/计数器;

具有多达4路32位的捕获通道-当输入信号跳变时可取得定时器的瞬时值,也可选择使捕获事件产生中断;

4个32位匹配寄存器:

匹配时定时器继续工作,可选择产生中断;

匹配时停止定时器,可选择产生中断;

匹配时复位定时器,可选择产生中断。

多达4个对应于匹配寄存器的外部输出,具有下列特性:

匹配时设置为低电平;

匹配时设置为高电平;

匹配时翻转;

匹配时无动作。

(3)结构

定时器于定时器0)

If

T

和定时器1的方框图,如下图所示:

(注:

捕获寄存器3不能用

1匹£«非帝01

H

[亿LW厚番1

[TSyjflf孚舊2

1且配奇导话31

H

1鬼者【奇#番

1

(蛉難匹虻奇厚爵

[斷寄殍燕

V'ATl-C)

TC

VAMWA-T

•注:

掩莪菇族3疋:

绽羽于定卜:

再打

$4.85建时器方嗨$

(4)定时器基本操作方法:

计算定时器的时钟频率,设置PR寄存器进行分频操作;

设置比较匹配通道的初值及其工作模式,若是使用捕获功能,则设置捕获方式;

若使用定时器的相关中断,则设VIC,使能中断;设置TCR,启动定时器。

如前所述,定时计数器时钟频率计算如下:

计数吋钟频率=冬岂

N+]

结合了UARTO和定时器,自编程序设计的一个可以记录20个时间值的秒表。

五、

实验步骤:

1)

2)

3)

八、

按照开发板说明连接计算机,打开ADS1.2和H-JTAG软件,给开发板上电、调试。

载入编好的程序,运行ADS.12软件;

观察实验现象,看程序是否正常运作,有没有达到实验预计的功能。

实验程序流程图:

 

七、程序:

1.程序说明:

本程序是结合了UART0和定时器,自编程序设计的一个可以记录20个时间值的秒表。

2.实验程序(表格内和字体加粗部分为增加修改的程序):

#include"config.h"

#include"stdio.h"

#defineUART_BPS115200

uint32K1=<<16;

uint32K2=<<17;

uint32K3=<<18;

uint32h=0,m=0,s=0,ss=0,i=1;

charstr[20],strr[30]

//串口通讯波特率

/****************************************************************************************

**

函数名称函数功能入口参数出口参数

IRQ_TimerO()

定时器0中断服务程序,取反LED9控制口。

 

****************************************************************************************/

void__irqIRQ_Timer0(void){

s++;

if(ss==100){ss=0;s++;}if(s==60){s=0;m++;}if(m==60){m=0;h++;}if(h==24){h=0;}

T0IR=0x01;

VICVectAddr=0x00;}

/**

/*清除中断标志*/

/*通知VIC中断处理结束*/

函数名称

函数功能

入口参数

出口参数

DelayNS()长软件延时。

dly延时参数,值越大,延时越久无

****************************************************************************************/

voidDelayNS(uint32dly){

uint32i;

for(;dly>0;dly--)

for(i=0;i<50000;i++);

/*************

**函数名称**函数功能率115200。

**入口参数**出口参数

UART0_Init()

串口初始化,设置为8位数据位,1位停止位,无奇偶校验,波特

****************************************************************************************/

voidUART0_Init(void)

{

uint16Fdiv;

U0LCR=0x83;//DLAB=1,允许设置波特率

Fdiv=(Fpclk/16)/UART_BPS;//设置波特率

U0DLM=Fdiv/256;

U0DLL=Fdiv%256;

U0LCR=0x03;

/****************************************************************************************

 

UART0_SendByte()向串口发送字节数据,并等待发送完毕,查询方式。

dat要发送的数据

UART0_SendStr()向串口发送一字符串str要发送的字符串的指针无

函数名称

函数功能

入口参数

出口参数

****************************************************************************************/voidUART0_SendByte(uint8dat){

U0THR=dat;

//等待数据发送完毕

while((U0LSR&0x40)==0);}

voidPC_DispChar(uint8x,uint8y,uint8chr,uint8color){

UART0_StendByte(0xff);UART0_StendByte(x);

UART0_StendByte(y;UART0_StendByte(chr);

UART0_StendByte(color);}

/**

函数名称

函数功能

入口参数

出口参数

****************************************************************************************/voidUART0_SendStr(uint8x,uint8y,uint8color,char*str)

{

while

(1)

{

if(*str=='\0')break;//遇到结束符,退出

PC_DispChar(x++,y,*str++,color);//发送数据if(x>=80){x=0;y++;}

}

}

voidreset()

{h=0;m=0;s=0;ss=0;

for(i=1;i<21;i++)

{

spirntf(strr,"%2d--%2d:

%2d:

%2d:

%2d",i,h,m,s,ss);UART0_SendStr(0,i,0x30,strr);

}

i=1;

voidxianshi()

{

spirntf(str,"%2d:

%2d:

%2d:

%2d",i,h,m,s,ss);

UART0_SendStr(1,0,0x30,str);

}

main()

使用定时器实现1秒钟定时,控制LED9闪烁。

中断方式。

需要将跳线JP11连接BEEP。

/*************

**函数名称

**函数功能

**调试说明

****************************************************************************************/intmain(void)

{

/*设置管脚连接GPIO*/

PINSEL0=0x00000005;

IRQEnable();

/*IRQ中断使能*/

 

/*设置定时器0中断IRQ*/

VICIntSelect=0x00;

VICVectCntl0=0x20|0x04;

VICVectAddr0=(uint32)IRQ_Timer0;

VICIntEnable=1<<0x04;

/*所有中断通道设置为IRQ中断*//*设置定时器0中断通道分配最高优先级*//*设置中断服务程序地址*/

/*使能定时器0中断*/rest()while(IO0PIN&K1);DelayNs(80);while(!

(IO0PIN&K1));

T0TCR=0x01;/*启动定时器*/while

(1)

{

if((IO0PIN&K1)==0)

{

while(!

(IO0PIN&K1));

DelayNs(80);

T0TCR=0x00;

while((IO0PIN&K1))

{

if((IO0PIN&K3)==0){rest();xianshi();}

}

while(!

(IO0PIN&K1));

DelayNs(80);

T0TCR=0x01;

}

if((IO0PIN&K2)==0)

{

while(!

(IO0PIN&K2));

DelayNs(80);

if(i<21)

{

spimtf(str,"%2d--%2d:

%2d:

%2d:

%2d",i,h,m,s,ss);

UART0_SendStr(0,i,0x30,str);

i++;

}

}

xianshi();

}

return0;}

EndOfFile

****************************************************************************************/

七、实验现象:

在运行本实验程序后,实验现象如下:

打开DOS窗口:

1)

2)

3)

4)

当按下KEY1键时,秒表开始启动;

当按下KEY2键时,将计数到底时间记录下来;

当按下KEY3键时,秒表停止走动;最多可以记录20个时间值。

八、实验心得体会:

通过本次实验,让我又复习了GPIO、SPI的7段数码管的应用;了解了实时时钟的工作原理及其应用;以及掌握了综合几个小实验实现一个新功能;更加熟练了ARM的实验环境。

通过这次实验也让我学会了如何不断地发现问题并解决问题。

比如,在定时10s时,定时不准,不能实现每倒计时一秒蜂鸣器就响一次、LED灯闪一下和数码管显示相应的数字。

后来想了很久并通过和同学讨论才解决这个问题。

还有就是在一些小细节上也遇到不少问题,不过这些小问题都通过一次又一次的运行仿真解决了。

总的来说,要做到每做一个实验,不但能实现该有的功能还要能学到不少的知识。

这样才能达到了做实验的目的。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1