Upload
hyatt-higgins
View
31
Download
4
Embed Size (px)
DESCRIPTION
嵌入式系统实验. ● 交叉开发实验. ● 仿真开发实验. 交叉开发环境 是指实现、编译、链接、调试应用程序代码的环境与运行应用程序代码的环境不同,分散在不同设备上。 提供实现、编译、链接、调试应用程序代码的环境的设备称为 宿主机 ; 运行应用程序代码的设备称为 目标机 。. 本实验中宿主机和目标机的硬件连接. 编程语言. 编写程序使用的语言是 SIC33 C 语言和汇编语言。. ● C 语言. 符合标准 C 语言的所有规范,相应的源程序必须按照 ANSI C 编写。. 在 C 源程序中可嵌入汇编语句。. ● 汇编语言. - PowerPoint PPT Presentation
Citation preview
嵌入式系统实验 ● 交叉开发实验
● 仿真开发实验
交叉开发环境是指实现、编译、链接、调试应用程序代码的环境与运行应用程序代码的环境不同,分散在不同设备上。
提供实现、编译、链接、调试应用程序代码的环境的设备称为宿主机;
运行应用程序代码的设备称为目标机。
本实验中宿主机和目标机的硬件连接
编写程序使用的语言是 SIC33 C 语言和汇编语言。
编程语言
● C 语言
● 汇编语言
符合标准 C 语言的所有规范,相应的源程序必须按照 ANSI C 编写。
在 C 源程序中可嵌入汇编语句。
汇编语言语法见教材
本实验采用 Monitor 方式调试, PC 机的 COM1 口连 Monitor 调试器。
硬件连接
实验板外形
长度 L=18.6cm , 宽度 W=16cm
J2 : 5V 电源接口
POW_PSW :电源开关,控制整个实验板的电源
S1 , S2 : 8 位双列开关
U1 : CUP 芯片 (S1C33209)
U2 : FLASH 芯片 (E28F320J3A)
U4,U5 : SRAM 芯片 W24L011AJ
JP1 : MON 接口
BYTE_MODE : FLASH 的模式设置
弹上 :x8 模式 ; 按下 :x16 模式
RP_SEL : FLASH 复位节电控制
弹上 : 节电模式 ; 按下 : 工作模式
实验板的重要部分说明
Monitor 接口调试步骤1 .在断电情况下,将微机 COM1 口与 Monitor 接口中间件串行接口相连,再将 Monitor 接口中间件上 Monitor 接口与实验板 Monitor 接口( JP1 )相连,同时将实验板上 BYTE _ MODE 以及 RP _ SEL 两开关均按下;
2 . Monitor 接口中间件上的 debug 按扭开关为“ ON” ;
3 .将实验板上 S1 手拨开关中第 7 位拨到 ON ,使CPU 工作使能;
4 .给实验板供电,打开宿主机上的调试工具 wb33就可下载程序,进行调试。
宿主机配置
宿主机为一台装有 windows 操作系统和 wb33 工具包的 PC机,内含 S1C33 C 编译器 gc33 和调试器 db33 。
调试程序包括以下几步:
1 .编辑源程序,可用 wb33 提供的编辑工具, 也可用其他的编辑工具;
2 .当源程序编写完后,就可对源程序编译、连接等处理,在此过程还要编写相应的 make 文件,参数文件等;
3 .当编译成功后,将生成后缀名为 srf 的可调试的程序,此程序就可下载到目标板上进行调试。
下面通过一个例子来介绍整个程序的调试过程。
本程序只是一个简单的 ram 测试程序,它的功能就是循环打亮指示灯。
在实验板上,有 4 个指示灯,分别对应 S2 ( 8 路开关)的前 4 个开关。可以通过提高 RXD, TXD 电压来打通三极管的基极,从而使连接在发射极的指示灯点亮。
程序只需要向控制这些信号的端口写为高电平,就可点亮指示灯。
本程序的任务是循环点亮第 1 、 2 个指示灯,因此需要保持试验板上的对应两个开关打开。
源程序有两部分: boot.s, main.c 。
boot.s 主要作系统一些初始化,如设置堆栈和全局指针。
main.c 主要向端口写高电平。
要点亮指示灯的两个信号: P00 ,P01 。
相关的寄存器如下:
● 功能选择寄存器
( 0x402d0 内容形式 D[0..7] ) :
D[0]=0 选择的是 P00
D[1] = 0 选择的是 P01
● I/O 控制寄存器( 0x402d2 内容形式 D[0..7] ) : D[0]=0 P00 为输入 D[0]=1 P00 为输出 D[1]=0 P01 为输入 D[1]=1 P01 为输出
● I/O 数据寄存器( 0x402d1 内容形式 D[0..7] ) : D[0]=0 P00 为低电平 D[0]=1 P00 为高电平 D[1]=0 P01 为低电平 D[1]=1 P01 为高电平
boot.s 程序如下:
#define SP_INI 0x0800 ; sp is in end of 2KB internal RAM
#define GP_INI 0x0000 ; global pointer %r8 is 0x0
.code
.global BOOT ; BOOT VECTOR
BOOT:
xld.w %r8,SP_INI
ld.w %sp,%r8 ; set SP
ld.w %r8,GP_INI ; set global pointer
xcall main ; goto main
xjp BOOT ; infinity loop
main()
{int i;
*(volatile char *)(0x402D0)=0xf0;
*(volatile char *)(0x402D2)=0xFF;
*(volatile char *)(0x402D1)=0x00;
for(;;)
{for (i=0;i<500000;i++)
*(volatile char *)(0x402D1)=0x01;
for (i=0;i<500000;i++)
*(volatile char *)(0x402D1)=0x02;
}
}
main.c 程序如下:
写好了 boot.s 和 main.c 源代码之后,就可以使用wb33 工具了:双击 wb33 图标启动 wb33 工具,打开 work bench ,并在左边的目录中找到源代码所在的文件夹,打开它,选中“所有类型文件”的小圆点,就可以看到 main.c 和 boot.s 文件。
点击正下方的 make edit 按键,出现如左图的界面,通过它来产生make 文件。 Make 文件的后缀名为 mak ,文件名可以用户自己设置,系统的默认文件名是 test ,若要改变,可在左上方的 Make file name 的输入框中,将 test 改为别的名字。在这个例子中,我们保留了系统默认的 test 文件名。单击左上方的 New Make file 按键就可以生成 test.mak 。生成 test.mak 的同时,还会生成 test.cm 和 test.cmx 文件。分别选中左下方 Add files 框中的文件,通过点击下面的 Add to Make file 将它们逐一加入右边的内容框中。完成之后就如右图。
这时可以关闭make file edit 界面,回到刚才的 work bench 。可以看到 work bench 左下的框中多出了三个文件: test.mak 、 test.cm 和test.cmx 文件。其中的 test.cm 很重要, 并且在本试验中需要修改。通过选中左下框中的 test.cm 文件,并单击下面的 edit 按键,可以打开 test.cm 文件进行查看和编辑。系统生成的 test.cm 文件如下:
;Map set
;-code 0x0080000 ; set relative code section start address
;-data 0x0081000 ; set relative data section start address
;-bss 0x0000000 ; set relative bss section start address
……
;Library path
-l E:\C33\lib
检查 lib 路径和执行路径是否正确,如与实际情况不符需要改正。
在本例中将程序代码绝对定位到芯片的内部 ram 里,起始地址为: 0x0000000 。所以将本文件的第二行改为
-code 0x0000000
在此文件里也可将程序定位在外部的存 储器里。比如后面的两个试验任务就需要把程序代码绝对定位到芯片外部的 flash 里,起始地址为: 0x0800000 。即将本文件的第二行改为
-code 0x0800000
修改完毕后,保存 test.cm 文件。
在左边的文件框中选中 test.mak 文件,单击右边的 make 按键,就可以产生目标文件 test.srf ,并产生一系列的相关文件: boot.ms, main.ms , boot.o , main.o , test.map , boot.ms 。
main.ms 是 boot.s 和 main.c 的汇编语言, boot.o 和 main.o 是可重定位程序 , test.srf 是绝对定位程序, test.map 表示程序的内存映射情况。错误信息保存在 wb33.err 文件中,
单击右下角的 par gen 按键,弹出 parameter file generater 窗口,设置好参数就可以单击上方的 creat par file 按键生成参数配置文件 33104_1.par 。
在本例中不需对 parameter file generater的默认参数作出改变。但在后面两个实验任务中,需要激活相应存储区,即在地址 800000 对应的 enable 选项前打勾 。
关闭 parameter file generater窗口,回到 work bench 界面。单击上面的 open option windowns ,弹出 gcc -lk options 窗口和 other options窗口。在 other options 窗口中选择调试方式为 monitor ,并保持这两个窗口打开。
当上面的工作基本作完后,就可以用 MON 调试了。打开目标板的电源,在 wb33 主窗口中选择 33104_1.par ,然后点击 DB33 按钮。立即在主机窗口中弹出 db33 的窗口,在此 db33 窗口中的命令窗口中显示正常连接的信息。
因为在前面将程序的初始位置定位在 0x0000000处,所以要想执行这段程序,还必须将 PC 指针指向 0x00000000 。
可以用命令 rs 来改变 PC 指针, rs 命令是用来修改一些寄存器内容的,也包括 PC 寄存器。在 command 框中输入 rs 命令后回车,就会显示当前 pc 指针的内容,输入要修改的值,本例是 0 ,回车,再输入 q ,则可退出 rs 命令。
调试过程包括可以单步执行,连续执行,也可设置断点,查看符号变量,查看相应的内存空间等。
如果让程序连续执行,就可以看到目标系统上的两个指示灯交替闪烁。(这里注意实验板上的 SW_LED 的 1,2 开关应拨向 ON 。)
实验一 向内存区写一个菲波拉系列
实验要求
向内存区 0x800100 位置开始,写一个菲波拉系列。此系列的关系式如下:
A0=1; A1=1 AN=A(N-1)+A(N-2) (N=2,3, … … )
在内存区存储的形式为:
0x800100 0001
0x800102 0001
0x800104 0002
0x800106 0003
……………………..
任务中 N=16
实验目的
通过此任务,使实验者达到如下目的: 了解整个小型应用程序的开发过程,熟悉 EPSON提供的开发工具 WB33, DB33 。了解编辑、编译、连接、下载调试的整个过程。针对此任务,使实验者熟悉 DB33 中有关对内存操作的命令如: dw , dh , db 。
实验二 编写一个键盘中断应用程序 实验要求
编写一个键盘中断应用程序,当按下某个键时,使一些指示灯循环点亮。此键盘对应的信号是 NMI, NMI 对应的中断向量号是 7 ;要点亮指示灯的两个信号。
实验目的
通过此实验任务,使实验者达到如下目的:
了解整个中断机制。从中断服务程序的编写,中断服务程序的挂接及如何响应中断深入了解中断思想。
了解如何利用处理器的端口资源,如何对处理器提供的相关端口进行控制达到用户的要求。使实验者对处理器内部结构有一些认识。
task2.cmd 文件如下:
eb 4812d
59
q
ew 48134
800000
q
lf int_test.srf
rsth
在演示过程中,可把一些 db33 提供的指令编成后缀为 cmd 文件,作批处理执行。在下载的过程中可在DB33 选项中选中 db33*.cmd file. 如下页图的选项框中蓝色部分。一 旦下载就可一次执行 cmd 文件中所有的命令。
谢谢观赏
2003 年 12 月 20 日