第一篇:cup软硬工作框架图谱-DSP教案
中断请求信号中断控制器CUP操作流程(流水操作段)译码指令顺序流寻址读数数据访问CPU操作流程在硬件发生处译码cpu内部控制逻辑电路(驱动)取指CPU操作流程在硬件发生处执行CPU操作流程在硬件发生处非顺序取指(包括条件操作引发的)CPU工作流程在硬件发生处CPU工作流程在硬件发生处硬件单元程序控制(硬件)单元(PC,RC,BRC…)数据传送部件单元(数据地址发生器、总线等)程序流非顺序因之一:条件操作算数、逻辑运算部件单元(ALU、移位器、状态控制寄存器等对应操作所在单元部件对应操作所在单元部件程序控制(类)指令(操作)数据传送(类)指令(操作)算术、逻辑(类)指令(操作)机器内部数据流支持操作1和2的组合计算机机器本质上仅能做到三件事1算术运算2逻辑运算由机器内部操作因素决定算术类操作逻辑类操作对应操作所在单元部件注:条件操作是一种内部控制逻辑操作,可以认为是一种嵌入三类操作指令中完成选择逻辑功能的操作3重复的事完成分支选择、循环、调用 等重复模块所操作件对应元部在单程序控制类操作变量、表格重复数据块所操作件对应元部在单数据传送类操作
通用寄存器组译码器程序存储器数据总线指令 译码(缓冲)寄存器存放程序(指令)的存储器(区)PC程序存储器地址寄存器ALUACCCPU内部控制逻辑电路0x000x010x020x030x040x050x060x************101100程序地址总线存放数据的存储器(区)数据存储器地址寄存器存储器数据寄存器数据地址总线数据存储器数据总线0xF80xF90xFA0xFB0xFC0xFD0xFE0xFF************1101中断控制等寄存器 中断 控制器方式、计数寄存器 定时器 串口发送、接收、控制寄存器并口寄存器 DMA
并口寄存器(组)通用IO口
CPU工作流程:取指 ——译码——寻址——读数——执行(运算)——存数。其中流程中的每个阶段都可以说是CPU的一项操作。
P
控制单元指令地址发生和指令译码控制逻辑指令译码结果产生----->根据操作码部分译码结果要求控制运算单元执行根据指令操作数地址寻址方式存储器运算单元
其它逻辑和时序控制(如内部和外设控制信号)控制操作数地址生成和(读写)控制操作其数据传递CPU的二大部分:运算单元和控制单元的内部功能关系图控制单元所具备这些功能的根本目的:
是为了使数据(包括程序指令)能按指定的次序流转并被送到运算单元进行运算处理。
那么,数据又在哪些地方可以流转呢?
在cpu内外的三总线+寄存器的地方,且只在这里流转。
1QENB2QENB3QENB4QENB8QENB输出控制DSETQDSETQDSETQDSETQDSETQCLRQCLRQCLRQCLRQCLRQ1D2D3D4D8D时钟74HC374/74HC574寄存器内部逻辑图
Cpu寄存器1Cpu寄存器Cpu寄存器2数据流转的唯一地方:总线
内存单元IO设备寄存器1IO设备寄存器2IO设备寄存器n+寄存器
第二篇:DSP实验教案
汇编语言程序设计实验
实验一 程序的控制与转移
一、实验目的
1、掌握条件算符的使用。
2、掌握循环操作指令(BNAZ)
二、实验设备
计算机、DSP实验箱、ccs5000软件。
三、实验内容:
编写程序,实现计算的值。
四、实验步骤
1、用仿真器将计算机与DSP实验箱连接好,并依次打开实验箱电源、仿真器电源,然后运行CCS 软件。
2、新建一个项目:点击Project-New,将项目命名为example2,并将项目保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS 软件不能识别以中文命名的文件夹。
3、新建一个源文件:点击File-New-Source File可以打开一个文本编辑窗口,点击保存按键,保存在和项目相同的一个文件夹下面(example2),保存类型选择*.ASM(如果源文件是C 语言编写的,保存类型选择*.C,本实验中的例程是使用汇编语言编写的,所以选择*.ASM 为保存类型),我们在这里将保存名字命名为example2.asm。
4、在项目中添加源文件:在新建了一个源文件以后,要想使用CCS 编译器对该源文件进行编译还需要将源文件添加到项目中去。添加方法是在工程管理器中右键单击example2.pjt,在弹出的菜单中选择Add Files,然后将刚才建立的example2.asm 文件添加到该项目中去。
5、编写源程序:
在工程管理器中双击example2.asm,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容:
.title “example2.asm”.mmregs STACK.usect “STACK”,10H;堆栈的设置
.bss x,5;为变量分配6 个字的存储空间.bss y,1.def _c_int00;start.data table:.word 10,20,3,4,5;x1,x2,x3,x4,x5.text;start: STM #0,SWWSR;插入0 个等待状态 _c_int00: STM #0,SWWSR STM #STACK+10H,sp;设置堆栈指针 STM #x,AR1;AR1指向x RPT #4;下一条被重复执行5 遍
MVPD table,*AR1+;把程序存储器中的数据传送到数据存储器 LD #0,A;A清零
CALL SUM;调用求和函数 end: B end
SUM: STM #x,AR3;AR3指向x STM #4,AR2;AR2=4 loop: ADD *AR3+,A;*AR3+A-->A,然后AR3+ BANZ loop,*AR2-;如果AR2 的值不为0,则跳到loop 处;;否则执行下一条指令
STL A,*(y);把A 的低16 位赋给变量y RET.end 提示:
(1)源代码的书写有一定的格式,初学者往往容易忽视。每一行代码分为三个区:标号区、指令区和注释区。标号区必须顶格写,主要是定义变量、常量、程序标识时的名称。指令区在标号区之后,以空格或TAB 格开。如果没有标号,也必须在指令前面加上空格或TAB,不能顶格。注释区在标号区、程序区之后,以分号开始。注释区前面可以没有标号区或程序区。另外还有专门的注释行,以*打头,必须顶格开始。(2)一般区分大小写,除非加编译参数忽略大小写。
(3)标点符号有时不注意会打成中文全角版本号导致错误。
6、编写链接配置文件:
只有汇编源程序是不够的,一个完整的DSP 程序至少包含三个部分:主程序、中断向量表、链接配置文件(*.cmd)。这里先介绍一下链接配置文件。链接配置文件有很多功能,这里先介绍最常用的也是必须的两条:1.存贮器的分配 2.标明程序入口。
由于每个程序都需要一个链接配置文件,每个程序的链接配置文件根据实际情况的需要都略有不同,下面就为本实验的程序编写一个链接配置文件,其它实验的链接配置文件都可以参考与本书配套的相应例程来完成: /*example2.cmd */ vectors.obj /*中断向量的目标文件*/ example2.obj /*产生目标文件*/-o example2.out /*产生可执行下载文件,文件名可以根据不同项目而定*/-m example2.map /*产生存储器映射文件,文件名可以根据不同项目而定 */
MEMORY {
PAGE 0: /*定义程序存贮区*/ EPROG:
origin = 0x4000, len = 0x3f80
VECT:
origin = 0x7f80,len = 0x80
PAGE 1: /*定义数据存贮区*/ SYSREGS:
origin = 0x00,len = 0x60
BIOSREGS:
origin = 0x60,len = 0x20
IDATA:
origin = 0x80,len = 0x3f00
EDATA:
origin = 0x8000,len = 0x8000 } SECTIONS {
.text :> EPROG PAGE 0 /*将.text 段映射到PAGE0 的EPROM 区*/.data :> EPROG PAGE 0 /*将.data 段映射到PAGE0 的EPROM 区*/.vectors: > VECT PAGE 0/*将中断向量表定位到PAGE0 的VECS 区*/
.bss: > IDATA PAGE 1 /*将.bss 段映射到PAGE1 的IDATA 区*/
STACK: > IDATA PAGE 1 /*将.stack 段映射到PAGE1 的IDATA 区*/ }
7、编写中断向量表文件;/* vectors.asm */.title “vectors.asm”;/*中断向量表的文件名*/.ref _c_int00;start /*引用外部定义的标号*/.sect “.vectors”;/*定义初始化的段名*/ B _c_int00;start /*引用start*/.end
8、对项目进行编译和链接:
把 example2.asm、vectors.asm、example2.cmd 依次添加到项目后,点击Project-Compile File,在项目编译成功之后点击Project-Build 选项对该项目进行链接,生成*.OUT文件。
9、装载可执行文件:
要让程序代码在DSP内部运行必需将生成的*.OUT文件装载到DSP 内部,装载方法是点击:File-Load Programe再选择生成的example2.out 文件就可以将程序装载到DSP 的内部存储器中。
10、运行程序并查看结果:
a)首先打开欲查看的数据空间:点击View-Memory,弹出“Memory Window Options”对话框,把欲查看的地址改为0x0080,如右图所示。
b)点击 OK 按钮,然后点击 Debug-Run 让程序在DSP 内部运行,最后点击Debug -Halt,再观察“Memory ” 对话框,看是否与右图一致。
实验二 堆栈的使用方法
一、实验目的
掌握堆栈的使用方法。
二、实验设备
计算机、DSP 实验箱。
三、实验内容
编写程序,观察堆栈的使用情况。
四、实验步骤
1、用仿真器将计算机与DSP 实验箱连接好,并依次打开实验箱电源、仿真器电源,然后运行CCS 软件。
2、新建一个项目:点击Project-New,将项目命名为example3,并将项目保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS 软件不能识别以中文命名的文件夹。
3、新建一个源文件:点击File-New-Source File 可以打开一个文本编辑窗口,点击保存按键,保存在和项目相同的一个文件夹下面(example3),保存类型选择*.ASM(如果源文件是C 语言编写的,保存类型选择*.C,本实验中的例程是使用汇编语言编写的,所以选择*.ASM 为保存类型),我们在这里将保存名字命名为example3.asm。
4、在项目中添加源文件:在新建了一个源文件以后,要想使用CCS 编译器对该源文件进行编译还需要将源文件添加到项目中去。添加方法是在工程管理器中右键单击example3.pjt,在弹出的菜单中选择Add Files,然后将刚才建立的example3.asm 文件添加到该项目中去。
5、编写源程序:
在工程管理器中双击example3.asm,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容:
.title “example3.asm”.mmregs size.set 100 stack.usect “STK”,size;堆栈的设置
.bss length,10H.def _c_int00;start.text _c_int00: B start;start: STM #0,SWWSR;插入0 个等待状态
STM #stack+size,SP;设置堆栈的指针 LD #-8531,A STM #size,AR1 MVMM SP,AR7 loop: STL A,*AR7-BANZ loop,*AR1-.end
6、编写链接配置文件:
参照实验一,需要更改的地方如下:
7、编写中断向量表文件 参照实验一,可不作修改。
8、对项目进行编译和链接:
把 example3.asm、vectors.asm、example3.cmd 依次添加到项目后,点击Project-CompileFile,在项目编译成功之后点击Project-Build 选项对该项目进行链接,生成*.out 文件。
9、装载可执行文件:
要让程序代码在 DSP 内部运行必需将生成的*.OUT 文件装载到DSP 内部,装载方法是点击:File-Load Programe 再选择生成的example3.out 文件就可以将程序装载到DSP 的内部存储器中。
10、运行程序并查看结果:
a)首先打开欲查看的数据空间:点击View-Memory,弹出“Memory Window Options”对话框,把欲查看的地址改为0x0090,如右图所示。
b)点击OK 按钮,然后点击Debug-Run 让程序在DSP内部运行,最后点击Debug-Halt,再观察“Memory ”对话框,看是否与下图一致:
实验三 加减法和乘法运算
一、实验目的
掌握加减法和乘法运算指令。
二、实验设备
计算机、DSP 实验箱。
三、实验内容
编写程序,分别实现计算 z=x+y-w、y=mx+b、y=x1×a2+x2×a2、。
四、实验步骤
1、用仿真器将计算机与DSP 实验箱连接好,并依次打开实验箱电源、仿真器电源,然后运行CCS 软件。
2、新建一个项目:点击Project-New,将项目命名为example4,并将项目保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS 软件不能识别以中文命名的文件夹。
3、新建一个源文件:点击File-New-Source File 可以打开一个文本编辑窗口,点击保存按键,保存在和项目相同的一个文件夹下面(example4),保存类型选择*.ASM(如果源文件是C 语言编写的,保存类型选择*.C,本实验中的例程是使用汇编语言编写的,所以选择*.ASM 为保存类型),我们在这里将保存名字命名为example4.asm。
4、在项目中添加源文件:在新建了一个源文件以后,要想使用CCS 编译器对该源文件进行编译还需要将源文件添加到项目中去。添加方法是在工程管理器中右键单击example4.pjt,在弹出的菜单中选择Add Files,然后将刚才建立的example4.asm 文件添加到该项目中去。
5、编写源程序:
在工程管理器中双击example4.asm,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容:
********** 计算 z=x+y-w **********.title “example4.asm”.mmregs STACK.usect “STACK”,10H;堆栈的设置
.bss x,1;为变量分配4 个字的存储空间.bss y,1.bss w,1.bss z,1.def _c_int00.data table.word 10,26,23;x,y,w.text _c_int00: STM #0,SWWSR;插入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、编写链接配置文件:
参照实验一,需要更改的地方如下:
7、编写中断向量表文件 参照实验一,可不作修改。
8、对项目进行编译和链接: 把 example4.asm、vectors.asm、example4.cmd 依次添加到项目后,点击Project-Compile File,在项目编译成功之后点击Project-Build 选项对该项目进行链接,生成*.out 文件。
9、装载可执行文件:
要让程序代码在DSP 内部运行必需将生成的*.OUT 文件装载到DSP 内部,装载方法是点击:File-Load Programe 再选择生成的example4.out 文件就可以将程序装载到DSP 的内部存储器中。
10、运行程序并查看结果:
a)首先打开欲查看的数据空间:点击View-Memory,弹出“Memory Window Options”对话框,把欲查看的地址改为0x0080,如右上图所示。b)点击OK 按钮,然后点击Debug-Run 让程序在DSP 内部运行,最后点击Debug-Halt,再观察“Memory ”对话框,看是否与右图一致:
11、建立其它项目工程文件
建立项目工程文件 example5,使之实现计算y=mx+b;建立项目工程文件example6,使之实现计算y=x1×a2+x2×a2;建立项目工程文件example7,使之实现计算
注:各源程序操作步骤均与前面相似,需要观察的数据存储器的地址均为0x0080;另外要注意对相应的链接配置文件作相应的修改。下面是它们的实验结果:
example5 的结果
example6结果
Example7 的结果
实验四 重复操作
一、实验目的
掌握各种重复操作指令。
二、实验设备
计算机、DSP 实验箱。
三、实验内容
编写程序,实现对数组初始化后再对每个元素加 1。
四、实验步骤
1、用仿真器将计算机与DSP 实验箱连接好,并依次打开实验箱电源、仿真器电源,然后运行CCS 软件。
2、新建一个项目:点击Project-New,将项目命名为example9,并将项目保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS 软件不能识别以中文命名的文件夹。
3、新建一个源文件:点击File-New-Source File 可以打开一个文本编辑窗口,点击保存按键,保存在和项目相同的一个文件夹下面(example9),保存类型选择*.ASM(如果源文件是C 语言编写的,保存类型选择*.C,本实验中的例程是使用汇编语言编写的,所以选择*.ASM为保存类型),我们在这里将保存名字命名为example9.asm。
4、在项目中添加源文件:在新建立了一个源文件以后,要想使用CCS 编译器对该源文件进行编译还需要将源文件添加到项目中去。添加方法是在工程管理器中右键单击example9.pjt,在弹出的菜单中选择Add Files,然后将刚才建立的example9.asm 文件添加到该项目中去。
5、编写源程序:
在工程管理器中双击example9.asm,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容:
********** 学习块重复操作指令:RPTB **********.title “example9.asm”.mmregs STACK.usect “STACK”,10H.bss x,5.def _c_int00.text _c_int00: STM #x,AR1 LD #2H,A;将数组每个元素初始化为2 RPT #4 STL A,*AR1+;把A 的低16 位赋给AR1 指向的变量x,然后AR1+1 LD #1,16,B;为每个元素加1 作准备 STM #4,BRC STM #x,AR4 RPTB next-1;next-1为循环结束地址 add *AR4,16,B,A STH A,*AR4+ next: LD #0,B end: B end.end
6、编写链接配置文件:
参照实验一,需要更改的地方如下: 更改前 更改后
7、编写中断向量表文件 参照实验一,可不作修改。
8、对项目进行编译和链接: 把 example9.asm、vectors.asm、example9.cmd依次添加到项目后,点击Project-Compile File,在项目编译成功之后点击Project-Build 选项对该项目进行链接,生成*.out 文件。
9、装载可执行文件:
要让程序代码在 DSP 内部运行必需将生成的*.OUT 文件装载到DSP 内部,装载方法是点击:File-Load Programe 再选择生成的example9.out 文件就可以将程序装载到DSP 的内部存储器中。
10、运行程序并查看结果:
a)首先打开欲查看的数据空间:点击View-Memory,弹出“Memory Window Options”对话框,把欲查看的地址改为0x0080,如右图所示。b)点击OK 按钮,然后点击Debug-Run 让程序在DSP 内部运行,最后点击Debug-Halt,再观察“Memory ”对话框,看是否与下图一致:
11、试用数据块传送指令实现数组初始化:把上述程序中的“STLA,*AR1+”改成“MVPD table,*AR1+”,看实现结果是否一致。
实验五 数据块传送
一、实验目的
掌握各种数据块传送操作指令。
二、实验设备
计算机、DSP 实验箱.三、实验内容
编写程序,实现把数据从程序存储器传送到数据存储器,以及从数据存储器传送到程序存储器。
四、实验步骤
1、用仿真器将计算机与DSP 实验箱连接好,并依次打开实验箱电源、仿真器电源,然后运行CCS 软件。
2、新建一个项目:点击Project-New,将项目命名为zhao3,并将项目保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS 软件不能识别以中文命名的文件夹。
3、新建一个源文件:点击File-New-Source File 可以打开一个文本编辑窗口,点击保存按键,保存在和项目相同的一个文件夹下面(zhao3),保存类型选择*.ASM(如果源文件是C 语言编写的,保存类型选择*.C,本实验中的例程是使用汇编语言编写的,所以选择*.ASM为保存类型),我们在这里将保存名字命名为zhao3.asm。
4、在项目中添加源文件:在新建立了一个源文件以后,要想使用CCS 编译器对该源文件进行编译还需要将源文件添加到项目中去。添加方法是在工程管理器中右键单击zhao3.pjt,在弹出的菜单中选择Add Files,然后将刚才建立的zhao3.asm 文件添加到该项目中去。
5、编写源程序:
在工程管理器中双击zhao3.asm,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容: ************ 学习数据块传送指令:MVPD、MVDD ************.title “zhao3.asm”.mmregs STACK.usect “STACK”,30H.bss x,20.bss y,20.data table:.word 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20.def _c_int00.text _c_int00: STM #x,AR1 RPT #19 MVPD table,*AR1+;程序存储器传送到数据存储器 STM #x,AR2 STM #y,AR3 RPT #19 MVDD *AR2+,*AR3+;数据存储器传送到数据存储器 end: B end.end
6、编写链接配置文件: 参照实验一,需要更改的地方如下: 更改前 更改后
7、编写中断向量表文件 参照实验一,可不作修改。
8、对项目进行编译和链接:
把 zhao3.asm、vectors.asm、zhao3.cmd 依次添加到项目后,点击Project-Compile File,在项目编译成功之后点击Project-Build 选项对该项目进行链接,生成*.out 文件。
9、装载可执行文件:
要让程序代码在DSP 内部运行必需将生成的*.OUT 文件装载到DSP 内部,装载方法是点击:File-Load Programe 再选择生成的zhao3.out 文件就可以将程序装载到DSP 的内部存储器中。
10、运行程序并查看结果:
a)首先打开欲查看的数据空间:点击View-Memory,弹出“Memory Window Options”对话框,把欲查看的地址改为0x0080,如右图所示。
c)点击 OK 按钮,然后点击Debug-Run 让程序在DSP 内部运行,最后点击Debug-Halt,再观察“Memory ”对话框,看是否与下图一致:
实验六 除法运算
一、实验目的
掌握除法运算的实现方法。
二、实验设备
计算机、DSP 实验箱。
三、实验内容
分别编写程序,实现计算 0.4÷(-0.8)和16384÷512 的值。
四、实验步骤
1、用仿真器将计算机与DSP 实验箱连接好,并依次打开实验箱电源、仿真器电源,然后运行CCS 软件。
2、新建一个项目:点击Project-New,将项目命名为zhao9f,并将项目保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS 软件不能识别以中文命名的文件夹。
3、新建一个源文件:点击File-New-Source File 可以打开一个文本编辑窗口,点击保存按键,保存在和项目相同的一个文件夹下面(zhao9f),保存类型选择*.ASM(如果源文件是C 语言编写的,保存类型选择*.C,本实验中的例程是使用汇编语言编写的,所以选择*.ASM为保存类型),我们在这里将保存名字命名为zhao9f.asm。
4、在项目中添加源文件:在新建立了一个源文件以后,要想使用CCS 编译器对该源文件进行编译还需要将源文件添加到项目中去。添加方法是在工程管理器中右键单击zhao9f.pjt,在弹出的菜单中选择Add Files,然后将刚才建立的zhao9f.asm 文件添加到该项目中去。
5、编写源程序:
在工程管理器中双击zhao9f.asm,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容:
********************************* * |被除数|<|除数|,商为小数 * * 计算0.4÷(-0.8)的值 * *********************************.title “zhao9f.asm”.mmregs STACK.usect “STACK”,10H.bss num,1;分子.bss den,1;分母.bss quot,1;商.data table:.word 4*32768/10;-128.word-8*32768/10;1024.def _c_int00.text _c_int00: LD #1H,DP;设置数据页指针,使DP 指向第1 页(80H 处)STM #num,AR1 RPT #1 MVPD table,*AR1+;传送2 个数据至分子、分母 LD @den,16,A;将分母移到累加器A(31~16)MPYA @num;(num)*(A(31~16))->B,获取商的符号;(在累加器B 中)ABS A;分母取绝对值
STH A,@den;分母取绝对值存回原处
LD @num,16,A;将分子移到累加器A(32~16)ABS A;分子取绝对值
RPT #14;15次减法循环,完成除法 SUBC @den,A XC 1,BLT;如果B<0(商为负数),则需要变号 NEG A STL A,@quot;保存商 end: B end.end
6、编写链接配置文件:
参照实验一,需要更改的地方如下:
7、编写中断向量表文件 参照实验一,可不作修改。
8、对项目进行编译和链接:把 zhao9f.asm、vectors.asm、zhao9f.cmd 依次添加到项目后,点击Project-Compile File,在项目编译成功之后点击Project-Build 选项对该项目进行链接,生成*.out 文件。
9、装载可执行文件:
要让程序代码在 DSP 内部运行必需将生成的*.OUT文件装载到DSP 内部,装载方法是点击:File-LoadPrograme 再选择生成的zhao9f.out 文件就可以将程序装载到DSP 的内部存储器中。
10、运行程序并查看结果: a)首先打开欲查看的数据空间:点击View-Memory,弹出“Memory Window Options”对话框,把欲查看的地址改为0x0080,如右图所示。
b)点击OK 按钮,然后点击Debug-Run 让程序在 DSP 内部运行,最后点击Debug-Halt,再观察“Memory ”对话框,看是否与右图一致:
11、上述程序是商为小数的除法,下面编写商为整数的除法:
a)建立项目工程文件zhao9g,编写源程序zhao9g.asm,并与zhao9f.asm 作一比较。以下是源程序:
******************************** * |被除数|>=|除数|,商为整数 * * 计算16384÷512 的值 * ********************************.title “zhao9g.asm”.mmregs STACK.usect “STACK”,10H.bss num,1;分子.bss den,1;分母.bss quot,1;商.data table:.word 16384;更改被除数 66*32768/100.word 512
;更改除数-33*32768/100.def _c_int00.text _c_int00: LD #0020H,DP;指定数据页指针
STM #num,AR1 RPT #1 MVPD table,*AR1+;传送2 个数据至分子、分母 LD @den,16,A;将分母移到累加器A(31~16)MPYA @num;(num)*(A(31~16))->B,获取商的符号;(在累加器B 中)ABS A;分母取绝对值
STH A,@den;分母取绝对值存回原处 LD @num,A;将分子移到累加器A(32~16)ABS A;分子取绝对值
RPT #15;16次减法循环,完成除法 SUBC @den,A XC 1,BLT;如果B<0(商为负数),则需要变号 NEG A STL A,@quot;保存商 end: B end.end b)编写链接配置文件:
参照实验一,需要更改的地方如下:
c)编写中断向量表文件 参照实验一,可不作修改。
d)把各文件添加到项目中并对项目进行编译和链接并下载到DSP 内部,具体方法请参照前面的步骤。
d)运行程序并查看结果:
首先打开欲查看的数据空间:点击View-Memory,弹出“Memory Window Options” 对话框,把欲查看的地址改为0x0080,如右图所示。运行程序后,结果如下:
实验七 定时器中断实验
一、实验目的
1、掌握DSP 中断技术,学会对DSP 中断的处理方法。
2、掌握中断对于程序流程的控制,理解DSP 对于中断的响应时序。
3、掌握汇编语言编写中断的基本方法。
二、实验设备
计算机、DSP实验箱。
二、实验原理
DSP一般情况下均支持软件中断和硬件中断。软件中断由指令引起,如INTR、TRAP、RESET;硬件中断由外部中断信号和内部中断信号引起,外部硬件中断如INT0-INT2,内部硬件中断包括定时器、串口、主机接口等引起的中断。软件中断不分优先级,硬件中断有优先级。中断寄存器有中断标志寄存器IFR 和中断屏蔽寄存器IMR。
1、中断标志寄存器(Interrupt Flag Register,IFR)是一个存储器映像寄存器,当某个中断触发时,寄存器的相应位置1,直到中断处理完毕为止。IFR 各位的意义如图:
不同型号DSP 的IFR的5-0 位对应的中断源完全相同,是外部中断和通信中断标志位。其它15-6 位中断源根据芯片的不同,定义的中断源不同。当对芯片进行复位、中断处理完毕,写1于IFR的某位,执行INTR 指令等硬件或软件中断操作时,IFR的相应位置1,表示中断发生。通过读IFR 可以了解是否有已经被挂起的中断,通过写IFR可以清除被挂起的中断。在以下3 种情况下将清除被挂起的中断。(1)复位(包括软件和硬件复位)。(2)置位1 写入相应的IFR 标志位。
(3)使用相应的中断号响应该中断,即使用INTR #K 指令。若有挂起的中断,在IFR中该标志位为1,通过写IFR 的当前内容,就可以清除所有正被挂起的中断;为了避免来自串口的重复中断,应在相应的中断服务程序中清除IFR 位。
2、中断屏蔽寄存器
中断屏蔽寄存器(Interrupt Mask Register,IMR),是用于屏蔽外部和内部的硬件中断。通过读IMR 可以检查中断是否被屏蔽,通过写可以屏蔽中断(或解除中断屏蔽),在IMR 位置0,则屏蔽该中断。IMR 不包含/RS 和NMI,复位时IMR 均设为0,TMS320C5410a 中断屏蔽寄存器IMR 各位的意义如下:
硬件中断信号产生后能否引起DSP 执行相应的中断服务程序还取决于以下四点(复位和NMI 除外,它们不可屏蔽):
(1)、状态寄存器ST1 的INTM 位为0,即中断方式位,允许可屏蔽中断;INTM 为1,禁止可屏蔽中断。若中断响应后INTM 自动置1,则其它中断将不被响应。在ISR(中断服务程序)中以RETE 指令返回时,INTM 位自动清0,INTM 位可用软件置位,如指令SSBX INTM(置1)和RSBX INTM(清0)。
(2)、当前没有响应更高优先级的中断。
(3)、中断屏蔽寄存器IMR 中对应此中断的位为1。在IMR 中相应位为1,表明允许该中断。(4)、在中断标志寄存器(IFR)中对应位置为1。
TMS320C54x 中,中断向量地址由PMST 寄存器中的9 位中断向量地址指针IPTR 和左移2位后的中断向量序号(中断向量序号位0~31,左移2 位后变成7 位)所组成。例如:已知中断向量序号INT0=0001 0000B=10H,中断向量地址指针IPTR=0001H,求中断向量地址?
因为中断向量序号左移2 位后变成100 0000B=40H 所以中断向量地址为0000 0000 1100 0000B=00C0H 复位时,IPTR 位置全1(IPTR=1FFH),并按此值将复位中断向量映射到程序存储器的511页空间。所以硬件复位后,程序地址总是PC=1111 1111 1000 0000B=0FF80H,即总是从0FF80H开始执行程序。而且,硬件复位地址是固定不变的,其他中断向量可以通过改变内容重新安排中断程序的地址。例如中断向量地址指针IPTR=0001H,中断向量就被移到0080H 开始的程序存储空间。
当DSP响应中断时,将依次完成以下步骤:
(1)、发出IACK 信号,并清除IFR 中相应的中断标志位。(2)、将PC 值(返回地址)压入堆栈。(3)、取中断向量。
(4)、跳转到相应的中断服务程序。
(5)、保存应保护的寄存器和变量,压入堆栈。(6)、执行中断处理程序。
(7)、恢复保护的内容,从堆栈弹出。(8)、中断返回,从堆栈中弹出返回地址。(9)、继续执行原先的程序。
本实验是利用DSP内部的定时器产生中断来完成中断实验,这里先简要介绍一下DSP内部的定时器:TMS320VC5410a有一个16 位的定时器,定时器带有一个4位预分频器PSC和16位定时计数器TIM。CPUCLOCK时钟先经PSC预分频后,用分频的时钟再对TIM 作减1计数,当TIM减为0 时,将在定时器输出管脚TOUT上产生一个脉冲,同时产生定时器中断请求,并将定时器周期寄存器PRD的值装入TIM。
定时器由TIM、PRD、TCR 三个寄存器和相应的输出管脚TOUT组成。(1)TIM 在数据存储器中的地址为0024H,是减1计数器。(2)PRD 地址为0025H,存放定时时间常数。
(3)TCR 地址为0026H,存储定时器的控制及状态位。定时器产生中断的计算公式如下:
定时周期=CLKOUT*(TDDR+1)*(PRD+1)TMS320VC5410a 的定时器可以被特定的状态位实现停止、重新启动、重新设置或禁止。可以使用该定时器产生周期性的CPU 中断。
定时器初始化的步骤为:
(1)、将TCR 中的TSS 位置1,关闭定时器。(2)、修改PRD。
(3)、重新设置TCR:令TSS=0,TRB=1,并按要求设置SOFT,FREE、TDDR。
设置定时器中断的步骤为(设INTM=1):
(1)、将IFR 中TINT 位置为1,清除以前的定时器中断请求。(2)、将IMR 中的TINT 位置为1,打开定时器中断。(3)、将ST1 中的INTM 位置为0,使能所有中断。
每当TIM 减为0 时,会产生一个定时器中断,并在相应的TOUT 管脚上产生一个宽度为CLKOUT 周期的正脉冲。
在RESET 后,TIM 和PRD 被设置为最大值(FFFFH),TCR 中的TDDR 置0,定时器启动。定时控制寄存器(TCR)为一个映射到片内的16 位寄存器:
RESERVED:常常设置为0。
FREE 和SOFT: 软件调试组合控制位,用于控制调试程序断点操作情况下的定时器状态。当free=0 且soft=0 时,定时器立即停止工作。当free=0 且soft=1 且计数器TIM 减为1 时,定时器停止工作。当free=1 且soft=x 时,定时器继续工作。PSC: 预定标计数器。每个CLKOUT 作减1 操作,减为0 时,“TDDR”寄存器的值装载到“PSC”寄存器,TIM 减1,PSC 的作用相当于预分频器。
TRB: 定时器重新加载控制位,用于复位片内定时器。当TRB 置1 时,“PRD”寄存器的值装载到“TIM”寄存器,“TDDR”寄存器的值装载到“PSC”寄存器,TRB 常常设置为0。TSS: TSS=0,定时器开始。TSS=1,定时器停止。TDDR: 定时器分频比。以此数对CLKOUT 分频后再去对TIM 做减1 操作,当“PSC”为0,“TDDR”寄存器的值装载到“PSC”寄存器中。
四、实验内容
利用定时器中断制作方波发生器,通过XF 引脚控制LED 发光来检测方波的周期。
五、实验步骤
1、新建一个项目:testxf.pjt;
2、在项目中编辑以下汇编语言文件:
有时定时的长度不能满足需要,比如F=10Mhz时,定时最大是:10ns*2^4*2^16=10.485760ms。如果需要更长的定时,就要在定时器中断子程序中再加一个计数器,直到产生一定次数的定时中断后再执行相应的操作。如下程序可以产生1Hz 的方波:
;;fangbo.asm;利用定时器Timer0 在XF 脚产生周期1s 的的方波;.title “fangbo.asm”.mmregs.def _c_int00;程序入口
.def TINT0_ISR;Timer0中断服务程序 STACK.usect “STACK”,10H;分配堆栈空间;设定定时器0 控制寄存器的内容
K_TCR_SOFT.set 0B<<11;TCR第11位soft=0 K_TCR_FREE.set 0B<<10;TCR第10位free=0 K_TCR_PSC.set 0B<<6;TCR第9-6位,可设跟TDDR 一样,也可不设自动加载 K_TCR_TRB.set 1B<<5;TCR第5位TRB=1此位置1,PSC会自动加载的 K_TCR_TSS.set 0B<<4;TCR第4位TSS=0 K_TCR_TDDR.set 0100B<<0;TCR第3-0位TDDR=0100B K_TCR.set K_TCR_SOFT|K_TCR_FREE|K_TCR_PSC|K_TCR_TRB|K_TCR_TSS|K_TCR_TDDR K_TCR_STOP.set 1B<<4;TSS=1时计数器停止
.data DATA_DP: XF_Flag:.word 1;当前XF的输出电平标志,如果XF_Flag=1,则XF=1;==;主程序:
;==.text _c_int00: STM #STACK+10H,SP;设堆栈指针SP LD #DATA_DP,DP;设数据地址DP STM #XF_Flag,AR2;AR 指向XF 标志;改变中断向量表位置
K_IPTR.set 7F80h;指向7f80H,默认是FF80 LDM PMST,A AND #7FffH,A;保留低7位,清掉高位
OR #K_IPTR,A;STLM A,PMST;初始化定时器0;f=20Mhz,定时最大是:50ns*2^4*2^16=50ms,;要输出1s 的方波,可定时25ms,再在中断程序中加个40计数器;Tt=50ns*(1+4)*(1+49999)=5ms;f=20M, Tt=50ns*(1+4)*(1+49999)=25ms;再加40 计数器
CounterSet.set 39;定义计数次数 PERIOD.set 49999;定义计数周期
.asg AR1,Counter;AR1做计数指针,重新命名以便识别
STM #CounterSet,Counter;设计数器初值
STM K_TCR_STOP,TCR;停止计数器0;STM #PERIOD,TIM;可设成跟PRD 一样,也可不设自动加载
STM #PERIOD,PRD;设定计数周期
STM #K_TCR,TCR;开始Timer0 stm #0008h,IMR;允许Timer0中断
STM #0008h,IFR;清除挂起的中断
RSBX INTM;开中断 end1: nop B end1;==;Timer0 中断服务程序:TIN0_ISR;== TINT0_ISR: PSHM ST0;本中断程序影响TC,位于ST0 中
BANZ Next,*Counter-;判断不等于0 时跳转,然后计数器减1 STM #CounterSet,Counter;恢复初值
;判断当前XF状态并作电平变化
BITF *AR2,#1;IF XF_Flag=1 then TC=1 else TC=0 BC ResetXF,TC;IF TC=1 then XF=0 else XF=1 setXF: SSBX XF;置XF为高电平
ST #1,*AR2;相应修改标志
B Next ResetXF: RSBX XF;;置XF为低电平
ST #0,*AR2;相应修改标志 Next: POPM ST0 RETE.end
3、编写存储器配置文件:(fangbo.cmd)/*-e _c_int00 This is the entry point reset vector */-m map.map-o fangbo.out MEMORY { PAGE 0: /*定义程序存贮区*/ EPROM: origin = 0x4000, len = 0x3f80 VECT: origin = 0x7f80, len = 0x80 PAGE 1: /*定义数据存贮区*/ SYSREGS: origin = 0x00, len = 0x60 BIOSREGS: origin = 0x60, len = 0x20 IDATA: origin = 0x80, len = 0x3f00 EDATA: origin = 0x8000, len = 0x8000 } SECTIONS {.text :>EPROM PAGE 0 /*将.text 段映射到PAGE0 的EPROM 区*/.data :>EPROM PAGE 0 /*将.data 段映射到PAGE0 的EPROM 区*/.vectors: > VECT PAGE 0/*将中断向量表定位到PAGE0 的VECS 区*/.bss: > IDATA PAGE 1 /*将.bss 段映射到PAGE1 的IDATA 区*/ STACK > IDATA PAGE 1 /*将.stack 段映射到PAGE1 的IDATA 区*/ }
4、编写中断向量表文件(vectors.asm)
中断向量表是DSP 程序的重要组成部分,下面是5410a 中断向量表的一个示例,可以作为模板:
***************************************************************** *vectors.asm *完整的5410a 中断向量表示例
*5410a 共有30 个中断向量,每个向量占4 个字的空间。
*使用的向量一般加一条跳转指令转到相应中断服务子程序,其余空位用NOP 填充
*未使用的向量直接用RETE 返回,是为了防止意外进入未用中断。
*****************************************************************.sect “.vectors”;开始命名段.vecotrs.global _c_int00;引用程序入口的全局符号定义
;引用其它中断程序入口的全局符号定义
.align 0x80;中断向量必须对齐页边界
.global TINT0_ISR RESET: B _c_int00;Reset 中断向量,跳转到程序入口 STM #200,SP;stack size of 200 nmi: RETE;enable interrupts and return from one NOP NOP NOP;NMI~;software interrupts sint17.space 4*16 sint18.space 4*16 sint19.space 4*16 sint20.space 4*16 sint21.space 4*16 sint22.space 4*16 sint23.space 4*16 sint24.space 4*16 sint25.space 4*16 sint26.space 4*16 sint27.space 4*16 sint28.space 4*16 sint29.space 4*16 sint30.space 4*16
int0: RETE;External user interrupt #0 NOP NOP NOP int1: RETE;External user interrupt #1 NOP NOP NOP int2: RETE;External user interrupt #2 NOP NOP NOP tint: BD TINT0_ISR;Timer0 中断
NOP
NOP rint0: RETE;McBSP #0 receive interrupt(default)NOP NOP NOP xint0: RETE;McBSP #0 transmit interrupt(default)NOP NOP NOP rint2: RETE;McBSP #2 receive interrupt(default)NOP NOP NOP xint2: RETE;McBSP #2 transmit interrupt(default)NOP NOP NOP int3: RETE;External user interrupt #3 NOP NOP NOP hint: RETE;HPI interrupt NOP NOP NOP rint1: RETE;McBSP #1 receive interrupt(default)NOP NOP NOP xint1: RETE;McBSP #1 transmit interrupt(default)NOP NOP NOP.space 16*16.end 技巧提示:第一个中断(Reset 中断)是每个程序都应该有的,在不需要其它中断的情况下,可以只用这一部分,后面全部省掉。另外一个重要问题是中断向量表的位置,上电时默认是在FF80H 处,但实际上很多情况下无法把中断向量表加载到FF80 处,一般重定向到0080H,并在程序开头重新设置一下IPTR的值。K_IPTR.set 7f80h;指向7f80H,默认是FF80 LDM PMST,A AND #7FffH,A;保留低7位,清掉高位 OR #K_IPTR,A;STLM A,PMST 要注意的是这段代码要用到累加器A,所以嵌入这段代码的地方必须在用到累加器A 之前。
5、在testxf.pjt 文件中添加fangbo.asm、vector.asm、fangbo.cmd 文件,进行编译和链接,注意该项目是由汇编语言编写的,应该注意实验一的步骤9 的选项是否正确。
6、装载fangbo.out 文件到DSP 芯片并运行程序,观测XF 的变化。也可以观察CLKOUT管脚电平的变化。
第三篇:教案框架
教案框架模板
一、教学目标分析
1、知识与能力:
2、过程与方法:
3、情感态度与价值观:
二、教学重难点(1)教学重点:(2)教学难点:
三、教学方法:朗读法、讲解法
四、课型:新授课
五、教学课时:两课时
六、教学过程设计:教学流程:布置预习,课文导入,阅读朗诵,整体感知,字词分析,重点解析,课堂总结,拓展延伸(布置作业)
具体的教学环节如下:
课时一 课前预习
1、查阅资料,大致了解有关的相关知识
2、提前读课文掌握生字生词
一、创设情境,导入新课
二、朗读课文,整体感知
三、研读课文,领会主旨
四、走进文本,品味妙处
五、知识梳理,检验提高
六、课堂总结,布置作业
1、教师总结 ——
2、作业布置:
七、板书设计
第四篇:DSP实验教案(一)
实验一 CCS使用和数据存储实验
一、实验目的
1.掌握CCS的使用
2.掌握 TMS320C54X 程序空间的分配; 3.掌握 TMS320C54X 数据空间的分配;
4.能够熟练运用TMS320C54X 数据空间的指令。
二、实验设备
计算机,CCS 3.1版软件,DSP仿真器,E300实验箱,DSP-54XP CPU板。
三、实验步骤与内容
1.在进行 DSP实验之前,需先连接好仿真器、实验箱及计算机,连接方法如下所示:
2.E300 底板的开关SW4 的第1位置ON,其余位置OFF。其余开关设置为OFF。3.上电复位
在硬件安装完成后,确认安装正确、各实验部件及电源连接无误后,启动计算机,接通仿真器电源,此时,仿真器上的“红色指示灯”应点亮,否则DSP开发系统与计算机连接存在问题。
4.运行CCS程序
1)待计算机启动成功后,实验箱220V电源置“ON”,实验箱上电
2)启动CCS3.1,进入CCS界面后,点击“Debug—Connect”
3)此时仿真器上的“绿色指示灯”应点亮,CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG 接口或CCS 相关设置存在问题,这时需掉电检查仿真器的连接、JTAG 接口连接是否正确,或检查CCS相关设置是否存在问题。5.成功运行CCS 程序后,首先应熟悉CCS的用户界面;
6.学会在CCS环境下创建工程文件、添加程序文件、编写程序、编译、装载、调试,学习如何使用观察窗口等。
7.用“Projectopen”打开“normal 01_mem mem.pjt”.编译并装载“ 01_memDebugmem.out”
8.用“Edit”下拉菜单中的“Memory/Fill”编辑内存单元,参数设置如下图:
单击“OK”此时以0x1000 为起始地址的16个内存单元被修改成:0x0009 9.用“View”下拉菜单“Memory”观察内存单元变化,输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH 单元的数值变化,输入地址0x1000H;
单击“OK”如下图所示:
10.点击“DebugGo main”进入主程序,在程序中“加软件断点1”和“加软件断点2”处施加软件断点。11.单击“DebugRun”运行程序,也可以“单步”运行程序;当程序运行到“软件断点1”处时,查看0x1000H~0x1007H单元的值变化,12.再单击“DebugRun”,当程序运行到“软件断点2”处时,查看0x1008~0x100F 单元的变化。
13.闭各窗口,本实验完毕
四、程序流程图
五、实验程序
#include “DspRegDefine.h”
//VC54x 寄存器定义 #include “stdio.h”
//输入输出头文件 #include “e300_codec.h” //**********************子函数声明********************************// void cpu_init(void);//初始化CPU //************************* 主函数 *******************************// void main(){
UINT16 i;
UINT16 * room;
UINT16 * room1;
room=(UINT16 *)0x1000;// 设指针px为1000H
room1=(UINT16 *)0x1008;// 设指针px为1000H //**********************CPU初始化*********************************//
cpu_init();/*将0xAAAA写入从数据空间的地址0x1000开始的8个单元中*/
for(i=0;i<8;i++)
{
* room=0xAAAA;
room++;
}
asm(“ nop”);//加软件断点1 /*从0x1000开始的8个空间读出数据依次写入从0x1008开始的8个单元中*/
for(i=0;i<8;i++)
{
*room1=*(room-1);
room--;
room1++;
}
for(;;)
{
} //加软件断点2 }
//*************************结束**********************************// cpu_init()函数见附录
六 实验结果
1、程序运行到断点1处数据存储器的内容如下图:
2、程序运行到断点2处数据存储器的内容如下图:
实验二 拨码开关实验
—、实验目的
1.了解DSP开发系统的组成和结构 2.了解IO 的基本编程方法
二、实验设备
计算机,CCS3.1版本软件,DSP 仿真器,E300 实验箱,DSP-54XP CPU板
三、实验原理 位的数字量输入(由拨码开关产生),当拨码打到靠近LED时为低。相反为高。通过74LS244缓冲连接到DSP的数据总线的低8位。CPU通过读指令读取到拨码开关产生的8位输出的数字量,然后CPU通过写指令把读出的8 位数字量写入(0x0200)单元内,使连接到DSP的数据总线的低8 位的74LS273的输出端产生高低信号,此时LED 灯产生亮灭。当对应LED 灯点亮时说明输出为低,熄灭时高。数字量输入输出单元的资源分配如下: 基地址:0000h(当CS0为0时分配有效)数字量分配空间为数据空间地址:基地址+0x200(低8位,只读)拨码开关扩展工作原理
四、实验步骤 1.E300 板上的开关SW4 的第一位置ON,其余OFF;SW5开关全部置ON;其余开关全部置OFF。
2.运行Code Composer Studio(CCS)(ccs3.1需要“DEBUG→Connect”)3.用“ProjectOpen”打开系统项目文件 normal 2_io io.pjt; 4.编译全部文件并装载 2_io Debugio.out; 5.单击“Debug Go Main”跳到主程序的开始; 6.单击“Debug RUN”运行程序。
7.任意拨动E300 底板上的拨动开关,观察LED和拨动开关的对应情况。(LED1-LED7分别对应DSP 数据总线的D0-D7)
8.单击“Debug Halt” 暂停持续运行,开关将对灯失去控制.9.关闭所有窗口,本实验完毕.五、程序流程图
六 实验结果
实验三 CPU定时实验
一、实验目的
1、熟悉TMS320C54X 的定时器;
2、掌握TMS320C54X 的定时器的控制方法;
3、学会使用CPU定时器中断方式控制程序流程。
二、实验设备
计算机,CCS 3.1版软件,DSP硬件仿真器,E300 实验箱,DSP-54XP CPU板。
三、实验原理说明
实验是采用CPU定时器来定时使LED 亮灭的。C54x 的定时器是一个20 位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR,定时器的中断周期为:
CLKOUT *(TDDR+1)*(PRD+1)
在本系统中,如果设置时钟频率为10MHZ,令PRD = 0x30D3,TDDR=15,这样得到每0.02 秒中断一次,通过累计50 次,就能实现1 秒钟定时。0.1us *(15+1)*(12499+1)* 50 =1S
四、实验步骤和内容
1、E300 底板的开关SW4 的第1位置ON,其余位置OFF。其余开关设置为OFF。
2、运行CCS软件,调入样例程序,装载并运行;(进入CCS界面后需要点“Debug--Connect”)
3、用“Project//Open”系统项目文件 normal 03_timer timer.pjt;
4、编译全部文件并装载“..debugtimer.out”;单击“DebugGo main”进入到主程序中
5、单击“Debug RUN”运行,可观察到灯LED1~LED8 的闪烁变化。
6、单击“Debug Halt”,暂停程序运行,LED灯停止闪烁;单击“RUN”,LED灯又开始闪烁变化
7、结束实验程序
五、程序流程图
六、实验程序
1、主函数
/*******************************头文件****************************/ #include “DspRegDefine.h” //VC5402 寄存器定义 #include “stdio.h” //输入输出头文件 #include “e300_codec.h” #include “timer.h” //子函数声明文件
//*********************** 端口定义****************************// ioport UINT16 port0200;//定义输出io端口为0x0200;//*********************** 全局变量定义************************// unsigned int count=0;unsigned int TIMER=0;//*************************************************************// //************************* 主函数 ****************************// void main(){ cpu_init();asm(“ nop ”);set_t0();asm(“ nop ”);for(;;){ switch(count){ case 0: IOout=0x0081;break;case 1: IOout=0x0042;break;case 2: IOout=0x0024;break;case 3: IOout=0x0018;break;case 4: IOout=0x0024;break;case 5: IOout=0x0042;break;case 6: IOout=0x0081;break;case 7: count=0;break;default:break;} } } //*************************结束 **********************************//
2、set_t0()函数
//******************************头文件*****************************// #include “DspRegDefine.h” //VC5402 寄存器定义
/***********************************************************函数说明 : 设置T0的寄存器输出参数 : 无
************************************************************/ void set_t0(){ asm(“ ssbx intm”);//禁止所有可屏蔽中断 *(unsigned int*)TCR=0x0010;//停止T0定时器记数 //------//TCR DEFINITIONS? // 保留(bit 15-12)00 调试时,遇到断点,定时器停止工作 // PSC(bit 9-6)0 不复位定时器,不重新加载TIM、PSC // TSS(bit 4)0 定时器分频系数 //-----------------------------// 0000 0000 0001 0000 = 0x0010 /*-------*/ *(unsigned int*)PRD=0x30d3;//设置T0的周期寄存器 *(unsigned int*)IMR=*(unsigned int*)IMR|0x0008;//允许T0中断 *(unsigned int*)IFR=*(unsigned int*)IFR;//清除中断标志 *(unsigned int*)TCR=0x002f;//允许T0定时器记数 //------//TCR DEFINITIONS? // 保留(bit 15-12)00 调试时,遇到断点,定时器停止工作
// PSC(bit 9-6)1 复位定时器,重新加载TIM、PSC 7 // TSS(bit 4)1111 定时器分频系数 //-----------------------------// 0000 1100 0010 1111 = 0x0c2f /*-------*/ asm(“ rsbx intm”);//开放所有可屏蔽中断 } //*************************结束 **********************************/
3、Tint0函数
#include “DspRegDefine.h” //VC5402 寄存器定义
//---// extern unsigned int count;extern unsigned int TIMER;//*************************TO中断程序*****************************// interrupt void Tint0(){ TIMER++;if(TIMER%50==0)count=count+1;} //*************************结束 **********************************//
4、cpu_init函数见附录
七 实验结果
LED灯根据定时时间不断的闪烁变化。
第五篇:工作框架
工 作 框 架
一、客服方面(10050平台+移动82系统)
(1)代维小组故障处理时长统计分析(周报、月报)
(2)日报统计进行典型案例分析
(3)个人数据分析(时长、典型案例)提升小组最后一名工作效率
二、代维小组方面
(1)装机质量(现场拍照、典型案例、跟踪整改)
(2)维护质量(端口台账本、巡检本、现场拍照、典型案例、跟踪
整改)人员定岗实行工作模板
(3)备品备件及材料管理
(4)培训及应急演练
三、与移动沟通
(1)上传下达,立足自身,提升要求
(2)协助铁通开展业务支持(如EPON语音)