510 likes | 685 Views
第 2 章 S12X 单片机的结构与组成. 2.1 MC9S12XS128 的主要功能和结构 2.2.1 功能特性. 16 位 S12XS CPU 内核: CPU12X ( V2) 。兼容 S12 , CCRW 内部容错 , 纠错 ECC ,最大 8M 内存 . 时钟和复位发生器, CM 、 COP 。简化了电源及 PLL 电路 中断控制管理模块( INT ) , 中断源细分为 7 级 带中断功能的 8 位和 4 位端口 2 个 8 通道 12 位 A/D 转换模块 ( 3μs )、 8 个 PWM 通道
E N D
2.1 MC9S12XS128的主要功能和结构2.2.1 功能特性 • 16位S12XS CPU内核:CPU12X(V2) 。兼容S12,CCRW • 内部容错,纠错ECC,最大8M 内存. • 时钟和复位发生器,CM 、COP。简化了电源及PLL电路 • 中断控制管理模块(INT),中断源细分为7级 • 带中断功能的8位和4位端口 • 2个8通道12位A/D转换模块( 3μs)、8个PWM通道 • 2个SCI、1个SPI、1个CAN总线模块 • 增强型捕捉定时器TIM ,定时模块PIT • 80MHz系统频率(40MHz总线频率) • 128KB FLASH、8KB DFLASH、8KB RAM • 单线背景调试模块(BDM) • 输入/输出端口(I/O):多达91个通用输入输出端口。 • 温度性能:-40°C ~125°C的宽温度范围。
总结: • MCU核心 --- 左侧 E口可作为控制总线。 A口、B口、K口。 • MCU外设 --- 右 丰富的I/O接口,多功能复用: AD口、 H口、J口、M口、P口、S口和T口。 • P,J,H口有中断功能, 可以使MCU退出WAIT,STOP • 端口复用、多功能 • 外设模块,在功能上就是集成了微机原理的对应功能 。 • AD ,AN【0:15】, 可做PAD口的16位GPIO 不仅具有AD功能,还有通用输入口功能。 • 内部时钟根据需要设定
128K FLASH ,8K RAM , 8K EEPROM 比较丰富, 可以选择内存容量大的MCU. • 背景调试功能,方便、灵活
2.1.3封装与引脚 一.封装 LQFP-112引脚 QFP-80引脚 (薄)四方扁平 封装表面贴焊
二. 引脚功能描述 1.系统功能类引脚 EXTAL、XTAL:振荡器引脚 RESET:外部复位引脚,低电平有效 (外部电路应有上拉功能) TEST:厂家测试预留,须连至Vss BKGD/MODC:背景调试//模式选择引脚 (内部上拉) 2.电源类引脚 • 电压调整模块将+3.3 - +5V调整为3组独立电源供片内使用 • VDD、VSS2、VSS3:MCU核心的工作电源,1.8V; • VDDF、VSS1:片内闪存 , 2.8V; • VDDPLL、VSSPLL:PLL的电源供给端,1.8V; • 外部电源提供5组+5V电源:电压调整器、I/O、AD
3.I/O类引脚 共有91 个引脚,包括AD,A,B,E,H,J,K,M,P,S,T共11 组端口,每组端口不仅可设定为普通的I/O 端口,还可复用。 例如:AD端口可A/D转换的模拟输入,S端口可设置为SPI 和SCI 通讯接口,T 端口可设置为增强型捕捉定时器的输入,输出接口等。 • 3.1AD口 、 A口和B口 • ① PAD口:PAD15~8, 7~0 通用输入口/ 模拟量输; • ② PA、PB、PK:通用I/O口(PA7-0,PB7-0,PK7-0); 3.2 E口 系统启动控制口,用于开机时确定MCU的工作模式。通常使用缺省状况,尽量不作为普通输入/输出端口。
3.3 H口、J口、M口、P口、S口和T口 这些端口都有第二种功能,在不使用第二种功能的时候,可以作为通用输入/输出口 • T口(PT7~0) :作为定时器模块的IOC关联引脚; • S口(PS7~0) :与SCI、SPI模块关联作为通信引脚; • M口(PM7~0):与CAN模块关联作为通信引脚; • P口(PP7~0) :与PWM模块关联作为通信引脚,也做唤醒中断输入; • H口(PH7~0) :与唤醒中断输入模块关联引脚; • J口(PJ7、PJ6、PJ1、PJ0);与唤醒中断输入模块关联引脚;
2.2 运行模式 1.多种芯片模式 满足各种需要,共3种: • 普通单片模式: 最终产品正常运行应用程序; • 特殊单片模式: BDM可用,开发、调试; • 普通扩展宽模式:数据16位; • 普通扩展窄模式:数据8位; • 仿真宽模式: 接逻辑分析仪,看总线控制信号; • 仿真窄模式: 同上; • 特殊测试模式:生产; • 特殊设备模式; 同上;
2.芯片模式的配置 教学、实验、常规开发仅要求: • 普通单片模式:MODC(BKGD)=1 • 特殊单片模式:MODC(BKGD)=0 特殊单片模式(Special Single Chip) ----又称为背景调试模式(Background Debug Mode,BDM) 引脚BKGD有内部上拉,悬空时默认为高电平; 当插上BDM头时,由BDM调试工具的相应引脚给BKGD提供低电平,使MCU进入特殊单片模式;若不插BDM头,则进入普通单片模式。
芯片模式的时序 MODA MODB MODC/BKGD RESET HCS12 CLOCK /RESET MODA MODB MODC Sample Latch 在复位时,复位信号的上升沿锁存MODC的输入电平到运行模式寄存器。
BKGD 1 2 GND NC 3 4 RESET NC 5 6 VDD 3.BDM接口电路 BDM---Background Debug Mode 是Freescal自定义的,方便下载程序、在线调试、监视等 BDM调试器 ---须另购或自制,通过USB接口接PC,插头接目标板。 插头引脚形式: 信号含义: BKGD---接单线背景调试引脚 GND---接地 VDD---接电源 RESET---接目标机复位引脚
4.低功耗模式 运行模式如下: 等待(Wait) 停止(Stop)、 伪停止(Pseudo) • 应用背景: • 电池供电; • 功能多,串行使用; • 处于等待事件情况; • 根据需要选择不同模式。
等待模式: 特点:CPU 停止执行指令,时钟运行,所有外 设处于激活状态。 • 唤醒等待模式的条件: • 外部复位; • 时钟监控复位; • 看门狗复位 • 实时中断; • 自时钟模式中断; • 其它中断。
2)停止模式: 特点: 停止所有时钟,保留初始化; 唤醒条件: 外部中断、外部复位。 3)伪停止模式 特点: 时钟继续 工作 ; 可以选择看门狗、实时时钟使能; 唤醒条件: 外部复位; 实时时中断; 看门狗中断。 唤醒时间:等待模式小于伪停止模式, 伪停止模式小于停止模式。 4)加密模式
EXTAL CMOS兼容的外部时钟 MCU XTAL 悬空 C1 EXTAL C1 EXTAL 晶振 MCU RB MCU 晶振 C2 XTAL VSSPLL RS C2 XTAL VSSPLL 2.3 振荡器和电路 提供MCU工作的时钟基本脉冲。 XTAL---振荡器的输出引脚, EXTAL---振荡器的输入引脚。 XCLKS(PE7)=1时,因有内部上拉,复位默认 XCLKS(PE7)=0时的两种接法:(XS128) 左图中,RB、RS为保证起振,RB取1M,高频率时RS取小或短接 滤波电容C1、C2取22pF 右图中,一般为外接有源晶振 S12(X)的总线时钟频率=晶振频率的1/2 如晶振频率为16MHz,则总线时钟频率为8MHz
2.4 S12XS128的最小系统电路设计 BDM电路 电源电路 复位电路 晶振电路 PLL电路
2.5 系统复位、运行监视与时钟选择 1. 复位功能 • 目的:错误或故障恢复 • S12X MCU复位共有5种: • 上电复位 • 低电压复位 • 外部复位 • COP看门狗复位 (可选,默认无) • 时钟监视复位 (可选,默认有) 当上述事件触发复位时,MCU在程序计数器中放置一个复位向量,处理器执行启动例程。COP复位和时钟监视复位还有其各自的复位中断向量。
复位产生条件: • 上电复位 : 正向跳变 ; • 低电压复位: 电压监测<4.65V; • 外部复位 : 手动; • 时钟监视复位 : 时钟失效(内复位); 低于预期频率; • 看门狗复位: 计时到(内复位); 复位不会返回到复位前的地点!
2.系统运行监视 两种监视手段,以保证系统的正确运行,提高可靠性: • COP看门狗定时器(WDT)---程序跑飞或异常时,使MCU复位 (正常运行时“喂狗”) • 时钟监视器(CM) ---时钟异常时,使MCU复位 (1)看门狗 WDT 背景: 程序跑飞; 等待不可能信号; 死循环,不合理参数。 支持: 时钟定时产生溢出 处理: 上电或专用复位程序。 地点: 关键点;长循环出口。 关闭: 调试程序时
(2)时钟监视 CM ---监视时钟异常 背景 : 恶劣环境,晶体振荡器失效; 特点:独立于MCU时钟; 支持:独立硬件; 处理:复位程序 ; 应用:系统时钟故障报警 。
3. 时钟选择 三种时钟: OSCCLK PLLCLK SCM: 内部自给时钟,MCU启动后默认是关闭,误差大。 ◆COP (WDT) ,RTI 时钟取自OSCCLK,除非进入自时钟 ◆系统时钟Sysclk由PLL和OSCCLK选择一个作为系统时钟; ◆CM检测的对象是针对OSCLLK的频率 ◆PLL的时钟源是来自OSCCLK ◆总线时钟频率=系统时钟频率/2
fBUSCLK = fOSCCLK /2 fBUSCLK = fPLLCLK /2 • MCU工作的总线时钟可以使用默认的外部时钟,也可以选择使用来自内部锁相环的时钟,以获得更高的总线时钟频率。 • 此时需要在MCU最开始初始化时设置时钟合成寄存器和时钟分频寄存器以确定PLL时钟频率,然后设置时钟选择寄存器的控制位PLLSEL=1,从而选定PLL时钟,而不用复位默认的外部时钟。 锁相环产生的时钟频率可由下面的公式得到: fPLLCLK= 2 × fOSCCLK × (SYNR+1) / (REFDV+1) 式中:fOSCCLK为振荡器频率;SYNR为时钟合成寄存器的值;REFDV为时钟分频寄存器的值。 例如,当S12X16MHz外部晶振频率时,若将SYNR设为2,REFDV设为1,就可以得到48MHz的锁相环时钟频率和24MHz的总线频率 • S12(X)MCU的时钟、复位和WDT、CM的操作控制需要设置一些基本的寄存器,涉及到的各个寄存器描述见书。。。
2.6 存储器 ROM(Read Only Memory ):只读存储器 RAM(Random Access Memory ):随机存取存储器 MCU常用的存储器: • ROM---程序存储器;非易失;不能更改 • RAM---数据存储器;掉电丢失数据;可读/写 • EPROM---紫外线擦除。非易失;可反复擦写,擦写速度慢 • EEPROM---电擦除。非易失;可反复擦写,擦写速度稍慢 • FLASH ROM---闪存,更高级的EEPROM。非易失;可反复擦写并允许在线编程;更高速、更方便、容量大.简称Flash. 在Freescale S12X比较新出的MCU中,有DataFlash取代EEPROM的趋势
2.6.1 存储器空间组织与分配 XS128的存储器资源:8KB RAM、8KB DataFlash、128KB Flash。 Freescale单片机的存储器结构采用冯.诺依曼---RAM、ROM统一编址,不同于51单片机(哈佛结构)。 编址范围:64KB($0000~$FFFF,每存储单元存8位信息) 空间覆盖:I/O寄存器 1KB,RAM 8KB,DataFlash 8KB (EEPROM) FLASH 128KB(页面扩展机制) 地址分配重叠时,存储器优先级:
$0000 2KB 寄存器 $0800 1KB 分页DataFlash $FE $FD $FC $FB …… 255个 $00 $0C00 1KB 保留 $FF $1000 …… 254个 4KB 分页RAM $FD $FC $FB $FA $00 $2000 $FE 8KB RAM $FF $4000 $FD 16KB Flash $8000 $FE 16KB 分页Flash $FC $FB $FA $00 …… 254个 $C000 $FF 16KB 闪存区 $FF00 复位、中断向量区 $FFFF $0000~$07FF(2KB):I/O寄存器区。用以安排S12X的众多不同I/O接口模块的几百个寄存器,I/O寄存器区可以映射到其它位置,但一般不予改变,就留给I/O寄存器使用。 $0800~$0BFF(1KB):分页Data Flash区。通过分页扩展的方法以达到管理256KB空间的Data Falsh,此区间对应$00~$FE共255个页面窗口,每个页面为1KB空间。其中本地地址空间固定占用$FE页面。 $0C00~$0FFF(1KB):保留未用。 $1000~$1FFF(4KB):分页RAM区。通过分页扩展的对应$00~$FD共254个页面窗口,每个页面为4KB空间,其中本地地址空间固定占用$FD页面。 $2000~$3FFF(8KB):固定RAM区。对应XS128实际的8KB RAM,固定占用$FE、$FF页面。如果使用复位默认地址分配($FD页面),RAM空间实际为$1000~$3FFF,因此,如果要使全部的8KB RAM都可见,就需要将RAM的地址空间映射到$2000~$3FFF这个区域,即须调整到$FE页面开始,才可访问到实际的连续8KB。 $4000~$FFFF(48KB):Flash区。分成3块,每块16KB。其中$8000~$BFFF是页面窗口,通过分页扩展管理超过64KB空间的Falsh。而$4000~$7FFF、$C000~$FFFF为2个16KB的固定Flash区,固定占用$FD、$FF页面。 $FF00~$FFFF(256B):复位、中断向量区。占用Flash的最后256字节的空间,BDM模式下能被BDM指令访问。其中地址$FFFE复位向量地址,该地址是S12X MCU整个程序的入口地址。 其中地址$FFFE是MCU整个程序的入口地址。
本地地址 全局地址 分页扩展: Data Flash------EPAGE寄存器 RAM------RPAGE寄存器 Flash------PPAGE寄存器 全局地址:GPAGE寄存器 7位+本地16位=23位---8MB
2.6.2 存储器地址映射管理 • 作为初学者或者默认存储器地址映射可以满足使用时,可以不改动默认的映射空间。当需要改变或者需要用到足量的RAM,或者是需要使用更大RAM、Flash、DataFlash容量时,必须重新配置相关的映射管理寄存器。 • 相关寄存器设置……
2.7 中断系统 中断概念:指某外部事件或异常发生时,CPU暂时停止执行当前的程序(保护断点),转向中断服务程序;中断处理完后返回原来的程序继续运行(恢复断点)。 中断是MCU的重要功能。一般须具有以下功能: ●能实现中断响应、中断服务和中断返回。 ●能实现中断优先级配置。 ●能实现中断嵌套。 ●能通过软件实现模拟中断,便于中断的调试。 S12(X)MCU具有一个功能强大的中断处理系统,并且有灵活的配置方式供使用者选择。
2.7.1 中断源 分3大类: 1. 复位中断 特殊的中断,不返回原来的程序,一切重新开始 任何时候都是不可屏蔽的,具有复位事件发生后强制执行的能力 S12(X)的复位向量有3个,但能触发复位的动作能有4个: 上电复位、外部复位、时钟监视复位、看门狗定时器溢出复位 2. 特殊中断 非法指令陷阱中断、软件中断(SWI)和外部中断(/XIRQ) 不可屏蔽中断。 稍不同:外部中断( /XIRQ )可以在系统复位初始化时通过设置CCR寄存器的中断屏蔽位X来进行屏蔽或开放设置。 3. 普通中断 大量的其它类型的中断,共有47个中断源: 如:外部中断以及时钟、定时器、并行I/O口、SCI/SPI/CAN接口、A/D等内部功能部件的中断。。。 可屏蔽中断,即可以通过设置CCR的I位进行打开和关闭。 注:I位---全局可屏蔽中断的打开/关闭控制,局部另设
2.7.2 中断向量 向量机制,实现对中断的管理和处理: 在$FF00~$FFFF地址空间(属于Flash空间)中设置了一个向量映射表,每一个向量对应一种中断的处理程序的入口地址。MCU在中断响应时,依据中断信号的来源在中断向量表中对应的位置取得中断向量的2个字节地址即读取中断处理程序的入口地址,进而依此地址转到相应的中断服务程序。 向量表中的每个向量占用2字节空间,$FF00~$FFFF共占近256个字节地址 S12X最大可有100多个中断向量 XS128实际只使用到50个左右向量地址,部分保留未用 向量地址的具体安排及其屏蔽情况、使能情况、优先级设定情况如表2-5 例如:上电复位和外部RESET复位中断的向量地址:$FFFE~$FFFF 外部中断IRQ的向量地址为$FFF2-$FFF3 定时器通道7中断的向量地址为$FFE0-$FFE1。 注:各组向量地址所对应的序号也称为中断向量号,中断向量号在CodeWarrior编程环境的C语言编程中需要用到。 另外,S12X单片机的中断向量地址也可以通过基地址+偏移地址的方式表达,并且基地址可以由用户改变,配置到Flash区域的任何地址,这可以通过配置中断向量基址(Interrupt Vector Based,IVB)寄存器予以实现。
2.7.3 中断处理 硬件+软件结合完成: (1)中断请求 在中断源未被屏蔽,且中断允许触发器被置位时,可以向CPU发出中断请求 (2)中断响应 中断请求随机,一般在现行指令结束时检测中断请求,如中断响应条件满足就进入中断响应周期,自动进行3件事: • 关中断,即将CCR的I位置1,以屏蔽其它中断干扰。 • 保护断点地址、寄存器和标志寄存器CCR的内容压入到堆栈,即现场保护。 • 跳转到中断服务程序的入口地址,即将中断向量地址的内容载入PC。 (3)中断处理程序 完成中断后要处理的功能。中断服务程序通常放在不分页FLASH区。 (4)中断返回 中断服务的最后一条指令必须是RTI,返回时自动将堆栈中的标志寄存器内容、寄存器内容和断点地址弹出,使程序回到中断前的地址继续运行原来的程序。 注:在中断发生时S12X自动将寄存器Y、X、D也压栈(自动出栈)
2.7.4 中断的使用与配置 1. 中断屏蔽----X、I位,外加各自的使能 2. 优先级 总体上,不可屏蔽中断 高于 可屏蔽中断,可以多级嵌套。 • 不可屏蔽中断的优先级---由硬件规定,按以下次序递减: • 上电复位或外部RESET引脚复位; • 时钟监视复位 • 看门狗复位 • 指令陷阱 • 软件中断SWI • 外部中断XIRQ • 可屏蔽中断的优先级 • 默认由中断向量在中断向量表的排序确定 • 可屏蔽中断的优先级也可通过中断请求配置数据寄存器(INT_CFDATA0~7)配合中断请求配置地址寄存器(INT_CFADDR)进行改变。
3. 中断使能及方式控制 设置寄存器 例:初始化设置外部中断IRQ控制寄存器------IRQCR IRQE:0=低电平触发,1=下降沿触发 IRQEN:0=禁止IRQ中断,1=使能 程序设计 • 主程序中进行中断初始化,并执行占用时间较多的程序; • 中断服务程序要求简短、高效,条件苛刻时尽量使用汇编语言; • 在整个源程序的末尾声明中断子程序的所对应的矢量地址 #define EnableInterrupts _asm{CLI} //宏定义 void main () { IRQCR= 0xC0; //1100 0000B EnableInterrupts; //开中断 for(;;) { } } 以上所有源程序会通过IDE集成开发环境自动进行编译、链接、定位,形成可执行机器代码。 void xxx_ISR(void) { …… }