《嵌入式系统原理及应用》实验指导书适用专业:电气、测控等课程代码: 8413841总学时: 48 总学分: 3编写单位:电气信息学院编写人:王平审核人:审批人:批准时间:年月日目录实验一ADS 1.2集成开发环境练习 (3)实验二汇编调用实验与Bootloader下载 (11)实验三、μC/OS-II移植实验 (14)实验四、步进电机控制实验 (17)实验一ADS 1.2集成开发环境练习一、实验目的和任务了解ADS 1.2集成开发环境的使用方法。
建立一个新的工程;建立一个汇编源文件,并添加到工程中;设置文本编辑器支持中文;设置编译链接控制选项;编译链接工程;调试工程。
二、实验设备装有ADS 1.2集成开发环境的PC机三、实验步骤1.ADS环境练习。
(1) 在D:\新建一个目录,目录名为experiment。
(2) 启动ADS1.2 IDE集成开发环境,选择【File】->【New…】,使用ARM Executable Image工程模板建立一个工程,名称为ADS,目录为D:\experiment。
(3) 选择【File】->【New…】建立一个新的文件TEST1.S,设置直接添加到项目中。
输入如程序代码,并保存,此时在工程窗口中可以看到TEST1.S文件。
(4) 选择【Edit】->【Perferences…】,在Font选项设置字体是Fixedsys,Script 是CHINESE_GB2312。
(5) 选择【Edit】->【DebugRel Settings…】,在DebugRel Settings对话框的左边选择ARM Linker项,设置链接地址。
(6) 选择【Project】->【Make】,或者按下快捷键F7,将编译链接整个工程。
(7) 选择【Project】->【Debug】,或者按下快捷键F5。
IDE环境就会启动AXD 调试软件,接着可以执行单步、全速运行调试。
注意:本实验使用软件仿真,所以要在AXD中选择【Options】->【Configure Target…】菜单,然后在Choose Target窗口中选用ARMUL软件仿真。
2.ADS1.2操作实例一:汇编指令实验使用LDR指令读取0x40003100上的数据,将数据加1,若结果小于10则使用STR指令把结果写回原地址,若结果大于等于10,则把0写回原地址……周而复此循环;使用ADS 1.2软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(Processor Registers)监视R0、R1的值,打开存储器观察窗口(Memory) 监视0x40003100上的值。
(1) 启动ADS 1.2,使用ARM Executable Image工程模板建立一个工程Instruction1。
(2) 建立汇编源文件TEST2.S,编写实验程序,然后添加到工程中。
(3) 设置工程链接地址RO Base为0x40000000,RW Base为0x40003000。
设置调试入口地址Image entry point为0x40000000。
(4) 编译链接工程,选择【Project】->【Debug】,启动AXD进行软件仿真调试。
(5) 打开寄存器窗口(Processor Registers),选择Current项监视各寄存器的值。
(6) 打开存储器观察窗口(Memory) 设置观察地址为0x40003100。
(7) 单步运行程序,可以设置/取消断点,或者全速运行程序,停止程序运行,调试时观察寄存器和0x40003100地址上的值。
参考程序:3.ADS1.2操作实例二:C语言程序实验编写一个汇编程序文件Startup.S和一个C程序文件Test.c。
汇编程序的功能是初始化堆栈指针和初始化C程序的运行环境,然后调跳转到C程序运行,这就是一个简单的启动程序。
C程序使用加法运算来计算1+2+3+...+(N-1)+N的值(N>0)。
(1) 启动ADS 1.2,使用ARM Executable Image工程模板建立一个工程ProgramC。
(2) 建立源文件Startup.S和Test.c,编写实验程序,然后添加到工程中。
(3) 设置工程链接地址RO Base为0x40000000,RW Base为0x40003000。
设置调试入口地址Image entry point为0x40000000。
(4) 设置位于开始位置的起始代码段为Startup.o的代码段。
(5) 编译链接工程,选择【Project】->【Debug】,启动AXD进行软件仿真调试。
(6) 在Startup.S的跳转到C程序入口的代码处设置断点,然后全速动行程序。
(7) 程序在断点处停止。
单步运行程序,判断程序是否跳转到C程序中运行。
参考程序:汇编启动代码:Startup.sC语言实验参考程序:Test.c四、实验结果与分析1.ADS中如何实现程序由汇编到C语言的跳转?2.如何在AXD中观察存储器的内容,如何实现对寄存器的监视?3.本实验的汇编程序中使用了哪几种寻址方式?实验二汇编调用实验与Bootloader下载一、实验目的和任务学习掌握在C程序调用汇编子程序的方法,本实验实现由C程序调用利用汇编语言实现两个整数的加法运算。
实现将Bootloader下载到SST39VF1601。
二、实验原理在C程序调用汇编子程序,三、实验仪器设备装有ADS的PC机,ARM2410教学实验系统,EasyJTAG-H仿真器。
四、实验步骤1.在C程序调用汇编子程序,实现两个整数的加法运算。
汇编子程序的原型为:uint32 Add(uint32 x, uint32 y),其中uint32已定义为unsigned int。
(1) 启动ADS 1.2,使用ARM Executable Image工程模板建立一个工程ProgramC1。
(2) 建立源文件Startup.S、Add.S和Test.c,编写实验程序,然后添加到工程中。
(3) 设置工程链接地址RO Base为0x40000000,RW Base为0x40003000。
设置调试入口地址Image entry point为0x40000000。
(4) 设置工程链接选项,位于开始位置的起始代码段设置为Startup.o的代码段。
(5) 编译链接工程,选择【Project】->【Debug】,启动AXD进行软件仿真调试。
(6) 在Test.c文件中的调用Add()的代码处设置断点,然后全速动行程序。
(7) 程序在断点处停止。
使用Setp In单步运行程序,观察程序是否转到汇编程序Add.S。
(8) 单步/全速运行程序,判断程序的运算结果是否正确。
程序清单:C语言调用汇编程序实验参考程序:Test.c#define uint8 unsigned char#define uint32 unsigned intextern uint32 Add(uint32 x, uint32 y);uint32 sum;// 调用汇编程序Add实现加法运算void Main(void){ sum = Add(555, 168);while(1);}汇编加法函数代码: Add.S; 加法函数,原型为uint32 Add(uint32 x, uint32 y)。
EXPORT AddAREA AddC,CODE,READONLY ; 声明代码段AddCENTRY ; 标识程序入口CODE32 ; 声明32位ARM指令Add ADD R0,R0,R1 ; 输入参数x为R0,y为R1MOV PC,LR ; 返回值为R0END2.下载Bootloader使用EasyJTAG-H 将ZLG/BOOT 下载到SST39VF1601 中。
需要ADS1.2 软件、基于ADS 的WR_NORFLASH.mcp 工程、H-JTAG 软件和EasyJTAG-H仿真器。
跳线设置:断开BOOT-SEL 跳线JP8,短接蜂鸣器跳线JP9。
将EasyJTAG-H 和实验箱相连,运行H-JTAG,打开WR_NORFLASH.mcp 工程,打开StartUP.s,文件,将下面的代码添加进文件中“ResetInit”函数相应位置。
ResetInitBL InitStack ; 初始化堆栈BL TargetBusInit ; 总线系统初始化(函数中不允许堆栈操作)BL TargetResetInit ; 针对目标板的系统初始化MRC p15,0,R1,c1,c0,0 ; (MMU设置,异步总线模式) 读控制寄存器ORR R1,R1,#0xC0000000 ; 当HDIVN=1时操作有效MRC p15,0,R1,c1,c0,0B __main ; 跳转到c语言入口B . ; 如果main返回,则死循环; /* 包含要烧写的bin文件*/EXPORT FLASH_FUNCTIONEXPORT FLASH_FUNCTION_ENDFLASH_FUNCTIONINCBIN flash.binFLASH_FUNCTION_END选择DebugRel 生成目标,进入AXD 调试环境。
在语句while(1)处设置断点,然后全速运行程序,或者将光标放置在while(1)处后运行到此处。
程序停止后,如果蜂鸣器鸣叫一声则表示已经正确将ZLG/BOOT 下载到SST39VF1601 中,然后后将实验箱断电即可;如果蜂鸣器连续鸣叫则表示下载出错,需要重新下载。
下载完毕,将EasyJTAG-H 拔掉,以便启动系统。
2 启动ZLG/BOOT设置串口终端(115200-8-N-1,无流控制)。
将PC 串口和实验箱右侧的UART0 相连,然后启动实验箱,将会得到如图所示的ZLG/BOOT 启动界面。
五、实验结果与分析1.如何实现在C程序中调用汇编?2.下载Bootloader有哪些步骤?实验三、μC/OS-II移植实验一、实验目的和任务掌握将μC/OS-II操作系统移植到ARM9处理器的方法。
了解μC/OS-II操作系统的基本原理和移植条件。
学习移植μC/OS-II操作系统到ARM9处理器,然后编写一个简单的多任务应用程序,实现LED流水灯控制。
二、实验设备装有ADS 1.2集成开发环境的PC机、MagicARM2410教学实验开发平台三、实验原理●μC/OS-II概述μC/OS-II是一个完整的、可移植、可固化、可剪裁的占先式实时多任务内核。
µC/OS-II是用ANSI C语言编写,包含一小部分汇编代码,使之可以供不同架构的微处理器使用。
µC/OS-II可以管理64个任务,具有信号量、互斥信号量、事件标志组、消息邮箱、消息队列、任务管理、时间管理和内存块管理等系统功能。