嵌入式系统原理及应用实验指导书56份周志青.docx
- 文档编号:9109908
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:33
- 大小:2.59MB
嵌入式系统原理及应用实验指导书56份周志青.docx
《嵌入式系统原理及应用实验指导书56份周志青.docx》由会员分享,可在线阅读,更多相关《嵌入式系统原理及应用实验指导书56份周志青.docx(33页珍藏版)》请在冰豆网上搜索。
嵌入式系统原理及应用实验指导书56份周志青
嵌入式系统原理及应用
实验指导书
平顶山学院计科系
实验一ADS1.2集成开发环境实验
一、实验目的
1.了解ADS1.2集成开发环境的使用方法
二、实验仪器设备、材料
1.硬件:
PC机一台
2.软件:
Windows98/XP/2000系统,ADS集成开发环境
三、实验内容
1.建立一个新的工程。
2.建立一个C源文件,并添加到工程中。
3.设置文本编辑器支持中文。
4.设置编译链接控制选项。
5.编译链接工程。
6.调试工程。
四、实验步骤
(1)启动ADS1.2IDE集成开发环境,选择【File】->【New…】,使用ARMExecutable
Image工程模板建立一个工程,工程名称为ADS,见图1.1。
图1.1建立ARM指令代码的工程
(2)选择【File】->【New…】建立一个新的文件TEST1.S,设置直接添加到项目中,见图1.2。
输入如程序清单1.1所示的代码,并保存,见图1.3。
图1.2新建文件TEST1.S
图1.3添加了TEST1.S的工程管理窗口
程序清单1.1TEST1.S文件代码
(3)由于ADS安装以后默认字体是CourierNew,对于中文支持不完善,因此建议修改字体。
选择【Edit】->【Perferences…】,可以看见以下对话框,如图1.4所示。
在Font选项设置字体是Fixedsys,Script是CHINESE_GB2312。
由于Tab在不同文本编辑器解释不同,建议在TabInsertsSpaces前打勾,使Tab键插入的是多个空格。
图1.4字体和Tab设置
(4)选择【Edit】->【DebugRelSettings…】,在DebugRelSettings对话框的左边选择ARMLinker项,然后在Output页设置链接地址(见图1.5),在Options页设置调试入口地址(见图1.6)。
图1.5工程链接地址设置
图1.6工程调试入口地址设置
(5)选择【Project】->【Make】,将编译链接整个工程。
如果编译成功,见图1.7,Errors&Warnings对话框会报告编译错误为0,那么就可以对工程进行仿真。
图1.7编译错误和警告对话框
(6)选择【Project】->【Debug】,或者按下快捷键F5。
IDE环境就会启动AXD调试软件,见图1.8。
断点调试方法:
首先设置断点,只需要在第6行灰色区域双击鼠标即可,如果出现红色实心圆点,那么表示断点设置成功,然后选择【Execute】->【Go】全速运行,可以发现程序停止在第6行。
还有一种比较方便的调试方法就是RuntoCursor,单击鼠标第8行灰色区域,如果AXD将第8行高亮就表示设置成功,然后选择【Execute】->【RuntoCursor】运行到光标,可以发现程序停止在第8行。
通过断点调试可以观察ARM寄存器数值变化,具体的操作方法在后面的实验会具体介绍。
图1.8AXD调试窗口
实验二汇编指令实验
1.实验目的
(1)了解ADS1.2集成开发环境及ARMulator软件仿真。
(2)掌握ARM7TDMI汇编指令的用法,并能编写简单的汇编程序。
(3)掌握指令的条件执行和使用LDR/STR指令完成存储器的访问。
2.实验设备
硬件:
PC机一台
软件:
Windows98/XP/2000系统,ADS1.2集成开发环境
3.实验内容
(1)使用LDR指令读取0x40003100上的数据,将数据加1,若结果小于10则使用STR指令把结果写回原地址,若结果大于等于10,则把0写回原地址。
然后再次读取0x40003100上的数据,将数据加1,判断结果是否小于10……周而复此循环。
(2)使用ADS1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(ProcessorRegisters)监视R0、R1的值,打开存储器观察窗口(Memory)监视0x40003100上的值。
4.实验预习要求
(1)仔细阅读参考文献[1]第4章ARM指令系统的内容。
(2)仔细阅读产品光盘附带文档《ADS集成开发环境及仿真器应用》或其它相关资料,了解ADS工程编辑和AXD调试的内容(本实验使用软件仿真)。
5.实验步骤
(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程Instruction1。
(2)建立汇编源文件TEST2.S,编写实验程序,然后添加到工程中。
(3)设置工程链接地址ROBase为0x40000000,RWBase为0x40003000。
设置调试入口地址Imageentrypoint为0x40000000。
(6)编译链接工程,选择【Project】->【Debug】,启动AXD进行软件仿真调试。
(7)打开寄存器窗口(ProcessorRegisters),选择Current项监视R0、R1的值。
打开存储器观察窗口(Memory)设置观察地址为0x40003100,显示方式Size为32Bit,监视0x40003100地址上的值。
说明:
在Memory窗口中点击鼠标右键,Size项中可以选择显示格式为8Bit、16Bit或32Bit,如图2.1所示。
可以单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,调试时观察寄存器和0x40003100地址上的值。
运行结果见图2.2。
图2.1Memory窗口显示格式设置
图2.2程序运行结果
6.实验参考程序
程序清单2.1汇编指令实验参考程序
实验三C语言调用汇编实验
1.实验目的
掌握在C语言程序中调用汇编程序,了解ATPCS基本规则。
2.实验设备
硬件:
PC机一台
软件:
Windows98/XP/2000系统,ADS1.2集成开发环境
3.实验内容
在C程序调用汇编子程序,实现两个整数的加法运算。
汇编子程序的原型为:
uint32Add(uint32x,uint32y),其中uint32已定义为unsignedint。
4.实验预习要求
(1)仔细阅读ARM公司的ATPCS的相关文档,比如ATPCS.PDF。
(2)仔细阅读产品光盘附带文档《ADS集成开发环境及仿真器应用》或其它相关资料,了解ADS工程编辑和AXD调试的内容。
(本实验使用软件仿真)
5.实验步骤
(1)启动ADS1.2,使用ARMExecutableImage工程模板建立一个工程ProgramC1。
(2)建立源文件Startup.S、Add.S和Test.c,编写实验程序,然后添加到工程中。
(3)设置工程链接地址ROBase为0x40000000,RWBase为0x40003000。
设置调试入口地址Imageentrypoint为0x40000000。
(4)设置工程链接选项,位于开始位置的起始代码段设置为Startup.o的Start段。
(5)编译链接工程,选择【Project】->【Debug】,启动AXD进行软件仿真调试。
(6)在Test.c文件中的调用Add()的代码处设置断点,然后全速动行程序。
(7)程序在断点处停止。
使用SetpIn单步运行程序,观察程序是否转到汇编程序Add.S。
(8)选择【ProcessorViews】->【Variables】)打开变量观察窗口,观察全局变量的值,单步/全速运行程序,判断程序的运算结果是否正确。
6.实验参考程序
C语言调用汇编程序实验的参考程序见程序清单3.1。
汇编加法函数代码见程序清单3.2。
程序清单3.1C语言调用汇编程序实验参考程序
程序清单3.2汇编加法函数代码
实验四外部中断与GPIO输出控制实验
1.实验目的
(1)掌握向量中断控制器(VIC)的设置。
(2)掌握外部中断引脚功能设置及外部中断的工作模式设置。
(3)了解中断服务函数的编写。
2.实验设备
硬件:
PC机一台,MagicARM2200-S教学实验开发平台一套
软件:
Windows98/XP/2000系统,ADS1.2集成开发环境
3.实验内容
设置P0.20脚为EINT3功能,初始化为非向量中断,并设置为电平触发模式,然后等待外部中断。
中断服务程序将蜂鸣器控制输出信号取反,然后等待中断信号的撤消,最后清除中断标志并退出中断。
4.实验预习要求
仔细阅读参考文献[1]第5.4.6节外部中断输入的说明,第5.8节向量中断控制器的说明。
5.实验步骤
(1)启动ADS1.2,使用ARMExecutableImageforMagicARM2200工程模板建立一个工程VICDef_C。
(2)在user组中的main.c中编写主程序代码。
(3)选用DebugInExram生成目标,然后编译链接工程。
(4)短接MagicARM2200-S教学实验开发平台上的蜂鸣器跳线JP7,独立按键JP11。
断开CF卡跳线JP13、GPIO接口J17,PS2跳线JP4。
(5)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。
(6)在中断服务程序中设置断点,全速运行程序,使EINT3为低/高电平,即反复按下与释放KEY1。
(7)单步/全速运行程序,观察程序是否正确运行,蜂鸣器是否蜂鸣。
6.实验参考程序
外部中断实验的参考程序见程序清单4.1。
程序清单4.1外部中断实验参考程序
实验五PWM输出实验
1.实验目的
掌握PWM功能,实现数模转换。
2.实验设备
硬件:
PC机一台,MagicARM2200-S教学实验开发平台一套
软件:
Windows98/XP/2000系统,ADS1.2集成开发环境
3.实验内容
程序通过改变PWM占空比,使PWMDAC端口输出步进升高的直流电压。
4.实验预习要求
(1)仔细阅读参考文献[1]第5.15节脉宽调制器(PWM)的说明。
(2)仔细阅读本书第1章的内容,了解MagicARM2200-S教学实验开发平台的硬件结构,注意PWMDAC部分的电路。
5.实验步骤
(1)启动ADS1.2,使用ARMExecutableImageforMagicARM2200工程模板建立一个工程PWMDAC_C。
(2)在user组中的main.c中编写主程序代码。
(3)选用DebugInExram生成目标,然后编译链接工程。
(4)测量PWMDAC测试圆孔的电压。
(5)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。
(6)全速运行程序,用示波器或万用表测量电压。
图5.1PWM连接电路
6.实验参考程序
数模转换实验的参考程序见程序清单5.1。
程序清单5.1数模转换实验参考程序
实验六定时器实验
1.实验目的
熟悉LPC2000系列ARM7微控制器的定时器0/1的基本设置及应用。
2.实验设备
硬件:
PC机一台,MagicARM2200-S教学实验开发平台一套
软件:
Windows98/XP/2000系统,ADS1.2集成开发环境
3.实验内容
使用定时器0实现1秒定时,控制蜂鸣器蜂鸣。
采用软件查询方式等待定时时间到达。
4.实验预习要求
仔细阅读参考文献[1]第5.14节定时器0和定时器1的说明。
5.实验步骤
(1)启动ADS1.2,使用ARMExecutableImageforMagicARM2200工程模板建立一个工程TimeBeep_C。
(2)在user组中的main.c中编写主程序代码。
(3)选用DebugInExram生成目标,然后编译链接工程。
(4)见图2.16,短接MagicARM2200-S教学实验开发平台上的蜂鸣器跳线JP7。
断开CF卡跳线JP13、GPIO接口J17。
(5)选择【Project】->【Debug】,启动AXD进行JTAG仿真调试。
可以全速运行程序,蜂鸣器会响一秒,停一秒,然后再响一秒……依次循环。
6.实验参考程序
定时器实验的参考程序见程序清单6.1。
程序清单6.1定时器实验参考程序
实验七µC/OS-Ⅱ移植实验
1.实验目的
(1)掌握将μC/OS-II操作系统移植到ARM7处理器的方法。
(2)了解μC/OS-II操作系统的基本原理和移植条件。
2.实验设备
硬件:
PC机一台,MagicARM2200-S教学实验开发平台一套
软件:
Windows98/XP/2000系统,ADS1.2集成开发环境,μC/OS-II操作系统(V2.52)
3.实验内容
学习移植μC/OS-II操作系统到ARM7处理器,然后编写一个简单的多任务应用程序,实现LED流水灯控制。
4.实验预习要求
(1)仔细阅读参考文献[4],了解μC/OS-II的组成和移植相关的文件内容。
(2)仔细阅读参考文献[1]第3~5章和第7章的内容,了解ARM7体系结构及其汇编编程,了解LPC2000系列ARM7微控制器的硬件结构(如向量中断控制器和定时器等)和μC/OS-II移植的相关说明。
5.实验原理
(1)μC/OS-II概述
μC/OS-II是一个完整的、可移植、可固化、可剪裁的占先式实时多任务内核。
μC/OS-II是用ANSIC语言编写,包含一小部分汇编代码,使之可以供不同架构的微处理器使用。
μC/OS-II可以管理64个任务,具有信号量、互斥信号量、事件标志组、消息邮箱、消息队列、任务管理、时间管理和内存块管理等系统功能。
μC/OS-II软件体系结构如图7.1所示,由图可以看出,μC/OS-II包括以下3个部分:
μC/OS-II核心代码:
包括10个C程序文件和1个头文件,主要实现了系统调度、任务管理、内存管理、信号量、消息邮箱和消息队列等系统功能。
此部分的代码与处理器无关。
μC/OS-II配置代码:
包括2个头文件,用于裁剪和配置μC/OS-II。
此部分的代码与用户实际应用相关。
μC/OS-II移植代码:
包括1个汇编文件、1个C程序文件和1个头文件,这是移植μC/OS-II所需要的代码。
此部分的代码与处理器相关。
说明:
移植代码的文件名不是固定的,但为了保持μC/OS-II系统的一致性,文件名一般也不要改变(即OS_CPU.H、OS_CPU_A.ASM和OS_CPU_C.C)。
图7.1μC/OS-II软件体系结构
(2)μC/OS-II移植条件
移植μC/OS-II之前需要注意,目标处理器必须满足以下几点要求:
处理器的C编译器能产生可重入型代码;
处理器支持中断,并且能产生定时中断(通常为10~100HZ);
用C语言就可以开/关中断;
处理器能够支持一定数量的数据存储硬件堆栈(可能是几千字节);
处理器有将堆栈指针以及其它CPU寄存器的内容读出,并保存到堆栈或内存中去的指令。
LPC2000系列ARM7微控制器可以满足第2、4和5点要求,使用ADS1.2的C编译器可以满足第1、3点要求。
(3)μC/OS-II移植步骤
1)OS_CPU.H的移植
在OS_CPU.H文件中定义与处理器相关(实际上是与编译器相关)的数据类型,如BOOLEAN、INT8U、INT8S等等。
根据ADS1.2编译器的特性,定义代码可参考程序清单7.1。
程序清单7.1OS_CPU.H—与编译器相关的数据类型
在OS_CPU.H文件中定义与处理器相关的宏,主要是进入临界区的OS_ENTER_CRITICAL和退临界区的OS_EXIT_CRITICAL,定义代码可参考程序清单7.2。
如程序清单7.2所列,将OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()定义为软件中断函数,所以还要编写相应的软件中断处理代码(可以在OS_CPU_C.C文件中编写)实现开/关中断。
同样定义OS_TASK_SW()为软件中断函数,并编写有相应的软件中断处理代码(调用OSIntCtxSw函数)实现任务切换。
程序清单7.2OS_CPU.H—与处理器相关的宏
2)OS_CPU_C.C的移植
在OS_CPU_C.C文件中,需要编写以下10个简单的C函数:
OSTaskStkInit();
OSTaskCreateHook();
OSTaskDelHook();
OSTaskSwHook();
OSTaskIdleHook();
OSTaskStatHook();
OSTaskTickHook();
OSInitHookBegin();
OSInitHookEnd();
OSTCBInitHook()。
其中,9个系统Hook函数可以为空函数,也可以根据用户自己的需要编写相应的操作代码。
任务栈结构初始化函数OSTaskStkInit,必须根据移植时统一定义的任务堆栈结构进行初始化,代码参考程序清单7.3。
程序清单7.3OS_CPU_C.C—函数OSTaskStkInit
3)OS_CPU_A.S的移植
由于ADS1.2编译器默认汇编文件后缀名为“S”,所以移植代码OS_CPU_A.ASM改名为OS_CPU_A.S。
在OS_CPU_A.S文件中,需要编写以下4个简单的汇编语言函数:
OSStartHighRdy();
OSCtxSw();
OSIntCtxSw();
OSTickISR()。
其中,函数OSCtxSw不是必须的,但必须要定义好函数OS_TASK_SW(在OS_CPU.H中声明),以实现任务级任务切换。
在ISR(中断服务程序)中切换任务时会调用OSIntCtxSw函数,代码参考程序清单7.4。
程序清单7.4OS_CPU_A.S—函数OSIntCtxSw
启动μC/OS-II是通过调用OSStart()实现,OSStart()最终调用函数OSStartHighRdy()运行多任务启动前优先级最高的任务。
OSStartHighRdy()函数的代码参考程序清单7.5。
说明:
在OS_CPU_C.C文件已定义OSStartHighRdy(),此函数直接调用__OSStartHighRdy()。
程序清单7.5OS_CPU_A.S—函数OSStartHighRdy
函数OSTickISR为系统时钟节拍中断函数,这需要使用到处理器的定时器和定时中断。
为了达到集中地初始化硬件(定时器、中断和I/O等)的目的,此函数可以在用户工程的启动代码文件中实现,参考程序清单7.6。
说明:
系统时钟节拍中断函数的名称并不是固定的,也并不一定要在OS_CPU_A.S文件中实现。
程序清单7.6系统时钟节拍中断服务程序
6.实验步骤
(1)连接EasyJTAG仿真器和MagicARM2200-S,然后安装EasyJTAG仿真器的驱动程序(若已经安装过,此步省略)。
(2)为ADS1.2增加LPC2200(forMagicARM2200)专用工程模板(若已增加过,此步省略)。
(3)建立一个项目目录uCOS-II,添加μC/OS2.52源代码和移植代码(移植代码在产品配套光盘上可以找到,其目录名为ARM)。
将移植的PC服务代码Arm_Pc复制到项目目录uCOS-II下。
(4)将μC/OS2.52源代码Source(目录)复制到项目目录,此时uCOS-II目录的结构如图7.2所示。
μC/OS2.52源代码可以从参考文献[4]的附带光盘上获得。
说明:
SOURCE子目录下存放μC/OS2.52源代码,ARM子目录存放移植代码,Arm_Pc子目录存放移植的PC服务代码(可通过串口向PC机发送显示信息)。
图7.2μC/OS-II目录的结构
(5)启动ADS1.2,使用ARMExecutableImageforUCOSII(forMagicARM2200)工程模板建立一个工程LedDisp,工程存储在uCOS-II目录下。
(6)打开工程窗口user组中的main.c文件,编写实验程序并保存。
(7)根据程序设计来更改Os_cfg.h文件,配置μC/OS-II操作系统。
(对于本实验,μC/OS-II的配置使用模板默认设置即可)
(8)选用DebugInExram生成目标,如图7.3所示,然后编译链接工程。
图7.3选择生成目标
(9)将MagicARM2200-S的JP5、JP7跳线短接,JP13跳线断开。
注意:
JP7与IDE硬盘/CF卡电路的JP13跳线复用P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 原理 应用 实验 指导书 56 份周志青