ARM课程设计报告Word格式.docx
- 文档编号:20275988
- 上传时间:2023-01-21
- 格式:DOCX
- 页数:29
- 大小:573.60KB
ARM课程设计报告Word格式.docx
《ARM课程设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《ARM课程设计报告Word格式.docx(29页珍藏版)》请在冰豆网上搜索。
检测数字输入
(3)GPIO引脚描述
GPIO管脚描述见表4.1。
表4.1GPIO管脚描述
管脚连接设置
将相应管脚的PINSELn位设置为00,即选择GPIO功能;
大部分管脚复位后默认为GPIO。
3、GPIO寄存器
LPC2138有2个32位的通用I/O口。
PORT0使用了30个管脚,PORT1有多达16个管脚可用GPIO功能。
PORT0和PORT1由2组(4个)寄存器控制,如表4.2所示。
表4.2GPIO寄存器映射
4.GPIO输出实验——流水灯实验
EasyARM2131开发板上的8路LED(LED8~LED1)分别可选择P1[25:
18]进行控制,电路如图1所示。
图1
当跳线JP12全部选择LED8~LED1后,P1.25~P1.18分别控制这8路LED,就可以进行流水灯实验。
流水灯显示花样可以通过数组人为定义,亦可通过一定的算法计算,流程图如图2所示。
图2
流水灯程序:
/
#include"
config.h"
/*LED8~LED18个LED分别由P1.25~P1.18控制*/
constuint32LEDS8=(0xFF<
<
18);
//P1[25:
18]控制LED8~LED1,低电平点亮
/*
*********************************************************************************************************
**函数名称:
DelayNS()
**函数功能:
长软件延时
**入口参数:
dly延时参数,值越大,延时越久
**出口参数:
无
*/
voidDelayNS(uint32dly)
{
uint32i;
for(;
dly>
0;
dly--)
for(i=0;
i<
100000;
i++);
}
main()
流水灯显示实验。
**调试说明:
连接跳线JP12至LED8~LED1。
/*流水灯花样,低电平点亮,注意调用时候用了取反操作*/
constuint32LED_TBL[]={
0x00,0xFF,//全部熄灭后,再全部点亮
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,//依次逐个点亮
0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,//依次逐个叠加
0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03,0x01,//依次逐个递减
0x81,0x42,0x24,0x18,0x18,0x24,0x42,0x81,//两个靠拢后分开
0xA0,0x50,0x7e,0x28,0x14,0x0A,0x05,0x82,
0x81,0xC3,0xE7,0xFF,0xFF,0xE7,0xC3,0x81//从两边叠加后递减
};
intmain(void)
uint8i;
//PINSEL1=0x00000000;
//设置管脚连接GPIO
PINSEL2=PINSEL2&
(~0x08);
//P1[25:
16]连接GPIO
IO1DIR=LEDS8;
//设置LED1控制口为输出
while
(1)
{
42;
i++)
{/*流水灯花样显示*/
IO1SET=~((LED_TBL[i])<
DelayNS(20);
IO1CLR=((LED_TBL[i])<
}
}
return0;
2.SPI主机实验-7段数码管显示
实验使用LPC2131的SPI接口作为主机向74HC595发送数据,数据内容由7段数码管显示,同时SPI主机接收74HC595的移位输出数据,即接收回前一个显示数据。
实验硬件连接如图3所示
图3
SPI接口控制74HC595硬件连接图
图中已经将最高位输出(SQH)连接到LPC2131的SPI接口的MISO0,可用来读回74HC595移位输出的数据。
该实验演示在7段数码管上显示一些字符,字符的字模表存于一数组中,流程图如图4所示。
图4
LED数码管显示实验流程图
SPI程序:
voidDelayNS(uint32dly)
{
for(;
dly--)
for(i=0;
50000;
voidSSP_Init(void)
SSPCR0=(0x01<
8)|//SCR设置SPI时钟分频
(0x00<
7)|//CPHA时钟输出相位,仅SPI模式有效
(0x01<
6)|//CPOL时钟输出极性,仅SPI模式有效
4)|//FRF帧格式00=SPI,01=SSI,10=Microwire,11=保留
(0x07<
0);
//DSS数据长度,0000-0010=保留,0011=4位,0111=8位,1111=16位
SSPCR1=(0x00<
3)|//SOD从机输出禁能,1=禁止,0=允许
2)|//MS主从选择,0=主机,1=从机
1)|//SSESSP使能,1=允许SSP与其它设备通信
//LBM回写模式
SSPCPSR=0x52;
//PCLK分频值
//SSPIMSC=0x07;
//中断屏蔽寄存器
SSPICR=0x03;
//中断清除寄存器
uint8SSP_SendData(uint8data)
//IOCLR=SLAVE_CS;
//选择从机
SSPDR=data;
while((SSPSR&
0x01)==0);
//等待TFE置位,即发送FIFO空
//IOSET=SLAVE_CS;
return(SSPDR);
uint8constDISP_TAB[16]={
//0123456789
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,
//AbCdEF
0x88,0x83,0xC6,0xA1,0x86,0x8E};
volatileuint8rcv;
intmain(void)
PCONP|=1<
10;
//PINSEL1=0x000002A8;
//设置SSP管脚连接
//PINSEL1=0xAA<
2;
PINSEL1=(PINSEL1&
(~(0xFF<
2)))|(0xAA<
2);
//IO0DIR=SLAVE_CS;
//IO0SET=SLAVE_CS;
SSP_Init();
//初始化SSP接口
while
(1)
{
16;
rcv=SSP_SendData(DISP_TAB[i]);
//发送显示数据
DelayNS(80);
//延时
return(0);
3、定时器
(1)LPC2131具有2个32位可编程定时/计数器,均具有4路捕获、比较路匹配并输出电
路。
定时器对外设时钟(pclk)周期进行计数,可选择产生中断或根据4个匹配寄存器的设定,在到达指定的定时值时执行其它动作(输出高/低电平、翻转或者无动作)。
它还包括4个捕获输入,用于在输入信号发生跳变时捕获定时器值,并可选择产生中断。
可用于对内部事件进行计数的间隔定时器,或者通过捕获输入实现脉宽调制,亦可作为
自由运行的定时器。
定时器0和定时器1除了外设基地址以外,其它都相同。
(2)定时器0定时实验——查询方式
用定时器0实验0.5秒定时,查询标志位等待定时时间到达,对蜂鸣器进行控制,让蜂鸣器每秒钟响一次。
程序在T0MR0中设定定时常数,在T0MCR中设置定时器0匹配后复位TC并产生中断标志,接下来程序查询等待中断标志置位。
若定时时间到,先清除Timer0中断标志,然后取反BEEP控制口的输出状态,流程图如图5所示。
图5定时器0定时实验流程图
定时器程序:
#defineBEEP1<
7/*P0.7控制蜂鸣器,低电平蜂鸣*/
使用定时器实现0.5秒钟定时,控制蜂鸣器鸣叫。
需要将跳线JP11连接BEEP。
PINSEL1=0x00000000;
/*设置管脚连接GPIO*/
IO0DIR=BEEP;
/*设置BEEP控制口输出*/
/*定时器0初始化*/
T0TC=0;
/*定时器设置为0*/
T0PR=0;
/*时钟不分频*/
T0MCR=0x03;
/*设置T0MR0匹配后复位T0TC,并产生中断标志*/
T0MR0=Fpclk/2;
/*0.5秒钟定时*/
T0TCR=0x01;
/*启动定时器*/
while((T0IR&
0x01)==0);
/*等待定时时间到*/
T0IR=0x01;
/*清除中断标志*/
if((IO0SET&
BEEP)==0)
IO0SET=BEEP;
/*BEEP停止蜂鸣*/
else
IO0CLR=BEEP;
/*BEEP蜂鸣*/
4、实时时钟
(1)实时时钟(RTC,RealTimeClock)提供一套计数器在系统上电和关闭操作时对时间进行测量,RTC消耗的功率非常低。
LPC2131的RTC时钟可由独立的32.768KHz振荡器或基于VPB时钟的可编程预分频器来提供。
另外,RTC还具有专用的电源管脚Vbat,可连接到电池或其它器件使用的相同的3.3V电压上。
要使RTC中断能够唤醒掉电的CPU,必须选择外部时钟源。
RTC功能结构图如图6所示:
图6RTC方框图
(2)LPC2131的实时时钟,可用来进行定时报警,日期及时分秒计时等等。
RTC具有独立的电源和时钟源,电源消耗很低,特别适合于电池供电,CPU不连续工作(掉电模式)的系统。
通过设置中断唤醒寄存器(INTWAKE),RTC中断还能将CPU从掉电模式下唤醒。
设置时钟控制寄存器(CCR)可以选择RTC的计数时钟,由独立的32.769KHz振荡器提供或将Fpclk进行分频得到。
当使用Fpclk作为时钟源时,它的基准时钟分频器允许调节任何频率高于65.536KHz的外设时钟源产生一个32.768KHz的基准时钟,实现准确计时操作。
RTC寄存器功能框图如图7所示:
图7RTC寄存器功能框图
(3)万年历显示实验
实验需要使用提供的EasyARM.exe软件。
程序读取RTC内部的时钟,送到上位机在EasyARM.exe的万年历终端上显示,流程图见图8
图8万年历显示实验流程图
万年历程序:
//定义串口模式设置的数据结构
typedefstructUartMode
uint8datab;
//字长度5/6/7/8
uint8stopb;
//停止位1/2
uint8parity;
//奇偶校验0-无校验,1-奇校验,2-偶校验
}UARTMODE;
uint8UART0_Init(uint32baud,UARTMODEset)
uint32bak;
//参数过滤
if((0==baud)||(baud>
115200))return(0);
if((set.datab<
5)||(set.datab>
8))return(0);
if((0==set.stopb)||(set.stopb>
2))return(0);
if(set.parity>
4)return(0);
//设置串口波特率
U0LCR=0x80;
//DLAB=1
bak=(Fpclk>
>
4)/baud;
U0DLM=bak>
8;
U0DLL=bak&
0xff;
//设置串口模式
bak=set.datab-5;
if(2==set.stopb)bak|=0x04;
if(0!
=set.parity)
set.parity=set.parity-1;
bak|=0x08;
bak|=set.parity<
4;
U0LCR=bak;
return(0);
voidSendByte(uint8data)
U0THR=data;
while((U0LSR&
0X20)==0);
//等待数据发送
voidPC_DispChar(uint8no,uint8chr)
SendByte(0xff);
SendByte(0x81);
SendByte(no);
SendByte(chr);
SendByte(0x00);
uint8constSHOWTABLE[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voidSendTimeRtc(void)
uint32datas;
uint32times;
times=CTIME0;
//读取完整的时钟寄存器
datas=CTIME1;
bak=(datas>
16)&
0xfff;
//获取年
PC_DispChar(0,SHOWTABLE[bak/1000]);
bak=bak%1000;
PC_DispChar(1,SHOWTABLE[bak/100]);
bak=bak%100;
PC_DispChar(2,SHOWTABLE[bak/10]);
PC_DispChar(3,SHOWTABLE[bak%10]);
8)&
0x0f;
//获取月
PC_DispChar(4,SHOWTABLE[bak/10]);
PC_DispChar(5,SHOWTABLE[bak%10]);
bak=datas&
0x1f;
//获取日
PC_DispChar(6,SHOWTABLE[bak/10]);
PC_DispChar(7,SHOWTABLE[bak%10]);
bak=(times>
24)&
0x07;
//获取星期
PC_DispChar(8,SHOWTABLE[bak]);
//获取小时
PC_DispChar(9,SHOWTABLE[bak/10]);
PC_DispChar(10,SHOWTABLE[bak%10]);
0x3f;
//获取分钟
PC_DispChar(11,SHOWTABLE[bak/10]);
PC_DispChar(12,SHOWTABLE[bak%10]);
bak=times&
//获取秒钟
PC_DispChar(13,SHOWTABLE[bak/10]);
PC_DispChar(14,SHOWTABLE[bak%10]);
voidRTCInit(void)
PREINT=Fpclk/32768-1;
//设置基准时钟分频器
PREFRAC=Fpclk-(Fpclk/32768)*32768;
CCR=0x00;
//禁止时间计数器
YEAR=2005;
MONTH=01;
DOM=10;
DOW=4;
HOUR=8;
MIN=30;
SEC=59;
CIIR=0x01;
//设置秒值的增量产生1次中断
CCR=0x01;
//启动RTC
UARTMODEuart0_set;
PINSEL0=0x00000005;
//连接IO到UART0
uart0_set.datab=8;
uart0_set.stopb=1;
uart0_set.parity=0;
UART0_Init(115200,uart0_set);
U0FCR=0x01;
//FIFO使能
RTCInit();
while(0==(ILR&
0x01));
//等待RTC增量中断
ILR=0x01;
//清除中断标志
SendTimeRtc();
三、实验仪器
1、2138开发板2、ARM软件3、微型计算机
四、EasyARM2131开发套件功能介绍
定位
选用LPC213x系列ARM开发产品的工程师;
组建嵌入式系统教学与开发实验室;
有购买能力的个人。
概述
EasyARM2131开发板是广州周立功公司设计的EasyARM系列开发套件之一,采用了PHILIPS公司基于ARM7TDMI-S核、单电源供电、LQFP64封装的LPC2131,具有JTAG仿真调试、ISP编程等功能。
开发板上提供了一些键盘、LED、蜂鸣器等常用功能部件,还具有RS232接口电路、I2C存储器电路。
另外,用户也可以更换兼容的CPU进行仿真调试,如LPC2132、LPC2138、LPC2142等。
灵活的跳线组合(开发板内使用的所有I/O均可断开连接),还有用户I/O接口,极大地方便了用户进行32位ARM嵌入式系统
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM 课程设计 报告