第二章 HC12系列MCU组成及工作原理.doc_第1页
第二章 HC12系列MCU组成及工作原理.doc_第2页
第二章 HC12系列MCU组成及工作原理.doc_第3页
第二章 HC12系列MCU组成及工作原理.doc_第4页
第二章 HC12系列MCU组成及工作原理.doc_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章 HCS12系列MCU组成及工作原理本章介绍MCU的组成,包括CPU的结构、工作原理、寄存器、内部存储器组织,同时介绍MCU内部的时钟产生及其分配逻辑、复位与中断的工作过程及其作用、运行模式与外部存贮器的管理等,尤其是各种特殊模式、多复位源、低速时钟等。HCS12系列各型号虽然核心部分相同,但集成外设不尽相同,本章及后续章节除特别说明外均指HCS12系列的DP256。2.1 HCS12系列MCU的结构组成及引脚分配HCS12的D子系列的器件引脚兼容,功能设置稍有不同。其中型号中数字9表示内部程序存储器为FLASH,否则为ROM。有80和112个管脚的两种封装形式,主要区别在于各型号的功能优势不同,比如MC9S12DP256B有5个CAN而MC9S12DB128B只有1个CAN 等。2.1.1 组成框图图2-1为MC9S12系列MCU的结构组成,图中左、右分别为核心与外设部分,左边如果去掉顶部的三种存储器,剩下的就是一个带有调试接口和运行监视功能的标准CPU的增强版,其中的A口、B口作为分时复用的地址数据总线,E口的部分口线作为控制总线,在系统扩展时使用;如果包括顶部的FLASHROM、RAM、EEPROM等存储器,完整的左半部分就是一个没有定时器和串行接口的简化的单片微控制器。右半部分含有八种外设,其中的ATD、ECT、SPI、BDLC、CAN等接口是许多单片机中所没有的。此外每一种接口还具有双重功能,即通用IO功能和特殊接口功能,在单片模式下,甚至A口、B口和E口的一部分也可以用作通用IO接口。如果所有接口工作在通用IO方式下,那么IO引脚将达到91个,这些双重功能的I/O口本身及其控制逻辑完全集成在MCU内部,其体积、功耗、可靠性、应用简单方便程度都与用户扩充的IO口有着重要区别。单线背景调试模式(BDM)和运行监视部分分别用于OCD方式开发支持和保证运行安全,其中BDM方式和时钟监视部分更是它的特色。 内部FLASH程序存储器容量达256KB,具有快速编程能力、灵活的保护与安全机制,有利于版权的保护,允许重写次数超过10000次,而且擦除和写入无需外加高电压。12KB的RAM存储器可以用作堆栈、保存中间结果及动态数据,甚至可以在调试时存放程序。4KB的EEPROM可以保存组态、设置信息等半永久数据。16位的CPUSl2内部拥有20位的算术逻辑单元,具有特殊的小数处理能力,具有16位乘法和32位除16位的整数乘除运算指令,内部设有指令队列,最小总线周期仅为125ns,基本存储空间管理能力达到256KB,IO与存储器统一编址,支持8位地址方式。特有的BDM调试方式无需仿真器,可以实现硬件断点、条件断点、在线调试等全部调试功能,外部只需简单的接口和相应的软件即可。内部集成了看门狗(系统运行监视)功能,可以保证程序跑飞后快速恢复,时钟监视更具特色,它可以监视系统时钟的运行异常,例如时钟频率下降等,两者结合等于为系统安全加了双保险。内部集成的外设除了常规的定时器、串行接口、并行接口以外,还包括ATD、ECT、SPI、BDLC、CAN等,其中ATD有8个10位模拟输入通道,内部具有多路器和采样保持,可以设定各种采样方式,可以采用中断方式工作。定时器模块拥有8个独立可编程通道,每个通道可以单独设置成输入捕捉输出比较方式,其ECT模块功能更强大,输入通道还设置了数字滤波器,并可以灵活设置。2个SCI和3个SPI集成的串行接口,工作方式及参数可以根据应用要求设置。内部8个8位PWM通道可以组合成4个16位通道,此外PWM时钟可高达8MHz,因此作为DA性能更好。BDLC和CAN,总线接口使系统可以直接接入相应的小型局域网,例如在交通工具中的应用。HCS12是继HC12系列之后推出的16位MCU,软件兼容HC11。与HC12相比,该系列在总线速度、时钟、存储器、接口等方面均有变化。 图2-1 图2-2 Pin Assignments in 112-pin LQFP for MC9S12DP256 图2-3 112-pin QFP Mechanical Dimensions (case no. 987)2.1.2 引脚分配HCS12系列MCU采用多达112个引脚的QFP封装,其中除了地址、数据、控制等三总线外,主要是I/O引脚,多数引脚具有两种或更多功能,图2-2所示为器件的引脚分配及图2-3所示112个引脚的QFP封装的机械尺寸。一、电源引脚电源引脚共7组,分别满足器件内不同部分的电源要求,如表2-1所示。(1)VDDX和VSSX(107,106)分别是数字电源和接地引脚,各使用1个引脚,在内部相连。为了满足信号的快速上升要求,一般要求电源能提供瞬时大电流,因此应使用高频旁路电容,并尽可能靠近MCU,具体旁路要求取决于MCU引脚的负载。(2)VDDR和VSSR分别是I/O电源和接地引脚,同样各使用1个引脚,在内部相连,为IO接口驱动部分供电,旁路电容的具体要求与VDDX和VSSX完全相同。(3)VDD1,2和VSS1,2是内部电源和接地引脚,为MCU提供电源。2.5V电源从单片机内部电压调节器获得。这些引脚无静态负载.如果VREGEN引脚接地,则内部电压调节器被关闭.(4) VDDA和VSSA分别是A/D转换器(ATD)专用电源和接地引脚,由于ATD内部含有模拟电路,因此采用单独供电,为模拟电源的单独旁路提供了方便。(5)VRH和VRL是ATD参考电源输入引脚。因为参考电源的精度和稳定性直接影响转换结果,因此这路电源要求品质较高,不能受数字部分的影响,但功率较小,单独供电既经济又容易实现。(6)VDDPLL和VSSPLL是锁相环电源和地,内部产生的2.5V提供锁相环电路。(7) VREGEN 内部电压调节器允许控制脚。(8) XFC 锁相环过滤电路引脚,避免此引脚产生锁相环电流泄漏。图2-4所示: 图2-4 PLL Loop Filter Connections 表2-1 电源引脚说明.二、信号引脚说明1XTAL和EXTALXTAL和EXTAL分别是晶体驱动输出和外部时钟输入引脚。EXTAL既可接晶体,也可接MOS兼容的时钟信号,驱动内部时钟产生电路。复位后,加到EXTAL引脚的时钟信号频率应该是E时钟频率期望值的2倍,器件中的所有时钟信号都源于该引脚输入的时钟。XTAL是晶体驱动输出,如EXTAL引脚外接时钟,该引脚必须悬空。XTAL输出信号一般是专为驱动单一晶体设计的,驱动另一个器件的EXTAL引脚需通过高输入阻抗缓冲器。在任何情况下,都应特别注意振荡器周围印刷电路版的布局。振荡器电路中所给出的负载电容包括所有的寄生分布电容,详见振荡器与时钟电路部分。2时钟输出(ECLK)ECLK是内部总线时钟的对外输出引脚,用于地址、数据总线分离,也用作定时基准。复位后其频率为晶体频率的一半。在普通单芯片模式下,复位后E时钟输出处于关闭状态以减小射频干扰(RFl),但需要时可以打开。在特殊单芯片模式下,复位后E时钟输出处于打开状态,但可以关闭。在特殊外设模式下,ECLK为输入引脚。当MCU处于停止模式时,包括E时钟在内的所有时钟都停止。MCU经过设置也可以与低速的外部存储器接口,在这种情况下,E时钟脉冲可以展宽。3复位()低有效的双向控制信号。将该引脚拉低,可将MCU初始化成默认状态,这时它是输入引脚:如果时钟监视器或COP看门狗电路检测到内部故障,该引脚作为开漏输出引脚对外指示这种状态。MCU进入复位是异步方式,结束复位是同步方式。这使得器件即使在时钟失效的情况下也可以进入真正的复位状态,同时又可以在复位结束后以同步方式开始运行。一次复位是内部还是外部引起的,是可以判别的。内部复位首先将该引脚拉低并保持16个周期,再过8个周期后,采样引脚电平。如果引脚回到了高电平(说明复位是由时钟监视器或COP看门狗电路引起的),那么CPU将取得时钟监视器或COP看门狗电路的复位矢量;如果引脚仍然是低电平,就确定为外部复位,将取得外部复位的中断矢量。在时钟监视器取COP看门狗电路不正常时,应将引脚的低电平保持至少32个周期,以确保取得外部复位矢量。4可屏蔽中断请求()可屏蔽外部中断输入引脚,可通过程序选择(中断控制寄存器,INTCR)下降沿或电平触发方式。复位后,默认为电平触发方式,同时在程序状态字中页石中断被屏蔽。该引脚恒为输入,任意时刻可读。在特殊模式下,为了支持EEPROM的检验,它可以用作EEPROM的外部编程电压Vpp输入引脚。普通的EEPROM编程和擦除周期中不需要外部编程电压。同时该引脚也用作Vpp输入,所以内部设有拉高电阻。5不可屏蔽中断()是不可屏蔽外部中断引脚,它提供了一种复位初始化后申请非屏蔽中断的手段。在复位阶段,程序状态字(CCR)中的X位被置1,在MCU通过软件允许以前,任何中断都被屏蔽。因为是电平触发的,它可以连接线或到一起的多个中断源。该引脚恒为输入,任意时刻可读。在复位期间或复位后,该引脚内部都具有有源上拉电阻。清除上拉控制寄存器PUCR中的PUPE位可以关闭上拉。经常用作掉电检测中断。当或连接多个中断源时(如果连接多个中断源,必须设为电平触发),每个中断源都必须采用开漏输出以避免输出竞争,此外各自还必须具备连锁机制,这样哪个中断源申请中断后能一直保持低电子,直到CPU识别并确认了该中断请求为止。如果中断请求线保持为低电平,那么一旦中断屏蔽位被清除,MCU将会立即识别为另一个中断,这种情况通常发生在刚刚从一个中断返回时。6模式选择输入引脚(SMODN、MODA及MODB)SMODN、MODA及MODB在复位期间的状态决定了MCU的运行模式。复位后,MODA、MODB可以设定为指令队列跟踪信号IPIPE0和IPIPE1,复位期间,它们还具有内部下拉。复位后,SMODN引脚可用作BKGD或TAGHI。7背景调试引脚(BKGD)BKGD采用特殊的自定时协议接收串行的背景调试命令,并发送命令执行结果。该引脚设定为输入时,内部设有有源上拉,但是无上拉开、关控制。8地址、数据总线(A15A0和D15D0)A15A0和D15D0分别是外部扩展地址数据总线,与通用I/O口A、B共享引脚。在单芯片模式下,可以用作I/O;在扩展模式下,用作外部总线。在16位扩展模式下,数据和地址总线分时复用,PA7PA0引脚分时用作A15A8和D15D8,PB7PB0引脚分时用作A7A0和D7DO。在8位扩展模式下,B口的引脚用作地址总线的低8位,A口供高8位地址总线和8位数据总线分时复用。在该模式下,处理16位数据需要两个连续的总线周期,第一个周期用于处理高位字节,下一个周期处理低位字节。PA7PA0引脚分时用作A15A8、D15D85和D7D0。各个地址引脚的状态应该在E时钟的上升沿锁存,要让外部器件获得最长的地址建立时间,应使用透明锁存器。9读写信号(R)R引脚在所有模式下都可用作IO,复位后为具有内部有源上拉的通用输入引脚。如果系统需要读写操作,可以通过E口设置寄存器(PEAR)中的RDWE位置位来启用该引脚的读写控制功能。该功能使能前无法实现外部写操作。10低位字节选通()在所有模式下都可用作I/O,复位后它是一个具有内部有源上拉的通用输入引脚。如果系统需要选通功能,可以通过E口设置寄存器(PEAR)中的LSTRE位置位来启用该引脚的选通控制功能。该引脚用于写操作,因此该功能使能前无法实现外部低位字节的写操作。该引脚在特殊扩展模式下也用作,并与分时占用引脚。11.指令队列状态输出(1PIPEl、IPIPE0)IPIPEl、IPIPE0分时输出指令队列状态。用于在外部重构指令队列。12数据总线允许信号(NOACC) NOACC与PE7复用,表示当前的总线周期是没有被使用的或是自由的,也就是说这个信号将表明任何时候CPU都没有使用总线。三、输入输出部分MCU内部集成了11个通用并行IO接口(有的功能不完整)以及SCI、PWM、ICOC、ATD、BDLCCAN等五种专用IO子系统。每个通用IO接口由68个外部引脚组成,分别与对应的专用于系统共享,但CAN接口的两个引脚一个仅用作CAN输出,另一个可以用作CAN输入或通用输入。整个IO系统物理上可分为三部分,即通用IO接口逻辑、专用IO子系统和外部引脚(器件手册中称为PAD),前两者位于MCU内部,可分别“雇佣”IO引脚来与外部打交道。当IO或专用子系统关闭时,它的内部逻辑依然部分或全部工作,只是暂时不对外。在封闭期间对它们进行的操作解禁后仍然可以看到效果,这一点应该高度重视。八个通用接口中的五个与专用子系统共享,复位后,所有相关引脚默认设置为通用IO输入,,即默认划归通用IO接口使用,当专用子系统激活后,所涉及到的相关引脚的使用权自动变更,不再归通用I/O接口使用,即专用子系统对外部引脚的使用具有更高的优先权。其余三个接口分别被地址数据总线和控制总线共享,但规则有所不同,这24个引脚的使用权取决于MCU的工作模式,例如在普通单芯片模式下,复位后全部默认归通用IO功能使用,而在扩展模式下,复位后自动归系统总线使用。表2-2说明了所有IO接口的基本情况,包括引脚号以及与其共享引脚的子系统。(1) A、B口。在扩展模式下为地址数据分时复用总线输入可选内部上拉,输出具有降功率驱动功能。PortA的第70位对应地址线的A15A8和数据线的 D15D8. PortB的第7 0位对应地址线的A7A0和数据线的 D7D0.当不用于扩展的单片模式时,A、B口作为通用IO,数据方向寄存器A (DDRA)和B(DDRB)决定每个引脚的方向.DDRA is not in the address map during expanded and peripheral modeoperation. Setting a bit in DDRA makes the corresponding bit in port A an output; clearing a bit in DDRA makes the corresponding bit in port A an input. The default reset state of DDRA is all zeroes. This register is not in the on-chip map in expanded and peripheral modes.(2) E口。用于总线控制和中断请求,余下其他引脚可作通用IO。输入可选内部上拉,输出具有降功率驱动功能。但PEl、PE0固定为输入,且PEl上拉一直有效。(3) M口。4个MSCAN口和1个BDLC模块共用多元M口,假如MSCAN和BDLC 没有使能的话就作为通用I/O使用。 (4) K口。K口关联着内部存储器扩展效法插脚,当不能仿效内部存储器其扩展时就作为通用I/O口。当MODE寄存器的EMK位置位时,这个寄存器(K口)不会出现在外围模式或扩展模式的寄存器分布图里。(5) AD口。ATD子系统输入或通用IO,复位后默认为通用IO输入引脚。ATD模块使能后,用作模拟输入,该口只具有输入功能,无相关的数据方向寄存器,无阻性输入负载,也没有降功率驱动功能。(6) P口。脉宽调制输出或通用IO,其中四个引脚为共享引脚。复位后为通用IO,PWM使能后,对应引脚通用IO功能禁止。该口具有内部上拉和降功率驱动功能。(7) T口。I/O与定时器和脉冲累加器子系统共享引脚,复位后为通用IO引脚,定时器功能使能后,用作输入捕捉或输出比较,或脉冲累加器输入。输入引脚内部具有上拉功能,输出引脚具有降功率驱动功能。(8) S口。I/O与串行通信共享,复位后默认为通用IO。SCI或SPI使能后,对应引脚的通用IO关闭。如果DDRS中的PUPSx位置1,相应的上拉器件将连接到每一个设定为通用输入的SD引脚。如果引脚设定为通用输出,上拉将从引脚上脱开,而不管各PUPSx位的状态。输入引脚内部具有上拉功能,输出引脚具有降功率驱动功能. (9)H口。P口习惯被用来作为中断的输入,也能用来作为输入输出管脚配置。中断通过信号的上升沿或下降沿来触发,假如相应的位被使能的话中断就产生了。每一个管脚都有独立的中断标记。 (10)J口。J口的0、1脚和H口功能一样,其6、7脚和第5个CAN 模块以及IIC总线界面子系统双向管脚共用。 表2-2 MC9S12DP256 Port A, B, E, K Description Summary (11)上拉、下拉和减少驱动口。MCU口能够被配置成内部上拉功能,输出引脚具有降功率驱动功能和射频干扰。如表2-3 所示 。 表2-3 Port A, B, E, K, PAD0&1 Pull-Up, Pull-Down and Reduced Drive Summary2.2 CPUSl2的结构与工作原理要深刻理解微处理器的工作原理,应该从内部结构入手,弄清楚一条指令在CPU内部的执行过程,了解数据在CPU中流动的路径、各个阶段驻留的位置,甚至每个时钟周期指令执行的具体动作(时序)。这样才能对微处理器的工作规律有个清楚的了解,才能有效地利用CPU,并设计出正确、高效的指令序列。一、CPUSl2的结构CPUSl2是高速的16位处理器单元,内设五个16位寄存器和一个8位的状态寄存器,内部采用全16位数据总线,外部数据总线8位16位可选,其结构如图2-3所示,主要包CPU寄存器、CPU控制电路和ALU算术逻辑运算单元及指令队列等四个部分。控制逻辑统一协调各部分逻辑,ALU部件完成指令所要求的算术逻辑运算等操作,寄存器用于存储操作数或运算结果。16位寄存器D、X、Y用于暂存数据或存储器寻址,SP为堆栈指针,PC为16位的程序指针,用于寻址程序代码,CCR主要反映运算结果特征,也控制CPU的行为。二、CPU内部寄存器CPUSl2的各寄存器功能各有侧重,应用范围不一,下面分别介绍各个寄存器的功能特点与使用。 (1)累加器D。其高位和低位字节又分别称为寄存器A和B,可分别作为8位寄存器访问,实际上D和A、B指向的是同一个寄存器,只是名字不同而己。A、B、D均称为累加器,与其他CPU类似。D、A、B主要用于算术运算,BCD调整指令只能使用累加器A,符号扩展指令只能将A或B扩展到16位寄存器D、X、Y、SP,8位乘法指令固定使用A、B,16位乘法指令固定使用D、Y寄存器,除法指令固定使用D、X、Y寄存器,位检测指令只针对A、B。A、B相加或相减结果一定保存在A,特殊的8位与16位相加的指令一定是B与x、Y相加。D不受复位影响。(2)变址寄存器x、Y。主要用于寻址操作,也用于临时存放数据及参与运算,只能按16位方式访问。由于CPUSl2的通用数据寄存器较少,因此在乘法运算中需要X参与,在除法运算中需要X、Y同时参与。仅有的两条特殊的8位与16位相加指令为B与x、Y相加,结果分别放在x、Y,实际上它们已经演变成有效地址加载指令。此外x、Y不参与其他的算术运算,例如没有X、Y与存储器字之间的加减法运算,也没有X、Y与A或D之间的加减法运算。X、Y内容不受复位影响。(3)堆栈指针SP。堆栈指针只能按照16位字访问。SP主要用于堆栈管理,服务于中断和子程序调用,一般不作它用,只有不影响其内容的前提下,有时替补作为变址寄存器使用,但一般不参与运算,惟一的例外是在符号扩展指令中用作目的寄存器,此外还有自身加减1指令。影响SP值的指令有加载、目的操作数为SP的寄存器传送指令、压栈、退栈、加减1、中断、子程序调用等。使用堆栈前,用户程序必须对SP进行初始化设置。SP的内容复位后不受影响。(4)程序计数器PC。16位的程序指针,用户可以读取,但不能直接写入。因为要自动寻址复位矢量,复位后PC自动回到默认状态。PC是特殊的寄存器,它决定CPU的取指地址,因此不能挪作它用,但可以像SP一样,作为变址寄存器使用,只是不能用在自动增减地址的变址寻址操作中。PC主要是直接为CPU服务,对于用户程序宋将,PC不能参与任何运算,惟一的作用是辅助进行变址寻址操作。(5)程序状态字节CCR。8位寄存器,如下所示。其内容分三部分,一是反映上一条指令执行结果特征的H、N、Z、V、C等五位,二是中断屏蔽位X、I,三是STOP指令控制位S。后面三位通常由软件设定,控制CPU的行为。其中X和I复位后自动回到默认状态“1”以屏蔽系统中断。CCR是真正的专用寄存器,除C、H位之外,其他各位不参与任何运算。其中各位的作用简要说明如下,在指令系统一章将详细介绍各个位在指令执行中的作用。S:STOP指令禁止位,该位置1将禁止CPU执行STOP指令。X:中断屏蔽位,该位置1将屏蔽来自引脚的中断请求,复位默认值为1。I:中断屏蔽位,该位置1将屏蔽所有的可屏蔽中断源,复位默认值为1。H:辅助进位,该位为累加器A的bit3向bit4进位,仅用于BCD操作。N:符号位,当运算结果为负时,该位置1。N位实际上是运算结果最高位的拷贝。Z:0标志,当运算结果为0时,该位置1。V:2补码溢出标志,当运算结果出现2补码溢出时,该位置1。C:进位借位标志,当加法运算产生进位或者减法运算产生借位时,该位置1。移位操作或者直接针对C的指令也改变C的值。三、指令队列为了提高执行速度,CPUSl2内置了两级的指令队列,每一级宽度为1个字。队列前端还设置了一个保持锁存器,宽度也是1个字。取指操作时,指令代码不直接进入解码部分,而是进入指令队列,如果队列不能行进即代码不能进入指令队列,则暂时寄存在保持锁存器中,当队列行进时再正式进入队列。CPU执行的所有指令代码都来自指令队列,一条指令正在执行时,指令队列可以补充后续代码,从而实现了取指与指令执行操作的并行,加快了整个CPU的运行速度。后续代码的补充过程包括总线读操作和队列的行进;当队首(第二级)的指令CPU使用后,第一级的指令字移动到第二级,保持锁存器或者数据总线缓冲器的内容再移动到第一级。每次取指操作CPU从存储器提取一个规范字,如果指令代码长度为双数,CPU每次消化队列中的一个或两个级的内容,若为单数,就可能消化位于队列第二级的高位或者低位字节,分别对应偶地址和奇地址。因为指令队列的存在,使得同一条指令在不同的条件下执行时间可能不同,如果在PC连续增加过程中执行,时间较短,如果是8G转后的第一条指令,就必然包含取指时间。此外在外部总线观察到的指令代码流与CPU正在执行的代码有一个时间差,即总线上观察到的指令在几个周期后才能被CPU执行。必须指出,指令队列只能使取指与指令执行同时进行,但是并不能使两条或更多的指令同时执行。此外在发生跳转时,指令队列自动清除,然后重新装填。尽管指令代码长度并非全是双数字节,但指令队列的装填总是按字进行。四、指令执行过程与运算能力CPU运行过程中,不断进行取指、运算、结果存储等工作,取指操作通过指令队列进行,结果存储则通过内部总线直接送到目的地。具体过程如下:首先将PC所指的指令代码不断读入指令队列,并从队首进入执行部分进行分析,控制逻辑根据指令要求进行操作,如需进行运算,则送入算术逻辑单元ALU,运算结果送到目的地并据以设置CCR中的标志位。CPUSl2支持加、减、乘、除运算,并支持浮点除法运算及其他各种逻辑运算,甚至模糊逻辑运算等。外部存储器或内部寄存器既可以提供参与运算的源操作数也可以保存运算结果。但CPUSl2对寄存器与对存储器的访问是不同的。对内部寄存器的访问既可节省时间又可以缩短指令周期。因此运算过程中应优先使用寄存器,此外内部RAM的访问不分规则字与非规则字,均为一个总线周期,因此可能情况下也应该优先使用。CPU内部寄存器不占用地址空间,这与内部资源控制用的所谓寄存器不同,后者实际上是64K地址空间中的一个个单元,因此访问速度等也不同。CPUSl2具有算术运算指令,能进行加减乘除运算,但与通用的CPU仍有所不同,它的运算指令具有一定限制,例如加法指令,除了A+B、B+X、B+Y三条寄存器加法指令之外,只能进行A、B、D与立即数、内存字节或字的加法运算,没有16位的寄存器加法指令。减法指令中只有AB一条为寄存器减法指令,其余均为A、B、D与立即数、内存字节或字的减法运算。此外乘除运算必须使用D、x、Y三个寄存器。寄存器比较指令也只有CBA(A与B比较)一条,其他均为寄存器与内存比较指令。求补指令只能针对立即数、内存字节或累加器A、B,而BCD调控指令更只能针对累加器A。逻辑运算只能使用累加器A、B,但只能与立即数或内存字节之间进行,不能在各寄存器之间进行。CCR寄存器逻辑运算的操作数更要求必须是立即数,且只有与或两种运算。可见CPUSl2的16位算术运算指令有限。尽管如此,CPUSl2在单片微控制器中仍然是十分优秀的,尤其在模糊运算、查表插值等方面的强有力的支持使得许多应用中可以简化代码,增强程序可读性。五、CPUl2的堆栈管理规则及使用堆栈是按照后进先出原则组织的一个存储区,CPUSl2使用堆栈指针SP管理堆栈。SP为16位寄存器,因此堆栈可以开在256KB内存空间的任何区间。复位不改变SP的值,因此应用程序必须在开始部分对堆栈指针进行初始化,使其指向一个有效的RAM区。CPUSl2的堆栈是向下生成的,将一个字节压人堆栈时,堆栈指针自动减1,从堆栈中弹出一个字节时,堆栈指针自动加1,若操作数为双字节则SP每次加减2。SP总是指向最后进入堆栈的一个字节,这一般称为实栈顶,因此压栈操作时先调整堆栈指针,后保存数据,出栈时正相反。初始化时一般将SP指向与栈底相邻的单元,它不属于堆栈,因此表示堆栈为空。堆栈主要用于子程序调用、中断和临时保存数据。当CPUSl2执行子程序调用指令(JSR、BSR或CALL)时,将程序计数器PC的内容(如果是CALL指令还包括PPAGE寄存器)压入堆栈,低位在先。当从子程序返回时(RTS),预先压入堆栈的地址弹出至PC中(如果是RTC指令还包括PPAGE寄存器),恢复主程序的运行。CPU响应中断时,一般在当前指令执行结束后(个别模糊指令除外),CPUSl2将下一条指令的地址(返回地址)及所有寄存器的内容压入堆栈,然后转去执行中断服务程序,这可以简化中断服务程序。在中断服务程序末尾,必须安排中断返回指令(RTl),恢复现场,将堆栈中保存的现场信息依次弹出到各个CPU寄存器和程序计数器PC中,原程序从中断的下一条指令处恢复运行,对于个别模糊指令,继续被中断的指令本身,详见指令系统部分。堆栈的其他用途是保存CPU内部寄存器的值或向子程序传递参数。例如某子程序使用A和x,进入子程序后,首先将A和X的内容压入堆栈,然后随意使用A、x,子程序退出前,将A、x的内容从堆栈中恢复,这样在子程序调用前后,A和x的内容保持不变,不影响主程序的运行。如果子程序需要参数,那么调用前可以将参数按照要求依次压入堆栈,子程序到堆栈的指定位置取得参数,从子程序返回后,主程序将参数从堆栈中清除,许多高级语言采用这种机制向子程序传递参数。进行递归程序设计时,必须使用堆栈,如果递归深度较大,堆栈的使用量相当大,因此这时必须分配足够的堆栈空间。CPUl2的堆栈操作指令仅限于在寄存器和堆栈之间的数据传送,这类指令隐含使用堆栈指针SP进行间接寻址,另一个操作数必须是寄存器(A、B、CCR、D、x和Y),不能是立即数或存储器操作数。通过指令直接进行的堆栈操作只有两种,一是入栈即寄存器内容送入堆栈,另一个是出栈即堆栈内容送入寄存器,操作过程中CPUSl2自动调整堆栈指针SP。CPUSl2的堆栈允许混合使用字节或字进行操作,但是压入指令和弹出指令要成对地使用,否则会产生混乱。堆栈本质上就是一个存储区,因此也可以通过其他寻址方式直接访问堆栈内的数据,许多调试系统甚至操作系统经常这么做。要达到这个目的,可以故意执行一条出栈指令,例如PULA或PULD,将栈顶的一个字节或一个字送到A、D寄存器中使用。当然也可以使用PSHA、PSHD等指令将修改后的寄存器内容压入堆栈,甚至为RTS、RTC、RTI等指令制造伪返回现场,使程序返回到指定的地址或使寄存器恢复成指定的数值。此外还可以不将堆栈内容取出而直接在原地操作,最简单的实现方案是通过SP加偏移量的间接寻址对堆栈的内容进行各种操作,但是必须确切了解堆栈内容的意义,否则可能造成灾难性的后果,使系统崩溃或出现无法预料的错误。堆栈操作指令方便了程序设计,但中断、子程序调用等的堆栈操作是隐含自动进行的,堆栈可能在程序没有干预的情况下自动向下延伸,因此在RAM区安排堆栈空间时,应该避开其他工作单元,并保证SP所指向的单元以下仍有足够的空闲单元,具体数量可以根据程序对堆栈的使用来估计,因为难以准确计算,所以必须留有一定余量。此外某些调试系统也在暗中使用用户堆栈,这时可以根据试验结果适当加大余量。2.3存储器组织存储器是应用系统的基本组成部分之一,一个CPU可寻址的存储空间多少、访问速度快慢直接影响系统性能。HCS12系列集成了三种存储器,并允许外扩程序、数据存储器或I/O接口,可以处理外部与内部资源的重叠,访问速度与内部存储器一致。个别型号支持外扩1MB的存储器,采用分页机制寻址,如图2-6所示。 2.3.1 存储空间分配HCS12采用I/O与存储器统一编址方式,总的地址空间为256KB,内部集成外设的管理接口(也称为寄存器)也占用存储空间,因此实际可用的程序和数据空间不足256KB。在这256KB标准地址空间中,MCU已经安排了寄存器、RAM、EEPROM和FLASHROM等资源 ,占据空间分别为1KB、12KB、4KB和256KB,复位后它们均默认占据特定的地址空间,如图2-5所示。以后除另有说明外,所给出的资源地址均为复位默认值。通过映像寄存器INITRG、INITRM和INITEE,在程序运行时可将内部资源重新映射到其他位置,但在普通模式下,它们只允许写入一次,因此即便是准备让它们工作在默认的位置,也应该在程序运行初期将这些资源定位,即进行一次指定操作,使这些寄存器不能再接受写操作,从而避免以后误操作。对映像寄存器进行设置,要等到写操作后的第一和第二个周期之间才真正发挥作用。 MCU为了屏蔽误操作,要求相应的写指令后的下一条指令必须是空操作(NOP)。如果存储分配出现地址重叠,MCU内部的优先级逻辑会自动屏蔽级别较低的资源,保留级别最高的资源,例如寄存器区就会覆盖任何与它重叠的资源,无论RAM、FLASHROM或EEPROM,与寄存器区重叠部分将不可见。若BDM激活,BDMROM拥有最高优先级,但它与寄存器区不可能出现冲突,因为BDM ROM位于内存的最后256个字节,即使寄存器区映射到内存末尾,也只占用最后2K的前512字节。表2-4所示为存储分配优先级。表2-4 存储分配优先级优 先 级资 源 1 (最 高)BDM ROM (如果已经激活) 2寄存器区 3RAM 4EEPROM 5FLASH/ROM 6 (最 低)外部扩展存储器图2-5 MC9S12DP256 Memory Map after reset 图2-6 MC9S12DP256 Memory PagingMCU在扩展模式下支持外部资源扩展,但内、外部资源统一编址,总的存储空间仍然为256KB,没有被内部资源占用的地址空间即默认为外部扩展空间。实际上MCU也允许扩展多达256KB的外部资源,但是与内部资源重叠部分将不可见,因此无法访问,其余范围可以正常使用。应该指出,HCS12默认的总线周期仅为18s,比常见的单片微控制器要短很多,因此有条件扩展高速的外部资源。对于普通速度的外部资源,MCU也可通过延长E时钟周期来与之匹配,详见时序部分。一、 寄存器区映射寄存器寄存器区大小为1KB,复位默认首地址为$0000,运行时可重新映射到位于标准64KB地址空间的前32KB任何2KB边界处。映射是通过修改寄存器区映射寄存器(INITRG)中的5个二进制位来实现的。其中各位意义如下:REGl5REGll:寄存器区定位控制位,指定寄存器区16位首地址的最高5位。MMSWAI:存储映射禁止位,该位控制等待模式下存储映射接口是否开放。0:等待模式下禁止访问存储映射接口。1:等待模式下存储映射接口继续开放。二、 RAM映射寄存器RAM区大小为12KB,复位默认首地址为$1000,运行时可重新映射到任何2KB边界处,但实际使用前面的12KB。映射是通过修改RAM映射寄存器(INITRM)中的前5个二进制位来实现的。其中的RAMl5RAMll为RAM定位控制位,指定RAM区16位首地址的最高5位。 三、 EEPROM映射寄存器MCU内部集成了4KB的EEPROM,复位默认首地址为$0000,运行时可重新映射到任何4K边界处,但实际使用前面的4KB。映射是通过修改EEPROM映射寄存器(INITEE)中的前4个二进制位来实现的,最后一位EEON控制EEPROM是否激活。其中各位意义如下:EEl5-EEl2:内部EEPROM定位控制位,指定EEPROM区16位首地址的最高4位。在普通模式下只允许写入一次,特殊模式下可任意进行写操作。EEON:EEPROM允许位,它决定是否允许对EEPROM读操作,但不影响编程、擦除操作以及对EEPROM控制寄存器的访问。在单芯片模式下该位恒为1,在扩展及外设模式下允许写操作。0:EEPROM关闭。1:EEPROM允许。四、 综合映射控制寄存器该寄存器分为三个部分,前五位分别控制寄存器跟随区及外部扩展存储器的访问方式,最后两位决定FLASHROM的映射地址及使能。256KB的FLASHROM的复位默认首地址为$8000,即256KB空间的高半部分,运行时可重新映射到低半部分,即$0000。映射通过寄存器MISC实现,其最低位ROMON控制FLASH是否激活,如表2-7所示。当各资源地址冲突时,寄存器区、RAM和EEPROM拥有比FLASH更高的优先级,不受影响,重叠部分的FLASH不可见。MISC中的各位意义如下:EDRF:寄存器跟随区8位总线控制位,位于寄存器区之后与之相邻的51字节空间称为寄存器跟随区,NDRF设定MCU是否以8位总线规则访问该区。在8位扩展模式、单芯片及外设模式下,NDRF无意义。0:访问寄存器跟随区时,反映16位扩展数据总线特征。1:访问寄存器跟随区时,展示8位扩展数据总线特征。RFSTRl、RFSTR0:寄存器跟随区周期延长控制位,这两位决定访问寄存器跟随区时总线周期延长的时钟数,其作用效果与NDRF状态无关。在单芯片模式以及外设模式下,这两位无意义。EXSTRI、EXSTR0:外部总线周期延长控制位,这两位控制访问外部地址空间时总线周期延长的时钟数。在单芯片模式以及外设模式下,这两位无意义。MAPROM:FLASHROM映射控制位。该位决定片内FLASHROM的位置。在扩展模式,该位复位后为0;在单芯片模式,该位复位后为1。如果ROMON=0(参看下面 ROMON部分),该位无意义。0:FLASHROM定位于$0000$7FFF。1:FLASHROM定位于$8000$FFFF。ROMON:FLASHROM允许位。在扩展模式下,复位后ROMON为O,在单芯片模式下,复位后ROMON为1。0:FLASHROM关闭。1:FLASHROM允许。另外若进行存储扩展,芯片必须工作在扩展模式下。2.3.2 页面机制HCS12系列部分型号支持多达4MB的扩展程序存储器和1MB的数据存储器,64KB以外的扩展存储区,采用页面机制访问,即通过扩展专用指令CALL调用其中的子程序,然后通过RTC指令返回。CPUl2执行CALL时,首先在堆栈中保存返回地址和当前页号(位于PPAGE页号寄存器中),然后将目标页号送到PPAGE,再将目标地址送到PC,从而实现转子操作。遇到RTC指令后,先从堆栈取得保存的页号,送到PPAGE,再取得返回地址送到PC,回到原地继续执行。其他型号有的也支持数据存储器的扩展,甚至支持更多存储器的扩展。详细情况参见有关器件的手册。2.4 寄存器区寄存器区占用2K内存空间,实际使用不足512字节,复位后的默认首地址为$0000。其中的寄存器实际上是集成在MCU内部的IO接口,它们采用存储映射方式,占用标准地址空间,因此与真正的寄存器是有区别的,事实上,CPUl2内部真正的寄存器只有D(A、B)、X、Y、SP、PC、CCR等,它们不需要、也不可能通过间接寻址去访问,涉及到它们的指令往往代码长度短、执行速度快。寄存器区的各个单元负责对集成外设的管理、工作模式设置,乃至对MCU本身进行设置与管理。由于HSC12结构复杂,集成外设多,因此寄存器数量多,而且功能及使用繁杂,因此本书在这里仅列出所有寄存器的清单,具体功能及使用在有关章节详细介绍。表2-5给出了HCS12寄存器区一览表。在某些模式下,有些资源无法发挥作用,这时CPU自动予以屏蔽以避免冲突,包括:(1) 以下寄存器在外设及扩展两种模式下均被屏蔽:口A数据、方向寄存器PORTA、DDRA;口B数据、方向寄存器PORTB、DDRB。(2) 以下寄存器在外设模式下被屏蔽,在扩展模式下若E口仿真位EME=1,也被屏蔽:口E数据、方向寄存器PORTE、DDRE。(3) 以下寄存器在外设模式下被屏蔽:模式寄存器MODE;上拉控制寄存器PUCR降功率驱动控制寄存器RDRIV。 2.5 振荡器与时钟电路任何CPU的核心都离不开时序逻辑电路,没有时钟脉冲无法运行。在单片微控制器中,为了简化外围电路,普遍在内部集成振荡电路,HCS12也不例外,这里主要介绍其特有的时钟系统及其工作过程。2.5.1 CRG模块HCS12内部接口丰富,支持多种工作模式,而且集成了看门狗、时钟监视器等电路,这些都要求比较复杂的时钟脉冲信号,因此它的时钟产生模块(CGM)比较庞大、复杂,其组成框图如图2-7所示,包括以下部分;(1) 时钟选择与生成电路;(2) 低速时钟分频器;(3) 复位与停止过程的定时与控制。由于定时器、通信接口等的时钟信号生成是由接口部分与CGM模块共同完成的,很难明确划归到某一部分,因此本节后面只简单介绍相应的时钟分频链,详细说明见有关接口部分。表2-5 MC9S12DP256 Register Map 图2-7 Block diagram of CRG and OSC 2.5.2 时钟振荡器HCS12内部集成了完整的节能振荡电路,XTAL和EXTAL分别为振荡器的输出和输入引脚,外接石英晶体即可构成振荡器,如图2-8所示。XTAL是专为驱动单一晶体设计的,如果通过高阻缓冲器隔离驱动,该引脚也可以同时驱动另一个MCU的EXTAL引脚,这时两器件相当于共用同一个晶体及振荡器,具有完全相同的时钟频率和运行速度,在某些情况下可以满足一些特殊要求。如果将XTAL引脚悬空,内部振荡器停止工作,这时必须通过EXTAL引入CMOS兼容的时钟信号,其频率要求在016MHz之间。MCU内部的所有时钟信号都来源于EXTAL引脚。在任何情况下,都应特别注意振荡器周围印刷电路版的布局。图2-6中振荡器电路中所给出的负载电容包括所有的寄生分布电容。图2-9为外部时钟信号接法。 图2-8 Common Crystal Connections 图2-9 External Oscillator Connections2.5.3 内部时钟生成与分配EXTAL引脚的时钟信号在内部首先进行2分频,然后分别通过P、E时钟和T时钟产生电路生成P、E和T时钟,T时钟包括相位依次相差90度的T1、T2、T3和T4等四路,供CPU使用,P、E时钟频率相同,相位相差90度,分别分为两路,一路用于BDLC及定时器模块,另一路时钟频率可以根据需要调节,用于各路总线及BDM、SPI、SCI、ATD、RTI、COP、PWM、FEE、EE和RAM等模块。MCU进入等待模式后,P、E时钟所分两路中,用来驱动BDLC和定时器的一路(GBT时钟)仍然保持在晶振频率的12,另一路称为G时钟,经过分频器降低频率后,驱动除BDLC和定时器外的所有片内外设。为了在等待模式下降低功耗,MCU设置了低速时钟分频器,它利用计数器对P(E)时钟进行2 n (n=07)分频,从而产生较低频率的总线时钟。当低速控制寄存器为。或者器件不 在等待模式时,该分频器关闭,P、E时钟保持在晶振频率的12。由于时钟监视器直接监视EXTAL引脚的原始时钟,因此通过低速分频器降低MCU内部的一些子系统甚至CPU本身的时钟频率不会导致时钟监视器动作,即使频率降低后时钟周期长于时钟监视器触发时间也一样。需要说明的是,早期的产品不支持时钟分频器,其寄存器$00E0保留。其中包括G96P、G86WH91F,它们虽然属于HC912B32系列,但不支持这种功能。H54T、J38MJ15G分别属于12BE32HC(9)12BC32系列,它们也不支持时钟分频器特性。HCS12的E时钟是一个特殊的信号,它作为总线时钟,同时输出到外部PE4引脚,作为地址锁存允许信号(通常称为ALE信号),用于地址、数据总线的分离,也是整个系统的定时基准,其频率固定为晶体频率的12,对于16MHz晶体,其频率为8MHz。当MCU连接低速的外部存储器时,经过设置可以将E时钟脉冲展宽。在普通单芯片模式下,复位后E时钟输出处于关闭状态以减小射频干扰(RFI),需要时可以通过程序打开。在特殊单芯片

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论