ARM9控制LED流水灯程序的设计说明文档格式.docx
- 文档编号:20416588
- 上传时间:2023-01-22
- 格式:DOCX
- 页数:18
- 大小:1.21MB
ARM9控制LED流水灯程序的设计说明文档格式.docx
《ARM9控制LED流水灯程序的设计说明文档格式.docx》由会员分享,可在线阅读,更多相关《ARM9控制LED流水灯程序的设计说明文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
1
课程设计态度评价
2
出勤情况评价
3
任务难度评价
4
工作量饱满评价
5
6
设计中创新性评价
7
论文书写规化评价
8
综合应用能力评价
综合评定等级
评阅人 职称
20年月日
课程设计任务书........................................................................2
第1章课程设计目的..............................................................4
第2章S3C2440的I/O口配置..............................................5
第3章S3C2440的I/O口寄存器..........................................6
第4章课程设计过程..............................................................9
4.1设计步骤.........................................................................9
4.2部分原理图.....................................................................9
4.3源程序............................................................................10
4.4编译调试结果................................................................17
第8章课程设计心得...........................................................19
参考文献...................................................................................20
第1章课程设计目的
这学期开了嵌入式这门课程,之前就了解到嵌入式系统是当前最热门最有发展前途的IT应用领域之一。
嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。
特别是随着消费家电的智能化,嵌入式更显重要。
像我们平常常见到的手机、可视、PDA、电子字典、VCD/DVD/MP3Player、机顶盒(SetTopBox)、数字相机(DC)、数字摄像机(DV)、高清电视(HDTV)、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等等都是典型的嵌入式系统。
随着社会的发展,嵌入式在未来的应用会越来越广泛。
随着物联网的时代的到来,电器将会与互联网,移动成为一体,通过无线通信技术以及互联网技术将可以使人们在任何时候控制电器等的工作。
通过这次课程设计使我们了解基本的嵌入式编程方法以及培养我们对嵌入式编程的兴趣,与此同时,我们还能巩固一下C编程和汇编编程基础,为将来的嵌入式学习和工作做好充足的准备!
第2章S3C2440的I/O口配置
在S3C2440的CPU中有130多个多功能的输入输出引脚,分为8个端口,如下所示:
-PortA(GPA):
25-outputport
-PortB(GPB):
11-input/outport
-PortC(GPC):
16-input/outputport
-PortD(GPD):
-PortE(GPE):
-PortF(GPF):
8-input/outputport
-PortG(GPG):
-PortH(GPH):
9-input/outputport
-PortJ(GPJ):
13-input/outputport
每个端口可以很容易地通过软件配置,以满足不同的系统配置和设计要求。
如果引脚不用于复用功能,则引脚可配置为普通的I/O口。
它们的寄存器是相似的:
GPxCON用于选择引脚功能,GPxDAT用于都/写引脚数据,GPxUP用于确定是否使用部上拉电阻(x为A、B、..........、H、J,注意没有GPAUP)。
1.GPxCON中每两位控制一根引脚:
00表示输入、01表示输出、10表示特殊功能、11保持不用。
其中GPBCON中共有22位来管理GPB的功能设置,每两位来管理一个口的功能设置,两位共有四种状态,当GPB中的两位值为00时,配置为输入功能;
配置为01时,是输出功能;
10为复用功能;
11为保留状态。
2.GPxDAT用于读/写引脚:
当引脚设为输入时,读此寄存器可知相应引脚的状态是高是低。
当引脚设为输出时,写此寄存器相应位可令此引脚输出低电平或高电平。
3.GpxUP
GPBUP宫11位,每一位代表一个管脚的上拉功能,某位为0时,相应引脚上拉功能被使能,为1时,相应引脚被禁止使用上拉功能。
第3章S3C2440的I/O口寄存器
LED灯是接在某一个I/O上的,点亮或者熄灭LED灯其实就是对I/O寄存器的操作。
ARM的I/O口寄存器主要包括端口配置寄存器GPXCON、端口数据寄存器GPXDAT、端口上拉电阻使能寄存器GPXUP、MISCELLANEOUS控制寄存器和外部中断寄存器五种(其中X为芯片的I/O口字母)。
在这个课程设计我们只用前三个寄存器,下面就对着三个寄存器进行简单的介绍。
对于ARM芯片来说,它的寄存器很多,为了区分不同的寄存器,系统给每个寄存器都分配了一个固定的地址,地址就像每个人的一样,是唯一的。
那么当你使用这个地址的时候ARM就知道你要使用哪个寄存器了,所以在编程的时候,首先要声明待操作的寄存器地址。
下表就是本次课程设计要用到的寄存器的地址和位定义:
Register
Address
R/W
Description
ResetValue
GPBCON
0x56000010
ConfiguresthepinsofportB
0x0
GPBDAT
0x56000014
ThedataregisterforportB
Undefined
GPBUP
0x56000018
Pull-updisableregisterforportB
Reserved
0x5600001c
—
Undefined.
ARM芯片找到相应寄存器后,也先要设置端口配置寄存器GPBCON,也就是告诉寄存器做好接收数据或者输出数据或者响应外部中断的准备,下表为它的功能描述:
Bit
GPB10
[21:
20]
00=Input01=Output
10=nXDREQ011=reserved
GPB9
[19:
18]
10=nXDACK011=reserved
GPB8
[17:
16]
10=nXDREQ111=Reserved
GPB7
[15:
14]
10=nXDACK111=Reserved
GPB6
[13:
12]
10=nXBREQ11=reserved
GPB5
[11:
10]
10=nXBACK11=reserved
GPB4
[9:
8]
10=TCLK[0]11=reserved
GPB3
[7:
6]
10=TOUT311=reserved
GPB2
[5:
4]
10=TOUT211=reserved
GPB1
[3:
2]
10=TOUT111=reserved
GPB0
[1:
0]
10=TOUT011=reserved
ARM设置完I/O口状态后,就准备读/写数据了。
这个功能可以通过设置数据寄存器GPBDAT来实现。
下表即为它的功能描述:
GPB[10:
[10:
Whentheportisconfigur-edasinputport,thecorre-spondingbitisthepins-state.Whentheportisconfiguredasoutputport,thepinstateisthesameasthecorrespondingbit.
Whentheportisconfig-guredasfunctionalpin,theundefinedvaluewillberead.
设置完前两个寄存器后,还要设置上拉电阻使能寄存器GPBUP,顾名思义,它的作用就是告诉ARM这个端口要不要配置上拉电阻。
上拉电阻、下拉电阻的作用在于,当IO引脚处于第三态(即不是高电平,也不是低电平,而是高阻态,相当于没接芯片)时,它的电平状态由上拉电阻、下拉电阻确定。
下表为它的功能描述:
当为0时,上拉电阻是允许的;
反之,则上拉电阻是被禁止的。
0:
Thepull-upfunctionattachedtothecorrrespond-ingportpinisenabled.
1:
Thepull-upfunctionisdisabled.
到此,需要的寄存器就配置完成了,那么接下来介绍下LED在开发板上的电路原理图。
第4章课程设计过程
4.1设计步骤
1.连接好实验环境,将仿真器的一端通过并口连接到PC机,将仿真器的另一端通过JTAG先连接到开发板JTAG接口。
2.将串口线一端接到PC机,另一端接到S3C2440的UART0接口;
打开串口超级终端,设置串口属性为COM1,串口波特率(Baudrout)为115200,校验位无,数据位为8,停止位为1,检查连接是否可靠,可靠后,接入电源线,给系统上电,同时按住空格键,进入VIVI状态。
3.打开ADScodeWarrior,在ADScodeWarrior中创建工程编写代码,并对工程进行编译。
4.使用H-JTAG进行调试。
5.打开ARM的开发环境AXDDebugger,在AXDDebugger中加载可执行映像文件LED_TEXT.axf。
6.在ADS调试环境处下,全速运行映像文件,观察LED灯LED1、LED2、LED3、LED4的闪亮情况—轮流闪烁。
4.2部分原理图
图a
图b
上图a、b是实验的部分原理图,可以看出我们通过GPB5、GPB6、GPB7、GPB8来分别控制LED1、LED2、LED3、LED4。
4.3源程序:
1.main.c
#definerGPBCON(*(volatileunsigned*))0x56000010)//protBcontorl
#definerGPBDAT(*(volatileunsigned*))0x56000010)//protBdata
#definerGPBUP(*(volatileunsigned*))0x56000010)//pull-upcontrolB
voidxmain(void)
{
ChangeClockDivider(3,1);
//设置时钟分频比1:
3:
ChangeMPllValue(127,2,1);
//设置主时钟频405MHZ
Port_Init();
//端口初始化
Isr_Init();
//中断初始化
Uart_Init(0,115200);
//串口初始化
Uart_Select(0);
Uart_Printf("
themainisrunning\n"
);
//向超级终端打印"
themainisrunning"
rGPBCON=rGPBCON&
(~(0xf<
<
10))|(1<
10)|(1<
12);
//将GPB5[11:
10]两位设置为01---即output状态,GPB6[13:
12]两位设置为01---即output状态
14))|(1<
14)|(1<
16);
//将GPB7[15:
14]两位设置为01---即output状态,GPB8[17:
16]两位设置为01---即output状态
rGPBUP=rGPBUP&
(~(0xF<
5))|(0xF<
5);
//将GPB5、GPB6、GPB7、GPB8上拉电阻设置为disabled
while
(1)
{
rGPBDAT=(rGPBDAT|(0xF<
5))&
(~(0x1<
5));
//点亮LED1
Delay(10000000);
//延时
rGPBDAT=(rGPBDAT|(0xF<
(~(0x2<
//点亮LED2
//延时
(~(0x4<
//点亮LED3
rGPBDAT=(rGPBDAT|(0xF<
(~(0x8<
//点亮LED4
rGPBDAT=(rGPBDAT|(0xF<
rGPBDAT=(rGPBDAT|(0xF<
}
2.2440lib.c
//===================================================================
//FileName:
2440lib.c
//Function:
S3C2440PLL,Uart,LED,PortInit
//Date:
2011/22/28
//Version:
0.1
#include"
def.h"
option.h"
2440addr.h"
2440lib.h"
2440slib.h"
#include<
stdarg.h>
string.h>
stdlib.h>
stdio.h>
ctype.h>
externcharImage$$RW$$Limit[];
void*mallocPt=Image$$RW$$Limit;
staticintdelayLoopCount;
voidDelay(inttime)//延时函数
inti,adjust=0;
if(time==0)
{
time=200;
adjust=1;
delayLoopCount=800;
rWTCON=((PCLK/1000000-1)<
8)|(2<
3);
rWTDAT=0xffff;
3)|(1<
//Watch-dogtimerstart
}
for(;
time>
0;
time--)
for(i=0;
i<
delayLoopCount;
i++);
if(adjust==1)
//Watch-dogtimerstop
i=0xffff-rWTCNT;
//1count->
64us,200*800cycleruntime=64*ius
delayLoopCount=16000000/(i*64);
//200*800:
64*i=1*x:
100->
x=160000*100/(64*i)
}
voidPort_Init(void)//I/O口初始化
rGPACON=0x7fffff;
rGPBCON=0x155555;
rGPBUP=0x7ff;
//ThepullupfunctionisdisabledGPB[10:
rGPCCON=0xaaaaaaaa;
rGPCUP=0xffff;
//ThepullupfunctionisdisabledGPC[15:
0]
rGPDCON=0xaaaaaaaa;
rGPDUP=0xffff;
//ThepullupfunctionisdisabledGPD[15:
rGPECON=0xaaaaaaaa;
rGPEUP=0xffff;
//ThepullupfunctionisdisabledGPE[15:
rGPFCON=0x55aa;
rGPFUP=0xff;
//ThepullupfunctionisdisabledGPF[7:
rGPGCON=0xff95ffba;
rGPGUP=0xffff;
//ThepullupfunctionisdisabledGPG[15:
rGPHCON=0x2afaaa;
rGPHUP=0x7ff;
//ThepullupfunctionisdisabledGPH[10:
rGPJDAT=(1<
12)|(0<
11);
rGPJCON=0x016aaaa;
rGPJUP=~((0<
12)|(1<
11));
rGPJDAT=(0<
rGPJUP=0x1fff;
//~((1<
rEXTINT0=0x22222222;
//EINT[7:
rEXTINT1=0x22222222;
//EINT[15:
rEXTINT2=0x22222222;
//EINT[23:
staticintwhichUart=1;
voidUart_Init(intpclk,intbaud)//串口初始化,设置时钟,波特率
if(pclk==0)
pclk=PCLK;
rUFCON0=0x0;
//UARTchannel0FIFOcontrolregister,FIFOdisable
rUFCON1=0x0;
//UARTchannel1FIFOcontrolregister,FIFOdisable
rUFCON2=0x0;
//UARTchannel2FIFOcontrolregister,FIFOdisable
rUMCON0=0x0;
//UARTchaneel0MODEMcontrolregister,AFCdisable
rUMCON1=0x0;
//UARTchaneel1MODEMcontrolregister,AFCdisable
//UART0
rULCON0=0x3;
//Linecontrolregister:
Normal,Noparity,1stop,8bit
rUC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM9 控制 LED 流水 程序 设计 说明