1、1一、时钟及系统控制一、时钟及系统控制二、程序地址产生二、程序地址产生 三、三、转移、调用和返回转移、调用和返回四、重复指令四、重复指令主要介绍主要介绍F2812的时钟、锁相环、看门狗和复位控制电路等。的时钟、锁相环、看门狗和复位控制电路等。各种时钟和复位电路的内部结构:各种时钟和复位电路的内部结构:一、时钟及系统控制一、时钟及系统控制5HISPCP HISPCP 一、时钟及系统控制一、时钟及系统控制HISPCP 高速外设时钟高速外设时钟设置寄存器设置寄存器 PLLCR PLL控制寄控制寄存器存器 LOSPCP 慢速外设时钟慢速外设时钟设置寄存器设置寄存器 SCSR 系统控制和系统控制和状态寄
2、存器状态寄存器 PCLKCR 外设时钟控制外设时钟控制寄存器寄存器 WDCNTR 看门狗计数看门狗计数寄存器寄存器 LPMCR0 低功耗模式控低功耗模式控制寄存器制寄存器0 WDKEY 看门狗复位看门狗复位key寄存器寄存器 LPMCRl 低功耗模式控低功耗模式控制寄存器制寄存器1 WDCR 看门狗控制看门狗控制寄存器寄存器 外设时钟控制寄存器外设时钟控制寄存器 PCLKCR 数据存储空间数据存储空间 0 x0000701C 时钟寄存器时钟寄存器 高低速外设时钟寄存器高低速外设时钟寄存器 HISPCP/LOSPCP 0 x0000701A/B 系统控制和状态寄存器系统控制和状态寄存器 SCSR
3、 数据存储空间数据存储空间 0X00007022保留保留D15 D14 D13 D12 D11 D10 D9 D8ECANENCLKMCBSPENCLKSCIBENCLKSPIENCLK R-0 R/W-0 R-0 R/W-0 R/W-0 Reserved D15 D3 D2 D1 D0WDINTS WDENINT WDOVERRIDE R-0 R-1 R/W-0 R/W1C-1 一、时钟及系统控制一、时钟及系统控制SCIAENCLK保留保留保留保留保留保留ADCENCLK保留保留EVAENCLKEVBENENCLKD7 D4 D3 D2 D1 D0 R-0 R/W-0 R-0 R/W-0 R
4、/W-0 R/W-0 R-0 R/W-0Reserved D15 D3 D2 D0HSPCK/LSPCK R-0 R/W-010 时钟模块提供两种操作模式:时钟模块提供两种操作模式:内部振荡器:内部振荡器:如果使用内部振荡如果使用内部振荡器,则必须在器,则必须在X1XCLKIN和和X2两个引两个引 脚之间连接一个石英晶体。脚之间连接一个石英晶体。外部时钟源:外部时钟源:如果采用外部时钟,如果采用外部时钟,可以将输入的时钟信号直接接到可以将输入的时钟信号直接接到X1XCLKIN引脚上,而引脚上,而X2悬空。在这种情悬空。在这种情况下,不使用内部振荡器。况下,不使用内部振荡器。一、时钟及系统控制一
5、、时钟及系统控制晶体振荡器及锁相环晶体振荡器及锁相环当当XPLLDIS为低电平,系统直接采用时钟或晶振直接作为系统时钟;为低电平,系统直接采用时钟或晶振直接作为系统时钟;当当XPLLDIS为高电平,外部时钟经过为高电平,外部时钟经过PLL倍频后,为提供时钟。倍频后,为提供时钟。片 内 振 荡 器(OSC)X1/XCLKINX2预 存 器XF_PLLDISOSCCLK(PLL被 禁 止)XPLLDISXRSPLL旁 路PLL/2014位 PLL选 择CLKIN(送 至 CPU)锁相环控制寄存器锁相环控制寄存器PLLCR用于选择锁相环的工作模式和倍频系数用于选择锁相环的工作模式和倍频系数定时器定时
6、器一、时钟及系统控制一、时钟及系统控制Reserved D15 D4 D3 D0DIV R-0 R/W-010 TIM 16位的计数寄存器,重新装载位的计数寄存器,重新装载PRD的值。的值。PRD 16位周期寄存器。位周期寄存器。TCR 16位的定时器控制寄存器。位的定时器控制寄存器。PSC 16位的预定标寄存器,重新装载位的预定标寄存器,重新装载TDDR的值。的值。TDDR 16位的分频寄存器。位的分频寄存器。有有3个个32位位CPU定时器定时器(TIMER0/1/2):定时器定时器0用户可以在应用程序中使用。用户可以在应用程序中使用。定时器定时器1和定时器和定时器2预留给实时操作系统使用预
7、留给实时操作系统使用(例如例如 DSPBIOS)。10u F281F281器件上有器件上有3 3个个3232位位CPUCPU定时器(定时器(TIMERTIMER0/1/20/1/2)u TIMER0TIMER0可以在用户程序中使用,可以在用户程序中使用,TIMER1/2TIMER1/2预留给预留给DSP BIOSDSP BIOS或其它或其它RTOSRTOS使用(使用(如果不用如果不用DSP BIOSDSP BIOS,可以供用户使用,可以供用户使用)。)。u 每个定时器有每个定时器有4 4个寄存器:个寄存器:1 1)计数寄存器()计数寄存器(TIMH:TIMTIMH:TIM):):3232位位
8、2 2)周期寄存器)周期寄存器(PRDH:PRD)(PRDH:PRD):3232位位 3 3)预定标寄存器)预定标寄存器(TPR):32(TPR):32位(预定标计数器位(预定标计数器PSCPSC分频寄存器分频寄存器TDDRTDDR)4 4)控制寄存器控制寄存器(TCR)(TCR):1616位位u TIFTIFTimer Interrupt FlagTimer Interrupt Flagu TIE TIETimer Interrupt EnableTimer Interrupt Enableu TRB TRBTimer Reload BitTimer Reload Bitu TSS TSST
9、imer Stop Status BitTimer Stop Status Bit11通用定时器 定时器的工作过程:定时器的工作过程:1 1)用用3232位计数寄存器(位计数寄存器(TIMH:TIMTIMH:TIM)装载周期寄存器()装载周期寄存器(PRDH:PRD)PRDH:PRD)中的中的 计时常数;计时常数;2 2)计数寄存器根据)计数寄存器根据SYSCLKOUTSYSCLKOUT时钟时钟递减递减计数(计数(16163232位);位);3 3)当计数寄存器等于)当计数寄存器等于0 0时,定时器的计数器寄存器重载周期寄存器值,时,定时器的计数器寄存器重载周期寄存器值,并输出一个中断脉冲(并
10、输出一个中断脉冲(TINT0TINT0)。)。12void ConfigCpuTimer(struct CPUTIMER_VARS*Timer,float Freq,float Period)unsigned long temp;Timer-CPUFreqInMHz=Freq;/Initialize timer periodTimer-PeriodInUSec=Period;temp=(long)(Freq*Period);/150MHz100us=15000Timer-RegsAddr-PRD.all=temp;Timer-RegsAddr-TPR.all =0;/Set pre-scale
11、 counter to divide by 1 Timer-RegsAddr-TPRH.all =0;/Initialize timer control register:Timer-RegsAddr-TCR.bit.TSS=1/0;/1=Stop timer,0=Start Timer Timer-RegsAddr-TCR.bit.TRB=1;/1=reload timerTimer-RegsAddr-TCR.bit.SOFT=1;Timer-RegsAddr-TCR.bit.FREE=1;/Timer Free RunTimer-RegsAddr-TCR.bit.TIE=1;/1=Enab
12、le Timer Interrupt配置CPU定时器下面的函数中周期寄存器由给定的下面的函数中周期寄存器由给定的DSP时钟频率时钟频率Freq(MHz)和定时器和定时器周期周期Period(s)两个参数确定。初始化后定时器处于停止状态。两个参数确定。初始化后定时器处于停止状态。定定时时器器定时器功能框图定时器功能框图一、时钟及系统控制一、时钟及系统控制工作过程:工作过程:首先用首先用32位计数寄存器位计数寄存器(TIMH:TM)装载周期寄存器装载周期寄存器(PRDH:PRD)内部的值。计数寄存器根据内部的值。计数寄存器根据SYSCLKOUT时钟递减计数。时钟递减计数。当计数寄存器等于当计数寄存
13、器等于0时,定时器中断输出产生一个中断脉冲。时,定时器中断输出产生一个中断脉冲。工作原理工作原理 在每个在每个SYSCLKOUT脉冲后脉冲后PSC减减1,一直减到,一直减到0。在下一个在下一个SYSCLKOUT周期周期,TDDR加载新的除数值到加载新的除数值到PSC,并使,并使TIM减减1。重复前两步操作,即重复前两步操作,即PSC每次减到每次减到0后,后,TIM进行一次减进行一次减1操作,直到操作,直到TIM减为减为0在下一个在下一个SYSCLKOUT周期,将定时器中断(周期,将定时器中断(TINT)送到)送到CPU,和,和TOUT引脚。同引脚。同时时TIM装载来自装载来自PRD的新的定时的
14、新的定时 计数器值,并使计数器值,并使PSC再次减再次减1。每经过(每经过(TDDR+1)个)个SYSCLKOUT 周期,周期,TIM减减1。当。当PRD、TDDR或两者都不或两者都不为零时,为零时,定时器中断频率即定时器中断频率即TINT的频率(的频率(fTINT)为:)为:fCLKOUT1为为SYSCLKOUT的频率。的频率。定时器定时器)1()1(11PRDTDDRffCLKOUTTINT定时器定时器 计数器计数器TIMTIMTIM D15 D0 R/W-0TIMH D15 D0 R/W-0 周期寄存器周期寄存器PRDPRDPRD D15 D0 R/W-0PRDH D15 D0 R/W-
15、0定时器定时器 控制寄存器控制寄存器TCR0TCR0TIF TIEFREE D15 D14 D13D12 D11 D10 D9D6 D5 D4 D3 D0TRB保留保留SOFT保留保留R/W-0 R/W-0 R-0 R/W-0 R/W-0 R-0 R/W-0 R/W-0 R-0 TCR功能:功能:控制定时器模式控制定时器模式 重新加载定时器重新加载定时器 启动和停止定时器启动和停止定时器TSS保留保留 预定标寄存器预定标寄存器PSC/TDDRPSC/TDDRPSC D15 D8 D7 D0 R-0 R/W-0PSCH D15 D8 D7 D0 R-0 R/W-0TDDRTDDRH一、时钟及系统
16、控制一、时钟及系统控制看门狗及其应用看门狗及其应用 F2812的看门狗与的看门狗与240 x的基本相同,当的基本相同,当8位的看门狗计数位的看门狗计数器计数到最大值时,看门狗模块产生一个输出脉冲器计数到最大值时,看门狗模块产生一个输出脉冲(512个振荡个振荡器时钟宽度器时钟宽度)。如果不希望产生脉冲信号,用户需要屏蔽计数。如果不希望产生脉冲信号,用户需要屏蔽计数器,或用软件周期向看门狗复位控制寄存器写器,或用软件周期向看门狗复位控制寄存器写“0 x55+0 xAA,该寄存器能够使看门狗计数器清零。该寄存器能够使看门狗计数器清零。为了实现看门狗的各项功能,内部有为了实现看门狗的各项功能,内部有3
17、个功能寄存器个功能寄存器 看门狗功能框图看门狗功能框图192、看门狗及其应用u 8 8位的看门狗计数器(位的看门狗计数器(WDCNTRWDCNTR),当计数到最大值时看门狗模块产生),当计数到最大值时看门狗模块产生一个输出脉冲(一个输出脉冲(512512个个OSCCLKOSCCLK时钟宽度),并可以中断或复位时钟宽度),并可以中断或复位DSPDSP。u 如果不希望产生脉冲信号,用户可以屏蔽看门狗模块,或者通过软件周如果不希望产生脉冲信号,用户可以屏蔽看门狗模块,或者通过软件周期性的向看门狗复位寄存器(期性的向看门狗复位寄存器(WDKEYWDKEY)写)写“0 x55+0 xAA”0 x55+0
18、 xAA”,使得,使得WDCNTRWDCNTR清零。清零。应用说明:应用说明:u 使能看门狗或屏蔽看门狗模块?看门狗时钟倍率?使能看门狗或屏蔽看门狗模块?看门狗时钟倍率?WDCRWDCRu 希望看门狗中断(从低功耗模式唤醒)还是希望看门狗中断(从低功耗模式唤醒)还是复位复位(程序失控)?(程序失控)?SCSRSCSRu 程序运行过程程序运行过程周期性周期性的复位的复位WDCNTRWDCNTR。向。向WDKEYWDKEY 写写“0 x55+0 xAA”u 如果程序失控,则复位或中断如果程序失控,则复位或中断DSP;否则看门狗不影响程序执行。;否则看门狗不影响程序执行。提示:看门狗作为提高系统抗干
19、扰能力的措施之一,是一种补救措施。提示:看门狗作为提高系统抗干扰能力的措施之一,是一种补救措施。20看门狗模块框图看门狗模块看门狗模块21 看门狗控制寄存器WDCRu 写写1 1到到WDDISWDDIS,屏蔽看门狗模块;写,屏蔽看门狗模块;写0 0使能看门狗模块。使能看门狗模块。u WDCHKWDCHK(2020)必须写)必须写101101,其它值会引起,其它值会引起DSPDSP复位。复位。u WDPSWDPS(2020)配置看门狗计数时钟:)配置看门狗计数时钟:WDCLKWDCLKOSCCLK/512/OSCCLK/512/(1 16464)。)。u 看门狗中断状态标志位看门狗中断状态标志位
20、WDFLAGWDFLAG:读:读:1 1看门狗复位(看门狗复位(WDRSTWDRST);0;0器件复位器件复位 写:写:1 1将将WDFLAGWDFLAG清零;清零;0 0WDFLAGWDFLAG状态不变状态不变22使能/屏蔽看门狗模块/This function disables the watchdog timer.void DisableDog(void)EALLOW;SysCtrlRegs.WDCR=0 x0068;/WDDIS=1,WDCHK=101,EDIS;/WDPS=000(WDCLK=OSCCLK/512)/This function enables the watchdog
21、 timer.void EnableDog(void)EALLOW;SysCtrlRegs.WDCR=0 x0028;/WDDIS=0,WDCHK=101,EDIS;/WDPS=000(WDCLK=OSCCLK/512)23系统控制和状态寄存器SCSRu WDENINTWDENINT:1 1看门狗复位信号(看门狗复位信号(WDRSTWDRST)被屏蔽)被屏蔽,看门狗中断信号使能(看门狗中断信号使能(WDINTWDINT)0 0看门狗复位信号(看门狗复位信号(WDRSTWDRST)被使能)被使能,看门狗中断信号屏蔽(看门狗中断信号屏蔽(WDINTWDINT)u WDINTSWDINTS:看门狗中
22、断状态位,反映:看门狗中断状态位,反映WDINTWDINT的状态。的状态。u WDOVERRIDEWDOVERRIDE:1 1允许改变允许改变WDCRWDCR中的看门狗屏蔽位中的看门狗屏蔽位WDDISWDDIS;0 0不能改变不能改变WDDISWDDIS 清零后只有系统复位才允许改变该位的状态,清零后只有系统复位才允许改变该位的状态,用户可读取该位状态用户可读取该位状态。24看门狗复位寄存器WDKEYu 依次写依次写0 x550 x550 xAA0 xAA到到WDKEYWDKEY将使将使WDCNTRWDCNTR清零;清零;u 写其它任何值都会使看门狗复位;写其它任何值都会使看门狗复位;u 读该
23、寄存器将返回读该寄存器将返回WDCRWDCR寄存器的值。寄存器的值。/This function resets the watchdog timer.void KickDog(void)EALLOW;SysCtrlRegs.WDKEY=0 x0055;SysCtrlRegs.WDKEY=0 x00AA;EDIS;如果系统使能看门狗模块,需要在用户程序中定时执行KickDog函数,且定时器周期要小于看门狗计数器溢出周期。25看门狗计数寄存器WDCNTRu WDCNTRWDCNTR包含看门狗计数器的当前计数值(包含看门狗计数器的当前计数值(0 00 xFF0 xFF););u 如果计数器溢出,看门
24、狗产生中断或复位如果计数器溢出,看门狗产生中断或复位DSPDSP;u 如果向如果向WDKEYWDKEY写有效的组合写有效的组合(0 x55+0 xAA),将使计,将使计数器清零。数器清零。看门狗定时器的周期最大值:OSCCLK/512/(1-64)/256。26初始化系统控制/-This function initializes the System Control registers to a known state.程序功能:1、屏蔽看门狗模块2、配置PLLCR寄存器,设定SYSCLKOUT的频率 3、配置高速/低速外设时钟的预定标因子4、使能相应外设时钟 void InitSysCtrl
25、(void)/Disable the watchdog DisableDog();/Initialize the PLLCR to 0 xA InitPll(0 xA);/Initialize the peripheral clocks InitPeripheralClocks();实验时,注意使能所使用的外设模块时钟,否则无法读写相应的外设寄存器。PLLCR通常设为10,即CPU的时钟频率为30MHz5。一、时钟及系统控制一、时钟及系统控制看门狗及其应用看门狗及其应用 计数寄存器计数寄存器WDCNTRWDCNTRReserved D15 D8 D7 D0 R-0 R/W-0WDCNTR 复位
26、寄存器复位寄存器WDKEYWDKEYReserved D15 D8 D7 D0 R-0 R/W-0WDKEY 控制寄存器控制寄存器WDCRWDCRReserved D15 D8 R-0 R/W-0WDFLAG D7 D6 D5 D3 D2 D0 R/W-0 R/W-0WDPSWDDISWDCHK R-0二、二、程序地址的产生程序地址的产生 通常程序是顺序执行的,即在连续的程序存储器地址上通常程序是顺序执行的,即在连续的程序存储器地址上取出指令并执行。但有时程序需要转移到不连续的地址,然取出指令并执行。但有时程序需要转移到不连续的地址,然后再连续执行新地址处的指令。为此提供了转移、调用、重后再连
27、续执行新地址处的指令。为此提供了转移、调用、重复(循环)和中断指令。复(循环)和中断指令。在执行当前指令的同时,程序流要求处理器生成下一个在执行当前指令的同时,程序流要求处理器生成下一个指令的程序地址(顺序或非顺序的)。指令的程序地址(顺序或非顺序的)。程序控制:控制一个或多个指令块的执行次序。程序控制:控制一个或多个指令块的执行次序。二、二、程序地址的产生程序地址的产生 程序计数器程序计数器 PCPC:22bit,取指令时,对内部和外部程序存储器寻址。,取指令时,对内部和外部程序存储器寻址。程序地址寄存器程序地址寄存器 PAR:PAR:驱动程序地址总线,提供程序的读、写地址。驱动程序地址总线
28、,提供程序的读、写地址。堆栈堆栈STACKSTACK:16位宽位宽8级深,可保存级深,可保存8个返回地址个返回地址,也可将用作暂存存储器。也可将用作暂存存储器。微堆栈微堆栈 MSTACK:MSTACK:16位、位、1级深,保存一个返回地址。级深,保存一个返回地址。重复计数器重复计数器 RPTCRPTC:16位,与重复指令(位,与重复指令(RPT)一起,用来确定)一起,用来确定 RPT后面的一条指令重复执行多次。后面的一条指令重复执行多次。用到的硬件用到的硬件二、二、程序地址的产生程序地址的产生 顺序操作:顺序操作:程序的地址来源于程序的地址来源于PC程序计数器(程序地址程序计数器(程序地址+1
29、)空(哑)周期:空(哑)周期:程序的地址来源于程序的地址来源于PAR (程序地址(程序地址+1)从子程序返回:从子程序返回:程序的地址来源于栈顶(程序的地址来源于栈顶(TOS)从表传送或块传送返回:从表传送或块传送返回:程序的地址来源于微堆栈(程序的地址来源于微堆栈(MSTACK)转移到或调用指令中指定的地址:转移到或调用指令中指定的地址:程序的地址来源于转移或调用指程序的地址来源于转移或调用指 令。即利用程序读总线(令。即利用程序读总线(PRDB)的方式获取程序地址。)的方式获取程序地址。转移到或调用累加器低半部分指定的地址:转移到或调用累加器低半部分指定的地址:程序地址来源于累加程序地址来
30、源于累加 器的低半部分。即利用数据读总线(器的低半部分。即利用数据读总线(DRDB)的方式获取程序地址。)的方式获取程序地址。转移到中断服务程序:转移到中断服务程序:程序地址来源于中断矢量单元。即利用程序读总程序地址来源于中断矢量单元。即利用程序读总 线线 (PRDB)的方式获取程序地址。)的方式获取程序地址。程序地址产生的情况程序地址产生的情况二、二、程序地址的产生程序地址的产生 程序计数器程序计数器 PC PCPC中存放将被执行的下一条指令的地址。中存放将被执行的下一条指令的地址。有有5 5种方式加载种方式加载PCPC,从而适应连续和不连续的程序流程。,从而适应连续和不连续的程序流程。二、
31、二、程序地址的产生程序地址的产生 顺序执行顺序执行:若当前指令是一个字,则将若当前指令是一个字,则将PC+1加载到加载到PC 若当前指令是两个字,则将若当前指令是两个字,则将PC+2加载到加载到PC 分支(转移):分支(转移):转移指令后的长立即数直接加载到转移指令后的长立即数直接加载到PC 子程序调用和返回子程序调用和返回:调用指令调用指令 将将PC中下一条指令的地址压入堆栈,然后将调用指令后的长中下一条指令的地址压入堆栈,然后将调用指令后的长 立即数直接加载到立即数直接加载到PC 返回指令返回指令 将返回地址从堆栈中弹回将返回地址从堆栈中弹回PC软件或硬件中断:软件或硬件中断:将相应的中断
32、矢量地址装入将相应的中断矢量地址装入PC,在该矢量地址单元,通,在该矢量地址单元,通 常有一条转移指令,又将相应的中断服务程序的地址加载到常有一条转移指令,又将相应的中断服务程序的地址加载到PC 计算转移:计算转移:将累加器低将累加器低16位加载到位加载到PC 利用利用BACC或或CALA指令可实现计算指令可实现计算GOTO操作操作程序计数器程序计数器 PC二、二、程序地址的产生程序地址的产生 1616位宽、位宽、8 8级深级深 当调用子程序或发生中断时,程序地址产生逻辑利用当调用子程序或发生中断时,程序地址产生逻辑利用 该堆栈保存返回地址该堆栈保存返回地址 进入子程序或中断服务程序时,返回地
33、址自动装入该进入子程序或中断服务程序时,返回地址自动装入该 堆栈的栈顶;当子程序或中断服务程序完成时,返回堆栈的栈顶;当子程序或中断服务程序完成时,返回 指令将返回地址从栈顶传送到程序计数器。指令将返回地址从栈顶传送到程序计数器。访问堆栈的指令访问堆栈的指令 PUSH和和POP:针对累加器低:针对累加器低16位操作。位操作。PSHD和和POPD:当子程序或中断嵌套超过:当子程序或中断嵌套超过8级时可利用这两条指令在级时可利用这两条指令在 数据存储区中建立一个堆栈。数据存储区中建立一个堆栈。堆堆栈栈二、二、程序地址的产生程序地址的产生 堆堆栈栈例例子子二、二、程序地址的产生程序地址的产生 堆栈例
34、子堆栈例子二、二、程序地址的产生程序地址的产生 一级深、一级深、1616位宽,操作不可见,即无指令,只有程序位宽,操作不可见,即无指令,只有程序 地址产生逻辑才能够使用微堆栈。地址产生逻辑才能够使用微堆栈。程序地址产生逻辑在执行程序地址产生逻辑在执行BLDDBLDD、BLPDBLPD、MACMAC、MACDMACD、TBLR TBLR 和和TBLW TBLW 这些串(块)操作指令时利用微堆栈保这些串(块)操作指令时利用微堆栈保 存返回地址。存返回地址。微微堆堆栈栈二、二、程序地址的产生程序地址的产生,二、二、程序地址的产生程序地址的产生 流流水水线线技技术术 下面给出了一个四级深流水线操作图。
35、同时执行四条下面给出了一个四级深流水线操作图。同时执行四条 指令,但每一条指令处于不同的阶段指令,但每一条指令处于不同的阶段单字、单周期指令单字、单周期指令4级流水线操作级流水线操作 二、二、程序地址的产生程序地址的产生 流流水水线线技技术术 对对F2812每条指令都要经过每条指令都要经过8个独立的执行过程,个独立的执行过程,这这8个过程形成了指令流水线个过程形成了指令流水线(instruction pipeline)。在每一个给定的时间内,有在每一个给定的时间内,有8条指令被激活,每一指条指令被激活,每一指令处在执行过程中的不同阶段。并不是所有的指令令处在执行过程中的不同阶段。并不是所有的指
36、令都会同时发生读写操作,但是流水线的保护机制能都会同时发生读写操作,但是流水线的保护机制能够按照需要去延迟指令,以确保根据程序控制顺序够按照需要去延迟指令,以确保根据程序控制顺序对同一位置进行读写操作。对同一位置进行读写操作。转移仅使控制转换到新的地址单元转移仅使控制转换到新的地址单元 调用还要将返回地址保存到硬件堆栈的栈顶调用还要将返回地址保存到硬件堆栈的栈顶 返回指令将堆栈中的返回地址弹到程序计数器(返回指令将堆栈中的返回地址弹到程序计数器(PCPC)每个被调用的子程序或中断服务程序都以返回指令结束。每个被调用的子程序或中断服务程序都以返回指令结束。三、转移、调用和返回三、转移、调用和返回
37、 无条件指令无条件指令 无条件指令总是执行的。无条件指令总是执行的。当执行无条件转移当执行无条件转移 B B、BACCBACC;无条件调用;无条件调用CALLCALL、CALA CALA 指令指令 时,将指定的程序存储器的地址加载到时,将指定的程序存储器的地址加载到PC PC 并从该地址开始并从该地址开始 执行程序。执行程序。当执行无条件返回(当执行无条件返回(RETRET)指令时,将栈顶的值(返回地)指令时,将栈顶的值(返回地 址)加载到址)加载到PCPC,并从该地址继续执行程序。,并从该地址继续执行程序。LEQ ACC0累加器小于或等于累加器小于或等于0 GT ACC0 累加器大于累加器大
38、于0 GER ACC0累加器大于或等于累加器大于或等于0 C C=1 进位位置进位位置1 NC C=0 进位位清进位位清0 OV OV=1 检测到累加器溢出检测到累加器溢出 NOV OV=0 检测到累加器不溢出检测到累加器不溢出 BIO BOI为低为低 BIO引脚为低引脚为低 TC TC=1 测试测试/控制标志置控制标志置1 NTC TC=0 测试测试/控制标志置控制标志置0 操作数符号操作数符号 条条 件件 说说 明明 EQ ACC=0 累加器为累加器为0 NEQ ACC0 累加器不为累加器不为0 LT ACC0 累加器小于累加器小于0 重复指令(重复指令(RPT):):允许一条指令的重复次数为允许一条指令的重复次数为N+1次。次。N为为RPT指令的一个操作数。指令的一个操作数。原理:原理:在执行在执行RPT时,计数值时,计数值N 被装入重复计数器被装入重复计数器RPTC,然后,被重复的,然后,被重复的 指令每执行一次,指令每执行一次,RPTC就减就减1,直至,直至RPTC为为0。RPTC可作为可作为16位计数器,也可为位计数器,也可为8位计数器。位计数器。作用:作用:用在用在NORM(累加器内容归一化)、(累加器内容归一化)、MCAD(乘、累加和数据移动)(乘、累加和数据移动)SUBC(条件减)(条件减)重复指令重复指令三、转移、调用和返回三、转移、调用和返回