30
嵌嵌嵌嵌 嵌嵌 交交交交交交 交交交交交交

嵌入式系统实验

Embed Size (px)

DESCRIPTION

嵌入式系统实验. ● 交叉开发实验. ● 仿真开发实验. 交叉开发环境 是指实现、编译、链接、调试应用程序代码的环境与运行应用程序代码的环境不同,分散在不同设备上。 提供实现、编译、链接、调试应用程序代码的环境的设备称为 宿主机 ; 运行应用程序代码的设备称为 目标机 。. 本实验中宿主机和目标机的硬件连接. 编程语言. 编写程序使用的语言是 SIC33 C 语言和汇编语言。. ● C 语言. 符合标准 C 语言的所有规范,相应的源程序必须按照 ANSI C 编写。. 在 C 源程序中可嵌入汇编语句。. ● 汇编语言. - PowerPoint PPT Presentation

Citation preview

Page 1: 嵌入式系统实验

嵌入式系统实验 ● 交叉开发实验

● 仿真开发实验

Page 2: 嵌入式系统实验

交叉开发环境是指实现、编译、链接、调试应用程序代码的环境与运行应用程序代码的环境不同,分散在不同设备上。

提供实现、编译、链接、调试应用程序代码的环境的设备称为宿主机;

运行应用程序代码的设备称为目标机。

Page 3: 嵌入式系统实验

本实验中宿主机和目标机的硬件连接

Page 4: 嵌入式系统实验

编写程序使用的语言是 SIC33 C 语言和汇编语言。

编程语言

● C 语言

● 汇编语言

符合标准 C 语言的所有规范,相应的源程序必须按照 ANSI C 编写。

在 C 源程序中可嵌入汇编语句。

汇编语言语法见教材

Page 5: 嵌入式系统实验

本实验采用 Monitor 方式调试, PC 机的 COM1 口连 Monitor 调试器。

硬件连接

Page 6: 嵌入式系统实验

 

实验板外形

长度 L=18.6cm , 宽度 W=16cm

Page 7: 嵌入式系统实验

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 复位节电控制

弹上 : 节电模式 ; 按下 : 工作模式

实验板的重要部分说明

Page 8: 嵌入式系统实验

Monitor 接口调试步骤1 .在断电情况下,将微机 COM1 口与 Monitor 接口中间件串行接口相连,再将 Monitor 接口中间件上 Monitor 接口与实验板 Monitor 接口( JP1 )相连,同时将实验板上 BYTE _ MODE 以及 RP _ SEL 两开关均按下;

2 . Monitor 接口中间件上的 debug 按扭开关为“ ON” ;

3 .将实验板上 S1 手拨开关中第 7 位拨到 ON ,使CPU 工作使能;

4 .给实验板供电,打开宿主机上的调试工具 wb33就可下载程序,进行调试。

Page 9: 嵌入式系统实验

宿主机配置

宿主机为一台装有 windows 操作系统和 wb33 工具包的 PC机,内含 S1C33 C 编译器 gc33 和调试器 db33 。

Page 10: 嵌入式系统实验

调试程序包括以下几步:

1 .编辑源程序,可用 wb33 提供的编辑工具, 也可用其他的编辑工具;

2 .当源程序编写完后,就可对源程序编译、连接等处理,在此过程还要编写相应的 make 文件,参数文件等;

3 .当编译成功后,将生成后缀名为 srf 的可调试的程序,此程序就可下载到目标板上进行调试。

Page 11: 嵌入式系统实验

下面通过一个例子来介绍整个程序的调试过程。

本程序只是一个简单的 ram 测试程序,它的功能就是循环打亮指示灯。

在实验板上,有 4 个指示灯,分别对应 S2 ( 8 路开关)的前 4 个开关。可以通过提高 RXD, TXD 电压来打通三极管的基极,从而使连接在发射极的指示灯点亮。

程序只需要向控制这些信号的端口写为高电平,就可点亮指示灯。

本程序的任务是循环点亮第 1 、 2 个指示灯,因此需要保持试验板上的对应两个开关打开。

Page 12: 嵌入式系统实验

源程序有两部分: boot.s, main.c 。

boot.s 主要作系统一些初始化,如设置堆栈和全局指针。

main.c 主要向端口写高电平。

要点亮指示灯的两个信号: P00 ,P01 。

相关的寄存器如下:

● 功能选择寄存器

( 0x402d0 内容形式 D[0..7] ) :

D[0]=0 选择的是 P00

D[1] = 0 选择的是 P01

Page 13: 嵌入式系统实验

● 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 为高电平

Page 14: 嵌入式系统实验

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

Page 15: 嵌入式系统实验

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 程序如下:

Page 16: 嵌入式系统实验

写好了 boot.s 和 main.c 源代码之后,就可以使用wb33 工具了:双击 wb33 图标启动 wb33 工具,打开 work bench ,并在左边的目录中找到源代码所在的文件夹,打开它,选中“所有类型文件”的小圆点,就可以看到 main.c 和 boot.s 文件。

Page 17: 嵌入式系统实验

点击正下方的 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 将它们逐一加入右边的内容框中。完成之后就如右图。

Page 18: 嵌入式系统实验

这时可以关闭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 路径和执行路径是否正确,如与实际情况不符需要改正。

Page 19: 嵌入式系统实验

在本例中将程序代码绝对定位到芯片的内部 ram 里,起始地址为: 0x0000000 。所以将本文件的第二行改为

-code 0x0000000

在此文件里也可将程序定位在外部的存 储器里。比如后面的两个试验任务就需要把程序代码绝对定位到芯片外部的 flash 里,起始地址为: 0x0800000 。即将本文件的第二行改为

-code 0x0800000

修改完毕后,保存 test.cm 文件。

Page 20: 嵌入式系统实验

在左边的文件框中选中 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 文件中,

Page 21: 嵌入式系统实验

单击右下角的 par gen 按键,弹出 parameter file generater 窗口,设置好参数就可以单击上方的 creat par file 按键生成参数配置文件 33104_1.par 。

在本例中不需对 parameter file generater的默认参数作出改变。但在后面两个实验任务中,需要激活相应存储区,即在地址 800000 对应的 enable 选项前打勾 。

Page 22: 嵌入式系统实验

关闭 parameter file generater窗口,回到 work bench 界面。单击上面的 open option windowns ,弹出 gcc -lk options 窗口和 other options窗口。在 other options 窗口中选择调试方式为 monitor ,并保持这两个窗口打开。

Page 23: 嵌入式系统实验

当上面的工作基本作完后,就可以用 MON 调试了。打开目标板的电源,在 wb33 主窗口中选择 33104_1.par ,然后点击 DB33 按钮。立即在主机窗口中弹出 db33 的窗口,在此 db33 窗口中的命令窗口中显示正常连接的信息。

因为在前面将程序的初始位置定位在 0x0000000处,所以要想执行这段程序,还必须将 PC 指针指向 0x00000000 。

可以用命令 rs 来改变 PC 指针, rs 命令是用来修改一些寄存器内容的,也包括 PC 寄存器。在 command 框中输入 rs 命令后回车,就会显示当前 pc 指针的内容,输入要修改的值,本例是 0 ,回车,再输入 q ,则可退出 rs 命令。

Page 24: 嵌入式系统实验

调试过程包括可以单步执行,连续执行,也可设置断点,查看符号变量,查看相应的内存空间等。

如果让程序连续执行,就可以看到目标系统上的两个指示灯交替闪烁。(这里注意实验板上的 SW_LED 的 1,2 开关应拨向 ON 。)

Page 25: 嵌入式系统实验

实验一 向内存区写一个菲波拉系列

实验要求

向内存区 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

Page 26: 嵌入式系统实验

实验目的

通过此任务,使实验者达到如下目的: 了解整个小型应用程序的开发过程,熟悉 EPSON提供的开发工具 WB33, DB33 。了解编辑、编译、连接、下载调试的整个过程。针对此任务,使实验者熟悉 DB33 中有关对内存操作的命令如: dw , dh , db 。

Page 27: 嵌入式系统实验

实验二 编写一个键盘中断应用程序 实验要求

编写一个键盘中断应用程序,当按下某个键时,使一些指示灯循环点亮。此键盘对应的信号是 NMI, NMI 对应的中断向量号是 7 ;要点亮指示灯的两个信号。

实验目的

通过此实验任务,使实验者达到如下目的:

了解整个中断机制。从中断服务程序的编写,中断服务程序的挂接及如何响应中断深入了解中断思想。

了解如何利用处理器的端口资源,如何对处理器提供的相关端口进行控制达到用户的要求。使实验者对处理器内部结构有一些认识。

Page 28: 嵌入式系统实验

task2.cmd 文件如下:

eb 4812d

59

q

ew 48134

800000

q

lf int_test.srf

rsth

在演示过程中,可把一些 db33 提供的指令编成后缀为 cmd 文件,作批处理执行。在下载的过程中可在DB33 选项中选中 db33*.cmd file. 如下页图的选项框中蓝色部分。一 旦下载就可一次执行 cmd 文件中所有的命令。

Page 29: 嵌入式系统实验
Page 30: 嵌入式系统实验

谢谢观赏

2003 年 12 月 20 日