1、数字信号处理的实现方法一般有哪几种?答:数字信号处理的实现是用硬件软件或软硬结合的方法来实现各种算法。
(1) 在通用的计算机上用软件实现;(2) 在通用计算机系统中加上专用的加速处理机实现;
(3) 用通用的单片机实现,这种方法可用于一些不太复杂的数字信号处理,如数字控制;(4) 用通用的可编程DSP芯片实现。与单片机相比,DSP芯片具有更加适合于数字信号处
理的软件和硬件资源,可用于复杂的数字信号处理算法;(5)用专用的DSP芯片实现。在一些特殊的场合,要求的信号处理速度极高,用通用DSP芯片很难实现(6)用基于通用dsp核的asic 芯片实现。
2、简单的叙述一下 dsp 芯片的发展概况?
答:第一阶段,DSP的雏形阶段(1980年前后)。代表产品:S2811。主要用途:军事或航空航天部门。第二阶段,DSP的成熟阶段(1990年前后)。代表产品:TI公司的TMS320C20主要用途:通信、计算机领域。第三阶段,DSP的完善阶段(2000年以后)。代表产品:TI 公司的 TMS320C54 主要用途:各个行业领域。
3、可编程 dsp 芯片有哪些特点?答:1、采用哈佛结构(1)冯。诺依曼结构,(2)哈佛结构(3)改进型哈佛结构2、采用多总线结构 3.采用流水线技术
4、配有专用的硬件乘法-累加器
5、具有特殊的dsp指令
6、快速的指令周期
7、硬件配置强
8、支持多处理器结构
9、省电管理和低功耗
4、4、什么是哈佛结构和冯。诺依曼结构?它们有什么区别?答:哈佛结构:该结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。冯。诺依曼结构:该结构采用单存储空间,即程序指令和数据共用一个存储空间,使用单一的地址和数据总线,取指令和取操作数都是通过一条总线分时进行。当进行高速运算时,不但不能同时进行取指令和取操作数,而且还会造成数据传输通道的瓶颈现象,其工作速度较慢。区别:哈佛:该结构采用双存储空间,程序存储器和数据存储器分开,有各自独立的程序总线和数据总线,可独立编址和独立访问,可对程序和数据进行独立传输,使取指令操作、指令执行操作、数据吞吐并行完成,大大地提高了数据处理能力和指令的执行速度,非常适合于实时的数字信号处理。冯:当进行高速运算时,不但不能同时进行取指令和取操作数,而且还会造成数据传输通道的瓶颈现象,其工作速度较慢。
5、5、什么是流水线技术?答:每条指令可通过片内多功能单元完成取指、译码、取操作数和执行等多个步骤,实现多条指令的并行执行,从而在不提高系统时钟频率的条件下减少每条指令的执行时间。利用这种流水线结构,加上执行重复操作,就能保证在单指令周期内完成数字信号处理中用得最多的乘法-累加运算。(图)
6、什么是定点 dsp 芯片和浮点 dsp 芯片?它们各有什么优缺点?答:若数据以定点格式工作的称为定点DSP芯片。若数据以浮点格式工作的称为浮点DSP芯片。定点dsp芯片
优缺点:大多数定点dsp芯片称为定点dsp芯片,浮点dsp芯片优缺点:不同的浮点DSP芯片所采用的浮点格式有所不同,有的DSP芯片采用自定义的浮点格式,有的DSP芯片则采用IEEE的标准浮点格式。
7、dsp 技术的发展趋势主要体现在什么方面?
答:(1)DSP的内核结构将进一步改善(2)DSP和微处理器的融合(3)DSP和高档
CPU 的融合(4)DSP 和 SOC 的融合(5)DSP 和 FPGA 的融合(6)实时操作系统 RTOS
与DSP的结合(7)DSP的并行处理结构(8)功耗越来越低
8、简述 dsp 系统的构成和工作过程?
答:DSP系统的构成:一个典型的DSP系统应包括抗混叠滤波器、数据采集A/D转换器、数字信号处理器DSP、D/A转换器和低通滤波器等。DSP系统的工作过程:① 将输入信号x(t)经过抗混叠滤波,滤掉高于折叠频率的分量,以防止信号频谱的混叠。②经过采样和A/D转换器,将滤波后的信号转换为数字信号x(n)。③数字信号处理器对x(n)进行处理,得数字信号y(n)。④经D/A转换器,将y(n)转换成模拟信号;⑤经低通滤波器,滤除高频分量,得到平滑的模拟信号y(t)。(图)
抗混叠滤波器 AD转换器- 数字信号处理器 DA转换器低通滤波器9、简述 dsp 系统的设计步骤?答::①明确设计任务,确定设计目标②算法模拟,确定性能指令③
选择DSP芯片和外围芯片④设计实时的DSP芯片系统⑤硬件和软件调试⑥系统集成和测试。(图)
10、dsp 系统有哪些特点?答:(1)接口方便(2)编程方便(3)具有高速性(4)稳定性好(5)精度高(6)可重复性好(7)集成方便
11、在进行 dsp 系统设计时,应如何选择合理的 dsp 芯片?
答:1、dsp的运算速度2、dsp芯片价格3、dsp芯片运算精度4、dsp芯片的硬件资源5、dsp 芯片的开发工具 6、dsp 芯片的功耗 7、其他因素。
1、TMS320C54x 芯片的基本结构都包括哪些部分?
答:①中央处理器②内部总线结构③特殊功能寄存器④数据存储器RAM⑤程序存储器ROM ⑥I/O 口⑦串行口⑧主机接口 HPI ⑨定时器⑩中断系统
2、TMS320C54x 芯片的 CPU 主要由哪几部分组成?
答:①40位的算术运算逻辑单元(ALU)。②2个40位的累加器(ACCA、ACCB)。③1个运行-16至31位的桶形移位寄存器。④17×17位的乘法器和40位加法器构成的乘法器-加法器单元(MAC)。⑤比较、选择、存储单元(CSSU)。⑥指令编码器。⑦ CPU 状态和控制寄存器。
3、处理器工作方式状态寄存器 PMST 中的 MP/MC、OVLY 和 DROM 三个状态位对 C54x 的存储空间结构各有何影响?
当OVLY= 0时,程序存储空间不使用内部RAM。当OVLY= 1时,程序存储空间使用内部RAM。内部 RAM 同时被映射到程序存储空间和数据存储空间。当 MP/ MC=0 时,4000H~EFFFH 程序存储空间定义为外部存储器;F000H~FEFFH 程序存储空间定义为内部
ROM;当MP/ MC=1 时,4000H~FFFFH 程序存储空间定义为外部存储。DROM=0:0000H~3FFFH——内部RAM ;4000H~FFFFH——外部存储器;DROM=1 :0000H~3FFFH——内部 RAM;4000H~EFFFH——外部存储器;F000H~FEFFH——片内
ROM;FF00H~FFFFH——保留。
4 、TMS320C54x 芯片的片内外设主要包括哪些电路?
① 通用I/O引脚②定时器③时钟发生器④ 主机接口HPI⑤ 串行通信接口⑥ 软件可编程等待状态发生器⑦可编程分区转换逻辑
5、TMS320C54x 芯片的流水线操作共有多少个操作阶段?每个阶段执行什么任务?完成一条指令都需要哪些操作周期?
六个操作阶段:① 预取指P;将PC中的内容加载PAB② 取指F;将读取到的指令字加载PB③ 译码D;若需要,数据1读地址加载DAB;若需要,数据2读地址加载CAB;修正辅助寄存器和堆栈指针
④ 寻址A;数据1加载DB;数据2加载CB;若需要,数据3写地址加载EAB⑤ 读数R;数据1加载DB;数据2加载CB;若需要,数据3写地址加载EAB;⑥
执行X。执行指令,写数据加载EB。
6、TMS320C54x 芯片的流水线冲突是怎样产生的?有哪些方法可以避免流水线冲突?答:’C54x的流水线结构,允许多条指令同时利用CPU的内部资源。由于CPU的资源有限,当多于一个流水线上的指令同时访问同一资源时,可能产生时序冲突。
解决办法① 由CPU通过延时自动解决;② 通过程序解决,如重新安排指令或插入空操作指令。为了避免流水冲突,可以根据等待周期表来选择插入的NOP指令的数量。
7、TMS320C54x 芯片的串行口有哪几种类型?
四种串行口:标准同步串行口SP,缓冲同步串行口BSP,时分多路串行口TDM,多路缓冲串行口McBSP。
8 、TMS320VC5402 共有多少可屏蔽中断?它们分别是什么?NMI和RS属于哪一类中断源?答:TMS320VC5402有13个可屏蔽中断,RS和NMI属于外部硬件中断。9、
试分析下列程序的流水线冲突,画出流水线操作图。如何解决流水冲突?
STLM A,AR0
STM #10,AR1
LD *AR1,B 解:流水线图如下图:
解决流水线冲突:最后一条指令(LD *AR1,B)将会产生流水线冲突,在它前面加入一条NOP指令可以解决流水线冲突。10、试根据等待周期表,确定下列程序段需要插
入几个 NOP 指令。
① LD @GAIN, T
STM#input,AR1
MPY*AR1+,A 解:本段程序不需要插入 NOP 指令
② STLM B,AR2
STM#input ,AR3
MPY*AR2+,*AR3+,A 解:本段程序需要在 MPY *AR2+,*AR3+,A 语句前插入 1
条NOP指令
③MAC @x, B
STLM B,ST0
ADD@table, A, B 解:本段程序需要在 ADD @table, A, B 语句前插入 2 条 NOP
第三章
已知(80H)=50H,AR2=84H,AR3=86H,AR4=88H。
1、MVKD 80H,*AR2
MVDD *AR2,*AR3
MVDM 86H, AR4
运行以上程序后,(80H)、(84H)、*AR3和AR4的值分别等于多少?解:(80H)=50H,(84H)=50H,*AR3=50H,AR4=50H2、已
知,(80H)=20H、(81H)=30H。
LD #0,DP
LD 80H,16,B ADD 81H,B
运行以上程序,B等于多少?答:(B)=00 0000 0000H3、阅读以下程序,
分别写出运行结果。
.bss x,4
.data
table:.word 4,8,16,32
……
STM #x,AR1
RPT #2
MVPD table,*AR1+
解:数据表table中的常量4传送到以变量x的地址为地址的存储单元中;数据表table中的常量8传送到以变量x+1的地址为地址的存储单元中;数据表table中的常量16传送到以变量x+2的地址为地址的存储单元中;
.bss x,4
.data
table: .word 4,8,16,32
……
STM #x,AR1
RPT #2
MVPD table,*+AR2
解:数据表table中的常量4传送到以变量x+1的地址为地址的存储单元中;数据表table中的常量8传送到以变量x+2的地址为地址的存储单元中;数据表table中的常量16传送到以变量x+3的地址为地址的存储单元中;
3.5TMS320C54x 的数据寻址方式各有什么特点?应该应用在什么场合?
答:TMS320C54x 有 7 种基本的数据寻址方式:立即寻址,绝对寻址,累加器寻址,直接寻址,间接寻址,存储器映像寄存器寻址和堆栈寻址。1,立即寻址:其特点是指令中包含有一个固定的立即数,操作数在指令中,因而运行较慢,需要较多的存储空间。它用于对寄存器初始化。2,绝对寻址:可以寻址任一数据存储器中操作数,运行较慢,需要较多的存储空间。它用于对寻址速度要求不高的场合。3,累加器寻址:把累加器内容作为地址指向程序存储器单元。它用于在程序存储器和数据存储器之间传送数据。4,直接寻址:指令中包含数据存储器的低 7 位和 DP 或 SP 结合形成 16 位数据存储器地址,它寻址速度快,用于对寻址速度要求高的场合。5,间接寻址:利用辅助寄存器内容作为地址指针访问存储器,可寻址 64 千字 X16 为字数据存储空间中任何一个单元。它用于按固定步长寻址的场合。6,堆栈寻址:用于中断或子程序调用时,将数据保存或从堆栈中弹出。7,存储器映像寄存器
(MMR)寻址,是基地址为零的直接寻址,寻址速度快,它用于直接用MMR名快速访问数据存储器的 0 页。
第四章
1、软件开发的环境有哪几种?在非集成开发环境中,软件开发常采用哪些部分?答:可以在两种开发环境中进行C54X的开发:非集成的开发环境和集成的开发环境。在非集
成开发环境中,软件开发常采用:编辑、汇编、链接、调试等部分。
2、什么是 COFF 格式?它有什么特点?答:汇编器和链路器生成的目标文件,是一个可以由'C54x器件执行的文件。这些目标文件的格式称为公共目标文件格式,即COFF。
特点:在编写汇编语言程序时,COFF采用代码段和数据段的形式,以便于模块化的编程,使编程和管理变得更加方便。
3、说明.text 段、.data 段和.bss 段分别包含什么内容?
.text 段(文本段),通常包含可执行代码;
.data 段(数据段),通常包含初始化数据;
.bss 段(保留空间段),通常为未初始化变量保留存储空间。5、链接器对段是如何处理的?
答:链接器将一个或多个COFF目标文件中的各种段作为链接器的输入段,经过链接后在一个可执行的COFF输出模块中建立各个输出段,通过情况下是将不同目标文件中的同名段进行合并,并为各个输出段分配进具体的存储器中。
6、什么是程序的重定位?答:将各个段配置到存储器中,使每个段都有一个合适的起始地址;将符号变量调整到相对于新的段地址的位置;
将引用调整到重新定位后的符号,这些符号反映了调整后的新符号值。7、宏定义、宏调用和宏展开分别指的是什么?
答:在调用宏之前,必须先定义宏。可以在源程序的任何位置定义宏,宏定义的所有内容必须包含在同一个文件中。宏定义可以嵌套,即在一条宏指令中调用其他的宏指令。在定义宏之后,可在源程序中使用宏名进行宏调用。
8、链接器能完成什么工作?链接器命令文件中,MEMORY 命令和 SECTIONS 命令的任务是什么?
答:链接器将各个目标文件合并起来,并完成如下工作:(1)将各个段配置到目标系统的存储器。(2)对各个符号和段进行重新定位,并给它们指定一个最终的地址。(3)解决输入文件之间的未定义的外部引用。MEMORY命令的作用:MEMORY命令用来建立DSP应用系统中的存储器模型。通过这条命令,可以定义系统中所包含的各种形式的存储器,以及它们占用的地址范围。SECTION命令的作用:说明如何将输入段结合成输出段;在可执行程序中定义输出段;规定输出段在存储器中的存储位置;允许重新命名输出段。
第六章应用程序设计
2、FIR 低通滤波器的截止频率为ωn=0.2π,其输出方程为:
79
y(n)=∑a i x(n - i)。
i =0
存放a0-a79的系数表以及存放数据的循环缓冲区设置在DARAM中,如图 6.1所示。试用
MATLAB 中的 fir1 函数确定各系数 a i,用循环缓冲区实现。解:运行 Coef.m 文件,生成滤波器所需系数文件。Coef.m 文件内容如下:
n=79;
b=fir1(n,0.1);
fid=fopen('FIRCoef.inc','wt');
fprintf(fid,'%s %s %s\n','FIRCoef',' .sect',' "FIRCOEF"');
fprintf(fid,' %s\n','');
for j=1:1:(n+1)
fprintf(fid,' %s %6.0f\n','.word',round(b(j)*16384));
fclose(fid)
用循环缓冲区实现的参考程序如下:
;FIR 滤波器的参考程序,使用循环缓冲区法。
.title "fir_main.asm"
.mmregs
.global _c_int00
K_FIR_BFFR .set 80
K_FIR_INDEX .set 1
K_FRAME_SIZE .set 256
stack_len .set 100
stack .usect "STACK",stack_len
FIR_DP .usect "fir_vars",0
d_filin .usect "fir_vars",1
d_filout .usect "fir_vars",1
fir_coff_table .usect "fir_coff",K_FIR_BFFR
d_data_buffer .usect "fir_bfr",K_FIR_BFFR ; buffer size for the filter
FIR_Dinbuf .usect "fir_dinbuf",K_FRAME_SIZE
FIR_Doutbuf .usect "fir_doutbuf",K_FRAME_SIZE
.asg AR0, FIR_INDEX_P
.asg AR4,FIR_DATA_P
.asg AR5,FIR_COFF_P
.asg AR6,INBUF_P
.asg AR7,OUTBUF_P
.copy "FIRInput.inc"
.copy "FIRCoef.inc"
.text _c_int00: ssbx INTM ; INTM=1,禁止所有可屏蔽中断
ssbx FRCT
;-------------------------------------------------------------------- stm #0, CLKMD ; 切换 CPU 内部 PLL 到分频模式Clk_Status: ldm CLKMD, A
and #01b, A bc Clk_Status, ANEQ ;检查是否已经切换到分频模式?
stm #0x07ff,CLKMD ;设置 DSP 时钟 16.384MHZ
;-------------------------------------------------------------------- nop
stm #0x3FF2,PMST
stm #0x7FFF,SWWSR
stm #0xF800,BSCR
stm #0x0000, IMR ; 禁止所有可屏蔽中断
stm #0xFFFF, IFR ; 清除中断标志
stm #stack+stack_len,SP ;设置堆栈指针
nop
STM #FIR_Dinbuf,AR1
RPT #(K_FRAME_SIZE-1)
MVPD #FIRIn,*AR1+ ;以上 3 行的功能是把模拟数据拷贝到内存中。
STM #fir_coff_table,FIR_COFF_P
RPT #K_FIR_BFFR-1;
MVPD #FIRCoef,*FIR_COFF_P+ ;把滤波器常数拷贝到内存中。
STM #K_FIR_INDEX,FIR_INDEX_P
STM #d_data_buffer,FIR_DATA_P ; load cir_bfr address for the recent samples
RPTZ A,#K_FIR_BFFR
STL A,*FIR_DATA_P+ ;清除滤波器缓冲区,所有数据存储单元置 0。
STM #(d_data_buffer+K_FIR_BFFR-1), FIR_DATA_P ;
STM #fir_coff_table, FIR_COFF_P; AR5 指向滤波器系数缓冲区最低地址。
STM #FIR_Dinbuf,INBUF_P AR6 指向输入数据缓冲区,准备读入数据。
STM #FIR_Doutbuf,OUTBUF_P ; AR7 指向输出数据缓冲区,准备读出数
据。
;修改数据页指针
LD #FIR_DP,DP
STM #K_FRAME_SIZE-1,BRC ; 程序执行 256 次。
RPTBD fir_filter_loop-1
STM #K_FIR_BFFR,BK ;
LD *INBUF_P+, A ; 从输入数据缓冲区读入数据,准备处理。
fir_filter:STL A,*FIR_DATA_P+% ;读入最新数据
RPTZ A,(K_FIR_BFFR-1)
MAC *FIR_DATA_P+0%,*FIR_COFF_P+0%,A ; 累加处理。
STH A, *OUTBUF_P+ ; 把数据输出到输出缓冲区,可以验证结果。
fir_filter_loop
Wait b Wait
.END
第七章 TMS320C54x 片内外设、接口及应用
1、已知 TMS320C54X 的 CLKOUT 频率为 4MHz,那么,
①在 SAM 工作方式下,主机的时钟频率是多少?
解:在 SAM 工作方式下,主机频率可达 3.2MHz 或 2.4MHz。
②在 HOM 工作方式下,主机的时钟频率与 TMS320C54X 的时钟频率有关吗?
答:在 HOM 工作方式下,主机的时钟频率与 TMS320C54X 的时钟频率无关。
2、试分别说明下列有关定时器初始化和开放定时中断语句的功能(针对 5402 处理器)。
①STM #0004H,IFR
解:清除外部中断 2 标志位
②STM #0080H,IMR
解:允许定时器 T1 或 DMAC1 中断(使用哪一种中断由 DMA 通道优先级和使能控制寄存
器 DMPREC 控制。在复位以后,中断被配置为定时器 T1 中断)。
③RSBX INTM
解:使能所有可屏蔽中断。
④STM #0279H,TCR
解:设置定标计数器的值 PSC 为 9;定时器分频系数为 9;以 PRD 中的值加载 TIM,以 TDDR
中的值加载 PSC;定时器停止工作。
3、试分别说明下列语句的功能。
① STM #SPCR10,SPSA0
STM #0001H,BSP0
解:对串口控制寄存器 SPCR10 赋值。不使用数字循环返回模式,接收数据 DRR[1,2]
采用右对齐方式,连续时钟方式,DX 使能判断,接收中断由 RRDY 产生,接收移位寄存器
未超载,串口接收器准备好,使能串口接收器。
②STM #SPCR20,SPSA0
STM #0081H,BSP0
解:对串口控制寄存器 SPCR20 赋值。串口使用软件模式,帧同步逻辑、采样率发生器复
位,由发送准备好 XRDY 驱动发送中断;发送移位寄存器为空,发送器未准备好,使能串
口发送器。
③STM #SPCR20,SPSA0
ORM #01000001B,BSP0
解:修改串口控制寄存器 SPCR20 的值。由采样率发生器产生帧同步信号,使能串口发送
器。
4、已知中断向量 TINT=013H,中断向量地址指针 IPTR=0111H,求中断向量地址。
解:中断向量地址=(100010001B)<<9+(10011)<<2=88CCH
第八章
1、一个典型的 dsp 系统通常有哪些部分组成?画出原理框图?
答:一个完整的 DSP 系统通常是由 DSP 芯片和其他相应的外围器件构成。一个典型的 DSP 系统应包括抗混叠滤波器、数据采集 A/D 转换器、数字信号处理器 DSP、 D/A 转换器和低通滤波器等。 DSP 系统的工作过程:①将输入信号 x(t)经过抗混叠滤波,滤掉高于折
叠频率的分量,以防止信号频谱的混叠。②经过采样和 A/D 转换器,将滤波后的信号转
换为数字信号 x(n)。③数字信号处理器对 x(n)进行处理,得数字信号 y(n)。④经 D/A 转
换器,将 y(n)转换成模拟信号;⑤经低通滤波器,滤除高频分量,得到平滑的模拟信号 y(t)。
2、dsp 系统硬件设计过程都有哪些步骤?
答:第一步:确定硬件实现方案;第二步:器件的选择;第三步:原理图设计;第四步:
PCB 设计;第五步:硬件调试;
第九章
工程项目的管理
CCS 开发环境对用户系统采用工程项目的集成管理,使用户系统的开发和调试变得简单明
了。在开发过程中,CCS 会在开发平台中建立不同独立程序的跟踪信息,通过这些跟踪信
息对不同的文件进行分类管理,建立相应的文件库和目标文件。
一个工程项目包括源程序、库文件、链接命令文件和头文件等,它们按照目录树的结构
组织在工程项目中。工程项目构建(编译链接)完成后生成可执行文件。
9.1 CCS 集成开发环境都有哪些功能?
答:CCS 集成开发环境。此环境集编辑,编译,链接,软件仿真,硬件调试和实时跟踪
等功能于一体,包括编辑工具,工程管理工具和调试工具等。
9.3 在 CCS 的所有窗口中,都含有一个关联菜单。怎样打开这个关联菜单?
答,只要在该窗口中单击右键就可以打开关联菜单。
9.4 CCS 软件为用户提供哪几种常用的工具条?
答:标准工具条,编辑工具条,项目工具条和调试工具条
9.6 CCS 软件可为用户提供各种窗口,常用的窗口都有哪些?怎样打开?
答:反汇编窗口,存储器窗口,寄存器窗口,观察窗口,反汇编窗口:主要用来显示反汇编后的指令和调试所需的符号信息,包括反汇编指令,
指令所存放的地址和相应的操作码。当程序装入目标处理器或仿真器后,CCS 会自动打
开反汇编窗口。存储器窗口:可以直接显示存储器的内容。在调试程序的过程中,可直
接观察存储器的内容来确定程序的正确性。
9.7 一个工程项目都包含有哪些文件?怎样建立一个新的工程项目?
答:一个工程项目包括源程序,库文件,链接命令文件和头文件等,它们按照目录树的
结构组织在工程项目中。见课本(P358)
9.8 CCS 软件为用户构建工程项目提供了哪几种操作?这些操作有什么不同?
答:1,编译文件:编译文件仅完成对当前源文件的编译,不进行链接。2,增加性构建:
增加性构建仅对修改的源文件进行编译,先前编译过,没有修改的文件不再进行编译。
出出文件。4,停止构建:停止当前的构建进程。
9.9 怎样使用 CCS 软件来调试程序?其都有哪些步骤?
答:CCS 开发环境提供了异常丰富的调试手段。当完成工程项目构建,生成目标文件后,
就可以进行程序的调试。一般的调试步骤为:1、装入构建好的目标文件;2、设置程序
断点,探测点和评价点;3、执行程序;4、程序停留在断点处,查看寄存器和内存单元
的数据,并对中间数据进行在线(或输出)分析。
反复上述过程直到程序达到预期的功能为止。
9.10 在 CCS 软件中,程序运行控制经常需要哪些操作?CCS 提供了四种实时运行程序
的操作,它们分别是哪些操作?各有什么不同?
答:在调试程序的过程中,经常需要复位,执行,单步执行等操作。1、装载文件 2、
复位目标处理器 3、单步运行 4、实时运行
第 7 章程序
;初始化定时器 0
;根据定时长度计算公式:Tt=T* (TDDR+1) * (PRD+1)
;给定 TDDR=9,PRD=1599,CLKOUT 主频 f=4MHz,T=250ns
;Tt=250*(9+1)*(1599+1)=4,000,000(ns)=4(ms)
STM #1599,TIM0
STM #1599,PRD0
STM #K_TCR0,TCR0 ;启动定时器 0 中断
RET
;定时器 0 的中断服务子程序:通过引脚 XF 给出周期为 8ms 的占空比
;为 50%的方波波形
t0_flag .usect “vars”,1 ;当前 XF 输出电平标志位
;若 t0_flag=1,则 XF=1
;若 t0_flag=0,则 XF=0
time0_rev: PSHM TRN
PSHM T
PSHM ST0
PSHM ST1
BITF t0_flag,#1
BC xf_out,NTC
SSBX XF
ST #0,t0_flag
B next
xf_out: RSBX XF
ST #1,t0_flag
next: POPM ST1
POPM ST0
POPM T
POPM TRN RETE (3)方波发生器程序清单
周期为 8ms 的方波发生器,定时中断周期为 4ms,每中断一次,输出端电平取一次反。
;abc1.asm;定时器 0 寄存器地址
TIM0 .set 0024H
PRD0 .set 0025H
TCR0 .set 0026H
;K_TCR0:设置定时器控制寄存器的内容
K_TCR0_SOFT .set 0b ;Soft=0
K_TCR0_FREE .set 0b ;Free=0
K_TCR0_PSC .set 1001b ;PSC=9H
K_TCR0_TRB .set 1b ;TRB=1
K_TCR0_TSS .set 0b ;TSS=0
K_TCR0_TDDR .set 1001b ;TDDR=9
K_TCR0 .set K_TCR0_SOFT| K_TCR0_FREE| K_TCR0_PSC| K_TCR0_TRB| K_TCR0_TSS| K_TCR0_TDDR 周期信号的周期检测
定时器计数器的使用对于周期信号的周期检测,可在信号的每个周期内发出一个脉冲,然后
通过程序计算两个脉冲之间的时间来确定信号的周期。
当脉冲来临时触发外部中断 INT0 外部中断 INT0 用来记录脉冲定时器 0 用来记录时间。
为了增加计时长度,可在程序中设置一级计数器。定时器 0 的寄存器用来记录低位时间,程
序中的计数器用来记录高位时间,在外部中断服务程序中读取时间。在定时器 0 中断服务程
序中对计数器加 1,实现低位时间的进位。;abc3.asm
;定时器 0 寄存器地址
TIM0 .set 0024H
PRD0 .set 0025H
TCR0 .set 0026H
TSSSET .set 010H
TSSCLR .set 0ffefH
;K_TCR0:设置定时器控制寄存器的内容
K_TCR0_SOFT .set 0b ;Soft=0
K_TCR0_FREE .set 0b ;Free=0
K_TCR0_PSC .set 1111b ;PSC=15
K_TCR0_TRB .set 1b ;TRB=1
K_TCR0_TSS .set 0b ;TSS=0
K_TCR0_TDDR .set 1111b ;TDDR=15
K_TCR0 .set K_TCR0_SOFT| K_TCR0_FREE| K_TCR0_PSC| K_TCR0_TRB| K_TCR0_TSS| K_TCR0_TDDR
t_counter .usect “vars”,1
t_ptr_counter .uset “vars”,1
tim_ptr_counter .usect “vars”,1
tcr_ptr_counter .usect “vars”,1 ;变量定义
t_array .usect “vars”,15
tim_array .usect “vars”,15
tcr_array .usect “vars”,15 .asg AR7,t_ptr .asg AR6,tim_ptr.asg AR5,tcr_ptr _inittime:;初始化定时器 0,定时长度为 T*393,216
;定时长度=T*(TDDR+1)*(PRD+1),本程序中 TDDR=11,PRD=32767,
;主频为 f,T=1/f
STM #32767,TIM0
STM #32767,PRD0
STM # K_TCR0,TCR0
ST #0,*(t_counter)
ST #t_array,*( t_ptr_counter)
ST #tim_array,*( tim_ptr_counter)
ST #tcr_array,*( tcr_ptr_counter)
RET;外部中断 INT0,在脉冲来时被激活并响应服务子程序,从脉冲响应
;到响应存在延迟
int0isr:PSHM ST0
PSHM ST1
PSHM t_ptr
PSHM tim_ptr
PSHM tcr_ptr
PSHM AL
PSHM AH
PSHM AG
PSHM BL
PSHM BH
PSHM BG 中断服务程序:;外部中断 INT0 中断服务子程序:
INT0ISR: PSHM ST0 ;保存寄存器
PSHM ST1
PSHM BG
PSHM BH
PSHM BL
PORTR HPIPORT,*(hpi_var) ;读 HPI 口
STL *(hpi_var),B
AND #01B,B
BC IR2,ANEQ ;首先判别是否是 IR1, ;是,则执行服务程序, ;否,则跳至对 IR2 的判断
;扩展中断 IR0 的服务程序主体
IR2: STL *(hpi_var),B
AND #010B,B
BC INT0END,ANEQ ;首先判别是否是 IR1,
;是,则执行服务程序,
;否,则跳转至结束
;扩展中断 IR1 的服务程序主体INT0ED: POPM BL
POPM BH
POPM BG
POPM ST1
POPM ST0
;外部中断 INT1 中断服务子程序:
INT1ISR: PSHM ST0 ;保存寄存器
PSHM ST1
PSHM BG
PSHM BH
PSHM BL
PORTR HPIPORT,*(hpi_var) ;读 HPI 口
STL *(hpi_var),B
AND #0100B,B
BC IR4,ANEQ ;首先判别是否是 IR3,
;是,则执行服务程序,
;否,则跳至对 IR4 的判断
RETE
;扩展中断 IR3 服务程序主体
IR4: STL *(hpi_var),B
AND #01000B,B
BC INT0END,ANEQ ;首先判别是否是 IR4,
;是,则执行服务程序,
;否,则跳转至结束
;扩展中断 IR4 的服务程序主体
INT1ED: POPM BL
POPM BH
POPM BG
POPM ST1
POPM ST0
RETE