嵌入式实验指导书.docx
- 文档编号:30188163
- 上传时间:2023-08-05
- 格式:DOCX
- 页数:73
- 大小:1.43MB
嵌入式实验指导书.docx
《嵌入式实验指导书.docx》由会员分享,可在线阅读,更多相关《嵌入式实验指导书.docx(73页珍藏版)》请在冰豆网上搜索。
嵌入式实验指导书
EL-ARM-830实验系统的资源介绍
ARM实验箱硬件资源概述
EL-ARM-830型教学实验系统属于一种综合的教学实验系统,该系统采用了目前在国内普遍认同的ARM920T核,32位微处理器,实现了多模块的应用实验。
它是集学习、应用编程、开发研究于一体ARM实验教学系统。
用户可根据自己的需求选用不同类型的CPU适配板,兼容ARM7与ARM9,而不需要改变任何配置,同时,实验系统上的Tech_V总线能够拓展较为丰富的实验接口板。
用户在了解Tech_V标准后,更能研发出不同用途的实验接口板。
除此之外,在实验板上有丰富的外围扩展资源(数字、模拟信号发生器,数字量IO输入输出,语音编解码、人机接口等单元),可以完成ARM的基础实验、算法实验和数据通信实验、以太网实验。
图1-1-1EL-ARM-830实验教学系统的功能框图
实验系统的硬件资源总揽
☆ CPU单元:
内核ARM920T,芯片三星的S3C2410,工作频率最高202MHz;
☆ 动态存储器:
64MB,芯片HY57V561620;
☆海量存储器:
32MB,芯片K9F5608;
☆USB单元:
1个主接口,两个设备接口,芯片PDIUSBD12;
☆网络单元:
10/100M以太网,芯片AX88796;
☆UART单元:
2个,最高通信波特率115200bps;
☆语音单元:
IIS格式,芯片UDA1341TS,采样频率最高48KHz;
☆LCD单元:
5.7寸,256色,320X240像素;
☆触摸屏单元:
四线电阻屏,320X240,5.7寸;
☆SD卡单元:
通信频率最高25MHz,芯片W86L388D,兼容MMC卡;
☆键盘单元:
4X4键盘,带8位LED数码管;芯片HD7279A;
☆模拟输入输出单元:
8个带自锁的按键,及8个LED发光管;
☆A/D转换单元:
芯片自带的8路10位A/D,满量程2.5V;
☆信号源单元:
方波输出;
☆标准键盘及PS2鼠标接口;
☆标准的IDE硬盘接口;
☆达盛公司的Tech_V总线接口;
☆达盛公司的E_Lab总线接口;
☆调试接口:
20针JTAG;
☆CPLD单元;
☆电源模块单元。
核心板的硬件资源(ARM920T核)
在核心CPU板上包括下列单元和芯片,32位ARM920T的处理器,即三星的S3C2410芯片,两片动态存储器,每片32M字节,一片32M字节的NAND_flash存储器,一个USB主接口,一个USB从接口,一个10/100M的以太网控制芯片,完成网络访问功能,一个UART接口,完成串口通信,最高波特率率为115200bps,一个RTC实时时钟,一个5V转3.3V和1.8V的电源管理模块,一个20针的JTAG调试接口。
具体元器件见表1-1。
芯片名称
数量
功能
板上标号
S3C2410
1
ARM920T,中央处理器
S3C2410X
HY57V561620
2
动态存储器(SDRAM),32MB/片
HY57V561620
K9F5608
1
海量存储器,32MB
K9F5608U
AX88796
1
10/100M以太网控制器
AX88796
AS1117-3.3
1
5V转3.3V
AS1117-3.3
AS1117-1.8
1
5V转1.8V
AS1117-1.8
MAX3232
1
RS232转换
IMP811-S
1
复位
IMP811
表1-1
具体的单元、跳线见表1-2。
标号
名称
功能
JP1
JTAG复位单元
控制nRESET与nTRST是否接通
AREFSEL
模拟参考电压选择
短接后连接到VDD33,否则接地
3S/4S
3Step与4Step选择
设置NandFlash的运行模式,选择NCON(CPU引脚)与3Step、4Step连接
RESET
复位键
系统复位按键
P.S
电源插座
电源插座,接5V电源
SW
电源开关
拨向EXT接通,拨向INT断开电源
USB-HOST
主USB单元
主USB
UART0(CROSS/F)
串口0单元
和S3C2410的串口0通信
USB-DEVICE
从USB单元
USB设备
RJ45
网络单元
访问以太网
ARM-JTAG
JTAG插座
20针JTAG插座,用于与宿主机通信
INTERFACEC
功能单元
INTERFACEB
数据、地址单元
INTERFACEA
功能单元
表1-2
表1-3为核心板上各LED指示灯的意义。
标号
名称
功能
PWR
LED灯
电源指示灯
LED1
LED灯
GPI/O口G口的第8位指示
LED2
LED灯
GPI/O口G口的第9位指示
表1-3
表1-4为核心板上的晶振单元
标号
名称
功能
12MHz
CPU主时钟晶振
外接12MHz
32KHz
RTC时钟晶振
外接32.768KHz
25MHz
网络时钟晶振
外接25MHz
表1-4
实验一ADS1.2开发环境创建与简要介绍
一、实验目的
1.熟悉ADS1.2开发环境,正确使用仿真调试电缆进行编译、下载、调试。
二、实验内容
1.学习ADS1.2开发环境
三、实验设备
1.EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真调试电缆。
2.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试电缆驱动程序
四、实验步骤
1.ADS1.2下建立工程
1.运行ADS1.2集成开发环境(CodeWarriorforARMDeveloperSuite),点击File|New,在New对话框中,选择Project栏,其中共有7项,ARMExecutableImage是ARM的通用模板。
选中它即可生成ARM的执行文件。
同时,如图2-1-1
图2-1-1
还要在,Projectname栏中输入项目的名称,以及在Location中输入其存放的位置。
按确定保存项目。
2.在新建的工程中,选择Debug版本,如图2-1-2,使用Edit|DebugSettings菜单对Debug版本进行参数设置。
图2-1-2
3.在如图2-1-3中,点击DebugSetting按钮,弹出2-1-4图,选中TargetSetting
图2-1-3
图2-1-4
项,在Post-linker栏中选中ARMfromELF项。
按OK确定。
这是为生成可执行的代码的初始开关。
4.在如图2-1-5中,点击ARMAssembler,在ArchitectureorProcesser
图2-1-5
栏中选ARM920T。
这是要编译的CPU核。
5.在如图2-1-6中,点击ARMCCompliler,在ArchitectureorProcesser栏中选ARM920T。
这是要编译的CPU核。
图2-1-6
6.在如图2-1-7中,点击ARMlinker,在outpur栏中设定程序的代码段地址,以及数据使用的地址。
图中的ROBase栏中填写程序代码存放的起始地址,RWBase栏中填写程序数据存放的起始地址。
该地址是属于SDRAM的地址。
图2-1-7
图12-1-8
在options栏中,如图2-1-8,Imageentrypoint要填写程序代码的入口地址,其他保持不变,如果是在SDRAM中运行,则可在0x30000000—0x33ffffff中选值,这是64MSDRAM的地址,但是这里用的是起始地址,所以必须把你的程序空间给留出来,并且还要留出足够的程序使用的数据空间,而且还必须是4字节对齐的地址(ARM状态)。
通常入口点Imageentrypoint为0x30000000,ro_base也为0x30000000。
在Layout栏中,如图2-1-9,在Placeatbeginningofimage框内,需要填写项目的入口程序的目标文件名,如,整个工程项目的入口程序是2410init.s,那么应在Object/Symbol处填写其目标文件名2410init.o,在Section处填写程序入口的起始段标号。
它的作用是通知编译器,整个项目的开始运行,是从该段开始的。
图2-1-9
7.在如图2-1-10中,即在DebugSetting对话框中点击左栏的ARMfromELF项,在Outputfilename栏中设置输出文件名*.bin,前缀名可以自己取,在Outputformat栏中选择Plainbinary,这是设置要下载到flash中的二进制文件。
图2-1-10中使用的是test.bin.
图2-1-10
8.到此,在ADS1.2中的基本设置已经完成,可以将该新建的空的项目文件作为模板保存起来。
首先,要将该项目工程文件改一个合适的名字,如S3C2410ARM.mcp等,然后,在ADS1.2软件安装的目录下的Stationary目录下新建一个合适的模板目录名,如,S3C2410ARMExecutableImage,再将刚刚设置完的S3c2410ARM.mcp项目文件存放到该目录下即可。
这样,就能在图2-1-10中看到该模板。
9.新建项目工程后,就可以执行菜单Project|AddFiles把和工程所有相关的文件加入,ADS1.2不能自动进行文件分类,用户必须通过Project|CreateGroup来创建文件夹,然后把加入的文件选中,移入文件夹。
或者鼠标放在文件填加区,右键点击,即出!
如图2-1-11
图2-1-11
先选AddFiles,加入文件,再选CreateGroup,创建文件夹,然后把文件移入文件夹内。
读者可根据自己习惯,更改Edit|Preference窗口内关于文本编辑的颜色、字体大小,形状,变量、函数的颜色等等设置。
如图2-1-12。
图2-1-12
2.ADS1.2下仿真、调试
在ADS1.2下进行仿真调试,首先需要一根仿真调试电缆。
其驱动程序的安装和使用在光盘中的\实验软件\ARM9_RDI中,里面有相关的文档。
在连上调试电
缆后,给实验箱上电,
打开调试软件AXDDebugger。
点击File|loadimage加载文件ADS.axf(\实验程序\HARDWARE\ADS\实验一\ADS\ADS_data目录下)。
打开超级终端,设置其参数为:
波特率为115200,数据位数8,奇偶校验无,停止位无1,数据流控无。
点击全速运行,出现图2-1-13的界面:
图2-1-13
在最后介绍调试按钮,
上图,左起第一个是全速运行,第二个是停止运行,第三个跳入函数内部,第四个单步执行,第五个跳出函数。
到此,开发环境就全部介绍完了,这是ARM的开发基础,希望你有所收获。
实验二基于ARM的汇编语言及ARM的C语言程序设计简介
一、实验目的
1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程
2.了解ARMC语言的基本框架,学会使用ARM的C语言编程
二、实验内容
1.用汇编语言编写一个简单的应用程序
2.用C语言编写一个简单的应用程序
三、实验设备
1.EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真调试电缆,串口电缆。
2.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真调试驱动程序
四、汇编语言简介
1.ARM汇编的一些简要的书写规范
ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:
”,而所有指令均不能顶格书写。
ARM汇编对标识符的大小写敏感,书写标号及指令时字母大小写要一致。
在ARM汇编中,ARM指令、伪指令、寄存器名等可以全部大写或者全部小写,但不要大小写混合使用。
注释使用“;”号,注释的内容由“;”号起到此行结束,注释可以在一行的顶格书写。
详细的汇编语句及规范请参照ARM汇编的相关书籍、文档,也可参照我们提供的文档。
2.ARM汇编语言程序的基本结构
在ARM汇编语言程序中,是以程序段为单位来组织代码。
段是相对独立的指令或数据序列,具有特定的名称。
段可以分为代码段的和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。
一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。
可执行映像文件通常由以下几部分构成:
◆一个或多个代码段,代码段为只读属性。
◆零个或多个包含初始化数据的数据段,数据段的属性为可读写。
◆零个或多个不包含初始化数据的数据段,数据段的属性为可读写。
链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。
源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定相同。
3.简单的小例子
下面是一个代码段的小例子
AREAInit,CODE,READONLY
ENTRY
LDRR0,=0x3FF5000
LDRR1,0x0f
STRR1,[R0]
LDRR0,=0x3F50008
LDRR1,0x1
STRR1,[R0]
…
…
END
在汇编程序中,用AREA指令定义一个段,并说明定义段的相关属性,本例中定义了一个名为Init的代码段,属性为只读。
ENTRY伪指令标识程序的入口,程序的末尾为END指令,该伪指令告诉编译器源文件的结束,每一个汇编文件都要以END结束。
下面是一个数据段的小例子
AREADataArea,DATA,NOINIT,ALIGN=2
DISPBUFSPACE200
RCVBUFSPACE200
…
…
DATA为数据段的标识。
五、ARMC语言简介与使用规则
1.ARM使用C语言编程是大势所趋
在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作量巨大,并且不易移植。
由于ARM的程序执行速度较高,存储器的存储速度和存储量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容易等等。
因此,C语言的在ARM编程中具有重要地位。
2.ARMC语言程序的基本规则
在ARM程序的开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时间的代码一般使用汇编语言来编写,比如ARM的启动代码,ARM的操作系统的移植代码等,除此之外,绝大多数代码可以使用C语言来完成。
C语言使用的是标准的C语言,ARM的开发环境实际上就是嵌入了一个C语言的集成开发环境,只不过这个开发环境和ARM的硬件紧密相关。
在使用C语言时,要用到和汇编语言的混合编程。
当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式加入项目当中,通过ATPCS的规定与C程序相互调用与访问。
ATPCS,就是ARM、Thumb的过程调用标准(ARM/ThumbProcedureCallStandard),它规定了一些子程序间调用的基本规则。
如寄存器的使用规则,堆栈的使用规则,参数的传递规则等。
在C程序和ARM的汇编程序之间相互调用必须遵守ATPCS。
而使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS的规则。
但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。
具体来说,汇编语言的子程序应满足下面3个条件:
●在子程序编写时,必须遵守相应的ATPCS规则;
●堆栈的使用要遵守相应的ATPCS规则;
●在汇编编译器中使用-atpcs选项。
基本的ATPCS规定,请详见提供的相关PDF文档。
汇编程序调用C程序
汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。
在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。
在调用C程序时,要正确设置入口参数,然后使用BL调用。
C程序调用汇编程序
汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。
在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子程序。
在C语言中使用extern关键字声明外部函数(声明要调用的汇编子程序)。
在C语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到C语言下的主程序,然后,执行C程序,在C环境下读写硬件的寄存器,一般是通过宏调用,在每个项目文件的Startup2410/INC目录下都有一个2410addr.h的头文件,那里面定义了所有关于2410的硬件寄存器的宏,对宏的读写,就能操作2410的硬件。
具体的编程规则同标准C语言。
3.简单的小例子
下面是一个简单的小例子
IMPORTMain
AREAInit,CODE,READONLY;
ENTRY
LDRR0,=0x01d00000
LDRR1,=0x245
STRR1,[R0];把0x245放到地址0X01D00000
BLMain;跳转到Main()函数处的C/C++程序
END;标识汇编程序结束
以上是一个简单的程序,先寄存器初始化,然后跳转到Main()函数标识的C/C++代码处,执行主要任务,此处的Main是声明的C语言中的Main()函数。
对宏的预定义,在2410addr.h中已定义,如:
#definerGPGCON(*(volatileunsigned*)0x56000060)//PortGcontrol
#definerGPGDAT(*(volatileunsigned*)0x56000064)//PortGdata
#definerGPGUP(*(volatileunsigned*)0x56000068)//Pull-upcontrolG
在程序中实现,
for(;;){
if(flag==0){
for(i=0;i<100000;i++);//延时
rGPGCON=rGPGCON&0xfff0ffff|0x00050000;
rGPGDAT=rGPGDAT&0xeff|0x200;
for(i=0;i<100000;i++);//延时
flag=1;
}else{
for(i=0;i<100000;i++);//延时
rGPGCON=rGPGCON&0xfff0ffff|0x00050000;
rGPGDAT=rGPGDAT&0xdff|0x100;
for(i=0;i<100000;i++);//延时
flag=0;
}
}
完成对GPIO的G口的操作,该程序可以交替点亮CPU板左下角的两个LED灯。
六、实验步骤
(一)汇编语言程序设计
1.本实验仅使用实验教学系统的CPU板,串口。
在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆,以及串口间连接公/母接头串口线。
3.检查连接是否可靠,可靠后,接入电源线,系统上电。
4.打开ADS1.2开发环境,从里面打开\实验程序\HARDWARE\ADS\实验二\asm.mcp项目文件,进行编译。
5.编译通过后,进入ADS1.2调试界面,加载\实验程序\HARDWARE\ADS\实验二\asm_Data\Debug中的映象文件程序映像asm.axf。
6.打开超级终端,配置波特率为115200,校验位无,数据位为8,停止位为1。
之后,在ADS调试环境下全速运行映象文件,应出现图2-2-1界面:
图2-2-1
本程序连续发送了128个字节的ASCII字符。
下面分析一下程序的源码。
在UART前的部分为系统的初始化,这在后边BOOTLOADER的章节里,要详细介绍。
UART后的程序为主程序,在程序中找到下面这部分的代码,
…
…
;//呼叫主应用程序
bUART
UART
ldrr0,=GPHCON;//设置GPIO(RxD0,TxD0引脚)
ldrr1,=0x2afaaa
strr1,[r0]
ldrr0,=GPHUP
ldrr1,=0x7ff
strr1,[r0];//GPH[10:
0]禁止上拉
ldrr0,=UFCON0;//禁用FIFO
ldrr1,=0x0
strr1,[r0]
ldrr0,=UMCON0;//禁用AFC
ldrr1,=0x0
strr1,[r0]
ldrr0,=ULCON0;//设置线寄存器
ldrr1,=0x3;//正常模式,无奇偶校验,一个停止位,8个数据位
strr1,[r0]
ldrr0,=UCON0;//设置Uart0控制器
ldrr1,=0x245;//RX边沿触发,TX电平触发,禁用延时中断,使用RX错误中断,正常操作模式,中断请求或表决模式
strr1,[r0]
ldrr0,=UBRDIV0;//设置波特率为115200
ldrr1,=0x1a;//int(50700000/16/115200)-1=26
strr1,[r0]
movr1,#100
Delay
subr1,r1,#0x1
bneDelay
;//开中断
ldrr0,=INTMSK
ldrr1,[r0]
andr1,r1,#0xefffffff
strr1,[r0]
MOVR5,#127;//设置要打印的字符的个数
MOVR1,#0x0;//设置要打印的字符
LOOP
LDRR3,=UTRSTAT0
LDRR2,[R3]
TSTR2,#0x04;//判断发送缓冲区是否为空
BEQLOOP;//为空则执行下边的语句,不为空则跳转到LOOP
LDRR0,=UTXH0
STRR1,[R0];//向数据缓冲区放置要发送的数据
ADDR1,R1,#1
SUBR5,R5,#0x01;//计数器减一
CMPR5,#0x0
BNELOOP
LOOP2BLOOP2
分析清楚之后,我们改变R1的数据,换成其他的数据,然后保存、编译、调试。
观察结果,比如0xaa,0x01等等。
(二)基于ARM的C语言程序设计
1.本实验仅使用实验教学系统的CPU板,串口。
在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。
2.在PC机并口和实验箱的CPU板上的JTAG接口之间,连接仿真调试电缆,以及串口间连接公/母接头串口线。
3.检查连接是否可靠,可靠后,接入电源线,系统上电。
4.打开ADS1.2开发环境,从里面打开\实验程序\HARD
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 实验 指导书