2.7 ’C54x的系统控制

TMS320C54x芯片的系统控制是由程序计数器(PC)、硬件堆栈、PC相关的硬件、外部复位信号、中断、状态寄存器和重复计数器(RC)等组成。本节将对’C54x的程序地址生成以及流水线操作、系统复位、中断操作、省电和保持方式进行介绍。

2.7.1 程序地址的产生

’C54x的程序存储器用来存放应用程序的代码、系数表和立即数。CPU取指操作时,首先由程序地址生成器(PAGEN)产生地址,再将地址加载到程序地址总线 PAB,由 PAB 寻址存放程序存储器中的指令、系数表和立即数。

1.程序存储器地址生成器PAGEN

程序存储器地址生成器(PAGEN)通常是由程序计数器 PC、重复计数器 RC、块重复计数器BRC、块重复起始地址寄存器 RSA、块重复结束地址寄存器REA等5个寄存器组成。其中BRC、RSA 和 REA 为存储器映像寄存器,地址分别为1AH、1BH 和 1CH。另外,在有扩展程序存储空间的芯片中,还要有一个扩展程序计数器 XPC,以便能对扩展的程序存储空间进行寻址。PAGEN的组成框图如图2.7.1所示。

2.程序计数器

’C54x的程序计数器PC是一个16位计数器,用来保存某个内部或外部程序存储器的地址。这个地址就是即将取指的某条指令、即将访问的某个16位立即操作数或系数表在程序存储器中的地址。

图2.7.1 程序地址生成器PAGEN的组成框图

对PC的加载有以下几种方法。

① 当进行复位操作时,用地址 FF80H 加载PC。

② 当程序是顺序执行时,则PC被增量加载,即PC=PC+1。

③ 当分支转移发生时,用紧跟在分支转移指令后面的16位立即数加载PC。若由累加器分支转移,则用累加器的低阶位(低16位)内容加载PC。

④ 当执行块重复指令时,若 PC+1 等于块重复结束地址 REA+1,则用块重复起始地址RSA加载PC。

⑤ 当执行子程序调用时,将PC+2的值压入堆栈(保护现场),然后将调用指令下一个长立即数加载至PC。若是累加器调用子程序,则保护现场后,用累加器的低阶位(低16位)内容加载PC。

⑥ 当执行子程序返回指令时,将压入堆栈的值从栈顶取出,加载到PC(恢复现场),回到原来的程序处继续执行。

⑦ 当进行硬件中断或软件中断时,将PC值压入堆栈,并将适当的中断向量地址加载PC。

⑧ 当执行中断返回时,将压入堆栈的值从栈顶取出,加载到PC(恢复现场),继续执行被中断的程序。

2.7.2 流水线操作

流水线操作是DSP芯片不同于一般单片机的主要硬件工作机制。流水线操作可以减少指令的执行时间,提高DSP的运行速度,增强DSP的处理能力。

流水线操作是指各条指令以机器周期为单位,相差一个时间周期而连续并行工作的情况。其原理是:将指令分成几个子操作,每个子操作由不同的操作阶段完成。这样,每隔一个机器周期,每个操作阶段就可以进入一条新指令。因此在同一个机器周期内,在不同的操作阶段可以处理多条指令,相当于并行执行了多条指令。

1.流水线操作的概念

’C54x的流水线操作是由6个操作阶段或操作周期组成的,这6个操作阶段彼此相互独立。在任何一个机器周期内,可以有1~6条不同的指令同时工作,每条指令可在不同的周期内工作在不同的操作阶段。’C54x的流水线结构如图2.7.2所示。

图2.7.2 流水线结构示意图

在’C54x 的流水线中,一条指令分为预取指、取指、译码、寻址、读数和执行 6个操作阶段。各操作阶段的功能如下。

预取指P:在T1机器周期内,CPU将PC中的内容加载到程序地址总线PAB,找到指令代码的存储单元。

取指F:在T2机器周期内,CPU从选中的程序存储单元中,取出指令代码加载到程序总线PB。

译码D:在T3机器周期内,CPU将PB中的指令代码加载到指令译码器IR,并对IR中的内容进行译码,产生执行指令所需要的一系列控制信号。

寻址A:即寻址操作数。在T4机器周期内,根据指令的不同,CPU将数据1或数据2的读地址或同时将两个读地址分别加载到数据地址总线DAB和CAB中,并对辅助寄存器或堆栈指针进行修正。

读数R:CPU在T5机器周期内,将读出的数据1和数据2分别加载到数据总线DB和CB中。若是并行操作指令,在完成上述操作的过程中,同时将数据3的写地址加载到数据地址总线EAB中。

执行X:在T6机器周期内,CPU按照操作码要求执行指令,并将写数据3加载到EB中,写入指定的存储单元。

流水线的前两阶段——预取指和取指是完成指令的取指操作。在预取指阶段,装入一条新指令的地址;在取指阶段,读出这条指令代码。如果是多字指令,要几个这样的取指操作才能将一条指令代码读出。

流水线的第3阶段是对所取指令进行译码操作,产生执行指令所需要的一系列控制信号,用来控制指令的正确执行。

接下来的寻址和读数阶段是读操作数。如果指令需要,就在寻址阶段加载一个或两个操作数的地址;在读数阶段,读出一个或两个操作数。

一个写操作在流水线中要占用两个阶段,即读数和执行阶段。读数阶段,在EAB上加载一个写操作数的数据地址;执行阶段,从EB总线装操作数,并将数据写入存储空间。

在’C54x 的流水线操作中,存储器的存取操作要占用两个阶段。第 1阶段,用存储单元的地址加载地址总线;第2阶段,对存储单元进行读/写操作。’C54x存储器操作在流水线上的各种情况如下。

(1)取指(单周期)

(2)执行读单操作数指令

      例如:  LD  *AR1,A                  ;单周期指令,读单操作数

(3)执行读双操作指令

      例如:  MAC  *AR2+,*AR3,A           ;单周期指令,读双操作数

(4)执行写单操作数指令

      例如:  STH   A,*AR1                ;单周期指令,写单操作数

(5)执行写双操作数指令

      例如:  DST   A,*AR1                 ;双周期指令,写两个操作数

(6)执行读单操作数和写单操作数指令

      例如:  ST      A,*AR2
              ||LD     *AR3,B               ;单周期并行加载存储指令,读单操作数和写单操作数

2. 分支转移的流水线操作

根据是否使用加延时的指令,分支转移的流水线操作可分为两种工作类型,即无延迟分支转移和延迟分支转移。

(1)无延迟分支转移

为了便于分析,将流水线操作图画成一组交错行,每行代表一条指令字通过流水线的每个阶段。每行的左侧标有指令的助记符、一个操作数、两条多周期指令或流水线的一次嵌入。执行阶段所跨过的顶端数字为执行该指令所需要的周期数。

例如,延迟分支转移程序。

            地址         指令代码                注释
            a1,a2       B   b1       ;四机器周期,两字的无延迟分支转移指令
            a3          i3            ;任意单周期,单字指令
            a4          i4            ;任意单周期,单字指令
            …          …
            b1          j1

对应的流水线工作情况如图2.7.3所示。

周期1:将分支转移指令地址a1加载至PAB。

周期2、3:取出转移指令的两个指令字(即取指)。

周期4、5:对i3和i4指令取指。由于这两条指令位于分支转移指令之后,虽然已经取指,但流水线不会使其进入译码阶段。当转移指令的第2个字译码以后,用新的值b1加载PAB。

周期6、7:分支转移指令的两个字进入执行阶段。同时,在周期6将从地址b1处,对j1指令进行取指操作,在周期7对j1指令译码。

周期8、9:由于i3和i4指令不被执行,因此在周期8和9中,转移指令的执行阶段无任何操作,这两个周期被消耗掉。这就是分支转移指令为什么需要4个周期的原因。

周期10:执行j1指令。

从图2.7.3可以看出,分支转移指令从周期6进入执行到周期10(即j1指令进入执行阶段)共花费了4个周期,由于无延迟的分支转移指令对i3和i4只取值不执行,因此总共需要4个周期。

图2.7.3 无延迟分支转移指令流水线

(2)延迟分支转移

延迟分支转移指令允许其后面的2个单周期指令(如i3和i4)执行完毕,因此采用延迟分支转移指令可以节省2个机器周期。

例如,延迟分支转移程序。

            地址         指令代码                  注释
            a1,a2        BD   b1         ;四机器周期,两字的延迟分支转移指令
            a3          i3               ;任意单周期,单字指令
            a4          i4               ;任意单周期,单字指令
            …           …
            b1          j1

对应的流水线工作情况如图2.7.4所示。

图2.7.4 延迟分支转移指令流水线

周期6、7:执行延迟分支转移指令,需2个周期。

周期8、9:执行i3和i4指令,需2个周期。

由于延迟分支转移指令允许紧随其后的2条单周期单字指令执行,因此,使用时可将转移指令前的2条单周期单字指令放在转移指令之后,从而使转移指令成为2周期指令。

【例2.7.1】 分别用分支转移指令B和BD编写程序如下,试分析各程序所需要的周期。

          利用分支转移指令B编程                利用分支转移指令BD编程
            LD      @x,A                        LD      @x,A
            ADD    @y,A                        ADD    @y,A
            STL     A,@s                        STL     A,@s
            LD      @s,T                         LD      @s,T
            MPY    @z,A                        BD      next
            STL     A,@r                         MPY    @z,A
            B       next                         STL     A,@r

这两段程序均完成R=(x+y)×z运算,操作结束后转至next。除B和BD指令外,其他指令均为单周期单字指令。

采用分支转移B指令编写的程序,共有8个指令字,需要10个周期;

在采用延迟分支转移指令编写的程序中,由于将BD指令前移2个字,并允许其后的两条单周期单字指令执行。因此,执行后3条指令(即BD、MPY和STL指令)共需要4个周期,整个程序只需要8个周期。

由上可见,采用具有延迟功能的指令,只要合理安排前后指令的顺序,可以节省机器周期。具有延迟操作功能的指令见表2.7.1。

表2.7.1 具有延迟操作功能的指令

注意:延迟操作指令后面只有1~4个字的空隙,其后的指令不能使用其他分支指令或重复指令,而在CALLD或RETD的空隙不能使用PUSH和POP指令。

3.条件执行的流水线操作

’C54x只有一条条件执行指令,且为单字单周期指令。条件执行指令的格式:

            XC   n,cond[,cond[,cond]]

功能:执行指令时,先判断给定条件 cond 是否满足。若满足,则连续执行紧随其后的n条指令;若不满足,则连续执行n条NOP指令(空操作)。

例如,采用条件执行指令的程序如下:

            地址         指令代码                注释
            a1          i1              ;任意单周期,单字指令
            a2          i2              ;任意单周期,单字指令
            a3          XC   n,cond      ;单周期,单字指令
            a4          i4              ;任意单周期,单字指令
            a5          i5              ;任意单周期,单字指令

对应的流水线工作情况如图2.7.5所示。

图2.7.5 条件执行指令的流水线

周期3:XC指令地址a3加载PAB。

周期4:对XC指令取值。

周期5:对XC指令寻址,求解XC指令的条件。若条件满足,则i4和i5指令进入译码阶段并执行;若不满足,则不对i4和i5指令译码,执行空操作。

从图2.7.5可以看出,在周期6,i1和i2指令还没有执行完,它们对XC指令的条件判断不会产生影响。如果XC指令的判断条件由指令i1和i2的结果给出,则会得出错误的判断。因此,决定XC指令判断条件的指令应放在i1指令之前。另外,XC指令的条件判断与实际执行之间有2个周期的时间空隙,若在此期间有其他运算改变条件,如发生中断等,将会造成错误的运行结果。因此,应在条件执行指令前屏蔽所有可能产生的中断或其他改变指令规定条件的运算。

4.存储器的流水线操作

’C54x片内存储器分为双寻址存储器和单寻址存储器。因此,流水线操作分为两种情况。

(1)双寻址存储器的流水线操作

’C54x 的内部双寻址存储器DARAM分成若干独立的块,CPU可以在单个周期内对其访问2次,如:

● 在单个周期内允许同时访问不同的DARAM块;

● CPU同时处理两条指令访问不同的存储块;

● 处于流水线不同阶段的两条指令,可以同时访问同一个存储块。

上述3种对存储器的操作,均不会发生时序冲突,因为两次访问分别发生在机器周期的前半周期和后半周期。表2.7.2列出了各种半周期的访问DARAM块的情况。

表2.7.2 访问DARAM块

图2.7.6给出不同情况下访问DARAM的半周期寻址图。为了简化,省略了所有地址总线的加载。

图2.7.6 访问DARAM的半周期寻址图

由于CPU的资源有限,当CPU正在处理的指令同时访问DARAM的同一存储器块时,可能会发生时序冲突。如同时从同一存储器块取指或取操作数(都在前半周期);或者同时对同一存储器块进行写操作和读第2操作数(都发生在后半周期),都会发生时序冲突。当发生流水冲突时,CPU通过将写操作延迟一个周期,或通过插入一个空周期来自动解决时序冲突。

例如,当执行下列程序发生时序冲突时,CPU能对取指自动延迟一个周期。

            LD  *AR2+,A     ;AR2指向程序驻留的DARAM
            i2               ;假定i2指令不访问DARAM
            i3               ;假定i3指令不访问DARAM
            i4

当第1条指令读操作数时,i4指令正在取指,故发生时序冲突。此时,CPU对i4的取指延迟一个周期来解决时序冲突。对应的流水线工作情况如图2.7.7所示。

图2.7.7 取指和读操作数发生的时序冲突

(2)单寻址存储器的流水线操作

’C54x 的单寻址存储器包括单寻址读/写存储器 SARAM、单寻址只读存储器 ROM 和DROM。这两类存储器在流水线中的操作基本相同,只是ROM和DROM不能进行写操作。

在’C54x存储空间中,单寻址存储器也是分块的,CPU可以在单周期内对每个存储块访问一次,只要不同时访问同一个存储器块就不会发生时序冲突。

对于单寻址存储器,当指令有两个存储器操作数进行读或写时,若两个操作数指向同一个单寻址存储器块,则在流水线上会发生时序冲突。在这种情况下,CPU先在原来的周期上执行一次寻址操作,并将另一次寻址操作自动地延迟一个周期,如:

            MAC  *AR2+,*AR3+%,A,B

在这条指令中,若AR2和AR3指向同一单寻址存储器块,则该指令需要两个时钟周期。

5.流水线的等待周期

’C54x的流水线结构,允许多条指令同时利用CPU的内部资源。由于CPU的资源有限,当多于一个流水线上的指令同时访问同一资源时,可能产生时序冲突。其中,有些冲突可以由CPU 自动插入延迟来解决,但还有一些未保护性冲突是 CPU 无法自动解决的,需通过调整程序语句人为解决,如加入空操作或重新安排程序语句。

(1)流水线冲突

可能产生未保护性流水线冲突的硬件资源:

● 辅助寄存器(AR0~AR7);

● 重复块长度寄存器(BK);

● 堆栈指针(SP);

● 暂存器(T);

● 处理器工作方式状态寄存器(PMST);

● 状态寄存器(ST0和ST1);

● 块重复计数器(BRC);

● 存储器映像累加器(AG、AH、AL、BG、BH、BL)。

对于上述的存储器映像寄存器,如果在流水线中同时对它们进行寻址,就有可能发生未保护性流水冲突。’C54x发生流水线冲突情况分析示意图如图2.7.8所示。

从图2.7.8可以看出,在’C54x的源程序中,如果采用C语言编写程序的源代码,经CCS编译器产生的代码不会产生流水线冲突。如果采用汇编语言编写源程序,算术运算操作(CALU)或在初始化时设置MMR寄存器,也不会发生流水线冲突。因此,在绝大多数情况下,流水线冲突是不会发生的,只有某些MMR寄存器的写操作容易发生冲突。

图2.7.8 流水线冲突情况分析示意图

【例2.7.2】 分析下列指令的流水线冲突。

            STLM     A,AR1
            LD       *AR1,B

上述两条指令的流水线操作图如图2.7.9所示。其中,“W”表示对AR1写操作,“N”表示指令需要AR1的值。

图2.7.9 流水线操作图

两条指令分别在各自的流水线上并行工作。第一条指令对AR1的写操作是在第一条流水线的T6后半周期进行的;而第二条指令对AR1进行间接寻址是在第二条流水线的T4前半周期进行,在时序上提前了两个机器周期。很显然,第一条指令还没有准备好AR1数据,第二条指令就已开始对AR1进行寻址读操作,这样产生的运行结果会产生错误。解决办法是采用保护性指令:

            STM   #1k,AR1
            LD   *AR1,B

STM为双字节指令,占用两条流水线并行工作。流水线操作图如图2.7.10所示。

图2.7.10 流水线操作图

● 第二条流水线的T3取操作数#1k;

● 第一条流水线的T5将取来的常数写入AR1;

● 第三条流水线的T4完成对AR1的间接寻址。

采用保护性指令后,使读—写—读3条流水线在相邻的3个周期内完成,既节省了指令操作时间,又避免了流水线的时序冲突。

(2)等待周期表

当指令对MMR、ST0、ST1和PMST等硬件资源进行写操作时,有可能造成流水线冲突。解决的办法是在写操作指令的后面插入若干条NOP指令。例如,对于例2.7.2的程序,可在STLM指令后插入两条NOP指令,可以消除流水冲突。相应的流水线操作图如图2.7.11所示。

图2.7.11 加入NOP后的流水线操作图

上述情况加入 2 条 NOP 指令后,可以避免流水冲突,但程序的运行时间比原来延长了 2个周期。加入的NOP指令越多,延长的时间越长。对于插入NOP指令的数量,可以依据等待周期表来选择。

等待周期表给出了对MMR及控制字段进行写操作的各种指令所需插入的等待周期数。为了避免流水冲突,可以根据等待周期表来选择插入的NOP指令的数量。流水线操作等待周期表见表2.7.3。

表2.7.3 流水线操作等待周期表

对于双字指令或三字指令都会提供隐含的保护周期,因此,有时可以不需要插入NOP指令。例如:

            SSBX  SXM          ;需要一个等待周期
            NOP                 ;插入一个空操作
            LD    @x,B          ;无隐含保护周期

根据表2.7.3得知,SSBX SXM指令需要一个等待周期。由于其后的LD @x,B指令为单字指令,不提供隐含保护周期,因此,在SSBX SXM指令后应插入一条NOP指令。

又如:

            SSBX  SXM          ;需要一个等待周期
            LD  *(x),B           ;隐含一个等待周期,故无须NOP

由于 LD *(x),B 指令为双字指令,隐含一个保护周期,故 SSBX SXM 指令后,可不用插入NOP指令。

2.7.3 系统的复位

和其他微处理器芯片一样,TMS320C54x芯片设有复位输入引脚。如果加在这个引脚上的电平发生变化时,程序将从指定的存储地址FF80H单元开始执行。当时钟电路工作后,只要在引脚上出现 2 个外部时钟周期以上的低电平,芯片内部所有电路的寄存器都将被初始化复位。若保持低电平,则芯片始终处于复位状态。只有当此引脚变为高电平后,芯片内部的程序才可以从FF80H单元开始执行。

当TMS320C54x芯片处于复位期间,处理器将进行如下操作:

● 将工作方式寄存器PMST中的中断向量指针IPTR置成1FFH,MP/位置成与MP/引脚相同的状态;

● 状态寄存器ST0=1800H;

● 将状态寄存器ST1中的中断方式位INTM置1,关闭所有可屏蔽中断;

● 使程序计数器PC=FF80H;

● 使扩展程序计数器XPC=0000H;

● 使中断标志寄存器IFR=0000H;

● 使数据总线处于高阻状态;

● 控制线均处于无效状态;

● 将地址总线置为FF80H;

● 使引脚产生中断响应信号;

● 产生同步复位信号,对外围电路初始化;

● 将下列状态位置为初始值:

ARP=0 ASM=0 AVIS=0 BRAF=0 C=1 C16=0 CLKOFF=0 CMPT=0 CPL=0 DP=0 DROM=0 FRCT=0 HM=0 INTM=1 OVA=0 OVB=0 OVLY=0 OVM=0 SXM=1 TC=1 XF=1

注意:复位期间对其余的状态位和堆栈指针 SP 没有进行初始化。因此,用户在程序中必须对它们进行初始化。若MP/=0,则处理器从内部程序存储器开始执行,否则将从外部程序存储器开始执行程序。

在复位期间,芯片在程序控制器控制的节奏下,由各寄存器控制各种片内功能,因此复位状态决定了芯片的最初情况。同时,在复位时,芯片的各引脚也处于不同状态,了解初始状态有助于进行外设控制设计。

2.7.4 中断操作

中断系统是为计算机系统提供实时操作、多任务和多进程操作的关键部件。一般来说,中断信号是由外设(如ADC)向CPU传送数据或者外设(如DAC)向CPU提取数据的硬件设备而产生的,也可以由定时器(用于发生特殊信号)产生。当CPU响应中断时,将暂时停止当前程序的执行,而去执行中断服务程序(ISR)。

’C54x的中断系统既支持软件中断,也支持硬件中断。软件中断是由程序指令(INTR、TRAP或RESET)产生的中断,硬件中断是由外围设备信号产生的中断。硬件中断有两种形式:

● 受外部中断信号触发的外部硬件中断。

● 受片内外设电路信号触发的内部硬件中断。

当同时有多个硬件中断出现时,’C54x 将按照中断优先级别的高低对它们进行中断响应,其中1为最高优先级。对于VC5402中断源和中断优先级,见表2.7.4。

表2.7.4 VC5402中断源和优先级

不论是软件中断还是硬件中断,’C54x的中断都可以分成两大类。

(1)可屏蔽中断

可用软件设置来屏蔽或开放的中断。’C54x 最多可以支持 16 个用户可屏蔽中断(SINT15~SINT0)。但有的处理器只用了其中的一部分,如VC5402只有13个可屏蔽中断。有些中断有两个名称,因为这些中断可以通过软件或硬件进行初始化。对VC5402来说,这13个中断的硬件名称为:

(外部中断);

● BRINT0、BXINT0、BRINT1和BXINT1(串行口中断);

● TINT0、TINT1(定时器中断);

● DMAC4、DMAC5(DMA中断);

● HPINT(HPI中断)。

(2)非屏蔽中断

这些中断都是不能屏蔽的中断。’C54x 对这一类中断总是响应的,并从主程序转移到中断服务程序。’C54x的非屏蔽中断包括所有的软件中断,以及两个外部硬件中断(复位)和 (也可以用软件进行中断)。是一个对’C54x 所有操作方式产生影响的非屏蔽中断,而中断不会对’C54x的任何操作方式发生影响。中断响应时,所有其他的中断将被禁止。

有关中断标志寄存器(IFR)和中断屏蔽寄存器(IMR)的应用,将在7.5节中进行讨论。

2.7.5 省电和保持方式

’C54x有多种省电工作方式,可以使CPU暂时处于休眠状态。此时,CPU进入暂停工作状态,功耗减小,但保持CPU中的内容。当省电方式结束后,CPU可以继续正常工作。

’C54x有4种省电方式,可以通过执行IDLE1、IDLE2和IDLE3这3条指令,或者使外部信号为低电平,同时置位HM状态位(使CPU处于保持状态)来实现。这些省电方式分别为闲置方式1、闲置方式2、闲置方式3和保持方式。表2.7.5给出了4种省电工作方式。

表2.7.5 4种省电工作方式

1.闲置方式1(IDLE1)

在这种方式下,CPU除了时钟外所有的工作都停止。由于系统时钟仍在工作,因此外设电路可以继续工作,CLKOUT引脚保持有效。可用IDLE1指令,使CPU进入闲置方式1状态。用唤醒中断来结束CPU的闲置方式1。

2.闲置方式2(IDLE2)

这种省电方式可以使片内外设和CPU停止工作,使系统功耗明显减少。可用IDLE2指令进入闲置方式 2。结束时不能采用闲置方式 1 的方法来唤醒这种省电方式,可用外部中断来结束闲置方式2,其方法是:用一个10ns的窄脉冲加到外部中断引脚(),通过外部中断来结束闲置方式2。闲置方式2结束后,所有的外设都将复位。

3.闲置方式3(IDLE3)

这种方式是一种完全关闭模式,除了具有闲置方式2的功能外,还可以终止锁相环PLL的工作,大幅度地降低系统功耗。可用IDLE3指令进入闲置方式3,用外部中断来结束。和闲置方式2一样,IDLE3结束后,所有的外设将被复位。

4.保持方式

保持方式是另一种省电方式。在这种方式下,CPU的地址总线、数据总线和控制总线处于高阻状态。可以通过设定HM位的值,用保持方式来终止CPU运行。

这种方式由信号初始化,如果HM=1,则CPU停止运行,CPU的三总线(地址、数据和控制总线)为高阻状态;如果HM=0,CPU的三总线处于高阻状态,但CPU继续运行。当信号无效时结束保持方式。

这种方式不会停止CPU片内外设的工作,如定时器和串行口等,无论和HM为何值,这些片内外设都会一直运行。

5.其他省电方式

’C54x 除了具有上述 4 种省电方式外,还有两种省电功能。它们分别是外部总线关断和CLKOUT关断。

’C54x可以通过将分区开关控制寄存器(BSCR)的第0位置1的方法,关断片内的外部接口时钟,使接口处于低功耗状态。复位时,这一位被清0,片内的外设接口时钟开放。

时钟关断功能使得’C54x可以利用指令来禁止CLKOUT信号。其方法是:用软件指令将处理器工作方式寄存器PMST中的CLKOFF位置1,从而关断CLKOUT的输出。复位时,CLKOUT有效。