嵌入式系统实验指导书.docx

上传人:b****7 文档编号:11245552 上传时间:2023-02-26 格式:DOCX 页数:19 大小:850.88KB
下载 相关 举报
嵌入式系统实验指导书.docx_第1页
第1页 / 共19页
嵌入式系统实验指导书.docx_第2页
第2页 / 共19页
嵌入式系统实验指导书.docx_第3页
第3页 / 共19页
嵌入式系统实验指导书.docx_第4页
第4页 / 共19页
嵌入式系统实验指导书.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

嵌入式系统实验指导书.docx

《嵌入式系统实验指导书.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验指导书.docx(19页珍藏版)》请在冰豆网上搜索。

嵌入式系统实验指导书.docx

嵌入式系统实验指导书

嵌入式系统实验指导书

EFLAG–ARM-S3C44B0

北京工业大学电控学院

DSP与嵌入式系统研究室

二零零四年十月

 

嵌入式系统实验指导书

实验一ARM处理器指令系统实验

实验目的熟悉ARM指令系统,

熟悉ARMSDT编辑,编译,连接ARMProjectManager和ARMDebugger的设置和使用。

实验条件Windows平台的ARMSDT2.51软件:

ARMProjectManager和ARMDebugger。

实验内容学习使用ARMProjectManager建立项目文件,编辑汇编文件,并加入项目。

学习ARM编译器和汇编器的设置。

通过编程熟悉ARM指令,包括跳转指令,数据处理指令,状态寄存器传送指令,load/store指令,中断异常产生指令。

学习ARM调试起的使用方法,包括程序的导入,单步执行,断点设置等。

实验要点工程文件的建立,在ARMProjectManager中点击File->New

选择Project,点击确定。

项目如上图设置。

连接器的设定,需要设置代码和数据段的起始地址,如下图

点击

图标,选择不进行远程调试,即可打开调试器。

按下Ctrl+F,即可显示源代码,使用工具栏提供的工具即可进行单步调试。

一段最简单的ARM程序:

AREAtest,CODE,READONLY

ENTRY

Start

BStart

END

实验二JTAG调试器的使用

实验目的熟悉JTAG调试器的原理。

熟悉ARMSDTARMDebuggerJTAG调试的设置和使用。

实验条件Windows平台的ARMSDT2.51软件:

ARMProjectManager和ARMDebugger;jtag.exe;EFLAG-ARM-S3C44.B0实验箱。

实验内容学习使用JTAG调试器的设置。

PC机同实验箱的连接。

启动调试器服务程序DebugServer.exe。

配置ARM调试器参数,完成同实验箱的连接。

通过调试器配置实现箱上的ARM处理器SDRAM参数。

实验要点在调试软件目录中启动DebugServer.exe,调试起服务程序。

启动SDT调试软件ARMDebugger。

首先打开DebugServer.exe调试器服务程序

首次使用SDT调试软件时,要对SDT进行配置,如下图。

点击菜单中Options选项,点击ConfigureDebugger选项。

点击Configure选项,选择Ethernet,输入IP地址为:

127.0.0.1即本机缺省IP回环地址。

打开SDT菜单中的File选项中的Loadimage菜单,调入编译好的要调试的映像文件,可按照单步、全速、设置断点等方式进行调试。

选择Remote_A

在Windows2000和WindowsXP下使用并行口需要驱动程序,在本实验系统中使GiveIOInstaller来安装并口驱动程序。

在GiveIO目录下点击GiveIOInstaller.exe即可。

将下面代码使用文本文件编辑器(如notepad等)保存为sdram.ini,并copy到ARM251/bin/目录下。

|***SDRAM_CONFIG***

let$vector_catch=0x00

letpsr=%IF_SVC32

let0x1d80000=((0x34<<12)+(0x3<<4)+0x1)

let0x1c80000=0x11111190

let0x1c80004=((3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+0)

let0x1c80008=((3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+0)

let0x1c8000c=((3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+0)

let0x1c80010=((3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+0)

let0x1c80014=((3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+0)

let0x1c80018=((3<<13)+(3<<11)+(7<<8)+(3<<6)+(3<<4)+(3<<2)+0)

let0x1c8001c=((3<<15)+(0<<2)+0)

let0x1c80020=((3<<15)+(0<<2)+0)

let0x1c80024=((1<<23)+(0<<22)+(1<<20)+(1<<18)+(2<<16)+1019)

let0x1c80028=0x0

let0x1c8002c=0x20

let0x1c80030=0x20

打开ARM调试器ARMDebuggerforWindows,在View中选择Command,在Command窗口键入obeysdram.ini

注:

以上步骤是为了配置SDRAM控制寄存器,使得SDRAM能够作为系统的主存,能够被调试器读写。

 

实验三S3C44B0GPIO的使用

实验目的熟悉JTAG调试器的原理。

熟悉ARMSDTARMDebuggerJTAG调试的设置和使用。

掌握S3C44B0GPIO的配置和使用。

实验条件Windows平台的ARMSDT2.51软件:

ARMProjectManager和ARMDebugger;jtag.exe;EFLAG-ARM-S3C44B0实验箱

实验内容复习实验二的内容。

编写代码,将GPIO配置成为所需要的输出模式。

在调试器上仿真软件的执行。

在实验箱上,调试软件,并观察软件的执行结果。

实验要点在调试软件目录中启动DebugServer.exe,调试器服务程序。

启动SDT调试软件ARMDebugger。

首次使用SDT调试软件时,要对SDT进行配置,如下图。

点击菜单中Options选项,点击ConfigureDebugger选项。

点击Configure选项,选择Ethernet,输入IP地址为:

127.0.0.1即本机缺省IP回环地址。

打开SDT菜单中的File选项中的Loadimage菜单,调入编译好的要调试的映像文件,可按照单步、全速、设置断点等方式进行调试。

实验箱上GPG3,GPE5,GPE6,GPE7上分别连接了LED,通过学习S3C44B0通用IO的使用方法。

 

以GPG3为例,如果想要使用output功能的话,就需要首先将PCONG的对应的[7:

6]比特字段设为01,如果需要点亮GPG3对应的LED的话,可以直接控制PDATG的比特[3]。

程序示例:

AREAGPIO,CODE,READONLY

ENTRY

BStart

B.

B.

B.

B.

B.

B.

B.

Start

Blgpg_init

1

Blled_on

Bldelay

Blled_off

Bldelay

B%B1

Gpg_init

Ldrr0,=0x1d20040;PCONG

Ldrr1,=0x40

Strr1,[r0]

MovPc,lr

Led_off

Ldrr0,=0x1d20044;PDATG

Ldrr1,=0x00

Strr1,[r0]

MovPc,lr

Led_on

Ldrr0,=0x1d20044;PDATG

Ldrr1,=0x08

Strr1,[r0]

MovPc,lr

Delay

Movr3,=100000

1

subsr3,r3,1

beq%B1

movpc,lr

END

编译链接的设定:

输出文件格式设为elf,文件名为*.axf

调试时,首先启动arm调试器,选择远程调试(remotedebugging),调试器设置如“JTAG调试器的使用”实验。

在File中选择LoadImage,找到所需的*.axf文件,双击,即可。

 

实验四汇编语言编程练习

实验目的熟悉ARMSDT软件开发方法和技能;

学习和巩固ARM指令集;

学习和巩固汇编语言程序设计

实验条件Windows平台的ARMSDT2.51软件:

ARMProjectManager和ARM

Debugger;DebugServer.exe;EFLAG-ARM-S3C44B0实验箱

实验内容目录ARM251\EXAMPLES\ASM下的汇编程序,

学习和调试代码,分析所得结果。

在调试器上仿真软件的执行。

在实验箱上,调试软件,并观察软件的执行结果。

实验要点在调试软件目录中启动DebugServer.exe,调试器服务程序。

启动SDT调试软件ARMDebugger。

实验报告要求给出adrlabel.apj,blocks.apj,ldrlabel.apj,strcopy.apj,tblock.apj五个项

目的源代码分析和调试记录(存储器和寄存器的内容变化)。

 

实验五S3C44B0键盘驱动实验

实验目的学习键盘驱动的原理。

掌握通过CPU的I/O扩展键盘的方法。

实验条件Windows平台的ARMSDT2.51软件:

ARMProjectManager和ARMDebugger;jtag.exe;EFLAG-ARM-S3C44B0实验箱。

实验内容

通过ARM的rPDATC(低四位)和rPDATE(4—7位)扩展4*4键盘,编写实现键盘的驱动,通过按键可以在超级终端和液晶屏上显示相应的键值(若无操作系统只要求在超级终端上显示)。

实现键盘扫描一般有两种方法:

用现有的一些I/O扩展芯片实现键盘的硬扫描。

用软件实现键盘的扫描。

使用硬件的办法实现键盘扫描,在程序的编写上固然比较方便,但多用一个芯片无疑会增加成本。

软件扫描键盘有助于成本的降低,并且只需要级很少的程序开销,其性能是和硬件扫描的办法完全相同的。

嵌入式控制器的功能强大,可以充分利用嵌入式控制器的强大功能,下面就介绍一下软件键盘扫描的实现方法。

简单的键盘是接在处理器I/O口上的一个瞬时接触开关,处理器通过I/O口上的电平高低来确定当前按键的状态。

当开关打开时,处理器通过上拉电阻接到电源上的I/O口将得到高逻辑电平;开关一旦关闭,该I/O口将被被拉成逻辑低电平。

但这只是原理上的分析。

事实上,瞬时开关的接触并不是原理中分析的那样,在运行速度很快的处理器看来,瞬时开关的一次按下和抬起的动作是一连串的脉宽不等的脉冲序列,这个脉冲序列大概要持续5ms—30ms左右。

我们称之为键盘抖动。

可以想象,如果对这样的抖动不做任何处理,那么当开关完成一次开启和闭合的动作后,处理器则会认为这个键进行了多次开启和闭合的操作,我们得到的结果肯定不会正确。

我们可以在软件中解决这个问题,使一次按键只获得一次按键的结果。

这叫做键盘消抖。

具体办法将在程序中做详细的描述。

当我们需要很多的按键时,如果还利用上面的办法,那么处理器为我们提供的I/O口资源将很快被用完。

我们在设计系统时,尤其是较复杂的系统时,经常会感觉薪片的I/O资源不够用,让键盘占用了过多的I/O资源是很不经济的。

解决这个问题最有效的办法是使用键盘阵列。

键盘阵列实际上是一个由瞬时开关组成的二维矩阵。

当行数和列数一样多时,也就是方阵时,将获得最优的补阵方式。

瞬时开关位于每一行和每一列的交叉点上。

每一行由一个I/O口做输出驱动,而每一列则又一个上拉电阻接到一个做输入的I/O口。

 

实验要点

键盘的扫描是由以下的方法实现的。

在每一个相等的时间间隔后,做行扫描的输出端口发出一个逻辑低的行扫描信号,此时其他行扫描线保持逻辑高。

接着,从处理器读列扫描线,如果有键被按下,则会在该键所在的列上读到一个逻辑低电平,结合当前的行扫描值,就可以确定是哪个键被按下,这里需要注意的是,回读时一定要在程序中进行消抖,原理已经在上面介绍过了。

显然,处在键盘阵列中的每一个瞬时开关都唯一对应一个确定的键值,因为矩阵中每一个元素都有其唯一对应的行号和列号。

而这里所说的键值就是我们通过扫描得到的扫描码。

在我们通常使用PC机时,有时会同时按下多个键来完成一个功能(如Ctrl+Alt+Del)。

这种在有n-1个键已被按下同时能正确判断第n个键被按下的情况叫键盘转滚。

在实验时我们不要求键盘具有这种n键转滚能力。

本系统使用一个4*4键盘阵列,GPG7—GPG4输出扫描信号,GPF8—GPF5回读扫描值。

在键盘扫描时,分别将GPG7—GPG5置为逻辑低,如果有键按下,则可从所对应GPF8—GPF5读到一个逻辑低电平。

键盘的消抖由软件实现,在处理器发现有键按下后,延迟一段时间在读一次键值,如果两次得到的键值相同则认为该键被按下一次,若不同,则认为得到的键值是由于抖动引起的。

键盘允许键值的自动重复,即按住一个键不放会多次得到相同的键值并多次进行相应的操作。

程序示例:

void__irqkeyboard(void)

{

charx,y,xrecord,yrecord,temp,key_val;

rI_ISPC=BIT_EINT0;//clearpending_bit

Delay(400);

if((rPDATF&0x1E0)==0x1E0)

{

return;

}

else

{

x=1;

y=1;

xrecord=(~((rPDATF&0x1E0)>>1));

xrecord=xrecord>>4;

while(xrecord!

=0x1)

{

x=x+1;

xrecord=xrecord>>1;

if(xrecord==0)

{

rPDATG=0X0F;

return;

}

}

rPDATG=0XEF;

while((rPDATF&0x1E0)==0x1E0)

{

rPDATG=rPDATG<<1;

temp=rPDATG;

if((temp&0xf0)==0XF0)

{

rPDATG=0X0F;

return;

}

}

yrecord=~((rPDATG&0xF0)>>4)&0x0F;

while(yrecord!

=0x1)

{

y=y+1;

yrecord=yrecord>>1;

if(yrecord==0)

{

rPDATG=0X0F;

return;

}

}

key_val=x+(y-1)*4-1;

Uart_Printf("\nKeyPressed!

Value:

%d\n",x+(y-1)*4-1);

switch(key_val){

case10:

{if(lcd_updown<120)lcd_updown+=10;break;}

case11:

{if(lcd_updown>-120)lcd_updown-=10;break;}

case15:

{if(lcd_leftright<160)lcd_leftright+=10;break;}

case7:

{if(lcd_leftright>-160)lcd_leftright-=10;break;}

}

Lcd_MoveViewPort(160+lcd_leftright,120+lcd_updown,MODE_COLOR);

Delay(200);

rPDATG=0X0F;

}

}

实验六S3C44B0PLL的使用

实验目的熟悉锁相环的工作原理。

学习使用S3C44B0锁相环的控制的方法。

实验条件Windows平台的ARMSDT2.51软件:

ARMProjectManager和ARMDebugger;jtag.exe;EFLAG-ARM-S3C44.B0实验箱。

实验内容锁相环控制寄存器的设定,并在不同的时钟频率条件下测试程序代码对于时钟频率的依赖性。

分别在不同的时钟频率下进行LED闪烁和串行通信实验。

实验要点

Fpllo=(m*Fin)/(p*2s)

m=M(thevaluefordividerM)+8,p=P(thevaluefordividerP)+2

voidChangePllValue(intmdiv,intpdiv,intsdiv)

{

rPLLCON=(mdiv<<12)|(pdiv<<4)|sdiv;

}

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

当前位置:首页 > 经管营销 > 生产经营管理

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

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