第一章 综 述
1 总线结构
C54x包括8条16比特宽度的总线,其中:
l 一条程序总线(PB)
l 三条数据总线(CB、DB、EB)
l 四条地址总线(PAB、CAB、DAB、EAB)
2 CPU
C54x的CPU结构包括:
l 40比特的ALU,其输入来自16比特立即数、16比特来自数据存储器的数据、暂时存储器、T中的16比特数、数据存储器中两个16比特字、数据存储器中32比特字、累加器中40比特字。
l 2个40比特的累加器,分为三个部分,保护位(39-32比特)、高位字(31-16比特)、低位字(15-0比特)。
l 桶型移位器,可产生0到31比特的左移或0到16比特的右移。
l 17×17比特的乘法器
l 40比特的加法器
l 比较选择和存储单元CSSU
l 数据地址产生器DAGEN
l 程序地址产生器PAGEN
3 外设
C54x包括:
l 通用I/O引脚,XF和
l 定时器
l PLL时钟产生器
l HPI口,8比特或16比特
l 同步串口
l 带缓存串口,BSP
l 多路带缓存串口,McBSP
l 时分复用串口,TDM
l 可编程等待状态产生器
l 可编程bank-switching模块
l 外部总线接口
l IEEE1149.1标准JTAG口
第二章 存储器
一般而言,C54x的存储空间可达192K16比特字,64K程序空间,64K数据空间,64KI/O空间。
依赖其并行的工艺特性和片上RAM双向访问的性能,在一个机器周期内,C54x可以执行4条并行并行存储器操作:取指令,两操作数读,一操作数写。
使用片内存储器有三个优点:高速执行(不需要等待),低开销,低功耗。
1 存储空间分配图(以C549为例)
复位后,中断矢量表位于程序区FF80H位置,可重新定位于程序空间任何一个128字的页面(其地址高9比特即页号由PMST中IPTR确定)。
2 程序存储区
C54x有片内ROM、DARAM、SARAM,这些区域可以通过软件配置到程序空间。当地址落在这些区域内,自动对这些区域进行访问;当地址落在这些区域以外,自动产生对外部存储器的访问。
2.1 片内ROM
片内ROM(4K,16K,24K,28K或48K字)可能包括的内容有:
l 引导程序,可以从串口、外部存储器、I/O口或HPI口引导
l 256字的μ率扩展表
l 256字的A率扩展表
l 256字的正弦表
l 中断矢量表
2.2 扩展程序存储器
‘548、’549、’5410、’5420采用分页扩展的方式使可寻址程序空间达到8192K字。这一功能的实现有赖于:
l 23条地址线
l 扩展程序计数器XPC
l 6条访问外部程序空间的指令
当程序空间可以使用片内RAM时,程序空间的每一页分为以下两部分:最大32K字的通用块和32K字的专有块。通用块为所有页共享。
XPC寄存器指示选定页,复位后,初始化为0。影响XPC的6条指令是:
l FB[D]-长跳转指令
l FBACC[D]-长跳转指令,跳转地址由A或B中内容确定
l FCALA[D]-长调用指令,子程序地址由A或B中内容确定
l FCALL[D]-长调用指令
l FRET[D]-长返回指令
l FRETE[D]-长中断返回指令
其它的指令不修改XPC寄存器,而在当前页中做内部访问。
3 内存映象寄存器(以‘549为例)
0 | IMR | 中断屏蔽寄存器 |
1 | IFR | 中断标志寄存器 |
2-5 | - | 测试保留 |
6 | ST0 | 状态寄存器0 |
7 | ST1 | 状态寄存器1 |
8 | | 累加器A低字(15-0比特) |
9 | AH | 累加器A高字(31-16比特) |
A | AG | 累加器A保护位(39-32比特) |
B | BL | 累加器B低字(15-0比特) |
C | BH | 累加器B高字(31-16比特) |
D | BG | 累加器B保护位(39-32比特) |
E | T | 乘法寄存器 |
F | TRN | 传送寄存器 |
10-17 | AR0-AR7 | 辅助寄存器ARn n=0~7 |
18 | SP | 堆栈指针 |
19 | BK | 循环缓存区大小寄存器 |
| BRC | 块重复计数器 |
1B | RSA | 块重复开始地址 |
| REA | 块重复结束地址 |
1D | PMST | 状态寄存器 |
1E | XPC | PC扩展寄存器 |
1E- | - | 保留 |
20 | BDRR0 | 带缓存串口0数据接收寄存器 |
21 | BDXR0 | 带缓存串口0数据发送寄存器 |
22 | BSPC0 | 带缓存串口0控制寄存器 |
23 | BSPCE0 | 带缓存串口0控制扩展寄存器 |
24 | TIM | 定时器计数器 |
25 | PRD | 定时器周期寄存器 |
26 | TCR | 定时器控制寄存器 |
27 | - | 保留 |
28 | SWWSR | 等待状态产生寄存器 |
29 | BSCR | Bank-switching控制寄存器 |
| - | 保留 |
2B | XSWR | 扩展等待状态寄存器 |
| HPIC | 主机接口控制寄存器 |
2D- | - | 保留 |
30 | TRCN | TDM串口数据接收寄存器 |
31 | TDXR | TDM串口数据发送寄存器 |
32 | TSPC | TDM串口控制寄存器 |
33 | TCSR | TDM串口通道选择寄存器 |
34 | TRTA | TDM串口接收发送寄存器 |
35 | TRAD | TDM串口接收地址寄存器 |
36-37 | - | 保留 |
38 | AXR0 | ABU0发送地址寄存器 |
39 | BKX0 | ABU0发送缓冲大小寄存器 |
| ARR0 | ABU0接收地址寄存器 |
3B | BKR0 | ABU0接收缓冲大小寄存器 |
| AXR1 | ABU1发送地址寄存器 |
3D | BKX1 | ABU1发送缓冲大小寄存器 |
3E | ARR1 | ABU1接收地址寄存器 |
| BKR1 | ABU1接收缓冲大小寄存器 |
40 | BDRR1 | 带缓存串口1数据接收寄存器 |
41 | BDXR1 | 带缓存串口1数据发送寄存器 |
42 | BSPC1 | 带缓存串口1控制寄存器 |
43 | BSPCE1 | 带缓存串口1控制扩展寄存器 |
44-57 | - | 保留 |
58 | CLKMD | 时钟方式寄存器 |
59- | - | 保留 |
下面着重对三个状态寄存器作一简要说明。
3.1 ST0寄存器
ST0结构为:
15-13 | 12 | 11 | 10 | 9 | 8-0 |
ARP | TC | C | OVA | OVB | DP |
l ARP-辅助寄存器指针
l TC-测试/控制位,存储了ALU测试位操作的结果,受BIT,BITF,CMPM,CMPR,CMPS,SFTC指令的影响
l C-如果加法产生进位C为1,减法产生借位C为0。ADD指令只能置位C,而SUB指令只能清C
l OVA-累加器A溢出标志
l OVB-累加器B溢出标志
l DP-数据存储空间页标志,由DP指定页,在此页中采用直接寻址指令。其绝对地址为DP指示的高9位加上直接寻址指令中的地址为其低7位构成。
3.2 ST1寄存器
ST1结构为:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4-0 |
BRAF | CPL | XF | HM | INTM | 0 | OVM | SXM | C16 | FRCT | CMPT | ASM |
l BRAF-块重复指示。BRAF=1,块重复操作。
l CPL-编译器模式,指示相关直接寻址选用指针。CPL=0,使用DP指针;CPL=1,使用SP指针。
l XF-指示外部引脚XF状态。
l HM-挂起方式。指示CPU响应
l INTM-全局中断控制位。INTM=0,开中断;INTM=1,屏蔽可屏蔽中断。
l 0-读出值总为0。
l OVM-溢出处理方式。指示发生溢出时,对累加器中数值的处理。OVM=0,溢出值不变;OVM=1,载入正向最大值007FFFFFFFH或负向最大值0080000000H。
l SXM-符号扩展方式。SXM=0,符号不扩展;SXM=1,数据被ALU使用前先行符号扩展。
l C16-C16=0,ALU操作采用双精度方式(全32位方式),C16=1,ALU操作采用双16位方式。
l FRCT-小数模式。FRCT=1,乘法器输出左移一位补偿多余的符号位。
l CMPT-兼容模式。CMPT=0,ARP在只有单数据存储器操作数的间接寻址方式中不更新,在这种方式下,ARP必须总置0;CMPT=1,ARP在上述条件下更新,除非使用AR0。
l ASM-累加器移位数。规定了移位范围-16-15,用于并行存储指令STH、STL、ADD、SUB和LD。
3.3 PMST寄存器
ST1结构为:
15-7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
IPTR | MP/MC | OVLY | AVIS | DROM | CLKOFF | SMUL | SST |
l IPTR-中断矢量指针。此9位指向内存空间中以128字为单位的页首址。即中断矢量必须位于页的起始部分。复位后IPTR为1FFH,指向FF80H的位置,可重新定义到任何页。
l
l OVLY-片内RAM是否配置入程序空间。OVLY=0,片内RAM不配置入程序空间;OVLY=1,除00-7FH外,片内RAM配置入程序空间。
l AVIS-地址显示模式。控制对内部程序访问时,地址数据是否显示在地址线上。AVIS=0,不显示;AVIS=1,显示。
l DROM-数据ROM配置。DROM=0,片内ROM不配置在数据空间;DROM=1,部分片内ROM配置在数据空间。
l CLKOFF-CLKOUT关闭。CLKOFF=1,CLKOUT输出禁止,保持高电平。
l SMUL-乘法溢出处理。当SMUL=1,且OVM=1,FRCT=1时,对MAC(乘累加)和MAS(乘累减)指令的操作基于ETSI GSM规范。体现在在小数模式下,在进行后续加/减之前,8000H×8000H的结果被调整为7FFFFFFH。这等同于在OVM=1下MPY+ADD指令。如果只有OVM=1,而SMUL不为1,只在加/减结果后作溢出调整。
l SST-存储溢出处理。当SST=1,累加器中数据在存储到数据空间之前进行溢出调整。影响指令有:STH,STL,STLM,DST,ST||ADD,ST||LD,ST||MACR[R],ST||MAS[R],ST||MPY和ST||SUB.步骤是:
1) 依据指令,累加器中数据完成左移或右移。
2) 40比特值根据SXM位调整为32位。SXM=0(不符号扩展),若值大于7FFFFFFFH,取7FFFFFFFH;若SXM=1(符号扩展),若值大于7FFFFFFFH,取7FFFFFFFH,若值小于80000000H,取80000000H。
3) 调整后数据存入数据空间。
4) 在调整过程中,累加器中数据不改变。
3.4 累加器的存储操作