飞思卡尔XS128和G128两种单片机的主要区别

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
4
Байду номын сангаас
5 LVRF 4 LOCKIF 3 LOCK 2 ILAF 1 OSCIF 0 UPOSC
低电压复位标志——LVRF 在低电压复位发生时置 1。 该标志只能通过写 1 来清除。写 0 无效。 PLL 锁相中断标志——LOCKIF 在 LOCK 状态位改变时置 1,该标志只 能通过写 1 来清除。写 0 无效。如果 LOCKIE=1,LOCKIF 触发中断请 求。 锁相状态位——LOCK 反映当前 PLL 锁定状态。写该位无效。当 PLL 失 锁(LOCK=0)。f-pll 是 f-vco 的四分之一,在 PLL 的调整时间内用于保 护高速内核频率的系统。 非法地址复位标志——ILAF 在非法地址复位发生时置 1,细节可参考 MMC 章节。该标志只能通过写 1 来清除。写 0 无效。 振荡器中断标志——OSCIF 在 UPOSC 状态位改变时置 1。 该标志只能通 过写 1 来清除。写 0 无效。如果 OSCIE=1,OSCIF 触发中断请求。 振荡器状态位——UPOSC 反映振荡器的状态, 写该位无效。 当 UPOSC=0 时,OSCCLK 停止进入 MSCAN 单元。进入完全停止状态 UPOSC 被清 0. 0:振荡器关闭或者振荡未被 PLL 所稳定。 1:振荡器被 PLL 稳定。
如果 PLL 已锁相(LOCK=1) fVCO 2 f REF SYNDIV 1
注意
fVCO 必须在 VCO 锁相频率范围内,总线频率 f BUS 不能超过规定的上限。
VCOFRQ[1:0]位用于为最佳的稳定性和锁相时间配置 VCO 增益。为了正确的 PLL 操作, VCOFRQ[1:0]位必须根据实际的对象 VCOCLK 频率进行选择,如下表所示。错误地设置可 能导致无效的 PLL(失锁或者不稳定)
二 中断
在 CodeWarrior 里使用中断向量号,可用如下方法查看到。 点 File,选 Find and Open File,输入 mc9s12g128.h,点 OK,打开一个.h 文件。往下翻就是 中断向量表了。这个 XS128 和 G128 可能是不同的,替换一下自己程序中的向量号就行了。 不要乱改这个.h 文件。
飞思卡尔 XS128 和 G128 两种单片机的主要区别
作者:turf456
本文依据个人经验整理,介绍在智能车竞赛中常用的一些功能, 为做智能车的新手提供一些 帮助,绝非权威解释,如有不足欢迎指正。 如果 CodeWarrior 中没有 G128 单片机选型可到飞思卡尔官网下载对应版本的补丁包
一 端口
5
6 PSTP
4 COPOSCSEL1
3 PRE
2 PCE
1 RTIOSCSEL
0 CPOOSCSEL0
伪停止位 该位在停止模式期间控制振荡器的功能。 0:振荡器在完全停止模式下停止工作 1: 振荡器在伪停止模式下继续工作, 选择用于 RTI 和 COP。 注意:伪停止模式考虑到更快的 STOP 恢复,减少机械应 力和谐振器的老化以防止常见的 STOP 条件。轻微的增加 功耗。 COP 时钟选择位 1——COPOSCSEL0 和 COPOSCSEL1 组 合确定 COP 的时钟源,见下表。 如果 COPOSCSEL1=1,COPOSCSEL0 对时钟选择无效, 改变 COPOSCSEL0 不会复位 COP 的计时周期。 COPOSCSEL1 从 ACLK(来自可校正的内部 RC 振荡器) 或 者 时 钟 选 择 通 道 COPOSCSEL0 ( IRCCLK 或 者 OSCCLK)中选择 COP 的时钟源。 改变 COPOSCSEL1 复位 COP 的计时周期。 COPOSCSEL1 的设置可独立于 UPOSC 的值。 UPOSC=0 不会清除 COPOSCSEL1 位。 0:COP 时钟由 COPOSCSEL0 确定。 1:COP 时钟来自 ACLK(采自可校正的 RC 振荡器的)。 伪停止模式下的 RTI 使能位——PRE 在伪停止模式下使能 RTI。 0:RTI 在伪停止模式下停止运行。 1:如果 RTIOSCSEL=1,RTI 在伪停止模式下继续运行。 注意:如果 PRE=0 或者 RTIOSCSEL=0,在停止模式有效 时 RTI 将静止。RTI 计数器不会被复位。 伪停止模式下的 COP 使能位——PCE 在伪停止模式下使 能 COP。 0:如果 COPOSCSEL1=0 且 COPOSCSEL0=0,COP 在伪 停止模式下停止运行。 1:如果 PSTP=1,COPOSCSEL1=0 且 COPOSCSEL0=1, COP 继续运行在伪停止模式。 注 意 : 如 果 PCE=0 或 者 COPOSCSEL0=0 , 当 COPOSCSEL1=0 时 COP 在停止模式有效时静止。COP 计 数器不会被复位。 RTI 时钟选择 —— RTIOSCSEL 选择 RTI 的时钟源。 IRCCLK 或者 OSCCLK,改变 RTIOSCSEL 位将复位 RTI 计时周期。 如果 UPOSC=1,RTIOSCSEL 只能被置 1. UPOSC=0 清除 RTIOSCSEL 位。 0:RTI 时钟源是 IRCCLK。 1:RTI 时钟源是 OSCCLK。 COP 时钟选择位 0——COPOSCSEL0 和 COPOSCSEL1 组 合确定 COP 的时钟源,见下表。 如果 COPOSCSEL1=1,COPOSCSEL0 对时钟选择无效, 改变 COPOSCSEL0 不会复位 COP 的计时周期。 当 COPOSCSEL1=0 , COPOSCSEL0 从 IRCCLK 或 者 OSCCLK 中为 COP 选择时钟源, 改变 COPOSCSEL0 位复 位 COP 的计时周期。
四 模数转换器
只需注意 XS128 有 8 位,10 位,12 位三种模式,G128 只有 8 位和 10 位两种模式。这 个在 ATDCTL1 寄存器中设置。 其它设置基本相同,直接移植问题不大。寄存器名可能有细微差别,例如 XS128 中是 ATD0DR0,而 G128 是 ATDDR0。
五 定时
如果 XOSCLCP 使能(OSCE=1) f REF
fOSC REFDIV 1
如果 XOSCLCP 未使能(OSCE=0) f REF f IRC1M
3
为了最佳的稳定性和锁相时间, REFFRQ[1:0]位用于配置内部 PLL 滤波器。 为了正确的 PLL 运行,REFFRQ[1:0]必须根据实际的 REFCLK 频率选择,如下表所示。 如果 IRC1M 选作 REFCLK(OSCE=0),PLL 滤波器被配置为 1MHz 到 2MHz 的范围内。 该位仍能被改写但不影响 PLL 滤波器配置。 当 OSCE=1,错误地设置 REFFRQ[1:0]位可能导致无效的 PLL(失锁或者不稳定)。
10.3.2.6 时钟选择寄存器(CPMUCLKS)
读:随时 写:
1, 在的所有 MCU 模式下[如果 PROT=0(CPMUPROT 寄存器)]。 2, 所有位在特殊模式下(如果 PROT=0). 3, PLLSEL,PSTP,PRE,PCE,RTIOSCSEL:在正常模式下(如果 PROT=0). 4, COPOSCSEL0:在正常模式下(如果 PROT=0)直到 CPMUCOP 的一次写事件发生。如 果 COPOSCSEL0 被 UPOSC=0 清 0(COPOSCSEL0=1 时进入完全停止模式或者不足的 OSCCLK 质量),此时 COPOSCSEL0 可再一次被置 1. 5, COPOSCSEL1:在正常模式下(如果 PROT=0)直到 CPMUCOP 的一次写事件发生。 COPOSCSEL1 不会被 UPOSC=0 清 0(COPOSCSEL1=1 时进入完全停止模式或者不足 的 OSCCLK 质量如果 OSCCLK 被用于其他时钟源:例如内核时钟等等)。
三 时钟配置
这个很重要,虽然两款单片机的相关寄存器名称不同。但计算公式是相同的,见程序注释: 设 fosc=16MHz,例如: ① 将 XS128 配置为 64M: PLLCTL_PLLON=1; REFDV=0x80|0x00; SYNR=0xc0|0x03; POSTDIV=0x00; _asm(nop); _asm(nop); while(!(CRGFLG_LOCK==1)); ······ ② 将 G128 配置为 64M: CPMUOSC=0XA0; CPMUCLKS=0X80; CPMUREFDIV=0XC0|0x00; CPMUSYNR=0X40|0x03; CPMUPOSTDIV=0x00; _asm(nop); _asm(nop); while(!(CPMUFLG_LOCK==1)); ······ //等待 PLL 工作 //等待 PLL 工作; // fref=fosc/(REFDIV+1) // fvco=2*fref*(SYNDIV+1) // fpll=fvco/(POSTDIV+1) // fbus=fpll/2
10.3.2.3 Post 分频器寄存器(CPMUPOSTDIV) 该寄存器控制 VCOCLK 和 PLLCLK 之间的频率比
读:随时 写:随时(PLLSEL=1),其他情况无效。
如果 PLL 锁相(LOCK=1) f PLL
fVCO POSTDIV 1
如果 PLL 未锁相(LOCK=0) f PLL 如果 PLL 已选择(PLLSEL=1) f BUS 10.3.2.4 标志寄存器(CPMUFLG) 该寄存器提供状态位和标志。
fVCO 4 f PLL 2
1, PORF 在工作复位发生时置 1,不受系统复位影响。 2, LVRF 在低电压复位发生时置 1,不受系统复位影响,工作复位时置 1.。 3, ILAF 在非法地址复位发生时置 1,不受系统复位影响,工作复位时清 0.
读:随时 写:参考写单独位的条件
寄存器的字段描述 字段 7 RTIF 6 PORF 描述 实时中断标志——RTIF 在 RTI 时段结束时置 1。该标志只能通过写 1 来 清除。写 0 无效。如果 RTIE=1,RTIF 触发中断请求。 工作复位标志——PORF 在工作复位发生时置 1。该标志只能通过写 1 来 清除。写 0 无效。
XS128 中的 PIT,G128 没有。G128 中有 API,用 Timer 也行。
六 PWM,SCI,SPI,CAN 等
基本相同,直接移植问题不大。
七 Timer 模块
基本相同。
2
附表:
G128 中与时钟配置有关的寄存器的中文翻译【翻译自官方 0.41 版本第十章】 (个人能力有限,如有错误以英文原版为准)
// fref=fosc/(REFDIV+1) // fvco=2*fref*(SYNDIV+1) // fpll=fvco/(POSTDIV+1) // fbus=fpll/2
1
XS128 官方规定的上限频率是 40M,G128 的是 25M。把 XS128 超频到 64M 问题不大, 但把 G128 超频到 64M 使用可能会影响系统稳定甚至影响使用寿命。 当 G128 超到 64M 时,可能产生开机后无法成功运行 PLL 而导致单片机不能工作的情 况。强烈建议不要超频过多。 文章的最后附上与时钟配置相关的主要寄存器的中文翻译。
10.3.2.1 通用寄存器(CPMUSYNR) CPMUSYNR 寄存器控制 PLL 的倍增因数并选择 VCO 的频率范围。
读:随时 写:随时[PROT=0(CPMUPROT 寄存器)且 PLLSEL=1(CPMUCLKS 寄存器)],其他情况无效。 注意 写该寄存器清除 LOCK 和 UPOSC 状态位。
10.3.2.2 基准分频器寄存器(CPMUREFDIV) 当使用外部振荡器作为基准时,该寄存器为 PLL 倍频级数间提供良好的细分。
读:随时 写:随时[PROT=0(CPMUPROT 寄存器)且 PLLSEL=1(CPMUCLKS 寄存器)],其他情况无效。 注意 写该寄存器清除 LOCK 和 UPOSC 状态位。
注意 在写 CPMUCLKS 寄存器后,强烈建议读回 CPMUCLKS 寄存器以确保对 PLLSEL, RTIOSCSEL,COPOSCSEL0,COPOSCSEL1 的写操作的成功。
寄存器描述 字段 7 PLLSEL 描述 PLL 选择位——该位选择 PLLCLK 作为系统时钟源 (内核 时钟和总线时钟)。 如果 UPOSC=1,PLLSEL 只能被清 0. UPOSC=0 置位 PLLSEL 位。 进入完全停止模式将 PLLSEL 置位。 0:如果振荡器工作(UPOSC=1,f-BUS=f-OSC/2)系统时 钟源自 OSCCLK。 1:系统时钟源自 PLLCLK,f-BUS=f-PLL/2。
XS128 有 A, B, E, K, T, S, M, P, H, J, 和 AD 口。 G128 有 A, B, C, D, E, T, S, M, P, J 和 AD 口。 对于引脚数较少的封装会缺少某些端口。 当端口用作普通 IO 口时的相关寄存器命名规律相同,一般可以直接移植。 一些引脚的外部中断功能的寄存器配置也一样。但中断号不同。 一些引脚的个别功能可能会不同,但一般很少用。 当端口用作 AD,PWM,SCI,SPI,CAN 等功能时 XS128 和 G128 的引脚用法类似。
相关文档
最新文档