飞思卡尔8位单片机MC9S8Flash存储器的在线编程
MC9S08系列单片机FLASH存储器的在线编程
Flash保护寄存器
地址0x1824,FPROT与NVPROT FPROT只读, NVPROT可写,复位后 MCU自动将NVPROT的值给FPROT 第1位Flash保护禁止位,=1Flash不保 护 前7位在FPDIS=0时设置保护的区域
Flash状态寄存器 FSTAT
地址0x1825,使用最频繁 第7位,Flash命令缓冲区空标志位,=1可以接受 新命令。 第6位只读,Flash命令完成标志位 第5位侵害保护标志位,=1表示试图对保护区域 进行擦写操作。 第4位访问出错标志位。 第2位只读,Flash空白标志位,执行空白检测命 令后有意义。
我们需要的是用户模式 (例程见FlashProgram,内有源代码)
与Flash相关的寄存器
1、HCS08系列MCU的Flash存储器 编程方式与HC08有很大差异 2、S08与Flash相关的寄存器有6个 3、普通08与Flash相关的寄存器只 有2个
Flash时钟分频寄存器 FCDIV
地址0x1820。 第7位只读,=1表示复位后FCDIV已被改写, 可以对Flash进行擦写。 第6位设置Flash分频,=1时钟为总线时钟的 1/8,=0Flash分频器时钟输入就是总线时钟。 低5位设置Flash时钟分频器的分频因子。
在线编程的作用
1、在程序运行过程中改变非易失 存储器Flash的数据,可实现在线 标定。 2、可重复擦写十万次以上 3、掉电后数据仍然存在,用来保 存一些参数或重要数据,可靠性好。
Flash存储器的两种编程模式
1、写入器模式,需要硬件支持,让 单片机进入背景调试(BDM)状态, 编程器常采用这种方式。 2、用户模式,在用户程序运行的过 程中对Flash进行擦写。
Flash擦写例程基本框架
飞思卡尔8位单片机MC9S0813程序LCD编程C语言程序例
*参 数:无 *
*返 回:无 *
*-----------------------------------------------------*/
void LcdInit(void)
{
unsigned char i;
LcdData_D=0b11111111; //数据口为输出
Lcd_Command(0b00010100); //光标右移一个字符位,AC自动加1
Lcd_Command(0b00001100); //开显示,关光标显示,不闪烁
}
/*Lcd_Command:执行给定的cmd命令------------------------*
*功 能:执行给定的cmd命令,且延时 *
LcdCtrl&=~(1<<LcdRS); //RS、R/W=00,写指令
LcdCtrl&=~(1<<LcdRW);
Lcd_Command(0b10000000); //后7位为DDRAM地址0x00
LcdCtrl|=1<<LcdRS;//RS、R/W=10,写数据到DDRAM中
LcdCtrl&=~(1<<LcdRW);
LcdData=cmd;//把指令码送到Lcd数据传送口
LcdCtrl|=(1<<LcdE); //Lcd开始接收数据
asm("NOP");
asm("NOP");
asm("NOP");
LcdCtrl&=~(1<<LcdE); //Lcd结束接收数据
飞思卡尔8位单片机MC9S08第5章 HC08 CPU与汇编基础
5.2 寻址方式
(6)八位偏移量变址方式(IX1,Indexed,8-bit offset addressing mode)
8位偏移量变址是双字节指令,CPU把变址寄存器HX的内容和指令 第二个字节内容相加,其和便是操作数地址。下述指令属于IX1寻址方 式。
5.1 HC08 CPU基本构成
(4)程序计数器PC(Program Counter)
程序计数器PC也是16位的,可寻址范围达64KB。PC存放下一 条指令的地址,在执行转移指令时存放转移地址,在执行中断指令时 存放中断子程序入口地址。复位时,程序计数器PC装入地址$FFFE 和$FFFF中的内容。一般地,地址$FFFE和$FFFF中的内容是复位的 入口地址,这样,复位后,程序能够从复位入口地址开始执行程序。 复位入口地址也称复位向量地址或复位矢量地址(Reset vector address),意味着复位状态过后,PC指向该处,从这里执行程序。
(9)存储器:直接地址—直接地址寻址方式(DD, Direct to direct addressing Mode)
在存储器的四种数据直接传送的寻址方式中,欲传送的数据直接从 源存储单元送向目的存储单元,勿需寄存器中转。在本寻址方式中,源 地址与目标地址由指令直接给出。只有一条指令为DD寻址方式:
CBEQ addr8,X+,rel ;若A=(HX+addr8)则转移,HX+1→HX
(2)立即寻址方式(IMM,Immediate addressing mode)
立即寻址,是在指令中直接给出操作数。这种指令是双字节指令, 第一个字节是操作码,第二个字节是参与操作的立即数。立即寻址指令 通常是对立即数和累加器内容或变址寄存器内进行操作。下述指令属于 IMM寻址方式。
1飞思卡尔8位单片机MC9S08JM60开发板实践教程-60页word资料
第一章搭建实验环境1、实验电路板及下载器实物图片2、实验电路图本实验图包含两大部分,分别是CPU.SCH和实验资源.SCH。
CPU采用飞思卡尔8位单片机MC9S08JM60CLD,(电路图介绍)图1-3实验资源部分电路图1-4LCD串口1602液晶电路图1-5RS232接口电路图1-6数码管显示电路图1-7发光管、ad转换以及按键电路图1-83、集成开发软件环境的建立1〉运行文件CW_MCU_V6_3_SE.EXE,在电脑C盘安装飞思卡尔8位(及简化32位)单片机集成开发环境codewarrior6.3版本2〉运行USBDM_4_7_0i_Win,这个程序会在c盘的程序文件夹下增加一个目录C:\Program Files\pgo\USBDM 4.7.0,在这个目录下a>C:\Program Files\pgo\USBDM 4.7.0\FlashImages\JMxx下的文件USBDM_JMxxCLD_V4.sx是下载器的固件文件;b>C:\Program Files\pgo\USBDM4.7.0\USBDM_Drivers\Drivers下有下载器的usb驱动.因此在插入usb下载器,电脑提示发现新的usb硬件的时候,选择手动指定驱动安装位置到以上目录即可。
3〉运行USBDM_4_7_0i_Win之后,还会在目录:C:\Program Files\Freescale\CodeWarrior for Microcontrollers V6.3\prog\gdi下增加一些文件,从修改时间上来看,增加了6个文件,这些文件是为了在codewarrior集成开发环境下对usb下载器的调试、下载的支持。
4、C语言编程基础第二章 LED闪烁程序编写过程1、新建工程运行单片机集成开发环境codewarrior IDE出现如下界面●Create New Project :创建一个新项目工程●Load Example Project :加载一个示例工程●Load Previous Project :加载以前创建过的工程●Run Getting started Tutorial:运行CodeWarrior软件帮助文档●Start Using CodeWarrior:立刻使用CodeWarrior点击Create New project按钮,以创建一个新的工程,出现选择CPU的界面如下,请选择HCS08/HCS08JM Family/MC9S08JM60,在右边的Connection窗口可以选择最后一个开源下载器HCS08 Open Source BDM。
飞思卡尔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-记录实际上是由五个部分组成的字符串的集合。
飞思卡尔8位单片机-第3章 单片机最小系统设计
3.2.1 MC9S08QG8内部时钟源
时钟源模块内部结构
31.25kHz 1分频
2分频 16MHz
8MHz
FLL
内部时钟源工作模式
FEI: FLL engaged internal mode; FEE: FLL engaged external mode; FBI: FLL bypassed internal mode; FBILP: FLL bypassed internal low power mode; FBE: FLL bypassed external mode FBELP: FLL bypassed external low power mode stop:
内部参考时钟ICSIRCLK的使能控制 1-ICSIRCLK允许;0-ICSIRCLK停止
控制当ICS进入停止状态时内部参考时钟是否保持使能. 1-如果IRCLKEN设置或者ICS在进入停止前为FEI,FBI或者FBILP模式时,内部参考时钟 保持使能. 0-ICS进入停止状态时,内部参考时钟也禁止。
(1 MHz to 40 MHz for external clock source) 0 Low frequency range selected for the external oscillator of 32 kHz to 100 kHz
(32 kHz to 1 MHz for external clock source)
extern volatile byte NVICSTRM @0x0000FFAF;
if (NVICSTRM != 0xFF) {
ICSTRM = NVICSTRM; // load trim value if location not blank
飞思卡尔8位单片机MC9S08JM60开发板实践教程
第一章搭建实验环境系统时钟设置#include "App\Include\App.h"#ifndef _MCG_C#define _MCG_C//oscillator 12MHZ 倍频为24MHZ()先8分频后16倍频void S_MCGInit(void){/* the MCG is default set to FEI mode, it should be change to FBE mode*//************************************************************************** ***********MCGC2[7:6] BDIV总线频率分频因子–选择由MCGC1寄存器中CLKS位决定的时钟源的分频。
这控制总线频率。
00 编码0 –时钟1分频01 编码1 –时钟2分频(复位后默认)10 编码2 –时钟4分频11 编码3 –时钟8分频[5] RANGE频率范围选择–选择外部振荡器或者外部时钟源的频率范围。
1 选择1MHz到16MHz外部振荡器的频率范围。
(1MHz到40MHz的外部时钟电源)的高频率范围0 选择32kHz到100kHz外部振荡器的频率范围。
(32kHz到1MHz的外部时钟电源)的低频率范围[4] HGO高增益振荡器选择–控制外部振荡器操作模式。
1 配置外部振荡器为高增益运行0 配置外部振荡器为低功耗运行[3] LP低功耗选择–控制在忽略模式中FLL(或者PLL)是否为无效1 FLL(或PLL)在忽略模式(低功耗)中为无效的。
0 FLL(或PLL)在忽略模式中为无效的。
[2] EREFS外部参考时钟选择–为外部参考选择时钟源1 选择振荡器0 选择外部时钟源[1] ERCLKEN外部参考时钟使能–使能外部参考时钟作为MCGERCLK1 MCGERCLK激活0 MCGERCLK 无效[0] EREFSTEN外部参考时钟停止使能MCGC2 0b0011 0110 激发外部时钟(晶振)(没有使能)*************************************************************************** ***********/MCGC2=MCGC2_RANGE_MASK|MCGC2_HGO_MASK|MCGC2_EREFS_MASK|MCGC2_ERCLK EN_MASK;while(!MCGSC_OSCINIT);//MCGSC寄存器中OSCINIT(第1位)为1,表示由EREFS位选择的晶振被初始化。
flash存储器在线编程
flash存储器在线编程Flash存储器技术趋于成熟,应用广泛,它结合了OTP存储器的成本优势和EEPROM的可再编程性能,是目前比较理想的存储器。
Flash存储器具有电可擦除、无需后备电源来保护数据、可在线编程、存储密度高、低功耗、成本较低等特点。
一般我们都认为Flash储存器具备固有不挥发性、易更新性,可靠性好的基本特性。
从Flash储存器的基本特点可以看出,在单片机中,可以利用F1ash存储器固化程序,一般情况下通过編程器来究成F1ash存储器工作于这种情况,叫监控模式(Monitor mode)或写入器棋式,这与一般的EPROM、0TP、EEPROM装入程序的含义相似。
另一方面,由于Flash存储器具有电可擦除功能,因此,在程序运行过程中,有可能对F1ash存储区的教据或程序进行更新,Flash存储器工作于这种情况,叫用户模式式(User mode)或在线编程模式。
Flash储存器的两种編程模式:1、监控模式或写入器模式2、用户模式或在线编程模式,两种模式各有优缺点:监控模式需要外部硬件支持,但不需要单片机内部程序的存在,所以适合对新出厂芯片进行编程写入,或是对芯片进行整体擦除与写入;用户模式可以在单片机正常工作时进入,所以常用在程序运行过程中对部分Flash存储器的一些单元内容进行修改,特别适合于目标系统的动态程序更新和运行数据的存储。
一般来说,两种模式对Flash存储器的编程操作的程序是一致的,差别在于调用这些程序的方式和环境。
下面我们来详细讲解下Flash储存器在线编程模式对Flash编程的基本操作有两种:擦除(Erase)和写入(Program)。
擦除操作的含义是将存储单元的内容由二进制的0变成1,而写入操作的含义,是将存储单元的内容由二进制的1变成0。
擦除及写入操作都是通过设置或清除Flash存储器的控制寄存器(FLCR)中的某个或某些位来完成的。
Flash命令的执行流程GP32单片机Flash存储器在线编程汇编语言实例首先给出GP32单片机的Flash编程子程序,随后给出在用户模式下进行Flash在线编程的实例,并通过与PC机串行通信方式进。
(整理)飞思卡尔8位单片机MC9S08JM60开发板实践教程
第一章搭建实验环境系统时钟设置#include "App\Include\App.h"#ifndef _MCG_C#define _MCG_C//oscillator 12MHZ 倍频为24MHZ()先8分频后16倍频void S_MCGInit(void){/* the MCG is default set to FEI mode, it should be change to FBE mode*//************************************************************************** ***********MCGC2[7:6] BDIV总线频率分频因子–选择由MCGC1寄存器中CLKS位决定的时钟源的分频。
这控制总线频率。
00 编码0 –时钟1分频01 编码1 –时钟2分频(复位后默认)10 编码2 –时钟4分频11 编码3 –时钟8分频[5] RANGE频率范围选择–选择外部振荡器或者外部时钟源的频率范围。
1 选择1MHz到16MHz外部振荡器的频率范围。
(1MHz到40MHz的外部时钟电源)的高频率范围0 选择32kHz到100kHz外部振荡器的频率范围。
(32kHz到1MHz的外部时钟电源)的低频率范围[4] HGO高增益振荡器选择–控制外部振荡器操作模式。
1 配置外部振荡器为高增益运行0 配置外部振荡器为低功耗运行[3] LP低功耗选择–控制在忽略模式中FLL(或者PLL)是否为无效1 FLL(或PLL)在忽略模式(低功耗)中为无效的。
0 FLL(或PLL)在忽略模式中为无效的。
[2] EREFS外部参考时钟选择–为外部参考选择时钟源1 选择振荡器0 选择外部时钟源[1] ERCLKEN外部参考时钟使能–使能外部参考时钟作为MCGERCLK1 MCGERCLK激活0 MCGERCLK 无效[0] EREFSTEN外部参考时钟停止使能MCGC2 0b0011 0110 激发外部时钟(晶振)(没有使能)*************************************************************************** ***********/MCGC2=MCGC2_RANGE_MASK|MCGC2_HGO_MASK|MCGC2_EREFS_MASK|MCGC2_ERCLK EN_MASK;while(!MCGSC_OSCINIT);//MCGSC寄存器中OSCINIT(第1位)为1,表示由EREFS位选择的晶振被初始化。
飞思卡尔8位单片机MC9S0813LCD与LED编程
③ 16×2(每行16个字符,共 2行)
字符位置 1 2 ...... 8 9 10 ...... 16 第一行地址 00 01 ...... 07 08 09 ...... 0F 第二行地址 40 41 ...... 47 48 49 ...... 4F
④ 16×4(每行 16个字符,共 4行)
(10)写数据到DDRAM或CGRAM(Write Data to DDRAM
or CG RAM)
RS、R/=10,DATA= 实际数据。 该指令根据最近设置的地址,将数据写入 DD
RAM 或CG RAM 中。实际上,数据被直接写入 DR,再由内部操作写入地址指针所指的 DD RAM 或CG RAM 。运行时间 (250KHz):40 μs。
E
DB0~ DB3
DB4~ DB7
E1 ~E2
电平
H/L H/L H/L H→L
方向
引脚含义说明
电源地
电源 (+5V)
液晶驱动电源( 0~5V)
输入
寄存器选择; 1-数据寄存器 0- 数据寄存器
输入
读写操作选择: 1-读操作 0- 写操作
输入
使能信号: 效
R/W
=0 ,E 下降沿有效 ,
R/W=1 ,E=1 有
(3)输入方式设置(Entry Mode Set )
RS、R/=00,DATA=0000 00AS。该指令设置光标、画面的移动方 式。下面解释 A 、S位的含义。 A=1: 数据读写操作后, AC 自动增 1; A=0: 数据读写操作后, AC自动减1。S=1:当数据写入 DD RAM显示将 全部左移( A=1)或全部右移 (A=0),此时光标看上去未动,仅仅是显 示内容移动,但从 DD RAM中读取数据时,显示不移动; S=0:显示不 移动,光标左移(A=1)或右移(A=0)。
飞思卡尔8位单片机MC9S08第16章 08系列MCU编程器的开发
16.2.2 HC08编程器软件设计思想
实现空白芯片写入的软件设计思想是: ① 被写入的目标MCU工作于监控模式。 ② 主机将擦写FLASH程序的二进制代码以及要写入的数据写入目 标MCU的内存区。 ③ 主机向目标MCU发送RUN监控命令,运行第②步写入目标 MCU内存区的程序。 在这3步的执行过程中,第2步写入目标MCU内存的程序设计有一 定难度。需要综合考虑内存分配、子程序调用的参数传递方法、程序 执行完成后如何返回监控状态(等待接收字节状态),完成其他页面的写 入操作等问题。
MCU通过特定的I/O口接收主机发送的字节数据,判断是否是监控 命令,如果是,执行相应的动作。监控命令共有6条,每条监控命令由 操作码和操作数组成。下表1列出了各条监控命令的格式和功能。
命令 READ WRITE IREAD 格式 $4A $4A 高字节 高字节 低字节 低字节 数据 $49 $49 高字节 高字节 低字节 低字节 数据 数据 $1A $1A 数据 数据 功能 读出指定单元内容(RAM或Flash) 向指定单元写数据(RAM) 读取上次访问的地址+1、+2处的 内容(RAM或Flash) 向上次访问的地址+1处写入一个 数据(RAM) 读堆栈指针高字节和低字节 执行RTI指令
VDD 4096+32CGMXCLK CYCLES RST 24BUS CYCLES PTA7 BY TE1 1 256 BUS CYCLES(最少) BY BY TE2 TE8 4 1
···
来自主机的数据 PTA0
CO M MA ND 1 2 BR EA K 4 1 COM MAND ECHO
MCU发送的数据
VCC GND PTD0 PTD2 PTD4
VCC
飞思卡尔8位单片机MC9S08 06 通用IO与第一个汇编程序
主要内容 MC68HC908GP32的普通I/O 汇编程序编程框架 08汇编语言编译过程所涉及的文件 SD-HC08嵌入式MCU在线编程集成开发系统
6.1 MC68HC908GP32的普通 的普通I/O 的普通
所谓普通I/O,即基本的输入 输出 有时也称为并行I/O。 输出, 所谓普通 ,即基本的输入/输出,有时也称为并行 。作为普 通输入引脚, 内部程序可以读取该引脚, 通输入引脚,MCU内部程序可以读取该引脚,知道该引脚是“1”(高 内部程序可以读取该引脚 知道该引脚是“ ( 电平) ),即开关量输入 电平)或“0”(低电平),即开关量输入。作为普通输出引脚,MCU (低电平),即开关量输入。作为普通输出引脚, 内部程序向该引脚输出“ (高电平) ),即开关量 内部程序向该引脚输出“1”(高电平)或“0”(低电平),即开关量 (低电平), 输出。 单片机有5个普通 输出。MC68HC908GP32单片机有 个普通 口,分别是 口、B口、 单片机有 个普通I/O口 分别是A口 口 C口、D口、E口。它们中的大部分具有双功能,本节仅讨论它们作为 口 口 口 它们中的大部分具有双功能, 普通I/O功能时的编程方法。 普通 功能时的编程方法。 功能时的编程方法
6.1 MC68HC908GP32的普通I/O
6.1.1 A口 口
A口的 根引脚与键盘中断模块的引脚复用,这里只讨论 口作为 口的8根引脚与键盘中断模块的引脚复用 这里只讨论A口作为 口的 根引脚与键盘中断模块的引脚复用, 普通I/O口的功能 口的功能。 普通 口的功能。
(1)A口的寄存器 ) 口的寄存器
6.1 MC68HC908GP32的普通I/O
口数据方向寄存器( C,DDRC) ① C口数据方向寄存器(Data Direction Register C,DDRC) C口数据方向寄存器(DDRC)的地址是:$0006,由于对应引脚只 口数据方向寄存器( 口数据方向寄存器 )的地址是: , 的第6~ 位分别记为 位分别记为DDRC6~DDRC0, 有7根,最高位没有意义。DDRC的第 ~0位分别记为 根 最高位没有意义。 的第 ~ , 这些位分别控制着C口引脚 口引脚PTC6~PTC0是输入还是输出,含义参考 口 是输入还是输出, 这些位分别控制着 口引脚 ~ 是输入还是输出 含义参考A口 说明。复位时DDRC为$00。 说明。复位时 为 。 口数据寄存器( Register,PTC) ② C口数据寄存器(Port C Data Register,PTC) C口数据寄存器(PTC)的地址是:$0002,PTC的第 ~0位分别记 口数据寄存器( 的第6~ 位分别记 口数据寄存器 )的地址是: , 的第 口的相应说明。 为PTC6~PTC0。含义请类比 口、B口的相应说明。 ~ 。含义请类比A口 口的相应说明 口上拉电阻允许寄存器( ③ C口上拉电阻允许寄存器(Port C Input Pullup Enable Register,PTCPUE) Register,PTCPUE) C口上拉电阻允许寄存器(PTCPUE)的地址是:$000E。PTCPUE 口上拉电阻允许寄存器( 口上拉电阻允许寄存器 )的地址是: 。 的第6~ 位分别记为 位分别记为PTCPUE6~PTAPUE0。含义请类比 口的相应说明。 口的相应说明。 的第 ~0位分别记为 ~ 。含义请类比A口的相应说明
Flash存储器在线编程
Flash状态寄存器
FSTAT(Flash Status Register—FSTAT)的地址是$1825
数据 位 定义 复位 D7 FCBE F 1 D6 FCCF 1 D5 FPVI O 0 D4 FACC ER 0 D3 D2 FBLA NK位 0 D1 D0
未定 义
0
未定 义
0
未定 义
表92列出了对flash访问的命令字节数据d7d6d5d4d3d2d1d0定义fcmd7fcmd6fcmd5fcmd4fcmd3fcmd2fcmd1fcmd0复位923flash存储器的编程过程flash命令的执行步骤向flash地址中写入一个数据向flash命令寄存器fcmd中写入需要执行的命令执行命令flash命令的执行流程看下面的两个流程图aw60flash编程例程图aw60flash批量写入流程图flash命令出错的状况在执行以下操作时会导致出错faccerr自动置1向fcbef位写0取消一个命令的执行93aw60的flash在线编程c语言实例931flash存储器的擦除及写入c语言子程序由于aw60内部的监控rom中没有固化flash编程子程序要在运行中能对flash进行在线编程初始装入的用户程序必须包含对flash的擦除及写入子程序擦除和写入流程的一些公共操作擦除和写入操作的代码必须放在内存中执行编译完后对应机器码字节保存到下表中的volatileunsignedcharpgm57的数组中
PRDIV8
1 0 0
DIV5:DIV 0 12 49 39
fFCLK
192.3KHz 200KHz 200KHz
擦写的时 钟脉冲 5.2µs 5µs 5µs
4MHz
2MHz 1MHz 200KHz 150KHz
0
飞思卡尔8位单片机MC9S08 15 程序 CAN通信接口 程序
15.4.2 控制寄存器(1)MSCAN08模式控制寄存器0 (Module Control Register 0,CMCR0)模式控制寄存器0(CMCR0)定义了MSCAN08模块的同步状态等有关工作方式。
地址:$0500SYNCH —Synchronized Status:同步状态。
SYNCH =1,MSCAN08与CAN总线同步;SYNCH =0,MSCAN08与CAN总线不同步。
TLNKEN —Timer Enable:时钟使能。
TLNKEN =1,MSCAN08时钟信号输出连接到片上时钟输入;TLNKEN =0,MSCAN08不连接到时钟输入。
SLPAK —Sleep Mode Acknowledge:睡眠模式确认。
SLPAK标志位指示MSCAN08是否处于睡眠模式,SLPAK =1,表示MSCAN08处于内部睡眠模式;SLPAK =0,不在内部睡眠模式。
SFTRES —Soft Reset:软复位。
SFTRES =1,MSCAN08处于软复位状态;SFTRES =0,MCAN08处于正常运行状态。
当SFTRES被置为1时,MSCAN08立即进入软复位状态。
此时,MSCAN08所有正在进行的收发操作都被中止,且不再与CAN总线保持同步。
只有在软复位状态下,才能对寄存器MCR1、BTR0、BTR1、IDAC、IDAR0-IDAR3、IDMR0-IDMR3进行写操作。
当该位清0时,MSCAN08将在11个隐性位后与总线保持同步。
(2)MSCAN08模式控制寄存器1 (Module Control Register 1,CMCR1)模式控制寄存器1定义了MSCAN08模块的时钟源、唤醒模式及工作方式。
地址:$0501LOOPB —Loop Back Self-Test Mode:回环自测模式位。
LOOPB =1,激活回环自测模式;LOOPB =0,正常运行模式。
当处于回环自测模式时,CAN RX引脚被忽略,CAN TX引脚输出隐性值,MSCAN08将自己发送的报文当成是从远程节点上发送过来的报文进行接收,并产生发送和接收中断。
在MC9RS08KA8上实现可编程数据存储
在MC9RS08KA8上实现可编程数据存储1 绪论对于低端产品的市场来说,MC9RS08KA8(RS08系列)微控制器是飞思卡尔的通用8位器件。
RS08KA器件经过特定的工艺使得应用更有效率、更好的性价比,这种应用需要一个小的存储容量。
它继承了S08大部分的核心结构和外围设备,除了由于廉价简单的核心设计的本性而只有有限的性能。
二者的一个重要区别是RS08KA有一个上电芯片闪存。
它没有页擦除模式或关联的内装电荷泵电路去产生疏忽的flash的重编程序所需的高电压,这使得RS08很大程度上不同于传统的应用于S08系列flash重编程序设计方法。
如果外部有个12V电压,它依然可能去重编部分上电芯片flash内容。
如果有小量的数据需要用一滚动存储器机制被置一一次或有限多次,这种方法是可行的。
2 基于RS08的FLASH设计这章是关于RS08 flash功能寄存器和说明书以及怎样编写flash存储程序。
2.1 FLASH程序设计RS08 flash存储器的编程是在一行的基础上,这一行由64个连续的字节组成,这些连续字节的起始地址是$3X00、$3X40、$3X80或$3XC0。
一个具体的程序必须要严格的按照flash存储器的一个行来编写。
图2.1是编写flash存储器程序的流程图。
当flash 阵列被加高电压时,flash存储器将会较常时间的接收编写程序。
从flash中输出可能会造成严重错误,在静态存储器中执行命令,然后编写flash存储器程序代码。
图2.1 Flash程序流程图2.2 FLASH的规约Flash功能块的规约必须对flash的编程和擦除操作仔细考虑,比如程序的电压和程序的同步技术。
表2.1列出了MC9RS08KA8有关flash功能块和操作的规约,一个具体的RS08 MCU更多信息的数据表。
表2.1 FLASH的规约2.3 外部程序电压控制外部程序电压必须被控制着在目标微控制器上应用或去掉,可以用一个程序控制或手工控制。
飞思卡尔8位单片机MC9S08第6章 通用IO与第一个汇编程序
(4)主程序
主程序一般包括初始化与主循环两大部分。初始化包括堆栈初始化、 系统初始化、内存变量初始化、I/O端口初始化、中断初始化等。主循 环是程序的工作循环,根据实际需要安排程序段,但一般不宜过长, 建议不要超过200行,具体功能可通过调用子程序来实现,或由中断 程序实现。不带操作系统的MCU程序总有一个主循环,表示程序周而 复始地执行。
6.2 汇编程序编程框架
(3)内存变量
如果程序中使用到内存变量,需在此定义。实际上,这里是对内 存变量的声明,通常称为“开辟内存变量”,内存变量的初始化在主 程序开始部分完成。第一个内存变量需用“ORG”语句定位,随后, 按地址从小到大顺序存放。每个内存变量都有固定的内存地址。借用 C语言术语,这里所开辟的所有内存变量都是“全局变量”。对应于C 语言中的“局部变量”将在讲解子程序规范时说明。
第六章 通用I/O与第一个汇编程序
主要内容
MC68HC908GP32的普通I/O 汇编程序编程框架 08汇编语言编译过程所涉及的文件 SD-HC08嵌入式MCU在线编程集成开发系统
6.1 MC68HC908GP32的普通I/O
所谓普通I/O,即基本的输入/输出,有时也称为并行I/O。作为普 通输入引脚,MCU内部程序可以读取该引脚,知道该引脚是“1”(高 电平)或“0”(低电平),即开关量输入。作为普通输出引脚,MCU 内部程序向该引脚输出“1”(高电平)或“0”(低电平),即开关量 输出。MC68HC908GP32单片机有5个普通I/O口,分别是A口、B口、 C口、D口、E口。它们中的大部分具有双功能,本节仅讨论它们作为 普通I/O功能时的编程方法。
6.1 MC68HC908GP32的普通I/O
① C口数据方向寄存器(Data Direction Register C,DDRC) C口数据方向寄存器(DDRC)的地址是:$0006,由于对应引脚只 有7根,最高位没有意义。DDRC的第6~0位分别记为DDRC6~DDRC0, 这些位分别控制着C口引脚PTC6~PTC0是输入还是输出,含义参考A口 说明。复位时DDRC为$00。 ② C口数据寄存器(Port C Data Register,PTC) C口数据寄存器(PTC)的地址是:$0002,PTC的第6~0位分别记 为PTC6~PTC0。含义请类比A口、B口的相应说明。 ③ C口上拉电阻允许寄存器(Port C Input Pullup Enable Register,PTCPUE) C口上拉电阻允许寄存器(PTCPUE)的地址是:$000E。PTCPUE 的第6~0位分别记为PTCPUE6~PTAPUE0。含义请类比A口的相应说明。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7 h
( 2 ) Flash 块 保 护 寄 存 器 ( Flash Block Protect Register — FLBPR)
FLBPR 的 地 址 : $FF7E , 它 的 内 容 为 Flash 保 护 区 域 的 起 始 地 址 的 14~7位,保护区域的起始地址的最高位始终为1,而保护区域的起始地址 的低7位(位6~0)始终为0。对FLBPR写入,可以设定被保护的Flash区域, 它本身也是一个Flash字节。当Flash处于保护状态时,擦除和写入操作都 是受限制的,HVEN将无法被正常置起。Flash块保护寄存器设定的只是 保护区域的起始地址,保护区域的结束地址始终为Flash存储区的结束地 址($FFFF)。例如,设定FLBPR的值为$02(%0000 0010),则保护区域 为$8100~$FFFF(%1000 0001 0000 0000 ~ %1111 1111 1111 1111)。
特别情况是:FLBPR的存储内容为$00,整个Flash存储区都受到保护; 如果FLBPR的存储内容为$FF,则整个Flash存储区都可以被擦除或写入。
注:只有当单片机处于运行用户程序时,对FLBPR本身和Flash保护区域的擦
写操作保护才是有效的。复位不影响FLBPR。
8 h
GP32与JL3芯片Flash块保护寄存器设置比较
(3)Flash的整体擦除和页擦除
对于GP32单片机来说,对Flash存储器的擦除操作可以进行整体擦 除也可以仅擦除某一起始地址开始的一页(128字节)。也就是说,不 能仅擦除某一字节或一次擦除小于128字节。注意这一特点,在数据安 排时尤为重要。GP32单片机的写入操作以行(64字节)为基础,一次 连续写入数据个数只能在一行之内。当然,不经过擦除的区域,不能 进行写入,这一点需特别注意。
返回 4
h
11.2 MC68HC908GP32单片机Flash存储 器编程方法
11.2.1 Flash存储器编程的基本概念
(1)对Flash编程的两种基本操作:擦除(Erase)和写入 (Program)
擦除操作的含义是将存储单元的内容由二进制的0变成1, 写入操作的含义是将存储单元的内容由二进制的1变成0。
11.1.1 Flash存储器的基本特点与编程模式
(1)Flash存储器的基本特点
① 固有不挥发性 ② 易更新性 ③ 成本低、密度高、可靠性好
(2)Flash存储器的两种编程模式
①监控模式(Monitor Mode)或写入器模式 ②用户模式(User Mode)或在线编程模式
2 h
11.1.2 M68HC08系列单片机Flash存储器的特点 与编程模式
GP32
FLBPR内容 受保护的Flash区域
$00(%0000 0000) $8000 ~ $FFFF
$01(%0000 0001) $8080 ~ $FFFF
$02(%0000 0010) $8100 ~ $FFFF
……Βιβλιοθήκη ……$FE(%1111 1110) $FF(%1111 1111)
$FF00 ~ $FFFF Flash区不被保护
6
h
11.2.2 Flash存储器的编程寄存器
(1)Flash控制寄存器(Flash Control Register — FLCR)
FLCR的地址:$FE08,定义为:
数据位 D7 D6 D5 D4 D3 D2 D1 D0
定义
HVEN MASS ERASE PGM
复位
0
0
000
0
0
0
D7~D4位:未定义。 D3 — HVEN位:高压允许位(High-Voltage Enable Bit)。 D2 — MASS位:整体擦除控制位(Mass Erase Control Bit)。 D1 — ERASE位:擦除控制位(Erase Control Bit)。 D0 — PGM位:编程(写入)控制位(Program Control Bit)。
擦除及写入操作都是通过设置或清除Flash存储器的控制寄存器 (FLCR)中的某个或某些位来完成的。
5 h
(2)Flash片内单位:页(Page)和行(Row)
页和行的大小(字节数)随整个Flash存储器的大小变化而变化, 但页的大小始终为行的两倍。例如MC68HC908GP32内含32K的Flash 存储器(地址为$8000~$FDFF),每页的大小为128字节,每行的大 小为64字节;而MC68HC908JL3片内Flash存储器仅有4K,每页和每 行的大小也分别变为64字节和32字节。
(1)M68HC08系列单片机Flash存储器的特点
第一,编程速度快及可靠性高。 第二,单一电源电压供电。 第三,支持在线编程。
3 h
(2)M68HC08系列单片机Flash存储器的编程模式
M68HC908系列单片机中绝大多数型号在其内部带有监控ROM,其地 址和大小取决于芯片型号。 Flash存储器工作于监控模式的条件是:
第十一章 Flash存储器的在线编程
主要内容 ❖ Flash存储器概述与编程模式 ❖ MC68HC908GP32单片机Flash存储器编程方法 ❖ GP32单片机Flash在线编程汇编语言实例 ❖ GP32单片机Flash在线编程C语言实例 ❖ HCS08系列单片机Flash编程方法
1 h
11.1 Flash 存储器概述与编程模式
JL3
FLBPR内容 受保护的Flash区域
$00 ~ $60
$EC00 ~ $FFFF
$62(%0110 0010) $EC40 ~ $FFFF
$64(%0110 0100) $EC80 ~ $FFFF
$68(%0110 1000) $ECC0 ~ $FFFF