第一章 绪论
1. DSP与DSP技术
(1)DSP(Digital Signal Processing)----数字信号处理的理论和方法。
(2)DSP(Digital Signal Processor)----用于数字信号处理的可编程微处理器。
(3)DSP技术(Digital Signal Process)----是利用专门或通用数字信号处理芯片,完成数
字信号处理的方法和技术。
2. DSP系统的特点
(1)精度高、抗干扰能力强,稳定性好。(2)编程方便、易于实现复杂算法(含自适应算法)。(3)可程控。(4)接口简单。(5)集成方便。 3. DSP芯片的结构特点 (1)改进的哈佛结构
①哈佛结构 DSP处理器将程序代码和数据的存储空间分开,各有自己的地址总线和数据总线。(目的是为了同时取指令和取操作数,并进行指令和数据的处理,从而大大提高运算速度)
②改进的哈佛结构 在哈佛结构的基础上,使得程序代码和数据的存储空间之间也可以进行数据的传送。
(2)多总线结构 多总线结构可以保证在一个机器周期内多次访问程序空间和数据空间。 TMS320C54x内部有P、C、D、E 4条总线 P:传送取自ROM的指令代码和立即数; C、D:传送从RAM读出的操作数; E:传送写入到RAM中的数据;
(3)流水线技术 将各指令的各个步骤重叠起来执行,而不是一条指令执行完成之后,才开始执行下一条指令。即第一条指令取指后,在译码时,第二条指令就取指,第一条指令取数时,第二条指令译码,而第三条指令就开始取指,。。。。。以此类推。 (4)多处理单元;(5)特殊的DSP指令;(6)指令周期短、功能强 ;(7)运算精度高; (8)丰富的外设;(9)功耗低。
DSP最重要的特点: 特殊的内部结构、强大的信息处理能力及较高的运行速度。 4.DSP芯片可以归纳为三大系列:
①TMS320C2000系列:适用于控制领域 ②TMS320C5000系列:应用于通信领域 ③TMS320C6000系列:应用于图像处理
第二章TMS320C54x的硬件结构
1. TMS320C54x内部结构(3大块)
(1)CPU (2)存储器系统 (3)片内外设与专用硬件电路 CPU部分
①先进的多总线结构(1条程序总线、3条数据总线和4条地址总线)。 ②位算术逻辑运算单元(ALU),包括1个40位桶形移位寄存器和2个独立的40位累加器。 ③17×17位并行乘法器,与40位专用加法器相连,用于非流水线式单周期乘法/累加(MAC)运算。
④比较、选择、存储单元(CSSU):用于加法/比较选择。
⑤指数编码器:可以在单个周期内计算40位累加器中数值的指数。
⑥双地址生成器:包括8个辅助寄存器和2个辅助寄存器算术运算单元(ARAU)
存储器空间 192 K字可寻址存储空间:64 K字程序存储空间、64 K字数据存储空间及
64 K字I/O空间
2.C54xDSP的三个状态和控制寄存器 (1)状态寄存器0(TS0) (2)状态寄存器1(TS1)
(3)工作方式状态寄存器(PMST)
状态寄存器ST0(功能:反映寻址要求和计算中的状态)
DP:数据存储器页指针 (共512页,每页64K字)
当ST1中的CPL=0时,DP值(9位地址)与指令中的低7位地址一道形成16位数据存储器地址。DP值也由LD指令装入。RESET指令将DP赋为0。
状态寄存器ST1 (功能:反映寻址要求、计算初始状态、I/O终端控制) INTM:中断方式位。
(1)INTM=0,开放全部可屏蔽中断; (2)INTM=1,关闭所有可屏蔽中断。
SSBX指令可置INTM为1,RSBX指令可将INTM清0。当复位时,INTM置1;当执行RETE或RETF指令(中断返回)时,INTM清0。
工作方式寄存器 (功能:设定并控制处理器的工作方式,反映处理器工作状态) IPTR:中断向量指针。(15~7位,共9位)
复位时,这9位全部置1,复位值为1FFh,复位向量PC=IPTR+0000000=FF80h。 3.累加器A和B 40位,其中32位数据位(双16位,双精度操作方式),8位冗余位(防止迭代运算时溢出)。 4. C54X中断系统(为实现中断功能而设置的各种硬件和软件。) (1)中断源:最多32个(2个保留)其中: 硬件14个 ,软件16个 (2)中断分类:①非可屏蔽中断16个,②可屏蔽中断16(14)个
非可屏蔽中断:不能由用户用软件来屏蔽的中断。特点:一旦有非屏蔽中断请求,CPU必须予以响应。用途:用于某些十分重要的事件发生,如:掉电;
可屏蔽中断:用户根据需要可用软件开放或禁止CPU响应中断。 特点:软件指令控制,灵活方便。用途:一般事件处理。 (3)硬件中断分为两类:①片内外设触发的内部硬件中断;②片外信号触发的外部硬件中断。 5. 中断处理一般过程: (1)中断源请求中断;(2)CPU响应中断;(3)保护现场; (4)转中断服务;(5)恢复现场;(6)中断返回; 6. C54xDSP内部的两个中断寄存器 (1)中断标志寄存器IFR
置位:当硬件或软件中断发生时,相应位置“1”(挂起)。 识别:CPU通过读IFR来识别挂起的中断。
清0:①C54复位;②中断得到处理;③写1到IFR相应位,相应的未处理的中断被清除;④IFR任何位为1时,表示一个未处理的中断。可将当前IFR内容写入IFR来清除。 (2)中断屏蔽寄存器IMR(用来屏蔽外部和内部中断) 复位时,IMR均为0,
当IMRi=0 屏蔽该中断;IMRi =1 开放该中断
当INTM=0且IMR某一位为0时,开放相应的中断。
7.中断响应时间
(1) 软件和非屏蔽中断:通常情况下,CPU立即响应,并进入中断服务程序。 (2) 硬件可屏蔽中断: 满足以下三个条件后,在3--8机器周期之间响应。 三个条件:
①当前的中断源相应IFR标志为=1,且优先级为最高; ②IMR=1(不屏蔽); ③INTM=0(中断允许); 8.软件中断及中断向量 ???SP,??PC?T0SINTR K; ?PC?IPTR(15?7)?K??2? ?INTM?1禁止其它可屏蔽中断?
注:? PC=中断向量地址指针+中断向量号 ? 该指令屏蔽其它可屏蔽中断 ? 该指令不影响IFR标志位
? 不允许中断嵌套 中断向量(地址)
① 组成:IPTR + 中断向量序号 <<2
(9位) (5位)左移两位→(7位) 注:? 中断向量地址指针IPTR位于PMST (CPU方式控制R) 的高9位(D15~D7),可用程序设置;中断向量序号有相应的中断源(硬件或软件)提供。比如,INT0中断向量号为16(10h),左移2位后就变成40h,若IPTR=0001h,那么中断向量地址为00C0h。 ② 向量中断实现过程举例: [例1]:软硬件复位
分析:① 复位时:IPTR全为“1”(IPTR=1FFh),指向程序存储器最后一页(第511页) ② 软硬件复位中断向量序号为00000B 解:中断向量=1111111110000000B=FF80H
中断服务程序:从FF80H单元开始存放(通常放一条转移指令,转到应用程序的入口处)
[例2]:已知外部中断1的中断服务入口地址为2500H,中断向量地址指针为1F0H,试述向量中断实现过程。
分析:INT1中断向量序号为17(11H)
IPTRKMPM
1111 1000 0000 0000 F 8 0 0 .. 2500HXX. XX 1111 1000 0100 01002500H. .F 8 4 4 ... .RETE
第三章C54x指令系统 1.基本寻址方式(7种)
①立即寻址;②绝对寻址;③累加器寻址;④直接寻址;⑤间接寻址; ⑥存储器映射寄存器寻址;⑦堆栈寻址。 待续。。。。
第四章
【例4.1】 汇编语言程序编写方法举例
.title “example.asm” ;用双引号括起的源程序名
.mmregs ;定义存储器映射寄存器的替代符号 STACK .usect “STACK”, 10h ;在数据存储器中留出16个单元作为 ;堆栈区,名为STACK .bss a, 4 .bss x, 4 ;在数据存储器中空出4个存储单元存放 ;变量x1,x2,x3和x4. .bss y, 1 .def start ;在此模块中定义,可为别的模块引用 .data ;紧跟其后的是已初始化数据
table: .word 1, 2, 3, 4 ;在程序存储器标号为table开始的8个单 .word 8, 6, 4, 2 ;元存放初始化数据
.text ;紧跟其后的是汇编语言程序正文
start: STM #0, SWWSR ;adds no wait states STM #STACK+10H,SP ;set stack pointer STM #a, AR1 ;AR1 point to a RPT #7 ;move 8 values MVPD table, *AR1+ ;from program memory into ; data memory CALL SUM ;call SUM subroutine end: B end
SUM: STM #a, AR3 ;The subroutine implement STM #x, AR4 ;multiply- accumulate RPTZ A, #3 MAC *AR3+, *AR4+, A STL A, @y RET .end ;结束汇编,汇编器将忽略 ;此后的任何源 语句 2. 段定义伪指令(5条)
作用:把汇编语言程序的各个部分划分在适当的段中。 .bss 为未初始化的变量保留空间; .data 通常包含了初始化的数据;
.sect 定义已初始化的带命名段,其后的数据存入该段; .text 该段包含了可执行的代码;
.usect 在一个未初始化的有命名的段中为变量保留空间。
.bss和.usect伪指令创建未初始化的段;.text、.sect.、.data伪指令创建已初始化的段. 3.公共目标文件格式——COFF
COFF的核心概念:使用代码块(段)和数据块(段)编程,而不是指令或数据简单的顺序编写。段的定义:就是在编写汇编语言源程序时,采用的代码块或数据块,它占据存储器的某个连续空间。
COFF目标文件包含的段:
.text 段 (此段通常包含可执行代码); .data段 (此段通常包含初始化数据);
.bss 段 (此段通常为未初始化变量保留存储空间)。 .sect 建立的自定义段是已初始化段; .usect 建立的自定义段是未初始化段。 4.MEMORY命令和SECTIONS命令的作用
(1) MEMORY命令。定义目标系统的存储器配置图,包括对存储器各部分命名,以及规定它们的起始地址和长度;
(2) SECTIONS命令。告诉链接器如何将输入段组合成输出段,以及将输出段放在存储器中的什么位置。 5.堆栈用法:
压入操作:SP先减1,然后再将数据压入栈顶。 弹出操作:数据弹出后,再将SP加1。 堆栈设置:
size .set 100 stack .usect “STK”, size ;自定义一个名为STK的保留空间,共100个单元 STM #stack+size, SP ;将这个保留空间的高地址(#stack+size)赋给SP,作为栈底, 【例4.14】 对数组x[5]中的每个元素加1。 .bss x, 5
begin: LD #1, 16, B
STM #4,BRC ;BRC赋值为4 STM #x,AR4
RPTB next-1 ;next-1为循环结束地址 ADD *AR4,16,B,A STH A,*AR4+ next: LD #0, B …
用next-1作为结束地址是恰当的。如果用循环回路中最后一条指令(STH指令)的标
号作为结束地址,若最后一条指令是单字指令也可以,若是双字指令,就不对了。
【例4.15】 编写一段程序,首先对数组x[20]赋值,再将数据存储器中的数组x[20]复制到数组y[20]。 .title “exp15.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