飞思卡尔MC9S12系列单片机地址影射以及分页问题

合集下载

飞思卡尔单片机各种问题汇结

飞思卡尔单片机各种问题汇结

飞思卡尔问题汇结一、flash/EEPROM的操作Tips:a、HC08系列MCU中,很多Monitor ROM中固化了对flash操作的函数,用户只需调用即可,参考AN2874等应用笔记b、HCS08系列和HCS12系列MCU对flash的操作十分类似,可以参考 AN21401、FLASH操作函数 (HCS08系列)/dispbbs.asp?boardID=3&RootID=111907&ID= 1119072、如何将flash中的程序copy至ram中/dispbbs.asp?boardID=3&RootID=104074&ID= 1040743、S12内部寄存器的映射/dispbbs.asp?boardID=3&RootID=103261&ID= 1032614、S12EEPROM的使用、 INITRG,INITRM,INITEE寄存器的说明/dispbbs.asp?boardID=3&RootID=102260&ID= 1022605.INITRM寄存器的使用/dispbbs.asp?boardID=3&RootID=103214&ID= 103214二、编程技巧Tips:a、一般Codewarrior用引导生成工程的话,器件的头文件中都定义好了各个位,C语言编程只需找到对应的位进行操作即可b、用户自定义变量进行位操作,可以参考Codewarrior的格式1、CW位操作定义结构/dispbbs.asp?boardID=3&RootID=87784&ID=8 77842、HCS08系列单片机软件复位/dispbbs.asp?boardID=3&RootID=112903&ID= 112903三、Codewarrior 的使用Tips:a、尽量采用最新版本的CW进行编译开发b、尽量采用引导创建工程1、C语言和汇编语言之间共用常量/dispbbs.asp?boardID=3&RootID=101651&ID= 1016512、编译出现L1923 no DWARF debug info警告信息/dispbbs.asp?boardid=3&rootid=108124&id= 108124&star=四、ZigbeeTips:a、/zigbee 该网站中有freescale在zigbee方面的资料五、芯片各个模块的使用ADC1、序列通道AD转换/dispbbs.asp?boardID=3&RootID=80853&ID=8 08532、AD左右对齐/dispbbs.asp?boardID=3&RootID=83010&ID=8 3010PWM1、MON08调试PWM的注意事项/dispbbs.asp?boardID=3&RootID=33087&ID=3 30872、关于PWM的一篇好文章(网友推荐)/dispbbs.asp?boardID=3&RootID=43413&ID=4 34133、DSP56F8346的PWM程序/dispbbs.asp?boardID=3&RootID=59802&ID=5 98024、S12DG128B的PWM程序/dispbbs.asp?boardID=3&RootID=76420&ID=7 6420CAN1.9S08DZ CANdemo程序/dispbbs.asp?boardID=3&RootID=113744&ID= 113744RTI1.stop模式下,唤醒MCU(S12XDP512)/dispbbs.asp?boardID=3&RootID=115287&ID= 115287六调试工具Tips:a. HC08系列MCU的调试接口为MON08,用MON08 Multilinkb. HCS08、RS08和HCS12系列内置BDM模块,用BDM Multilinkc. 上述调试工具都是P&E公司提供的,另外该公司的Cyclone Pro 支持HC08/HCS08/HCS12系列MCU的调试。

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置

飞思卡尔MC9S12XS128单片机各模块使用方法及寄存器配置手把手教你写S12XS128程序--PWM模块介绍该教程以MC9S12XS128单片机为核心进行讲解,全面阐释该16位单片机资源。

本文为第一讲,开始介绍该MCU的PWM模块。

PWM 调制波有8个输出通道,每一个输出通道都可以独立的进行输出。

每一个输出通道都有一个精确的计数器(计算脉冲的个数),一个周期控制寄存器和两个可供选择的时钟源。

每一个P WM 输出通道都能调制出占空比从0—100% 变化的波形。

PWM 的主要特点有:1、它有8个独立的输出通道,并且通过编程可控制其输出波形的周期。

2、每一个输出通道都有一个精确的计数器。

3、每一个通道的P WM 输出使能都可以由编程来控制。

4、PWM 输出波形的翻转控制可以通过编程来实现。

5、周期和脉宽可以被双缓冲。

当通道关闭或PWM 计数器为0时,改变周期和脉宽才起作用。

6、8 字节或16 字节的通道协议。

7、有4个时钟源可供选择(A、SA、B、SB),他们提供了一个宽范围的时钟频率。

8、通过编程可以实现希望的时钟周期。

9、具有遇到紧急情况关闭程序的功能。

10、每一个通道都可以通过编程实现左对齐输出还是居中对齐输出。

1、PWM启动寄存器PWMEPWME 寄存器每一位如图1所示:复位默认值:0000 0000B图1 PWME 寄存器每一个PWM 的输出通道都有一个使能位P WMEx 。

它相当于一个开关,用来启动和关闭相应通道的PWM 波形输出。

当任意的P WMEx 位置1,则相关的P WM 输出通道就立刻可用。

用法:PWME7=1 --- 通道7 可对外输出波形PWME7=0 --- 通道7 不能对外输出波形注意:在通道使能后所输出的第一个波形可能是不规则的。

当输出通道工作在串联模式时(PWMCTL 寄存器中的CONxx置1),那么)使能相应的16位PWM 输出通道是由PWMEx 的高位控制的,例如:设置PWMCTL_CON01 = 1,通道0、1级联,形成一个16位PWM 通道,由通道 1 的使能位控制PWM 的输出。

飞思卡尔MC9S12XS128单片机重点模块讲解

飞思卡尔MC9S12XS128单片机重点模块讲解

基于飞思卡尔 MC9S12XS128MCU 的模块讲解及测试
安徽工业大学 自动化系 刘昌元 delay(500); if(LED==0x80) LED=0x01; } } 综合以上的两段代码看在 52 单片机和 128 单片机上编程思路基本上没大的区别,唯一的区 别就是 128 单片机有数据方向寄存器来管理 I/O 口。 � 将部分端口做输入口使用,另外一部分端口做输出口使用时:例如我们将 PORTB 的端 口 B7 用来做输入口,B0-B5 口做输出指示,测试代码如下:

以端口 A 和端口 B 为例讲解,以上是我截取的技术手册上的,从上来看 A 口和 B 口各 有 8 个口,且 A0-A7;B0-B7 全部作为 GPIO (通用输入输出口 )使用。此处 A 口和 B 口 使用方法是一样的,我姑且就以端口 A 来讲解。 A 口和 B 口作为通用输入输出口使用时我们只需要掌握 4 个寄存器即可。 PORTA (A 口

这一点和 51 单片机的 I/O 口有区别,在典型的 51 单片中 P0 口内部没有上拉电阻,但作为 I/O 口使用时需要外接排阻。其他 P1-P3 口则可以直接作为双向口使用,51 单片在上电复位 后端口被默认的置 1.在 51 单片中端口的某一位置 0 时端口作为输出口使用,置 1 时作为输 入口使用。例如如果我们想把 P1 作为输出口使用时我们可以在程序开始时写 P1=0x00; 如果 我们想把 P1 口作为输入口使用时我们可以写 P1=0xff; 这一点正好和飞思卡尔的 128 单片机 相反,另外 128 单片有专门的数据方向寄存器 DDRA 或者 DDRB 等来管理各个端口的输入 输出选择,51 单片没有。如果我们想把端口 A 作为输入口使用,我们只需写 DDRA=0x00; 即所有位都置 0,如果我们想把端口 A 作为输出口使用,我们只需要写 DDRA=0xff; 即所有 位都置 1 ,而如 果我们想要 把端口 A 的高四 位做输入口 ,低 4 位做输 出口时我们 就 写 DDRA=0x0f; 当我们需要将该端口的某一位做输出或者输入口使用时只需要将该端口对应的 方向位置 1 或者置 0 即可。例如我们想把 A3 口作输入口, A4 口作输出口使用时我们只需 要写: DDRA_DDRA3=0; DDRA_DDRA4=1; 即可。 � � 对于数据方向寄存器的使用只要记住:置 1——输出 置 0——输入 PORTA 数据寄存器也是由 8 位组成,任何时候都可以对它进行读写操作。

飞思卡尔16位MCUMC9S12P-系列参考手册

飞思卡尔16位MCUMC9S12P-系列参考手册

飞思卡尔16位MCUMC9S12P-系列参考手册飞思卡尔16位MCU MC9S12P-系列参考手册详情请下载: 16位MC9S12P-Family.pdfThe MC9S12P family is an optimized, automotive, 16-bit microcontroller product line focused on lowcost,high-performance, and low pin-count. This family is intended to bridge between high-end 8-bit microcontrollers and high-performance 16-bit microcontrollers, such as the MC9S12XS family. The MC9S12P family is targeted at generic automotive applications requiring CAN or LIN/J2602 communication. Typical examples of these applications include body controllers, occupant detection, door modules, seat controllers, RKE receivers, smart actuators, lighting modules, and smart junction boxes.The MC9S12P family uses many of the same features found on the MC9S12XS family, including errorcorrection code (ECC) on flash memory, a separate data-flash module for diagnostic or data storage, a fastanalog-to-digital converter (ATD) and a frequency modulated phase locked loop (IPLL) that improves theEMC performance.The MC9S12P family deliver all the advantages and efficiencies of a 16-bit MCU while retaining the lowcost, power consumption, EMC, and code-size efficiency advantages currently enjoyed by users of Freescale’s existing 8-bit and 16-bit MCU families. Like the MC9S12XS family, the MC9S12P family run 16-bit wide accesses without wait states for all peripherals and memories. The MC9S12P family is available in 80-pin QFP, 64-pin LQFP, and 48-pin QFN package options and aims to maximize pin compatibility with the MC9S12XS family. Inaddition to the I/O ports available in each module, further I/O ports are available with interrupt capability allowing wake-up from stop or wait modes.。

飞思卡尔MC9S08及MC9S12 单片机通过SCI口更新程序的一种方法

飞思卡尔MC9S08及MC9S12 单片机通过SCI口更新程序的一种方法

通过SCI口单片机通过飞思卡尔MC9S08及MC9S12 单片机更新程序的一种方法王佚(Freescale 8/16bit MCU FAE) 飞思卡尔的8/16 Bit 单片机内置FLASH可以通过单片机编程来进行擦除与编程,所以,理论上就可以通过SCI口接口实现软件的自我升级.在实际工作中,我们也遇到不少客户询问相关的实现方法,而我们也给了一些参考代码,但还是有不少工程师不能很好地理解,基于这些原因,我写了点东西来介绍一种比较简单的实现方法,供大家参考,如有不周,敬请批评与谅解.一,飞思卡尔MC9S08单片机内部存储器介绍MC9S08有很多系列单片机,一般程序空间均在64K以下,为了介绍方便,我们以MC9S08AW60一种为例进行介绍.上图为MC9S08AW60的数据空间分布图,对于大于64K空间的MC9S08单片机,其结构与MC9S12单片机类似,故先不做介绍.从图中我们不难看出,由于飞思卡尔单片机的数据存储器(RAM)与程序存储器(FLASH)是统一编址,所以,我们可以将程序引导到RAM里运行.二,飞思卡尔 8位单片机内部中断相量地址介绍飞思卡尔 8位单片机对中断处理是通过判断中断相量表的地址来判断程序的入口地址的.飞思卡尔 8位单片机的中断相量为16位,其放置在从0xFFFF地址向下按照中断号以此排放.三, 飞思卡尔MC9S08单片机FLASH操作简介飞思卡尔MC908及MC9S08系列单片机的FLASH都可以通过软件进行擦除与编程,不同的是MC908有相应的程序内置在单片机的ROM空间,而MC9S08没有,其需要用户自己编写.飞思卡尔的CodeWarrior for MC9(S)08软件在安装后,在\freescale\CodeWarrior for Microcontrollers V6.0\(CodeWarrior_Examples)\HCS08\Device Initialization C Examples\GB60_Modules\Sources\Flash_GB60目录下有响应的参考代码.MC9S08系列单片机的Flash有四种操作模式:Byte program, Byte program (burst), Page erase及Mass erase,其操作时间见下表.需要说明的是,在此操作其间,不可以使能任何中断.下图为操作流程图.需要说明的是,用来实现”Write a data value to an address in the FLASH array”的语句代码,表面上看是将一个数据写到一个Flash数据区去,但实际上是将所需要编程的Flash地址或是擦除的Flash的块地址及数据分别写入到单片机内类似地址积存器及数据寄存器里.CodeWarrior里自带的代码,是用机器码的方式来做的,其也给出了相应的代码,大家可以对应着看看,一般来说,只做Flash模拟EEPROM,该代码即可满足大家使用.在此,本文就不详细描述代码实现的方法.四,实现程序自我更新的两种常见方法及各自特点一般说来,我们有两种方法来,我们有两种常见方法实现程序自我更新.一种是将实现程序更新的部分的程序与应用程序融合在一起,系统在更新程序时甚至可以将整个程序包括更新程序一起更新掉,其优点是可以花费少的程序空间,缺点是数据及主程序空间分配比较麻烦,且在做更新程序时一旦掉电或是其它什么原因,可能无法进行程序的再次更新.另外一种是,将实现程序更新的程序写成是一个独立的程序,其缺点是要浪费部分程序空间,且中断相量无法更新所以要做程序的映射,类似引导(bootload)的概念.其优点是在编写应用程序时不用考虑数据空间地址分配的问题,同时不用担心下载过程出现任何异常情况.本文后面所涉及的内容,均以第二种方法为例,为描述方便,我们定义其为下载程序.五, 下载程序如何实现中断相量的映射由于我们无法预知究竟系统会用多少中断,所以对于应用程序的中断,都必须在更新程序中做映射,即,我们在单片机的某个程序空间建立一个程序跳转表,更新程序的中断相量表做一个固定的表,对应固定地址,我们只需在固定地址放相应的跳转指令,就可以实现中断相量的映射.例题如下:地址A: JMP 地址B. JMP地址B其实是个引导程序.中断相量<1>: 地址A.其中, “中断相量<1>”地址放的”地址A”由更新程序确定,而”地址A” 地址放的” JMP地址B”,JMP由计算机来添加,”地址B”则由应用程序确定.对于复位中断,其处理方法有点不同,其实现方法如下:中断相量<1>: Main.地址A:JMP 地址B.Main:If (a>b){goto地址B }中断相量表的定义参考方法如下:void (* const _vect[])() @0xFFCC = { /* Interrupt vector table */0xf998, /* Int.no. 25 Vrti (at FFCC) Unassigned */0xf99c, /* Int.no. 24 Viic1 (at FFCE) Unassigned */…_Startup /* Int.no. 0 Vreset (at FFFE) Reset vector */};六,单片机程序注意事项1,程序空间分配下载程序的空间应该从0xfff地址向下排放,具体大小需要根据实际的大小及单片机Flash的Block大小来同时决定.空间的安排,一定是Block的倍数.应用程序的空间是从程序的最低段开始排放,除了中断向量外,不可以有任何代码地址与下载程序重叠.在用CodeWarrior来写程序时,我们可以修改PRM文件来控制程序排放地址.下面是下载程序的PRM参考代码.NAMES ENDSEGMENTSROM = READ_ONLY 0xfA00 TO 0xFFAF;Z_RAM = READ_WRITE 0x0070 TO 0x00FF;RAM = READ_WRITE 0x0200 TO 0x086F;ROM2 = READ_ONLY 0xFFC0 TO 0xFFCB;ENDPLACEMENTDEFAULT_RAM INTO RAM;DEFAULT_ROM, ROM_VAR, STRINGS INTO ROM;_DATA_ZEROPAGE, MY_ZEROPAGE INTO Z_RAM;ENDSTACKSIZE 0x802,程序代码保护为了使下载程序在任何异常情况下不会被改写,其除了放置引导程序的空间外,均要做代码保护.其在C语言种的参考代码如下.const unsigned char NVPROT_INIT @0x0000FFBD = 0xFA;.3,计算机应用程序如何处理单片机应用程序的中断相量表计算机在应用程序处理该中断相量表时,应根据下载程序的映射关系,将两个字节的相量数据自动计算到对应引导地址,并变为JMP+地址(相量)的模式.下面是参考转变模式.单片机应用程序复位相量为0x8000,其变为跳转后的代码则为0xCC8000.如本文参考代码,其对应引导地址为0xf9fc,则计算机应用程序则应通知下载程序在0Xf9fc后写0XCC8000三个字节数据,运行完成后,反编译的代码如下:F9FC: JMP 0x80003,其它建议为保证应用程序的正确性,可以在下载程序里判断程序的校验码,可以用16位CRC码等.七,S19文件格式简介S-记录实际上是由五个部分组成的字符串的集合。

MC9S12XS128单片机

MC9S12XS128单片机
1.MC9S12XS128单片机介绍
2.CodeWarrior IDE 12 应用
MC9S12XS128单片机
• MC9S12XS128(以下简称XS128)是Freescale公 司推出的S12XS系列单片机中的一款增强型16位 单片机,S12XS系列单片机是在S12XE系列基础 上去掉XGate协处理器的单片机,该系列单片机 采用 CPU12X V2内核,可运行在40MHz总线频 率上。不仅在汽车电子、工业控制、中高档机电 产品等应用领域具有广泛的用途,而且在FLASH 存储控制及加密方面呢也有很强的功能。
PWM模块 特点:
1. 它有 8 个独立的输出通道,并且通过编程可控 制其输出波形的周期。 2. 每一个输出通道都有一个精确的计数器。 3. 每一个通道的 PWM 输出使能都可以由编程来控 制。 4. PWM 输出波形的翻转控制可以通过编程来实现。 5. 周期和脉宽可以被双缓冲。当通道关闭或 PWM 计数器为 0 时,改变周期和脉宽才起作用。 6. 8 字节或 16 字节的通道协议。 7. 有4 个时钟源可供选择(A、SA、B、SB),他 们提供了一个宽范围的时钟频率。
ECT初始化程序:
以0通道为例:
void ECT_Init(void) { TIE = 0x00; //通道0~7的使能屏蔽 TIOS = 0x00; // 所有的端口设置成输入捕获模式 TSCR1 = 0x90; // 使能时钟模块,定时器标志位 快速清零,读取数据自动清零 TCTL4_EDG0B = 0; TCTL4_EDG0A = 1; //捕捉 上升沿,0通道 TIE_C0I = 1; // 使能0通道中断,中断服务程序中 读取捕获数 }
ECT模块(增强型定时器模块)
• ECT特点相当于高速的I/O口,由一个16为自由计 数器、8个16为的输入捕捉/输出比较通道、一个 16为脉冲累加器及一个16位的模数递减计算器 (MDC)组成。

飞思卡尔MC9S12G系列详解

飞思卡尔MC9S12G系列详解

飞思卡尔MC9S12G系列详解
电子发烧友网:随着驾驶员对车内舒适度和便利性的要求在提高,汽车车身电子产品在保持具有竞争力价格的同时,还需要继续提供性能更高的半导体。

飞思卡尔半导体目前开始扩大现已普及的16位S12微控制器(MCU)系列,以优化大量对成本敏感的汽车车身电子应用。

先进的S12G 器件设计针对应用需求,提供灵活的内存、封装和成本选项。

MC9S12G系列是一个专注于低功耗、高性能、低引脚数量的高效汽车级16位微控制器产品。

这个系列是桥连8位高端微机和16位高性能微机,像MC9S12XS系列。

本文将详细介绍关于飞思卡尔MC9S12系列的芯片简介、MC9S12单片机最小系统硬件设计、典型程序应用、飞思卡尔XS128和G128两种单片机的主要区别等进行阐述。

飞思卡尔MC9S12G系列单片机中文简介
1.1介绍
MC9S12G系列是一个专注于低功耗、高性能、低引脚数量的高效汽车级16位微控制器产品。

这个系列是桥连8位高端微机和16位高性能微机,像MC9S12XS系列。

MC9S12G系列是为了满足通用汽车CAN或
LIN/J2602通信应用。

这些应用的典型例子包括body controllers,occupant。

飞思卡尔MC9S12G系列详解

飞思卡尔MC9S12G系列详解

飞思卡尔MC9S12G系列详解
飞思卡尔MC9S12G系列详解
电子发烧友网:随着驾驶员对车内舒适度和便利性的要求在提高,汽车车身电子产品在保持具有竞争力价格的同时,还需要继续提供性能更高的半导体。

飞思卡尔半导体目前开始扩大现已普及的16位S12微控制器(MCU)系列,以优化大量对成本敏感的汽车车身电子应用。

先进的S12G 器件设计针对应用需求,提供灵活的内存、封装和成本选项。

MC9S12G系列是一个专注于低功耗、高性能、低引脚数量的高效汽车级16位微控制器产品。

这个系列是桥连8位高端微机和16位高性能微机,像MC9S12XS系列。

本文将详细介绍关于飞思卡尔MC9S12系列的芯片简介、MC9S12单片机最小系统硬件设计、典型程序应用、飞思卡尔XS128和G128两种单片机的主要区别等进行阐述。

飞思卡尔MC9S12G系列单片机中文简介
1.1介绍
MC9S12G系列是一个专注于低功耗、高性能、低引脚数量的高效汽车级16位微控制器产品。

这个系列是桥连8位高端微机和16位高性能微机,像MC9S12XS系列。

MC9S12G系列是为了满足通用汽车CAN或
LIN/J2602通信应用。

这些应用的典型例子包括body controllers,occupant。

飞思卡尔16位单片机9S12XS128使用(一些初始化)

飞思卡尔16位单片机9S12XS128使用(一些初始化)

飞思卡尔16位单片机9S12XS128使用(一些初始化)飞思卡尔16位单片机9S12XS128使用最近做一个关于飞思卡尔16位单片机9S12XS128MAA的项目,以前未做过单片机,故做此项目颇有些感触。

现记录下这个艰辛历程。

以前一直是做软件方面的工作,很少接触硬件,感觉搞硬件的人很高深,现在接触了点硬件发现,与其说使用java,C#等语言写程序是搭积木,不如说搞硬件芯片搭接的更像是在搭积木(因为芯片是实实在在拿在手里的东西,而代码不是滴。

还有搞芯片内部电路的不在此列,这个我暂时还不熟悉)。

目前我们在做的这个模块,就是使用现有的很多芯片,然后根据其引脚定义,搭接出我们需要的功能PCB 板,然后为其写程序。

废话不多说,进入正题。

单片机简介:9S12XS128MAA单片机是16位的单片机80个引脚,CPU是CPU12X,内部RAM8KB,EEPROM:2KB,FLASH:128KB,外部晶振16M,通过内部PLL 可得40M总线时钟。

9S12XS128MAA单片机拥有:CAN:1个,SCI:2个,SPI:1个,TIM:8个,PIT:4个,A/D:8个,PWM:8个下面介绍下我们项目用到的几个模块给出初始化代码1、时钟模块初始化单片机利用外部16M晶振,通过锁相环电路产生40M的总线时钟(9S12XS128系列标准为40M),初始化代码如下:view plaincopy to clipboardprint?1/******************系统时钟初始化****************/2void Init_System_Clock()3{4 asm { // 这里采用汇编代码来产生40M的总线5 LDAB #36 STAB REFDV78 LDAB #49 STAB SYNR10 BRCLR CRGFLG,#$08,*//本句话含义为等待频率稳定然后执行下一条汇编语句,选择此频率作为总线频率11 BSET CLKSEL,#$8012 }13}上面的代码是汇编写的,这个因为汇编代码量比较少,所以用它写了,具体含义注释已经给出,主函数中调用此函数即可完成时钟初始化,总线时钟为40M.2、SCI模块初始化单片机电路做好了当然少不了和PC之间的通信,通信通过单片机串口SCI链接到PC端的COM口上去。

飞思卡尔16位单片机MC9S12XS128加密(程序下载不进去,正负极未短路,通电芯片不发烫)后解锁的方法及步骤

飞思卡尔16位单片机MC9S12XS128加密(程序下载不进去,正负极未短路,通电芯片不发烫)后解锁的方法及步骤

飞思卡尔16位单片机MC9S12XS128加密(程序下载不进去,正负极未短路,通电芯片不发烫)后解锁的方法及步骤/*****************************************************************************/ *本人用此法成功解救了4块板子【窃喜!】,此说明是本人边操作边截图拼成的,有些是在别的说明上直接截图【有些图本人不会截取,就利用现成的了,不过那也是本人用豆和财富值换来的】,表达不清之处还望见谅,大家将就着看吧!如能有些许帮助,我心甚慰!!!————武狂狼2014.4.23 /*****************************************************************************/编译软件:CW5.1版本,下载器:飞翔BDMV4.6 【1】,连接好单片机,准备下载程序,单击下载按钮出现以下界面或(图1.1)图 1.1——4中所有弹出窗口均单击“取消”或红色“关闭”按钮依次进入下一界面(图1.2)(图1.3)(图1.4)******************************************************************************* *******************************************************************************【2】单击出现如下图所示下拉列表,然后单击(图2.1)出现下图(图2.2)对话框,按下面说明操作(图2.2)弹出图2.3,单击按钮,依次出现如图2.4--5窗口,均单击(图2.3)(图2.4)******************************************************************************* *******************************************************************************【3】单击出现下拉列表,然后单击下拉列表中单击按钮出现如下界面,单击选择相对应的单片机型号(我选的红色方框里的HCS12X….),单击OK. PS:【此步骤是本人自己试出来的,若不进行此操作,图3.3中下拉列表中无要找选项】(图3.1)(图3.3)(图3.4)(图3.5)红色方框2中默认即为所要选的文件,此步只需单击确认按钮即可,如有不同读者酌情处置。

飞思卡尔MC9S12XS128技术手册翻译AD

飞思卡尔MC9S12XS128技术手册翻译AD

飞思卡尔MC9S12XS128技术手册(AD转换部分)英文资料:飞思卡尔MC9S12XS256RMV1官方技术手册1.1 XS12系列单片机的特点XS12系列单片机特点如下:·16位S12CPU—向上支持S12模糊指令集并去除了其中的MEM, WAV, WAVR, REV, REVW 五条指令;—模块映射地址机制(MMC);—背景调试模块(BDM);·CRG时钟和复位发生器—COP看门狗;—实时中断;·标准定时器模块—8个16位输入捕捉或输出比较通道;;—16位计数器,8位精密与分频功能;—1个16位脉冲累加器;·周期中断定时器PIT—4具有独立溢出定时的定时器;—溢出定时可选范围在1到2^24总线时钟;—溢出中断和外部触发器;·多达8个的8位或4个16位PWM通道—每个通道的周期和占空比有程序决定;—输出方式可以选择左对齐或中心对其;—可编程时钟选择逻辑,且可选频率范围很宽;·SPI通信模块—可选择8位或16位数据宽度;—全双工或半双工通信方式;—收发双向缓冲;—主机或从机模式;—可选择最高有效为先输出或者最低有效位先输出;·两个SCI串行通信接口—全双工或半双工模式·输入输出端口—多达91个通用I/O引脚,根据封装方式,有些引脚未被引出;—两个单输入引脚;·封装形式—112引脚薄型四边引线扁平封装(LQFP);—80引脚扁平封装(QFP);—64引脚LQFP封装;·工作条件—全功率模式下单电源供电范围3.15V到5V;—CPU总线频率最大为40MHz—工作温度范围–40 C到125 C第十章模拟—数字转换10.1 介绍ADC12B16C是一个16通道,12位,复用方式输入逐次逼近模拟—数字转换器。

ATD的精度由电器规格决定。

10.1.1 特点·可设置8位、10位、12位精度·在停止模式下,ATD转换使用内部时钟·转换序列结束后自动进入低耗电模式·可编程采样时间·转化结果可选择左对齐或右对齐·外部触发控制·转换序列结束后产生中断·模拟输入的16个通道为复用方式·可以选择VRH、VRL、 (VRL+VRH)/2特殊转换方式·转换序列长度1到16·可选择连续转换方式·多通道扫描·任何AD通道均可配置外部触发功能,并且可选择4种额外的触发输入。

飞思卡尔9S12XS128 单片机教程

飞思卡尔9S12XS128 单片机教程

9S12XS128 单片机开发工具包清华Freescale MCU/DSP 应用开发研究中心9S12XS128单片机开发工具包 (1)概述 (3)9S12XS128单片机 (3)9S12XS128开发工具包组件 (3)9S12XS128开发板及与PC 通信 (4)9S12XS128 开发板 (4)开发板的硬件连接 (5)PC机的设置 (6)监控程序及监控命令详解 (8)命令详解 (8)复位、中断向量表 (12)用户可以使用的RAM空间 (12)编译器CodeWarrior for HCS12 使用方法入门 (13)建立工程文件 (13)编写main.c 程序 (15)定义存储空间分配 (17)应用程序的编译 (18)向开发板下载程序 (20)运行应用程序 (21)概述这里描述的是一套9S12XS128 系列单片机开发系统套件。

以后的更新的版本见清华Freescale单片机应用开发研究中心的网站:。

开发系统主要由两个部分组成,分别是调试下载用的TBDML和开发用目标板。

其中TBDML的使用请参见文档“BDM for S12(TTBDM)用户手册V 34.pdf”。

目标板是有异步串行口的驱动的基本系统。

针对9S12XS128 芯片我们编写了9S12XS128目标板监控程序,可以方便地完成应用系统的开发。

用户可以在此基础上设计自己所需的目标母板,完成项目的初期开发。

应用软件完成后,用开发工具板擦除监控程序,下载最终的应用程序。

9S12XS128 单片机S12XS 16 位微控制器系列针对一系列成本敏感型汽车车身电子应用进行了优化。

S12X 产品满足了用户对设计灵活性和平台兼容性的需求,并在一系列汽车电子平台上实现了可升级性、硬件和软件可重用性、以及兼容性。

S12XS 系列可以经济而又兼容地扩展至带XGate 协处理器的S12XE 系列单片机,从而为用户削减了成本,并缩小了封装尺寸。

S12XS系列帮助设计者迅速抓住市场机遇,同时还能降低移植成本。

MC9S12XS(DG)单片机--110108

MC9S12XS(DG)单片机--110108
② 软件条件 --------- 利用 CodeWarrior for 9S12 软件进行软件开发。
CodeWarrior开发平台上可用汇编,也可用C语言编程。
CodeWarrior的使用
六、9S12XS/DG 的开发样例
1. 9S12XS/DG 的工程组织与通用I/O口的控制 2. PWM 输出编程 3.模拟信号采集 4定时器的功能与使用 5. 9S12XS/DG 的存储器控制 6. SCI/SPI串行数据通信 8.
;定义五个字的存储区,首址为X2
若要对X2的第三字赋值,可用如下语句:
STX X2+2
②数字常数/字符串常数定义伪指令:
格式: [<label>:] DC [.<size>] <expression> [ ,<expression>]…
功能:在Flash区定义一个size×n 个字节的存储区。
例: C1: DC .B $25
Freescale
车模用单片机原理与使用
讲座
车模电路组成
显示电路
路径检测 速度检测 电源电路
MCU
数据输入 电路
舵机控制
电机 速度控制
内容
一、飞思卡尔车模用单片机性能 二、9S12XS/DG 的硬件资源 三、9S12XS/DG 的硬件系统 四、9S12XS/DG的指令系统 五、 9S12XS/DG 的开发平台 六、9S12XS/DG 的开发样例
;定义一字节常数,即C1= $25
C2: DC .W $2538 ;定义一字常数,即C2= $2538
③常数赋值伪指令: 格式: <label>: EQU <expression> <label>: SET <expression> 功能:定义<label> 等于的值<expression>的值。 注意: <expression> 要有确定的值。 例: PI: EQU 3

飞思卡尔单片机编程

飞思卡尔单片机编程

关于Codewarrior 中的 .prm 文件网上广泛流传的一篇文章讲述的是8位飞思卡尔单片机的内存映射,这几天,研究了一下Codewarrior 5.0 prm文件,基于16位单片机MC9S12XS128,一点心得,和大家分享。

有什么错误请指正。

正文:关于Codewarrior 中的.prm 文件要讨论单片机的地址映射,就必须要接触.prm文件,本篇的讨论基于Codewarrior 5.0 编译器,单片机采用MC9S12XS128。

通过项目模板建立的新项目中都有一个名字为“project.prm”的文件,位于Project Settings->Linker Files文件夹下。

一个标准的基于XS128的.prm文件起始内容如下:.prm文件范例:NAMESENDSEGMENTSRAM = READ_WRITE DATA_NEAR 0x2000 TO 0x3FFF;ROM_4000 = READ_ONLY DATA_NEAR IBCC_NEAR 0x4000 TO 0x7FFF;ROM_C000 = READ_ONLY DATA_NEAR IBCC_NEAR 0xC000 TO 0xFEFF; //OSVECTORS = READ_ONLY 0xFF10 TO 0xFFFF;EEPROM_01 = READ_ONLY DATA_FAR IBCC_FAR 0x010800 TO 0x010BFF; EEPROM_02 = READ_ONLY DATA_FAR IBCC_FAR 0x020800 TO 0x020BFF; EEPROM_03 = READ_ONLY DATA_FAR IBCC_FAR 0x030800 TO 0x030BFF; EEPROM_04 = READ_ONLY DATA_FAR IBCC_FAR 0x040800 TO 0x040BFF; EEPROM_05 = READ_ONLY DATA_FAR IBCC_FAR 0x050800 TO 0x050BFF; EEPROM_06 = READ_ONLY DATA_FAR IBCC_FAR 0x060800 TO 0x060BFF; EEPROM_07 = READ_ONLY DATA_FAR IBCC_FAR 0x070800 TO 0x070BFF;PAGE_F8 = READ_ONLY DATA_FAR IBCC_FAR 0xF88000 TO 0xF8BFFF; PAGE_F9 = READ_ONLY DATA_FAR IBCC_FAR 0xF98000 TO 0xF9BFFF; PAGE_FA = READ_ONLY DATA_FAR IBCC_FAR 0xFA8000 TO 0xFABFFF; PAGE_FB = READ_ONLY DATA_FAR IBCC_FAR 0xFB8000 TO 0xFBBFFF; PAGE_FC = READ_ONLY DATA_FAR IBCC_FAR 0xFC8000 TO 0xFCBFFF;ENDPLACEMENT_PRESTART,STARTUP,ROM_VAR,STRINGS,VIRTUAL_TABLE_SEGMENT,//.ostext,DEFAULT_ROM, NON_BANKED,COPYINTO ROM_C000 ;OTHER_ROM INTO PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;//.stackstart,SSTACK,//.stackend,PAGED_RAM,DEFAULT_RAMINTO RAM;DISTRIBUTE DISTRIBUTE_INTOROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;CONST_DISTRIBUTE DISTRIBUTE_INTOROM_4000, PAGE_FE, PAGE_FC, PAGE_FB, PAGE_FA, PAGE_F9, PAGE_F8;DATA_DISTRIBUTE DISTRIBUTE_INTORAM;//.vectors INTO OSVECTORS;ENDENTRIES//_vectab OsBuildNumber _OsOrtiStackStart _OsOrtiStartENDSTACKSIZE 0x100VECTOR 0 _Startup//VECTOR 0 Entry//INIT Entry1 .prm文件组成结构按所含的信息的不同.prm文件有六个组成部分构成,这里仅讨论和内存空间映射关系紧密的三个部分,其他的不做讨论。

飞思卡尔中文手册

飞思卡尔中文手册
内部RAM位置初始化寄存器
Slide 6
TM
Freescale Semiconductor Confidential and Proprietary Information. Freescale™ and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. © Freescale Semiconductor, Inc. 2005.
内部EEPROM位置初始化寄存器
EEON 1 = EEPROM IS ENABLED 0 = EEPROM IS DISABLED
Slide 7
TM
Freescale Semiconductor Confidential and Proprietary Information. Freescale™ and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. © Freescale Semiconductor, Inc. 2005.
内部寄存器位置初始化寄存器
15 14 13 12
Slide 5
11 10 9 8 0 000
7654 3210 0000 0 0 0 0 0x1000
0
0 0 1
TM
Freescale Semiconductor Confidential and Proprietary Information. Freescale™ and the Freescale logo are trademarks of Freescale Semiconductor, Inc. All other product or service names are the property of their respective owners. © Freescale Semiconductor, Inc. 2005.

飞思卡尔9S12XS128 单片机教程

飞思卡尔9S12XS128 单片机教程

9S12XS128 单片机开发工具包清华Freescale MCU/DSP 应用开发研究中心9S12XS128单片机开发工具包 (1)概述 (3)9S12XS128单片机 (3)9S12XS128开发工具包组件 (3)9S12XS128开发板及与PC 通信 (4)9S12XS128 开发板 (4)开发板的硬件连接 (5)PC机的设置 (6)监控程序及监控命令详解 (8)命令详解 (8)复位、中断向量表 (12)用户可以使用的RAM空间 (12)编译器CodeWarrior for HCS12 使用方法入门 (13)建立工程文件 (13)编写main.c 程序 (15)定义存储空间分配 (17)应用程序的编译 (18)向开发板下载程序 (20)运行应用程序 (21)概述这里描述的是一套9S12XS128 系列单片机开发系统套件。

以后的更新的版本见清华Freescale单片机应用开发研究中心的网站:。

开发系统主要由两个部分组成,分别是调试下载用的TBDML和开发用目标板。

其中TBDML的使用请参见文档“BDM for S12(TTBDM)用户手册V 34.pdf”。

目标板是有异步串行口的驱动的基本系统。

针对9S12XS128 芯片我们编写了9S12XS128目标板监控程序,可以方便地完成应用系统的开发。

用户可以在此基础上设计自己所需的目标母板,完成项目的初期开发。

应用软件完成后,用开发工具板擦除监控程序,下载最终的应用程序。

9S12XS128 单片机S12XS 16 位微控制器系列针对一系列成本敏感型汽车车身电子应用进行了优化。

S12X 产品满足了用户对设计灵活性和平台兼容性的需求,并在一系列汽车电子平台上实现了可升级性、硬件和软件可重用性、以及兼容性。

S12XS 系列可以经济而又兼容地扩展至带XGate 协处理器的S12XE 系列单片机,从而为用户削减了成本,并缩小了封装尺寸。

S12XS系列帮助设计者迅速抓住市场机遇,同时还能降低移植成本。

MC9S12XS128单片机简介

MC9S12XS128单片机简介

MC9S12XS128 单片机简介1、HCS12X 系列单片机简介Freescale 公司的16 位单片机主要分为HC12 、HCS12、HCS12X 三个系列。

HC12核心是16 位高速CPU12 核,总线速度8MHZ;HCS12 系列单片机以速度更快的CPU12 内核为核心,简称S12 系列,典型的S12 总线速度可以达到25MHZ。

HCS12X 系列单片机是Freescale 公司于2005 年推出的HCS12 系列增强型产品,基于S12 CPU 内核,可以达到25MHz 的HCS12 的2-5 倍性能。

总线频率最高可达40 MHz。

S12X 系列单片机目前又有几个子系列:MC9S12XA 系列、MC9S12XB 系列、MC9S12XD 系列、MC9S12XE 系列、MC9S12XF系列、MC9S12XH 系列和MC9S12XS 系列。

MC9S12XS128 就是S12X 系列中的一个成员。

2、MC9S12XS128 性能概述MC9S12XS128 是16 位单片机,由16 位中央处理单元(CPU12X)、128KB 程序Flash(P-lash)、8KB RAM、8KB 数据Flash(D-lash)组成片内存储器。

主要功能模块包括:内部存储器内部PLL 锁相环模块2 个异步串口通讯SCI1 个串行外设接口SPIMSCAN 模块1 个8 通道输入/输出比较定时器模块TIM周期中断定时器模块PIT16 通道A/D 转换模块ADC1 个8 通道脉冲宽度调制模块PWM输入/输出数字I/O 口3、输入/输出数字I/O 口MC9S12XS128 有3 种封装,分别为64 引脚、80 引脚、112 引脚封装。

其全名分别为MC9S12XS128MAE、MC9S12XS128MAA、MC9S12XS128MAL。

MC9S12XS 系列具有丰富的输入/输出端口资源,同时集成了多种功能模块,端口包括PORTA、PORTB、PORTE、PORTK、PORTT、PORTS、PORTM、PORTP、PORTH、PORTJ 和PORTAD 共11 个端口。

mc9s12xs128内存映射和数据flash操作

mc9s12xs128内存映射和数据flash操作

解答
16位地址,寻址范围为0~65536,即64k MC9S12XS128的RAM为8K,P-FLASH为 128K,D-FLASH为8K。

*p=0x8000,访问的是P-FLASH

MC9S12XS128内存结构


MC9S12XS128使用global adress(全局地 址)对内存划分地址空间。全局地址共 23bit,寻址能力达到8M 使用全局地址划分的内存空间如下: 0x10_0000~0x10_1FFF:8K d-flash 0x7E_0000~0x7F_FFFF:128K p-flash 0x0F_E000~0x0F_FFFF:8K 非分页RAM 问题:CPU和BDM都是使用16bit local address(本地地址)我们在程序中定义的 指针变量默认都是near型,即16位地址, 如何解决?
D-flash状态寄存器
注意: 1. 开始新的FLASH命令之前必须等待上 一个命令结束,即需要查询CCIF标志。 2. 在启动flash命令之前,FSTAT寄存器中 的ACCERR和FPVIOL两个标志位必须 被清除,否则无法启动新的FLASH操 作。

完整的擦除操作
while(FSTAT_CCIF==0); if(FSTAT_ACCERR) //判断并清除标志位; FSTAT_ACCERR=1; if(FSTAT_FPVIOL) //判断并清除标志位; FSTAT_FPVIOL=1; FCCOBIX_CCOBIX=0x00; FCCOBHI=0x12; //高字节写入擦除命令 FCCOBLO=0x10; //低字节d-flash全局地址高8位,固定 为0x10 FCCOBIX_CCOBIX=0x01; FCCOB=ADDR16; //写入低16位的地址 FSTAT_CCIF=1; //启动执行命令 while(FSTAT_CCIF==0); //等待执行完成

MC9S12HY64局部地址、全局地址与逻辑地址的理解

MC9S12HY64局部地址、全局地址与逻辑地址的理解

MC9S12HY64局部地址、全局地址与逻辑地址的理解一直以来被S12HY64的局部地址与全局地址的对应关系所困扰,今天通过看Datasheet貌似有了进一步的理解,记录下来以备参考,当然这些理解也不一定都对。

S12系列单片机总线宽度为16位,从总线宽度来看其最大寻址空间为2^16=64KB,但是这个系列的单片机最大有256KB全局地址空间,那么是如何用16位的总线寻址这么大的地址空间呢?这里就涉及到局部地址和全局地址的概念了。

所谓的局部地址可以理解为寻址寄存器的值(例如51单片机的程序计数器PC是用于ROM寻址的寄存器),范围为0x0000~0xffff,共64KB;全局地址包括RAM、DFlash、PFlash、寄存器等所占用的地址空间,范围为0x0000~0x3ffff,共256KB。

S12的全局地址分为所谓的Paged Address和Unpaged Address,即通过页映射访问的和非页映射访问的。

先拿比较容易理解的Unpaged Address来说,例如寻址寄存器的值处于0x4000~0x7fff范围时,等同访问全局地址0x34000~0x37fff中的某个字节,也就是说对于Unpaged Address,局部地址的某个固定范围是和全局地址的某个固定范围是对应的。

下面说下比较复杂一点的Paged Address是如何访问到的。

对于Paged Address,则需要通过页映射的方式来访问了,这里涉及到全局地址的页的概念、页映射寄存器PPAGE和局部地址中用于页映射的地址范围0x8000~0xbfff。

全局地址最大可达256KB,分为16个Page,每个Page的大小为16KB,页号为0x00~0x0f(当然对于PFlash较小的单片机,全局地址的某些范围是无法访问的,通俗理解就是S12单片机的全局地址范围是0x0000~0x3ffff,根据PFlash 的大小适当将其放置于全局地址的某些范围中。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

飞思卡尔MC9S12系列单片机地址影射以及分页问题
对于用MCU的人来说,不一定要明白HCS12(x) memory map的机制和联系。

因为如果没有系统地学习操作系统和编译原理之类的课程,确实有些难度。

并且,对于DG128 XS128这样的MCU,默认的emory 分配方式已经够用了。

从这个意义上讲,搞清楚memory map似乎不必要。

但是,你有没有RAM不够用的情况?有没有想定义变量到FLASH ROM的情况?有没有因为欲提高寻址效率而定义变量到非分页区的情况?有没有写EEPROM但没写成功的情况?
飞思的memory非常灵活,通过地址映射来提高效率是芯片制造商的一惯作风(当然,首先这个CPU 要有这种寻址和内存映射转换机制),但是,纵观HCS12(x) memory map的东西,真是做到极限了。

用我以前的话讲是,用有限的资源获得无限的好处了。

看看DG128,64K的逻辑空间,映射之后RAM EEPROM FALSH ROM,都可以充分发挥作用,而且扩展FLASH也方便。

而XS128更高级一筹,有专门的MMC管理HCS12(x) memory map。

我大体上了解这两个片子的HCS12(x) memory map,因此就此谈谈理解和看法,如有错误,请大家不吝指出
首先,说说6个概念。

1
memory map 地址映射,不要理解成内存映射,内存是RAM。

2 为什么要映射?因为CPU的寻址是对物理地址操作,但是单片机的RESET之后只有相对地址。

相对地址,我理
解为是一块一块的,不是连断的。

相对地址,顾名思义,是个相对的,没有映射之前,CPU是找不到他的,也
用不了相对地址的数据。

粘一句百度上的解释:为了保证CPU执行指令时可正确访问存储单元,需将用户程序
中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程称为地址映射。

3 RAM,这个不多说,是存变量和栈的东西,高速,掉电即失。

4 EEPROM,这个是一种特别的FLASH。

一般用来保存少量数据,掉电不会丢失。

FLASH也是非易失的,SD 卡就是
一种FLASH。

EEPROM和普通FLASH的区别,在于读写时的字节操作上。

这个我基本上没有体会,因为是相当底层
的东西。

5 FLASH和ROM,在HCS12(X)里,建议把FLASH和ROM等同起来理解。

大家的程序就是放在这里面的。

还有一个
CONST变量和中断向量也是存在这里面的。

ROM可能有个误区,只能读不能写,一次性的,不错。

但是,有加个
前提,应该是可控的ROM。

6 还有一个重要的register 空间,这个是存放I/0地址和单片机可编程寄存器的空间,是厂家定义的。

在头文件里可以看到。

如extern volatile PORTABSTR _PORTAB @(REG_BASE + 0x00000000)就是典型的register 空间映射。

我把memory map理解成为3个内容:一个是映射管理,一个是分页机制,一个是寻址的问题。

映射管理,就
是单片机RESET之后,逻辑地址和物理地址之间的关系。

分页机制的产生主要由于16位寻址能力有限,需要分
页解决,另外在虚拟内存管理上可以获得更多的优势。

至于,CPU寻址的问题,这个就不深纠了。

这次以DG128的为例,XS128的稍复杂一些。

理解了DG128的,XS128的问题就不大。

先说一说映射管理:DG128里通过设置INITRG、INITRM、INITEE来实现映射。

具体的设置看DS吧。

默认情况
下:register 空间映射到0X0000到0x03FF,这个优先级最高。

RAM空间映射到0x0400-0X1FFF,看到没有,实际
上只有7K,也就是说能用的RAM只有7K。

但是,DG128的RAM有8K的逻辑空间啊。

所以,可以改INITRG、INITRM
、INITEE重映射以提高RAM的实际可用空间。

怎么改,看需要了。

WJ在这里逻嗦一句,可以看看PE 是怎么改的。

而FLASH映射了3个,有两个非分页地址0x4000-0x7FFF和0xC000-0xFEFF。

还有一个分页地址,这一个分页地
址有6个页面。

6个页面占用一个分页窗,用一个逻辑空间,如何让这6个页面协作工作并让CPU能找到他们呢?
这就是分页管理机制的内容。

这6个页面分别是:
PAGE_38 = READ_ONLY 0x388000 TO 0x38BFFF;
PAGE_39 = READ_ONLY 0x398000 TO 0x39BFFF;
PAGE_3A = READ_ONLY 0x3A8000 TO 0x3ABFFF;
PAGE_3B = READ_ONLY 0x3B8000 TO 0x3BBFFF;
PAGE_3C = READ_ONLY 0x3C8000 TO 0x3CBFFF;
PAGE_3D = READ_ONLY 0x3D8000 TO 0x3DBFFF;
上面说的大家可以新建一个DG128工程,到PRM文件里看。

再看看分页管理机制:DG128里只有FLASH空间可以分页,而XS128里,分页的东西太多了。

DG128里FLASH分
页是通过PPAGE寄存器搞定的。

PPAGE是5位寄存器,CPU12内核规位每页只能有16KB。

因此DG128的FLASH寻址空
间就是2^5*16KB=512KB了。

首先问一个问题:
中断函数为什么要加:#pragma CODE_SEG __NEAR_SEG NON_BANKED 这个声明?这个声明是干什么用的?这要还是要从FLASH分页和非分页的区别说起。

下面详细说一说,FLASH里非分页和分页的使用。

要明白一点,分页是不可见的,要用的时候PPAGE 参与寻
址。

1 FLASH里非分页工作机制
FLASH一共为128K,一页是16K,那么应该有8页才是,但是实际只有6个分页。

有2个非分页放在4000-7FFF
,和C000-FFFF两个逻辑地址窗里。

那么,当程序的寻址在64K之内(2^16=64K,16位机的寻址能力是64K)时,
就不用分页了,直接使用那两个非分页的数据。

实际上,3E页 3F页是可见的,其实他们就是那2个非分页的映
射。

因此,使用非分页FLASH,就不须设置PPAGE寄存器,直接使用逻辑地址即可。

见图1。

这点我们可以从以下看出:
/* non-paged FLASHs */
ROM_4000 = READ_ONLY 0x4000 TO 0x7FFF;
ROM_C000 = READ_ONLY 0xC000 TO 0xFEFF;
PLACEMENT
NON_BANKED, INTO ROM_C000/*, ROM_4000*/;
很直观地看出,把这两个可以直接使用逻辑地址的页面设为NON_BANKED, 那么中断函数放在
NON_BANKED里
,就可以把函数放在64K的寻址程序段中。

这么一来,进中断就方便多了,效率也高很多。

这就是对本文开篇
的解释。

2 FLASH里分页工作机制
好了,上面是3E页 3F页是可见的分页区,还有3D 3C 3B 3A 39 38不可见的分页区。

当你的程序要寻址
64K以外的空间,即不是是可见的3E页 3F页时,就要涉及分页了。

PPAGE是MMC模块的东西,我搞了个图片大家看看,如图2。

每一页在DG128中的逻辑地址都是由PPAGE 中的
页号和重叠窗口内地址组成的24位绝对地址。

通过设置寄存器PPAGE,可以使用全部的FLASH空间。

例如:程序
要将数据存入$3D页,设置PPAGE的值为$3D,那么逻辑地址范围说是$3D8000-$3DBFFF。

有一点要注意:为了分页描述的完整性,可以如下理解:对于3E页 3F页有两个逻辑地址映射到物理地址。

拿3E页来说,有$004000-$007FFF和$3E8000-$3EBFFF。

对于程序是如何寻址,这个是内核的东西,大家可以看看CPU这个文档。

通过分析,相信大家知道地址这个东西是非常有用的吧。

下次说说XS128,XS128的RAM FLASH EEPROM 都可
以分页。

更高级,更主动,编程弹性更大。

相关文档
最新文档