轻松玩转DSP:基于TMS320F2833x
上QQ阅读APP看书,第一时间看更新

1.1 系统结构

1.1.1 总线系统

F2833x配置了独立的程序总线(Program Bus)和数据总线(Data Bus),使CPU可在单周期内从内存读取2个操作数,也就是人们所熟知的哈佛结构。由于F2833x取操作数不但能从数据存储器读取,也要能从程序存储器读取,所以TI公司采用的是如图1.2所示的改进的哈佛结构(Modified Harvard-Architecture)。

该结构包含:程序总线(22位的程序地址总线PAB、32位的程序数据总线PRDB);数据读总线(32位的数据读地址总线DRAB、32位的数据读数据总线DRDB);数据写总线(32位的数据写数据总线DWDB、32位的数据写地址总线DWAB)。

图1.2 F2833x的总线结构

除数据总线和地址总线外,F2833x存在第3类总线,称为寄存器总线。该总线与CPU内部所有的单元相连,允许在这种并行机制下进行快速的数据交互。

此外,DMA控制器通过DMA总线可独立于CPU操作F2833x某些特定的硬件单元,极大地提升CPU的数据吞吐率。

细心的读者可以发现,在图1.1的左侧存在外设连接接口(XINTF),通过外部数据总线32位(D31~D0)和地址总线20位(A19~A0)访问外部存储单元。注意,这种外部访问不是同步的,就2个32位操作数而言,内部访问只需要1个时钟周期而外部访问需要花费一倍的时间,因而在访问外部较慢的存储器时,无须考虑额外的等待时间。

1.1.2 中央处理器单元CPU

F2833x具有强大的数字信号处理(DSP)能力又具有微控制器(MCU)的功能。在其诞生之前,执行复杂控制算法的常见方法是VC33 DSP负责运算,LF2407A或者F2812等定点DSP负责控制,现在用一片F2833x来实现还绰绰有余。F2833x存在 32×32位硬件乘法器和64位处理能力的功能,使F2833x可有效处理更复杂的数值解析问题。

此外,F2833x的CPU还支持一种叫“原子指令”的读写简化机制(Atomics Read/Modify/Write)。原子指令是小的、通用的不可中断指令。原子指令可以更快地完成读写操作,并具有更小的代码规模。而采用常规的非原子指令,占用内存多且执行时间长,两种情况的比较如图1.3所示。

图1.3 非原子操作与原子操作的比较

a) 常规的非原子操作 b)读-修改-写原子操作

1.1.3 数学运算单元

F2833x的运算执行单元如图1.4所示。

图1.4 F2833x的运算执行单元

1.F2833x的乘法器

乘法器可执行32位×32位或16位×16位乘法,以及双16位×16位乘法。

2.F2833x的ALU

ALU的基本功能是完成算术运算和逻辑操作。这些包括:32位加法运算;32位减法运算;布尔逻辑操作;位操作(位测试、移位和循环移位)。

ALU的输入输出:一个操作数来自ACC输出,另一个操作数由指令选择,可来自输入移位器、乘积移位器或直接来自乘法器。ALU的输出直接送到ACC,然后可以重新作为输入或经过输出移位器送到数据存储器。

3.F2833x的ACC

累加器是32位,用于存储ALU结果,它不但可分为AH(高16位)和AL(低16位),还可进一步分成4个8位的单元(AH.MSB、AH.LSB、AL.MSB和AL.LSB);在ACC中可完成移位和循环移位的位操作,以实现数据的定标及逻辑位的测试。

4.F2833x的移位器

移位器能够快速完成移位操作。F2833x的移位操作主要用于数据的对齐和放缩,以避免发生上溢和下溢;还用于定点数与浮点数间的转换。DSP中的移位器要求在一个周期内完成数据移动指定的位数。

32位输入定标移位器是把来自存储器的16位数据与32位的ALU对齐,可以对来自ACC的数据进行放缩;32位的乘积移位器可以把补码乘法产生的额外符号位去除,可以通过移位防止累加器溢出,乘积移位模式由状态寄存器ST1中的乘积移位模式位(PM)的设置决定;累加器输出移位器用于完成数据的储前处理。

1.1.4 F2833x寄存器组

F2833x的寄存器组由辅助寄存器算术单元(ARAU)和一些寄存器组成。

1.F2833x的ARAU

F2833x设置有一个与ALU无关的算术单元ARAU,其作用是与ALU中进行的操作并行地实现对8个辅助寄存器(XAR0~XAR7)的算术运算,从而使8个辅助寄存器完成灵活高效的间接寻址功能,如图1.5所示。

图1.5 F2833x的ARAU结构图

指令执行时,当前XARn的内容用作访问数据存储器的地址,如果是从数据存储器中读数据,ARAU就把这个地址送到数据读地址总线(DRAB);如果是向数据存储器中写数据,ARAU就把这个地址送到数据写地址总线(DWAB)。ARAU能够对XARn进行加1、减1及加减某一常数等运算,以产生新的地址。辅助寄存器还可用作通用寄存器、暂存单元或软件计数器。

2.F2833x的CPU寄存器

1)与运算器相关的寄存器。

① 被乘数寄存器XT(32位):XT可以分成两个16位的寄存器T和TL。

② 乘积寄存器P(32位):P可以分成两个16位的寄存器PH和PL。

③ 累加器ACC(32位):存放大部分算数逻辑运算的结果,以32位、16位及8位的方式访问,对累加器的操作影响状态寄存器ST0的相关状态位。

2)辅助寄存器XAR0~XRA7(8个,32位),常用于间接寻址。

3)与中断相关的寄存器,包括中断允许寄存器IER、中断标志寄存器IFR和调试中断允许寄存器DBGIER,它们的定义及功能在中断相关章节叙述。

4)状态寄存器:ST0和ST1,它们控制DSP的工作模式并反映DSP的运行状态。状态寄存器ST0、ST1各位的含义分别见表1.1和表1.2。

表1.1 状态寄存器ST0各位的含义

表1.2 状态寄存器ST1各位的含义

(续)

5)指针类寄存器。

① 程序计数器PC(22位)用来存放CPU正在操作指令的地址,复位值为0x3F FFC0。

② 返回PC指针寄存器RPC(22位)用于加速调用返回过程。

③ 数据页指针DP(16位)用于存放数据存储器的页号(每页64个地址),用于直接寻址。

④ 堆栈指针SP(16位),其生长方向为从低地址到高地址,复位值为 0400H。进行32位数读写,并约定偶地址访问(例:SP为0083H,32位读从0082H开始)。

6)与浮点运算相关的寄存器。

① 浮点结果寄存器8个:R0H~R7H。

② 浮点状态寄存器STF。

③ 重复块寄存器RB。

F2833x的CPU寄存器分布如图1.6所示。

图1.6 F2833x的CPU寄存器