当前位置:文档之家› DSP实验指导书(学生用)

DSP实验指导书(学生用)

? CCS 软件的使用

一、软件设置步骤:软件仿真(不使用仿真器)时的软件配置方法如下:
1、点击桌面“SETUP CCS2”的图标,出现如下窗口;

2、点击“Close” ,如下图所示:



在上述窗口中右键点击“My System”下的C55XXCyele Accurate Simulator, 点
击”Remove”并确认。然后用鼠标把窗口中间的“C54XX Simulator”移到左边的
“My System” 窗口中。弹出如下所示的界面:

3、点击“NEXT ”按钮,出现如下图示的窗口:

4、点击窗口中的 按钮,在弹出的对话框中选择“SIN5402.cfg”,点击“打开”

铵钮,出现如下图示的窗口:

5、点击“NEXT ”按钮,弹出如下图示的窗口:

6、在上图窗口中点击 按钮,在弹出的窗口中选择“c5402sim.gel”,然后点

击“打开”,点“Finish”完成,出现如下图所示的界面,然后关闭窗口保存设置。

二、CCS5000 的使用方法:

(一)CCS 文件名介绍
在使用CCS 前,应该先了解以下软件的文件名约定:
Project.p.t CCS 定义的工程文件
Program.c C 程序文件
Program.asm 汇编语言程序文件
Filename.h 头文件,包括DSP/BIOS API 模块
Filename.lib 库文件
Program.cmd 连接命令文件
Program.obj 编译后的目标文件
Program.out 可在目标DSP 上执行的文件,可在CCS 监控下调试/执行

(二)编写一个简单的程序:
这一部分将介绍如何在CCS 下面新建一个程序,及如何编译、连接、下载、
调试程序。

1、新建一个工程文件
(1)、打开桌面上图标CCS 2 (’C5000),出现下图界面;

(2)、点击菜单Project、在出现的下拉菜单中点击New 弹出下图示所示的窗口,
然后在“Project”中输入项目名字,则会在C:\ti\myprojects 目录下建立一个、文
件夹 example,并在example 文件夹下建立项目文件 example.pjt (也可以自己定
义其它路径)。注意:此文件不能在中文目录下。

(3)点击“完成”按钮出现界面如下:

(4 )此时即可加入各种文件项目中,也可马上建立一个源文件然后加入到项目
中。建立源文件的方法是:点击 File-New -Source,即弹出一个可供编辑的窗
口,在窗口中输入内容,然后保存为相应的文件(如果是汇编代码,则保存为文
件名后缀为ASM 的文件,依次类推),最后即可把此建立的文件添加到项目中。
下面介绍把文件添加到项目中的方法。
2、往工程中加入文件
如果把example 文件夹下的example.asm, example.cmd, vectors.asm 三个文件
添加到C:\ti\myprojects\exampl

e 下。
(1)、选择Project/Add Files to Project,在文件类型选项中*.asm 选择文件,选择
example.asm,然后点击“打开”按钮,即把文件添加到了项目中。
(2)、再重复上一步骤,把vectors.asm 添加到项目中。
(3)、选择Project/Add Files to Project。在文件类型选项CMD 文件(*.cmd),
选择 example.cmd,然后点击“打开”按钮。
(4 )、此时,可以在工作窗口的工程视察中 example.pjt 旁的+号,展开工程查
看其中文件。结果如下图所示:

(5)、注意此时,一些包含的文件不会出现在include 目录下,编译后CCS 会自
动加入,不必手动执行。
3、浏览代码
和 Windows 的浏览器相似,只要打开+号展现下面的文件,然后双击文件
的图标,在主窗口就会显示相应的文件原始代码。
4、编译执行程序
(1)、选择Project/Reduild All,或工具条中的相应按钮
(2 )、编译成功后,选择 File/Load Program ,选择你刚编译的可执行程序
example.out,并单击打开。
(3)、选择Debug/Run,或工具条中的相应图标或运行程序。
5、跟踪/调试程序
(1)、选择Debut/Restart,重新执行程序。
(2)、不全速运行,而是选择Debug/StepInto 或按F8,单步执行。
(3)、单步执行程序的同时,选择View/CPU Registers 观察主要寄存器的变化。
选择View/Memon 相应程序区、数据区地址,观察存贮器中的内容。注意:具体
变量地址由*.cmd 文件决定。

实验一 程序的控制与转移

一、实验目的
1、掌握条件算符的使用。
2、掌握循环操作指令(BNAZ )和比较操作指令(CMPR)
二、实验设备
计算机
三、实验内容


5
编写程序,实现计算y= ∑xi 的值。
i=1


四、实验步骤
1、点击桌面CCS2(’C5000)图标,运行CCS软件。
2、新建一个项目:点击Project-New,将项目命名为example1,并将项目
保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为
中文名,因为CCS软件不能识别以中文命名的文件夹。
3、新建一个源文件:点击File-New-Source File可以打开一个文本编辑
窗口,点击保存按键,保存在和项目相同的一个文件夹下面(example1),保存类
型选择*.ASM(如果源文件是 C 语言编写的,保存类型选择*.C,本实验中的例程
是使用汇编语言编写的,所以选择*.ASM为保存类型),我们在这里将保存名字命
名为example1.asm 。
4、在项目中添加源文件:在新建立了一个源文件以后,要想使用 CCS 编译
器对

该源文件进行编译还需要将源文件添加到项目中去。添加方法是在工程管理
器中右键单击example1.pjt,在弹出的菜单中选择Add Files,然后将刚才建立
的example1.asm文件添加到该项目中去。
5、编写源程序:
在工程管理器中双击 example1.asm ,将出现文本编辑窗口,在该文本编辑
窗口中输入如下内容。(要求:将以下程序每条加上注解。)
.title "example1.asm"
.mmregs
STACK .usect "STACK",10H ;堆栈的设置
.bss x,5 ;为变量分配6个字的存储空间
.bss y,1
.def start
.data
table: .word 10,20,3,4,5 ;输入xi
.text
start: STM #0,SWWSR ;插入 0 个等待状态
STM #STACK+10H,sp ;设置堆栈指针
STM #x,AR1 ;AR1 指向x
RPT #4 ;
MVPD table,*AR1+ ;把程序存储器中的数据移动到数据存储器
LD #0,A ;将累加器A清零
CALL SUM ;调用子程序SUM
end: B end
SUM: STM #x,AR3 ;AR3指向x
STM #4,AR2 ;AR2=4
loop: ADD *AR3+,A ;将xi进行累加,并将累加和存放A中
BANZ loop,*AR2- ;此循环总共进行5次乘法和比较
STL A,*(y) ;将累加和存放入y中
RET ;子程序返回
.end
提示:
(1)源代码的书写有一定的格式,初学者往往容易忽视。每一行代码分为三
个区:标号区、指令区和注释区。标号区必须顶格写,主要是定义变量、常量、
程序标致时的名称。指令区在标号区之后,以空格或TAB 格开。如果没有标号,
也必须在指令前面加上空格或 TAB,不能顶格。注释区在标号区、程序区之后,
以分号开始。注释区前面可以没有标号区或程序区。另外还有专门的注释行,以*
打头,必须顶格开始。
(2)一般区分大小写,除非加编译参数忽略大小写。
(3)标点符号有时不注意会打成中文全角版本号导致错误。
6、编写链接配置文件:
只有汇编源程序是不够的,一个完整的 DSP 程序至少包含三个部分:主程序
(*.asm)、中断向量表(vectors.asm)、链接配置文件(*.cmd)。这里先介绍一下链接配
置文件。链接配置文件有很多功能,这里先介绍最常用的也是必须的两条:1.存
贮器的分配 2.标明程序入口。
由于每个程序都需要一个链接配置文件,每个程序的链接配置文件根据实际情
况的需要都略有不同,下面就为本实验的程序编写一个链接配置文件,其它实验
的链接配置文件都可

以参考此例来完成:
/*example1.cmd */
vectors.obj
example1.obj
-o example1.out
-m example1.map
-estart
MEMORY
{
PAGE 0:
EPROM:org=0090H len=0F70H
VECS: org=0080H len=0010H
PAGE 1:
SPRAM:org=1000H len=1000H
DARAM:org=2000H len=2000H
}
SECTIONS
{
.text :>EPROM PAGE 0
.data :>EPROM PAGE 0
.bss :>SPRAM PAGE 1
STACK :>DARAM PAGE 1
.vectors :>VECS PAGE 0
}
7、编写中断向量表文件
/* vectors.asm */
.title "vectors.asm"
.ref start
.sect ".vectors"
B start
.end
8、对项目进行编译和链接:
把example1.asm、vectors.asm、example1.cmd 依次添加到项目后,点击Project
-Compile File,在项目编译成功之后点击
Project -Build 选项对该项目进行链接,生成
*.OUT 文件。
9、装载可执行文件:
要让程序代码在DSP 内部运行必需将生成
的*.OUT 文件装载到DSP 内部,装载方法
是点击:File-Load Programe 再选择生成的
example1.out 文件就可以将程序装载到DSP
的内部存储器中。
10、运行程序并查看结果:
a )首先打开欲查看的数据空间:点击 View -
Memory,弹出“Memory Window Options”对话框,把欲查看的地址改为 0x1000,
如上页右图所示。
b)点击OK 按钮,然后点击Debug-Run 让程序在DSP 内部运行,最后点击Debug
-Halt,再观察“Memory”对话框,看是否与下图一致:

实验二 加减法和乘法运算

一、实验目的
掌握加减法和乘法运算指令。
二、实验设备
计算机
三、实验内容


4
编写程序,分别实现计算z=x+y-w、y=mx+b、y= ∑ai xi 。
i=1


四、实验步骤
前4 项实验步骤与实验一相同。
5、编写源程序:
*****************************************
* *
* 计算 z=x+y-w *
* *
*****************************************
.title "example2.asm"
.mmregs
STACK .usect "STACK",10H ;堆栈的设置
.bss x,1 ;为变量分配4 个字的存储空间
.bss y,1
.bss w,1
.bss z,1
.def start
.data
table .word 10,26,23 ;x,y,w
.text
start: STM #0,SWWS

R ;插入 0 个等待状态
STM #STACK+10H,SP ;设置堆栈指针
STM #x,AR1 ;AR1 指向x
RPT #2
MVPD table,*AR1+ ;把程序存储器中的数据移动到数据存储器
CALL SUMB
end: B end
SUMB: LD *(x),A
ADD *(y),A
SUB *(w),A
STL A,*(z)
RET
.end
6、编写链接配置文件:
参照实验一,需要更改的地方如下:

更改前 更改后

Example1.obj Example2.obj

-o example1.out -o example2.out

-m example1.map -m example2.map

7、编写中断向量表文件
参照实验一,可不作修改。
8、对项目进行编译和链接:
把example2.asm、vectors.asm、example2.cmd 依次添加到项目后,点击Project-Compile
File,在项目编译成功之后点击Project-Build 选项对该项目进行链接,生成*.out 文件。

9、装载可执行文件:
要让程序代码在DSP 内部运行必需将生成的
*.OUT 文件装载到DSP 内部,装载方法是点击:
File-Load Programe 再选择生成的example4.out
文件就可以将程序装载到DSP 的内部存储器中。

10、运行程序并查看结果:
a)首先打开欲查看的数据空间:点击
View - Memory , 弹 出 “ Memory Window
Options”对话框,把欲查看的地址改为 0x1000,
如右图所示。

b)点击 OK 按钮,然后点击 Debug-Run 让
程序在 DSP 内部运行,最后点击Debug-Halt,再观察“Memory ”对话框,看是否与下
图一致:
11、建立项目工程文件example3,使之实现计算y=mx+b;
*****************************************
* *
* 计算 y=mx+b *
* *
*****************************************
.title "example3.asm"
.mmregs
STACK .usect "STACK",10H ;堆栈的设置
.bss m,1 ;为变量分配4 个字的存储空间
.bss x,1
.bss b,1
.bss y,1
.def start
.data
table: .word 3,15,20 ;m,x,b
.text
start:STM #0,SWWSR ;插入 0 个等待状态
STM #STACK+10H,SP ;设置堆栈指针
STM #m,AR1 ;AR1 指向m
RPT #2 ;把下一条指令重复执行 3 遍
MVPD table,*AR1+ ;把程序存储器中的数据转移到数据存储器
CALL SU
end: B end
SU: LD *(m),T
MPY *(x),A
ADD *(

b),A

STL A,*(y)
RET
.end


4
12 建立项目工程文件example4,使之实现计算y= ∑aixi 。
i=1


*****************************************
* *


4
* 计算 y= ∑ai xi *
i=1
* *
*****************************************
.title "example4.asm"
.mmregs
STACK .usect "STACK",10H ;堆栈的设置
.bss a1,4 ;为变量分配5 个字的存储空间
.bss x1,4
.bss y,1
.def start
.data
table: .word 3,5,15,20,1,2,3,4 ;输入ai,xi
.text
start:STM #0,SWWSR ;插入 0 个等待状态
STM #STACK+10H,SP ;设置堆栈指针
STM #a1,AR1 ;AR1 指向x1
RPT #7 ;移动 8 个数据
MVPD table,*AR1+ ;把数据从数据存储器存入程序存储器
CALL SUM
end: B end
SUM: STM #a1, ar2
STM #x1, ar3
RPTZ A,*(y) ;利用间接寻址方式,和重复指令完成乘加运算
MAC *AR2+,*AR3+,A
STL A, *(y)
RET
.end

说明:1、链接配置文件与中断向量表文件与上一个实验类似
2、观察实验结果与前面实验类似。


4
13.编写计算y= ∑aixi 的程序段,数据均为小数。
i=1


其中:a1=0.1,a2=0.2,a3=-0.3,a4=0.4 x1=0.8,x2=0.6,x3=-0.4,x4=-0.2

.title "example13.asm"
.mmregs
STACK .usect "STACK",10H
.bss a,4
.bss x,4
.bss y,1
.def start
.data
table: .word 1*32768/10
.word 2*32768/10
.word -3*32768/10
.word 4*32768/10
.word 8*32768/10
.word 6*32768/10
.word -4*32768/10
.word -2*32768/10
.text
start:SSBX FRCT
STM #a,AR1
RPT #7
MVPD table,*AR1+
STM #x,AR2
STM #a,AR3

RPTZ A,#3
MAC *AR2+,*AR3+,A
STH A,*(y)
end: B end
.end

14:找出4 项乘积ai*xi(i=1,2,3,4)中的最大值
主程序:example6.asm

********************************************
* *
* 找出4 项乘积ai*xi(i=1,2,3,4)中的最大值 *
* *
********************************************
.title "example6.asm"
.mmregs
STACK .usect "STACK",10H ;堆栈的设置
.bss a,4 ;为变量分配9 个字的存储空间
.bss x,4
.bss y,1
.def start
.data
table: .word 1,5,3,4 ;a1,a2,a3,a4
.word 8,6,7,2 ;x1,x2,x3,x4
.text
start:STM #0,SWWSR ;插入 0 个等待状态
STM #STACK+10H,SP ;设置堆栈指针
STM #a,AR1
RPT #7
MVPD table,*AR1+
CALL MAX
end: B end
MAX: STM #a,AR1
STM #x,AR2
STM #2,AR3
LD *AR1+,T
MPY *AR2+,A ;第一个乘积在累加器A 中
loop: LD *AR1+,T
MPY *AR2+,B ;其他乘积在累加器B 中
MAX A ;累加器A 和B 比较,选出较大者存入A 中
BANZ loop,*AR3- ;此循环中共进行3 次乘法和比较
STL A,*(y)
RET
.end

vectors.asm

.title "vectors.asm"
.ref start
.sect ".vectors"
B start
.end

example6.cmd

vectors.obj
example6.obj
-o example6.out
-m example6.map
-estart
MEMORY
{
PAGE 0:
EPROM:org=0090H len=0F70H
VECS: org=0080H len=0010H
PAGE 1:
SPRAM:org=1000H len=1000H
DARAM:org=2000H len=2000H
}
SECTIONS
{
.text :>EPROM PAGE 0
.data :>EPROM PAGE 0
.bss :>SPRAM PAGE 1
STACK :>DARAM PAGE 1
.vectors:>VECS PAGE 0
}

仿真结果:


硬件实验

如果CCS 是在硬件目标板上运行,则先要安装目标板驱动程序,然后运行“CCS Setup”
配置驱动程序,最后才能执行 CCS。除非用户改变CCS 应用平台类型,否则只需运行一次
CCS 配置程序。运行Code Composer Studio Setup 软件(即桌面上的Setup CCS2 (C5000)图
标。

点击Install a Device Driver,选择相应驱动程序.
例如:
5X 系列: PCI 开发器为xdspci54x.dvr;
ISA 开发器为wtxds54xisa.dvr
EPP 开发器为sdgo5xx32.dll
2X 系列: PCI 开发

器为xdspci2xx.dvr
ISA 开发器为wtxds2xxisa.dvr
EPP 开发器为sdgo2xx32.dll
3X 系列: PCI 开发器为xds3xPCI.dvr
ISA 开发器为wtxds3xisa.dvr
EPP 开发器为Sdgo3x32.dll
对于 EL-DSP-EXP II 型实验箱,由于采用并口与仿真器连接,需要使用 sdgo5xx32.dll 驱动
程序。

此时,Available Board/Simulator Type 一栏中会出现相应的驱动图标;

把该图标拖动到最左边的 System Configuration 一栏中。出现Board Properties 对话框。
点击NEXT,进入下一页,会显示板卡的I/O 口值,将其由0x240 修改为 0x378(ISA、
PCI、USB 仿真器不用修改,此处由于仿真器为并口,须改为0x378),再点击NEXT,

在Processor Configuration 窗中, 在Available Processor 中选择TMS320C54XX 然后,点
击Add Single;对话框右边出现CPU_1 图标.
点击NEXT,进入下一页,提示选择一个初始化的.GEL 文件,对于 5000 系列的DSP 芯
片,可选择5402、5409、5410 等。
这里我们选择c5402.gel,最后,点击finish.关闭CCS 程序,选择保存。至此 CCS 硬件调
试设置完成。

实验三 LED 灯闪烁

一、 实验目的
熟悉CCS软件的使用和简单算法程序的编写
二、 实验设备
计算机,CCS2.2软件,实验箱,DSP仿真器
三、实验步骤
1、系统连接。进行DSP 实验前,必须先连接号仿真器、实验箱及计算机。
2、连接正确后,接通电源并启动计算机。此时,仿真盒上的“红色小灯”应点亮。否则
DSP 开发系统与计算机连接有问题。同时将实验箱上 K10 按键弹起。
3、运行 CCS 程序。计算机启动成功后,实验箱上电,再启动 CCS,此时仿真器上当“绿
色小灯”应点亮,并且 CCS 正常启动,表明系统连接正常;否则仿真器的连接可能有
问题。
4、建立工程文件,并创建文件exp01.asm

.mmregs
.global _main
_main:
stm #3000h,sp
ssbx xf
call delay
rsbx xf
call delay
b _main
nop
nop

;delay .5 second
delay:
stm 270fh,ar3
loop1:
stm 0f9h,ar4
loop2:
banz loop2,*ar4-
banz loop1,*ar3-
ret
nop
nop
.end

5、建立exp01.cmd 文件
vectors.obj
exp01.obj
-o exp01.out
-m exp01.map
-estart
MEMORY
{
PAGE 0: /* program space */
VECS: origin = 0x0080, length = 0x0080 /* 128bytes vector table space */
PROG: origin = 0x0100, length = 0x2F00 /* 8K program memory space */
PAGE 1: /* data space */
SCRA: origin = 0x0060, length = 0x0020 /* scratch pad mem space */
STCK: origin = 0x2000, length = 0x0800 /* 1K words for stack */
D

AT1: origin = 0x2800, length = 0x0100 /* 256 words for sys data */
DAT2: origin = 0x2900, length = 0x1000 /* 12K words for appl data */
}

SECTIONS
{
.vectors : {} > VECS PAGE 0 /* interrupt vector table */
.text : {} > PROG PAGE 0 /* program code */
.coeffs : {} > PROG PAGE 0 /* initialized parameters */

.bss : {} > DAT2 PAGE 1 /* uninitialized vars for applications */
.data : {} > DAT2 PAGE 1 /* initialized data */
.stack : {} > STCK PAGE 1 /* software stack section */
.variable : {} > DAT1 PAGE 1 /* uninitialized vars for DSP&AIC10 */
}

6、编译并连接,生成exp01.out 文件。加载该文件,如下图:

加载完毕,单击”Run”运行程序。

可见指示灯 Led5 以一定频率闪烁;单击”Halt”暂停程序运行,则指示灯 LED5
停止闪烁,如再单击”RUN”,则指示灯LED5 又开始闪烁。
改变delay 子程序中的延时参数,可以改变Led 灯亮灭的时间间隔。读者可
以自行尝试。
关闭所有窗口,本实验完毕。

实验四 数据存储实验

一、 实验目的

1、掌握TMS320C54 的程序空间的分配;

2、掌握TMS320C54 的数据空间的分配;

3、熟悉操作TMS320C54 数据空间的指令。

二、 实验设备

计算机,CCS 2.2 版软件,DSP 仿真器,实验箱。

三、 实验系统相关资源介绍

本实验指导书是以 TMS320VC5402 为例,介绍相关的内部和外部存储器资源。对于其

他类型的CPU 请参考查阅相关的数据手册。

下面给出TMS320VC5402 的存储器分配表:
对于数据存储空间而言,映射表相对固定。值得注意的是内部寄存器都映射到数据存储

空间内。因此在编程应用是这些特定的空间不能作其他用途。对于程序存储空间而言,其映

射表和 CPU 的工作模式有关。当MP/MC 引脚为高电平时,CPU 工作在微处理器模式;当

MP/MC 引脚低电平时,CPU 工作在为计算机模式。具体的存储器映射关系如上图所示。

存储器试验主要帮助用户了解存储器的操作和 DSP 的内部双总线结构。并熟悉相关的

指令代码和操作等。

四、 实验步骤与内容

1、连接好DSP 开发系统,运行CCS 软件;将实验箱上 K10 按键弹起。

2、在 CCS 的Memory 窗口中查找 C5402 各个区段的数据存储器地址,在可以改变的

数据地址随意改变其中内容;

3、在 CCS 中装载实验示范程序,单步执行程序,观察程序中写入和读出的数据存储

地址的变化;

4、联系其他寻址方式的使用。

5、实验操作说明

建立工程“e

xp02.pjt”,并在其下建立“exp02.asm”,内容如下

.mmregs

.global _main

_main:
;store data

stm 1000h,ar1 ;address of internal memory

rpt #07h

st 0aaaah,*ar1+ ;data

;read data then re-store

stm 7h,ar3

stm 1000h,ar1

stm 1008h,ar2

loop:

ld *ar1+,t

st t,*ar2+

banz loop,*ar3-

here:

b here

.end

再建立exp02.cmd 文件,内容如下:
vectors.obj
exp01.obj
-o exp02.out
-m exp02.map
-estart
MEMORY

{

PAGE 0: PROG: origin = 0x80, len = 0x980

/* PAGE 0: PROG: origin =0x180, len=0x980(you can repace the line

above by using this line,then watch the result*/

PAGE 1: DATA: origin = 0x0a00, len = 0x0a00

}

SECTIONS

{

.text: {} > PROG PAGE 0

.cinit: {} > PROG PAGE 0

.switch: {} > PROG PAGE 0

.bss: {} > DATA PAGE 1

.const: {} > DATA PAGE 1

.sysmem: {} > DATA PAGE 1

.stack: {} > DATA PAGE 1

.data: {} > DATA PAGE 1
}

对工程进行编译,生成.out 输出文件。

在File 菜单下加载“exp02.out”;

用“View”下拉菜单中的“Memory”查看内存单元;

输入要查看的内存单元地址,本实验要查看 0x1000H~0x100FH 单元的数值变化,输入

地址0x1000H;
查看 0x1000H~0x100FH 单元的初始值,单击“Run”运行程序,也可以“单步”运行

程序;

单击“Halt”暂停程序运行;

查看0x1000H~0x100FH 单元内数值的变化;
关闭各窗口,本实验完毕。

本实验说明:

本实验程序将对0x1000 开始的8 个地址空间,填写入0xAAAA 的数值,然后读出,并

存储到 0X1008 开始的 8 个地址空间。在 CCS 中可以观察 DATA 存储器空间地址

0X1000~0X100F 值的变化。

实验五 I/O 实验

一、 实验目的

1、了解I/O 口的扩展;掌握I/O 口的操作方法;

2、熟悉PORTR,PORTW 指令的用途;

3、了解数字量与模拟量的区别和联系。

二、 实验设备

计算机,CCS 2.2 版软件,DSP 仿真器,实验箱。

三、 实验步骤与内容

1、将实验箱上 K10 按键弹起。运行 CCS 软件,建立工程文件并输入源程序,编译后

运行,分别调整数字输入输出单元的开关 S6~S13,观察LED6~LED13 亮灭的变化,
以及输入和输出状态是否一致。

2、实验

操作说明

启动CCS 2.2,建立“exp03.pjt”工程,并建立“exp03.asm”,内容如下:

.mmregs

.global _main

.text

_main:

stm 3100h,sp

stm 1000h,ar1 ;define the address

portr 8000h,*ar1

nop

nop

portw *ar1,8001h

nop

nop

b _main

nop

nop

.end

再建立exp03.cmd 文件:

MEMORY

{

PAGE 0: PROG: origin = 0x2000, len = 0x980

PAGE 1: DATA: origin = 0x2a00, len = 0x0300

}

SECTIONS

{

.text: {} > PROG PAGE 0

.cinit: {} > PROG PAGE 0

.switch: {} > PROG PAGE 0

.bss: {} > DATA PAGE 1

.const: {} > DATA PAGE 1

.sysmem: {} > DATA PAGE 1

.stack: {} > DATA PAGE 1

.data: {} > DATA PAGE 1

}

将上述 2 个文件加载到工程中,编译并生成.out执行文件。在 File菜单下加载

“exp03.out”;

单击“Run”运行程序;

分别调整数字输入单元的开关K2~K9,观察LED7~LED14 亮灭的变化,以及输入和输

出状态是否一致。单击“Halt”将暂停持续运行,开关对灯失去控制。
关闭所有窗口,本实验完毕。

四、 实验说明

实验中采用简单的一一映射关系来对I/O 口进行验证,目的是使实验者能够对I/O 口有

一目了然的认识。在本实验中,提供的IO 空间分配如下:
CPU:

0x8000 按键 input (X) 8

0x8001 灯 output(X) 8



相关主题
文本预览
相关文档 最新文档