基于HCS12的嵌入式系统设计
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第2章 Freescale HCS12和HCS12X系列单片机简介

目前世界上的单片机或者微控制器的种类繁多,单片机供应商也有很多,例如Freescale、ATMEL、NXP、ST、Microchip、Infineon、TI、NEC等,其中Freescale(飞思卡尔)公司的8位、16位和32位单片机性能稳定、品种齐全,针对不同的应用领域可以选择不同性能、型号的单片机。本章着重介绍Freescale公司的HCS12系列16位单片机的概况,并和HCS12X系列16位双核单片机进行简单比较,最后给出HCS12系列单片机最小系统中各部分的设计方案。

2.1 HCS12系列单片机概述

Freescale公司的16位单片机主要分为HC12系列、HCS12系列以及HCS12X系列。其中HC12系列单片机是在HC11系列的基础上开发的,其核心是16位高速CPU12核,支持HC11系列所有指令、寻址方式和操作模式。HCS12系列单片机以速度更快的CPU12内核为核心,简称为S12系列。相比于HC12的8 MHz总线速度,典型的S12总线速度可以达到25 MHz。

2.1.1 HCS12系列单片机的命名规则

Freescale公司的单片机型号众多,初次接触的用户面对众多型号,可能不知该如何选择。首先简单介绍一下HCS12系列单片机的命名规则,以MC9S12DG128为例进行介绍。

① 表示质量认定状态。MC表示完全合格产品,XC表示初始产品,PC表示预测试产品。

②表示存储器类型。无表示片内带ROM或者片内没有程序存储器,7表示片内带EPROM或一次可编程ROM(OTP ROM),8表示片内带EEPROM,9表示片内带Flash存储器。

③ 表示内核类型。S12表示16位单片机,S08表示8位单片机。

④ 表示系列。DG表示为D系列产品。

⑤ 表示存储空间大小及版本。128表示128 KB的Flash存储空间,B为Flash版本。

⑥ 表示工作温度范围。无表示工作温度范围是0℃~70℃,C表示工作温度范围是-40℃~85℃,V表示工作温度范围是-40℃~105℃,M表示工作温度范围是-40℃~125℃。

⑦ 表示封装形式。FU表示80引脚QFP封装,PV表示112引脚LQFP封装。

⑧ 表示无铅标志。E表示芯片生产过程无铅。

2.1.2 HCS12系列单片机简介

Freescale公司HCS12系列单片机分为很多子系列,各个子系列产品具有不同的特点和应用领域。表2.1列举了HCS12各个子系列部分单片机的型号、主要特点、资源等基本情况介绍。

表2.1 HCS12系列单片机汇总表

2.2 HCS12X系列单片机概述

2.2.1 HCS12X系列单片机主要特点

Freescale公司于2005年推出HCS12X系列单片机(也称为MCU),该系列是HCS12系列的增强型产品,基于S12 CPU内核,可以达到25 MHz的HCS12的2~5倍的性能。S12X系列增加了172条指令,可以执行32位运算,总线频率最高可达40 MHz,并且改进了中断处理能力。

S12X系列单片机采用复杂指令集计算机(CISC)架构,集成了中断控制器,具有丰富的寻址方式。中断有7个优先级,并且内核支持优先级的的调度,最多可以有117个中断源。

S12X系列单片机的最大特点是增加了一个并行处理的外围协处理器XGATE模块,它是一个独立于主处理器(S12XD)的可编程RISC内核。XGATE可作为一个高效的DMA控制器使用,能够自主地实现外设与RAM之间的高速数据传输,并在数据传送过程中灵活进行数据处理;XGATE也可作为一个单独的算法单元完成运算功能,如通信协议的实现;XGATE还可作为虚拟外设使用,如使用通用I/O口模拟串行通信口功能,或对简单的外设通过软件包装实现功能强大的个性化外设功能等。集成XGATE的目的就是在日益复杂的嵌入式系统中,减轻S12XD主处理器的负担,以增强系统的数据吞吐能力和应用功能设计的灵活性。

S12X系列单片机与S12系列单片机的主要区别如表2.2所示。

表2.2 S12X系列单片机与S12系列单片机的主要区别

XGATE模块大大提高了MCU处理应用程序的能力。通过承担中断源处理功能,从而降低了主处理器的负担,使得中断服务程序能够在XGATE中处理的同时,主处理器可以并行的处理其他应用程序。通过表2.2的比较,可以近似地认为S12X核的性能是S12的5倍。

2.2.2 XGATE协处理器与主处理器的关系

在S12X系列中,中断控制器硬件产生的中断可以选择由XGATE或者S12XD主处理器来处理。XGATE对于任何中断的处理都会减轻主处理器的中断负荷,并且XGATE完全有能力响应整个中断。

从图2.1中可以看到,一个开关中断信号可以指向XGATE或者主处理器,如果指向XGATE,它就会执行所响应的中断服务程序;当程序执行完成后,等待下一个中断请求。另外有的寄存器可以使XGATE指向特殊的中断信号,并且中断优先级的等级可以设置为7个级别之一。如果有2个中断请求同时产生,则处理器就会根据中断级别的优先级高低来判断,优先级高的中断首先执行。这些中断等级在S12XD主处理器和XGATE中相同。

图2.1 使用主处理器或者XGATE的中断响应过程

XGATE和主处理器完全一样,是一个支持C编译器的可编程内核。当中断源产生时,它开始运行;在完成中断任务以后,它会中止时钟工作等待下次事件发生,以降低功耗。

XGATE与主处理器之间可相互中断以进行同步。XGATE有一个特殊指令SIF,用于向主处理器提交中断。通常SIF为XGATE线程的最后一条指令,用以触发主处理器中断。在默认情况下,此时XGATE的中断矢量就对应于此前XGATE所处理的中断,故由SIF所触发的主处理器的中断服务程序通常不必查询中断源。

XGATE是一个协处理器,它可以直接使用,几乎可以直接进入所有的存储空间。XGATE的创新特点就在于它以独特的方式访问MCU内部RAM单元,通过交换总线功能,MCU的内部总线允许交叉进入RAM区。当主处理器全速执行时,它访问RAM只需半个时钟总线周期,XGATE可以在另外半个时钟总线周期访问RAM。若主处理器不进入访问RAM的周期内,则XGATE访问RAM的速度就会是主处理器访问RAM最高速度的2倍。

另外,XGATE有8个软件中断源。主处理器通过置位或清除XGATE的软件触发寄存器(XGSWT)中相应的位来触发或清除这8个中断源。需要注意的是:由于XGSWT属于片上外设寄存器,所以XGATE也可以通过XGSWT的位设置向自己发出中断信号。

2.2.3 XGATE的基本特性

XGATE协处理器结构如图2.2所示,它具有以下基本特征。

图2.2 XGATE协处理器结构

(1)精简指令集内核

XGATE是一个16位的精简指令集内核。内核拥有8个16位通用寄存器R0~R7,1个程序计数器PC,1个4位的条件码寄存器CCR。其中R0恒为0,可用于对变量的快速清零或置位。R1和R7有额外用途:XGATE响应中断时,硬件将中断向量表中对应通道的1个16位字装载到R1(通常用做数据指针),将栈指针装载到R7,如图2.3所示。

图2.3 XGATE编程模式

(2)XGATE指令集

XGATE共有72条独立的指令,指令时钟最高可达100 MHz。XGATE的时钟速度总是主处理器总线速度的2倍。XGATE的大部分指令是对通用寄存器的操作,为单周期指令。访问存储器的指令为双周期指令。跳转指令视条件而定可能为1个或2个周期指令。XGATE有一些特殊的比特提取及插入的单周期指令,特别适用于串行通信协议使用。

(3)XGATE访问空间

S12X的全局存储空间共有8 MB,XGATE可以访问其中片内的64 KB空间。这64 KB空间包括2 KB的片上外设寄存器,30 KB的片上闪存和最大32 KB的片内RAM。注意XGATE不能访问EEPROM空间或片外资源。XGATE的访问空间完全限制在主处理器内部访问空间范围内。地址仲裁的规则是主处理器的优先级总高于XGATE,如图2.4所示。

图2.4 XGATE全局地址映射图

(4)XGATE事件驱动线程

XGATE的代码执行是由事件驱动的,这里的事件就是指中断。所谓事件驱动就是指由中断来触发XGATE运行。没有中断时,XGATE不执行任何指令,从而也没有功耗。可见XGATE的代码就是一组中断服务程序,没有主程序或空闲时的循环程序。XGATE的中断服务程序也称做线程。

(5)互斥信号量

主处理器与XGATE之间常用的通信方式是共享资源。由于这两个内核可以独立异步的访问内存及片上外设,就会产生数据完整性问题。为了保证共享数据的完整性, XGATE集成了8个硬件互斥信号量(Semaphore)。用户可以通过硬件信号量来同步两个内核对共享数据的访问。信号量有3种状态:释放、主处理器锁定和XGATE锁定。每个内核在访问共享资源前,应当首先锁定相应的信号量;在访问结束后应当释放相应的信号量。

2.2.4 典型S12X系列单片机简介

相比于S12系列单片机而言,S12X系列单片机的型号目前还是较少的,S12X系列单片机目前有以下几个子系列:MC9S12XA系列、MC9S12XD系列、MC9S12XE系列、MC9S12XF系列、MC9S12XH系列和MC9S12XS系列。下面简要介绍几个子系列单片机的各自特点。

(1)MC9S12XA、MC9S12XB和MC9S12XD系列

这三个系列的单片机是以低成本和低功耗为目的设计的,具有良好的电磁兼容性和高效的代码执行效率。MC9S12XA系列主要包括MC9S12XA256和MC9S12XA512两种型号的单片机,其中MC9S12XA512包含外部总线接口EBI,模块映像控制MMC功能,中断控制器INT,用于监控HCS12X CPU和XGATE总线活动的调试模块DBG和背景调试模式BDM功能,具有2个A/D模块,每个为12通道10位分辨率,具有4个独立暂停期限的定时器PIT,暂停期限可以在1~224总线时钟周期之间选择,同时还有CRG模块,具有低噪声/低功耗皮尔斯(Pierce)振荡器、PLL、COP监视器、实时中断、时钟监控器等功能。

MC9S12XB系列目前主要包括MC9S12XB128和MC9S12XB256两种型号的单片机。它们的总线频率均为33 MHz,该系列单片机与MC9S12XD系列单片机完全兼容,相比于S12XD系列而言,S12XB系列单片机精简了一些功能,并通过降低总线速率来减少成本。

(2)MC9S12XE系列

MC9S12XE系列单片机与MC9S12XD系列单片机完全兼容,同时提高了系统的集成功能。MC9S12XE系列单片机工作频率为50 MHz,工作电压为3.3~5.5 V,包括一个存储器保护单元(MPU),用于防止软件执行过程中的系统错误。此外XGATE也得到了加强,频率可以达到100 MHz,同时与其他单片机上的XGATE模块也是兼容的。

(3)MC9S12XF系列

MC9S12XF系列单片机除了包括其他一些S12X的共有功能外,还具有1个符合FlexRay协议V2.1的FlexRay控制器,FlexRay技术的引入使其网络性能得到大幅提升, FlexRay网络可用于车身、底盘和安全等领域应用。该系列目前主要包括MC9S12XFE128和MC9S12XFR128两种型号的单片机,工作频率可以达到38 MHz。

(4)MC9S12XS系列

MC9S12XS系列单片机是高性能MC9S12XE系列单片机的经济性、高效性产品的补充,带有一套为汽车车身和乘客舒适度应用而优化设计的改进型片上外围设备、存储器等模块,可应用于汽车座椅控制模块、空调控制模块、各种车身控制模块等的设计应用。

2.3 MC9S12DG128简介

2.3.1 MC9S12DG128性能概述

MC9S12DG128只是HCS12家族中的一个成员。该器件包括大量的片上存储器和外部I/O。MC9S12DG128是一个16位器件,由16位中央处理单元(HCS12 CPU)、128 KB Flash、8 KB RAM、2 KB EEPROM组成片内存储器。同时还包括2个异步串行通信接口(SCI)、2个串行外设接口(SPI)和一个8通道输入捕捉/输出比较(IC/OC)增强型捕捉定时器(ECT)、2个8通道10位A/D转换器(ADC)和一个8通道PWM。

MC9S12DG128还包括29个独立的数字I/O口(A、B、K和E),20个独立的数字I/O口具有中断和唤醒功能。另外还具有2个CAN 2.0A/B标准兼容模块(MSCAN12)和一个I2C总线。

MC9S12DG128具有内部16位数据通道,外部总线可以按照8位数据总线窄模式操作,所以可以和8位数据总线的存储器连接,以降低成本。PLL电路允许根据系统需求调整电源功耗及性能。

MC9S12DG128主要特性包括:

● 16位HCS12 CPU;

● 内部存储器:

✧ 128 KB Flash;

✧ 8 KB RAM;

✧ 2KB EEPROM。

● 外围设备:

✧ 2个增强型串行通信接口(SCI);

✧ 2个串行外设接口(SPI);

✧ 2个MSCAN模块;

✧ I2C总线接口;

✧ 2个8通道10位A/D;

✧ 8通道16位增强型捕捉定时器(ECT);

✧ 8通道8位或4通道16位PWM。

2.3.2 MC9S12DG128内部结构及引脚

MC9S12DG128有两种封装,分别是80引脚封装和112引脚封装。图2.5为MC9S12DG128的内部结构框图,其中功能模块是按照112引脚封装给出的;图2.6为MC9S12DG128的112引脚封装引脚图;图2.7为MC9S12DG128的80引脚封装引脚图。

图2.5 MC9S12DG128内部结构框图

图2.6 MC9S12DG128 LQFP112封装引脚图

图2.7 MC9S12DG128 QFP80封装引脚图

2.3.3 MC9S12DG128引脚功能

本节以112引脚MC9S12DG128单片机为例介绍部分引脚功能及参考电路。

1.XTAL和EXTAL(47、46)——振荡器引脚

XTAL和EXTAL分别是晶体驱动输出和外部时钟输入引脚。EXTAL引脚既可以接晶振,也可以接COMS兼容的时钟信号,驱动内部时钟发生电路,器件中所有的时钟信号都来自该引脚输入的时钟。XTAL引脚为晶体驱动输出,当EXTAL引脚外接时钟时,该引脚悬空。时钟电路的几种接法如图2.8、图2.9和图2.10所示。

图2.8 Colpitts晶振连接(PE7=0)

图2.9 Pierce晶振连接(PE7=1)

图2.10 外部时钟连接(PE7=0)

关于使用Colpitts时钟连接电路还是Pierce时钟连接电路,可以参考表2.3,表中对于两种时钟电路进行了比较说明。

表2.3 Colpitts时钟连接和Pierce时钟连接性能比较

2.XFC(44)——PLL环路滤波器引脚

PLL环路滤波器连接电路如图2.11所示,PLL要求3个元件的无源滤波器连接到XFC引脚上。滤波器器件值因应用而异,计算滤波器的公式可以参见用户指南,也可以简单地使用Freescale公司提供的PLL滤波器计算器来计算。

图2.11 PLL环路滤波器连接电路

3.RESET(42)——外部复位引脚

低电平有效的双向控制信号。该引脚做输入时,将其拉低,可将MCU初始化成默认状态;如果时钟监视器或者COP看门狗检测到内部故障,该引脚作为开漏输出引脚对外指示这种状态。复位究竟是内部还是外部引起,是可以判别的。内部复位首先将该引脚拉低并保持131~134个系统时钟周期然后释放该引脚,经过64个系统时钟周期后采样该引脚电平,如果该引脚回到高电平,说明复位是由时钟监视器或者COP看门狗电路引起,CPU获得时钟监视器或COP看门狗的复位向量;如果该引脚仍然保持低电平,就确定为外部复位,CPU获得外部复位向量。为了保证时钟监视器或者COP看门狗复位向量能够被复位逻辑所识别,复位引脚上升到3.25 V的时间必须小于64个系统时钟周期和11 μs,所以为了避免对复位信号的误判发生,S12的复位电路不要使用简单的RC复位电路。另外在HCS12 D系列上没有低电压复位(Low Voltage Reset,LVR)支持,推荐使用外部LVR电路确保当器件电源VDD下降到4.5 V以下时处于复位状态。

4.BKGD(23)——背景调试引脚

BKGD采用自定协议接收串行的背景调试命令,并发送命令执行结果,进行实时在线调试。Freescale定义的标准BDM调试插头如图2.12所示。

图2.12 标准BDM调试插头

5.MODA、MODB、MODC——模式选择输入引脚

这三个引脚在单片机复位期间的状态决定了其运行模式。在复位期间,MODA、MODB具有内部下拉,关于运行模式的讨论详见后文。

6.IRQ/PE1(55)——可屏蔽中断请求

可屏蔽外部中断输入引脚,可以用于从STOP或WAIT模式唤醒单片机。可以通过程序选择该引脚是否和中断逻辑连接,以及选择下降沿还是低电平触发。复位后,IRQ默认为低电平触发方式,同时在CCR寄存器中的I位为1,IRQ中断被屏蔽,可以通过软件清除或者置位CCR寄存器中的I位来使能或禁止所有可屏蔽中断。

7.XIRQ/PE0(56)——不可屏蔽中断请求

不可屏蔽外部中断输入引脚,可用于在STOP或WAIT模式下唤醒单片机。在复位阶段,CCR寄存器中的X位为1,不可屏蔽中断被屏蔽。当系统初始化后,可以通过程序清除CCR寄存器中的X位,使能不可屏蔽中断。注意,X位一旦被清零,就不能再通过软件的方式置1。不可屏蔽中断经常用于处理系统掉电或者硬件故障等特殊应用要求。关于中断及复位的论述,后文相关章节会有详细的论述。

8.电源相关引脚

MC9S12DG128的电源引脚汇总参见表2.4。

表2.4 MC9S12DG128的电源引脚汇总

(1)VDD1,2和VSS1,2——内部稳压器输出电源和地

电源通过VDD和VSS提供给单片机,直接对内部2.5 V稳压器供电。如果内部稳压器使能,2.5 V来自于内部稳压器;如果VREGEN引脚接地,内部稳压器关闭,这两对引脚上需要外部提供2.5 V电源。

(2)VDDR和VSSR——外部电源和地

这一组电源提供I/O驱动和内部稳压器输入。为了满足信号的快速上升要求,一般要求电源能提供瞬时大电流,因此要在两个电源引脚之间放置高频旁路电容,并且要尽量靠近单片机,具体旁路电容要求取决于单片机引脚负载。

(3)VDDX和VSSX——I/O驱动器电源和地

这一组电源提供I/O驱动的电源和地,要在两个引脚之间放置旁路电容,并且尽量靠近单片机。

(4)VDDA和VSSA——A/D转换器模块工作电源和地

这一组电源供给A/D转换器,同时为内部稳压器提供参考电压,两个引脚之间需要放置旁路电容。

(5)VRH和VRL——A/D转换器模块参考电源和地

这一组电源为A/D转换器提供参考电压,其精度和稳定性直接影响转换结果,因此这一组电源要求品质较高,不能受数字电路部分影响,但功率较小,可以考虑单独供电。

(6)VDDPLL和VSSPLL——PLL供电电源和地

当内部稳压器关闭时,这一组电源必须外接2.5 V电源。内部稳压器工作时,该引脚的电压由内部稳压器提供。

(7)VERGEN——内部稳压器选择引脚

该引脚接高电平使能内部稳压器,该引脚接地禁止内部稳压器。如果该引脚接地,内部稳压器禁止,VDD1,2和VDDPLL都必须外接2.5 V电源供电。

2.4 MC9S12DG128的运行模式

MC9S12DG128可以通过三个引脚MODC、MODB和MODA来选择单片机的运行模式。共有普通模式和特殊模式两大类的运行模式。

MC9S12DG128的模式选择详见表2.5。

表2.5 MC9S12DG128的模式选择表

2.4.1 普通运行模式

普通模式共分三种,都是应用系统开发结束后的最终运行模式,它们都支持背景调试模式(BDM),但对于某些操作必须首先将BDM使能,然后再激活后才能通过BDM命令进行调试。

1.普通单芯片模式

该模式无外部总线,端口A、端口B和端口E被设置成通用I/O接口。端口E的两个引脚PE1和PE0仅能工作在内部上拉的输入方式,其他22个引脚均可设置为输入或输出,不过复位后它们均被默认设置为高阻输入方式,另外复位后,端口E的上拉有效,端口A和端口B的上拉被禁止。

2.普通宽扩展模式

端口A和端口B为外部地址和数据总线,其中A15~A8和D15~D8分时使用端口A的8个引脚,A7~A0和D7~D0分时使用端口B的8个引脚。R/W等总线控制信号复位后默认有效。

3.普通窄扩展模式

端口A和端口B为16位外部地址总线,其中端口A输出高8位(A15~A8),其中端口B输出低8位(A7~A0),8位外部数据总线D7~D0与高8位地址线分时复用端口A的8个引脚。

2.4.2 特殊运行模式

特殊模式主要用于系统开发和器件测试。

1.特殊单芯片模式

该模式可用于强制MCU激活BDM,以允许通过BKGD引脚进行系统调试。在该模式下,MCU不像在其他模式下那样取中断向量,然后执行应用程序代码等,而是以激活的BDM固件接收来自BKGD引脚的串行命令,并控制CPU的运行。该模式下没有外部总线,MCU作为一个独立器件运行,所有程序和数据存储空间均位于片内,外部接口均可作为通用I/O。

2.单片运行模式

单片运行模式是MC9S12单片及最常用的一种运行模式。系统复位时,CPU检测到MODA(PE5)和MODB(PE6)引脚为低电平时进入单片运行模式。单片运行模式又分为普通单片模式和特殊单片模式。普通单片模式是正常运行应用程序时应使用的模式,特殊单片模式是指BDM调试模式。进入特殊模式时,要求单片及复位时引脚MODC (BKGD)为低电平。通常,当单片及输入引脚浮空时,CPU默认高电平,BKGD引脚上的低电平是由BDM调试工具的相应引脚提供的。故可以理解为,当插上BDM头时,可进入特殊单片模式;当不插BDM头时,自动进入普通单片模式。

注意:MCU进入单片模式还是扩展模式或者其他模式,是由在复位时复位信号上升沿锁存MODA、MODB等引脚上的输入电平状态到运行模式寄存器(MODE Register)中相应位来实现的,模式寄存器的默认地址为$000B。在运行过程中,应用程序是可以动态地在单片模式和扩展模式之间相互切换的,方法是向运行模式寄存器写入不同的运行模式控制字。

3.扩展运行模式

80引脚的单片机A、B、K口都没有引出,故不能使用扩展运行模式。

扩展运行模式又有普通运行模式和特殊运行模式之分,其区别是有些寄存器只能在特殊模式下读写。

2.5 MC9S12DG128的存储器映射

S12系列单片机片内有Flash、RAM和EEPROM,不同型号内置存储器容量不同。MC9S12DG128单片机内置128 KB Flash、8 KB RAM和2 KB EEPROM。

2.5.1 基本内存空间分配

以CPU12为核心的单片机有多种运行模式,其中单片方式是最典型的应用模式。图2.13给出了MC9S12DG128单片机在单片模式下的存储器映射图。

图2.13 MC9S12DG128单片模式下存储器映射

MC9S12DG128复位时,I/O寄存器占用从$0000开始的1 KB地址空间($0000~$03FF),虽然用户可以将I/O寄存器重新定义到前32 KB地址空间的任何一个2 KB空间的前1 KB,但最好不要这样做。I/O空间放在$0000开始处,使得读写$0000到$00FF这256个I/O寄存器可以使用直接寻址方式,直接寻址方式的指令比扩展寻址方式短1 B,速度会比读写其他地址空间快一些。别的存储器模块(如EEPROM、RAM和部分Flash)也都可以定义到其他地址空间。如果不是特别必要时,尽量使用系统的默认设置。

从$0400到$1000是EEPROM空间。一些CPU12构成的单片机有4 KB的EEPROM,因为从$0000开始的1 KB空间被I/O寄存器占用了,不重新定义EEPROM的地址的话,实际可以使用的EEPROM只有3 KB。若一定要使用片内的4 KB EEPROM,则要重新将EEPROM定义到其他空间,或者将I/O寄存器移到其他空间。

从$000F到$3FFF是RAM空间,不同型号的CPU12构成的单片机有不同的片内RAM配置。从2 KB、4 KB、8 KB到12 KB。MC9S12DG128默认为$0000到$1FFF(8 KB),可以在程序中将其映射到$2000到$3FFF的8 KB空间。

$4000到$FFFF的48 KB为Flash存储器空间,分成3个16 KB空间,最后16 KB空间的最后256 B,即$FF00到$FFFF是中断向量表空间。

CPU12构成的单片机还有一种特殊工作方式(特殊单片方式或特殊扩展方式),被称为调试方式或BDM方式。在这种方式下,CPU12内部的256 B的ROM将$FE00到$FEFF的前256 B的Flash空间覆盖。当然,覆盖的空间在BDM模式下还是可以通过BDM指令访问的。

2.5.2 内存空间的扩展

CPU12构成的单片机片内Flash可以超过64 KB寻址空间达到128 KB、256 KB或者512 KB,其中MC9S12DG128片内Flash为128 KB,如图2.14所示。

图2.14 MC9S12DG128的内存空间扩展

128 KB的Flash先被分成每块64 KB,共2块(Block0和Block1);每块细分为每页16 KB,共8页;每页再细分每段为4 KB、2 KB、1 KB或512 B。

在片内Flash在64 KB及以上的CPU12构成的单片机,有一个存储器页面寄存器PPAGE,该寄存器为5位,最多可管理32个16 KB存储器页,故CPU12单片机最多可以有512 KB片内Flash。MC9S12DG128的128 KB Flash可分为16 KB存储器,每个存储器页面编号为$38~$3F的某个值。CPU12在64 KB内存的$8000到$BFFF这一段开了一个窗口,永远只能看到页面寄存器的某一页,这里指$38~$3D这6个页面。128 KB的Flash中,$3F这一页永远定位在$C000~$FFFF这一段,$3E页永远定位在$4000到$7FFF这一段,另外6页只能通过$8000~$BFFF这一窗口访问。Flash的换页是通过向PPAGE寄存器写入页面编号实现的。

Flash存储器页面寄存器PPAGE的值$00~$2F留给扩展方式下使用外部存储器时对外部存储器分页使用。

2.5.3 相关寄存器

CPU12的内部寄存器、RAM、EEPROM可以通过设置INITRG、INITRM、INITEE来重新分配它们的位置。这些寄存器只能写一次,建议在初始化时分配寄存器、RAM、EEPROM的位置。对每个INITxx赋值后,在其指令后需插入一空指令。如果映射有冲突,寄存器具有最高优先级,与其重叠的RAM和EEPROM此时无效。存储分配优先级从高到低依次为:BDM ROM(激活的情况下)、寄存器区、RAM、EEPROM、Flash和外部扩展存储器。

以下简要介绍INITRG、INITRM、INITEE 3个初始化寄存器。

1.内部RAM位置初始化寄存器

内部RAM位置初始化寄存器(Initialization of Internal RAM Position Register, INITRM)如图2.15所示。

图2.15 内部RAM位置初始化寄存器

读:任何时刻。

写:普通模式和仿真模式下仅可以写一次,特殊模式下任何时刻可写操作。

RAM15~RAM11:内部RAM映射位置。RAM的映射是通过修改该寄存器中的5个二进制位来实现的,即指定内部RAM基地地的最高5位。RAM空间可以映射到64 KB空间内的任何16 KB块中。

RAMHAL:RAM高地址对齐。

● 0表示RAM和内部地址空间最低端对齐;

● 1表示RAM和内部地址空间最高端对齐。

因为MC9S12DG128内部有8 KB的RAM空间,映射区域8 KB,所以RAM12~RAM11位没有意义,取0或1都可以。配置RAM空间仅仅使用到RAM15~RAM13(即RAM15~RAM13用来决定RAM空间映射到哪个16 KB块中),复位后RAM默认位置在$0000~$1FFF,如果要将RAM空间定位到$2000~$3FFF,只要将RAM15~RAM13设置为001就可以了,此时INITRM=0×20。

2.内部寄存器位置初始化寄存器

内部寄存器位置初始化寄存器(Initialization of Internal Registers Position Register, INITRG)如图2.16所示。

图2.16 内部寄存器位置初始化寄存器

读:任何时刻。

写:普通模式和仿真模式下仅可以写一次,特殊模式下任何时刻可写操作。

REG14~REG11:内部寄存器映射位置。指定内部寄存器区基地址的最高5位。MC9S12DG128内部有1 KB的寄存器空间,复位后默认首地址为$0000,运行时可以重新映射到系统地址空间前32 KB的任何2 KB空间边界处,实际使用前面的1KB。可以设置的最小基地址为$0000,最大基地址为$7FFF,而$0000~$00FF这256 B是可以使用直接寻址方式的,所以寄存器默认的地址空间也从$0000开始。

3.内部EEPROM位置初始化寄存器

内部EEPROM位置初始化寄存器(Initialization of Internal EEPROM Position Register, INITEE)如图2.17所示。

图2.17 内部EEPROM位置初始化寄存器

读:任何时刻。

写:所有器件在任何时刻可以写EEON位。大多数器件的EE11~EE15位能够在任何模式下任何时刻写入。对于某些器件,EE11~EE15位在普通模式和仿真模式下仅一次写入;特殊模式下任何时刻可写操作,具体权限请参考相应器件的用户手册。

EE15~EE11:内部EEPROM映射位置,指定内部EEPROM基地址的最高5位。

EEON:使能EEPROM。

● 0表示禁用EEPROM;

● 1表示使能EEPROM,地址由EE11~EE15决定。

● 配置INITEE位,当INITEE=0×11时,则EEPROM基地址从$1000开始。