1一、时钟及系统控制二、程序地址产生三、转移、调用和返回四、重复指令第2章CPU内部结构与时钟系统第2章CPU内部结构与时钟系统主要介绍F2812的时钟、锁相环、看门狗和复位控制电路等。各种时钟和复位电路的内部结构:一、时钟及系统控制教材p41图2-4-1第2章CPU内部结构与时钟系统5第2章CPU内部结构与时钟系统HISPCPHISPCP一、时钟及系统控制HISPCP高速外设时钟设置寄存器PLLCRPLL控制寄存器LOSPCP慢速外设时钟设置寄存器SCSR系统控制和状态寄存器PCLKCR外设时钟控制寄存器WDCNTR看门狗计数寄存器LPMCR0低功耗模式控制寄存器0WDKEY看门狗复位key寄存器LPMCRl低功耗模式控制寄存器1WDCR看门狗控制寄存器第2章CPU内部结构与时钟系统▲外设时钟控制寄存器PCLKCR—0x0000701C,控制各种时针的工作状态,开启和禁止片内外设的时钟。时钟寄存器▲高低速外设时钟寄存器HISPCP/LOSPCP—0x0000701A/B,高//低速片内外设的时钟的设置▲系统控制和状态寄存器SCSR—0X00007022,看门狗开启和禁止中断,溢出位。保留D15D14D13D12D11D10D9D8ECANENCLKMCBSPENCLKSCIBENCLKSPIENCLKR-0R/W-0R-0R/W-0R/W-0ReservedD15D3D2D1D0WDINTSWDENINTWDOVERRIDER-0R-1R/W-0R/W1C-1一、时钟及系统控制SCIAENCLK保留保留保留ADCENCLK保留EVAENCLKEVBENENCLKD7D4D3D2D1D0R-0R/W-0R-0R/W-0R/W-0R/W-0R-0R/W-0ReservedD15D3D2D0HSPCK/LSPCKR-0R/W-010第2章CPU内部结构与时钟系统时钟模块提供两种操作模式:▲内部振荡器:如果使用内部振荡器,则必须在X1/XCLKIN和X2两个引脚之间连接一个石英晶体。▲外部时钟源:如果采用外部时钟,可以将输入的时钟信号直接接到X1/XCLKIN引脚上,而X2悬空。在这种情况下,不使用内部振荡器。一、时钟及系统控制晶体振荡器及锁相环当XPLLDIS为低电平,系统直接采用时钟或晶振直接作为系统时钟;当XPLLDIS为高电平,外部时钟经过PLL倍频后,为提供时钟。片内振荡器(OSC)X1/XCLKINX2预存器XF_PLLDISOSCCLK(PLL被禁止)XPLLDISXRSPLL旁路PLL/2014位PLL选择CLKIN(送至CPU)第2章CPU内部结构与时钟系统锁相环控制寄存器PLLCR——用于选择锁相环的工作模式和倍频系数定时器一、时钟及系统控制ReservedD15D4D3D0DIVR-0R/W-010▲TIM——16位的计数寄存器,重新装载PRD的值。▲PRD——16位周期寄存器。▲TCR——16位的定时器控制寄存器。▲PSC——16位的预定标寄存器,重新装载TDDR的值。▲TDDR——16位的分频寄存器。有3个32位CPU定时器(TIMER0/1/2):√定时器0用户可以在应用程序中使用。√定时器1和定时器2预留给实时操作系统使用(例如DSPBIOS)。第2章CPU内部结构与时钟系统定时器定时器功能框图一、时钟及系统控制工作过程:首先用32位计数寄存器(TIMH:TM)装载周期寄存器(PRDH:PRD)内部的值。计数寄存器根据SYSCLKOUT时钟递减计数。当计数寄存器等于0时,定时器中断输出产生一个中断脉冲。复位定时器重新装载SYSCLKOUTTCR.4(定时器起始状态)16位定时器分频TDDRH:TDDR16位预定标计数器PSCH:PSC借位32位周期寄存器PRDH:PRDTINT32位计数器TIMH:TIM借位第2章CPU内部结构与时钟系统定时器第2章CPU内部结构与时钟系统▲工作原理√在每个SYSCLKOUT脉冲后PSC减1,一直减到0。√在下一个SYSCLKOUT周期,TDDR加载新的除数值到PSC,并使TIM减1。√重复前两步操作,即PSC每次减到0后,TIM进行一次减1操作,直到TIM减为0√在下一个SYSCLKOUT周期,将定时器中断(TINT)送到CPU,和TOUT引脚。同时TIM装载来自PRD的新的定时计数器值,并使PSC再次减1。每经过(TDDR+1)个SYSCLKOUT周期,TIM减1。当PRD、TDDR或两者都不为零时,定时器中断频率即TINT的频率(fTINT)为:fCLKOUT1为SYSCLKOUT的频率。)1()1(11PRDTDDRffCLKOUTTINT定时器▲计数器——TIMTIMD15D0R/W-0TIMHD15D0R/W-0▲周期寄存器——PRDPRDD15D0R/W-0PRDHD15D0R/W-0第2章CPU内部结构与时钟系统定时器▲控制寄存器——TCR0TIFTIEFREED15D14D13~D12D11D10D9~D6D5D4D3~D0TRB保留SOFT保留R/W-0R/W-0R-0R/W-0R/W-0R-0R/W-0R/W-0R-0TCR功能:√控制定时器模式√重新加载定时器√启动和停止定时器TSS保留▲预定标寄存器——PSC/TDDRPSCD15D8D7D0R-0R/W-0PSCHD15D8D7D0R-0R/W-0TDDRTDDRH第2章CPU内部结构与时钟系统14定时器一、时钟及系统控制看门狗及其应用F2812的看门狗与240x的基本相同,当8位的看门狗计数器计数到最大值时,看门狗模块产生一个输出脉冲(512个振荡器时钟宽度)。如果不希望产生脉冲信号,用户需要屏蔽计数器,或用软件周期向看门狗复位控制寄存器写“0x55+0xAA,该寄存器能够使看门狗计数器清零。为了实现看门狗的各项功能,内部有3个功能寄存器第2章CPU内部结构与时钟系统看门狗功能框图WDCR(WDPS(2:0))WDCR(WDDIS)/512看门狗定标器8位看门狗计数器CLRWDCNTR(7:0)看门狗55+AA钥匙检测器WDKEY(7:0)通用输出脉冲(512OSCCLKs)SCSR(WDENINT)坏的WDCHK钥匙清除计数器OSCCLKWDCLKWDRSTWDRSTWDINT坏的钥匙好的钥匙110WDCR(WDCHK(2:0))XPPLDISXRS集电极开路第2章CPU内部结构与时钟系统一、时钟及系统控制看门狗及其应用▲计数寄存器——WDCNTRReservedD15D8D7D0R-0R/W-0WDCNTR▲复位寄存器——WDKEYReservedD15D8D7D0R-0R/W-0WDKEY▲控制寄存器——WDCRReservedD15D8R-0R/W-0WDFLAGD7D6D5D3D2D0R/W-0R/W-0WDPSWDDISWDCHKR-0第2章CPU内部结构与时钟系统二、程序地址的产生▲通常程序是顺序执行的,即在连续的程序存储器地址上取出指令并执行。但有时程序需要转移到不连续的地址,然后再连续执行新地址处的指令。为此提供了转移、调用、重复(循环)和中断指令。▲在执行当前指令的同时,程序流要求处理器生成下一个指令的程序地址(顺序或非顺序的)。程序控制:控制一个或多个指令块的执行次序。第2章CPU内部结构与时钟系统二、程序地址的产生第2章CPU内部结构与时钟系统▲程序计数器PC:22bit,取指令时,对内部和外部程序存储器寻址。▲程序地址寄存器PAR:驱动程序地址总线,提供程序的读、写地址。▲堆栈STACK:16位宽8级深,可保存8个返回地址,也可将用作暂存存储器。▲微堆栈MSTACK:16位、1级深,保存一个返回地址。▲重复计数器RPTC:16位,与重复指令(RPT)一起,用来确定RPT后面的一条指令重复执行多次。用到的硬件二、程序地址的产生第2章CPU内部结构与时钟系统▲顺序操作:程序的地址来源于PC程序计数器(程序地址+1)▲空(哑)周期:程序的地址来源于PAR(程序地址+1)▲从子程序返回:程序的地址来源于栈顶(TOS)▲从表传送或块传送返回:程序的地址来源于微堆栈(MSTACK)▲转移到或调用指令中指定的地址:程序的地址来源于转移或调用指令。即利用程序读总线(PRDB)的方式获取程序地址。▲转移到或调用累加器低半部分指定的地址:程序地址来源于累加器的低半部分。即利用数据读总线(DRDB)的方式获取程序地址。▲转移到中断服务程序:程序地址来源于中断矢量单元。即利用程序读总线(PRDB)的方式获取程序地址。程序地址产生的情况二、程序地址的产生第2章CPU内部结构与时钟系统程序计数器PC▲PC中存放将被执行的下一条指令的地址。▲有5种方式加载PC,从而适应连续和不连续的程序流程。二、程序地址的产生第2章CPU内部结构与时钟系统√顺序执行:若当前指令是一个字,则将PC+1加载到PC若当前指令是两个字,则将PC+2加载到PC√分支(转移):转移指令后的长立即数直接加载到PC√子程序调用和返回:调用指令——将PC中下一条指令的地址压入堆栈,然后将调用指令后的长立即数直接加载到PC返回指令——将返回地址从堆栈中弹回PC√软件或硬件中断:将相应的中断矢量地址装入PC,在该矢量地址单元,通常有一条转移指令,又将相应的中断服务程序的地址加载到PC√计算转移:将累加器低16位加载到PC利用BACC或CALA指令可实现计算GOTO操作程序计数器PC二、程序地址的产生第2章CPU内部结构与时钟系统▲16位宽、8级深▲当调用子程序或发生中断时,程序地址产生逻辑利用该堆栈保存返回地址▲进入子程序或中断服务程序时,返回地址自动装入该堆栈的栈顶;当子程序或中断服务程序完成时,返回指令将返回地址从栈顶传送到程序计数器。▲访问堆栈的指令√PUSH和POP:针对累加器低16位操作。√PSHD和POPD:当子程序或中断嵌套超过8级时可利用这两条指令在数据存储区中建立一个堆栈。堆栈二、程序地址的产生第2章CPU内部结构与时钟系统堆栈例子二、程序地址的产生第2章CPU内部结构与时钟系统堆栈例子二、程序地址的产生第2章CPU内部结构与时钟系统▲一级深、16位宽,操作不可见,即无指令,只有程序地址产生逻辑才能够使用微堆栈。▲程序地址产生逻辑在执行BLDD、BLPD、MAC、MACD、TBLR和TBLW这些串(块)操作指令时利用微堆栈保存返回地址。微堆栈二、程序地址的产生第2章CPU内部结构与时钟系统,二、程序地址的产生流水线技术▲下面给出了一个四级深流水线操作图。同时执行四条指令,但每一条指令处于不同的阶段单字、单周期指令4级流水线操作第2章CPU内部结构与时钟系统二、程序地址的产生流水线技术对F2812每条指令都要经过8个独立的执行过程,这8个过程形成了指令流水线(instructionpipeline)。在每一个给定的时间内,有8条指令被激活,每一指令处在执行过程中的不同阶段。并不是所有的指令都会同时发生读写操作,但是流水线的保护机制能够按照需要去延迟指令,以确保根据程序控制顺序对同一位置进行读写操作。第2章CPU内部结构与时钟系统▲转移仅使控制转换到新的地址单元▲调用还要将返回地址保存到硬件堆栈的栈顶▲返回指令将堆栈中的返回地址弹到程序计数器(PC)——每个被调用的子程序或中断服务程序都以返回指令结束。三、转移、调用和返回无条件指令▲无条件指令总是执行的。▲当执行无条件转移B、BACC;无条件调用CALL、CALA指令时,将指定的程序存储器的地址加载到PC并从该地址开始执行程序。▲当执行无条件返回(RET)指令时,将栈顶的值(返回地址)加载到PC,并从该地址继续执行程序。第2章CPU内部结构与时钟系统LEQACC≤0累加器小于或等于0GTACC>0累加器大于0GERACC≥0累加器大于或等于0CC=1进位位置1NCC=0进位位清0OVOV=1检测到累加器溢出NOVOV=0检测到累加器不溢出BIOBOI为低BIO引脚为低TCTC=1测试/控制标志置1NTCTC=0测试/控制标志置0操作数符号条