### M68HC08 Flash 存储器编程详解 #### 一、M68HC08 Flash 存储器概述 M68HC08系列微控制器是Motorola公司推出的一款高性能、低功耗的8位单片机。其内部集成了Flash存储器,主要用于程序代码的存储。在某些应用场合下,出于降低成本的需求,可能会考虑利用这部分Flash作为非易失性数据存储。不过,值得注意的是,与传统的RAM不同,Flash存储器的擦除与写入过程较为复杂,并且这些操作通常无法在Flash本身中执行。 #### 二、Flash 编程方法 ##### 1. 一般MC68HC908的Flash存储器的在线擦除、编程方法 M68HC908系列单片机提供了专门用于控制Flash擦除与编程的寄存器——FLCR(Flash Control Register)。该寄存器中包含以下几个关键位: - **PGM** (Bit 0): 当此位置1时,表示正在进行编程操作。 - **ERASE** (Bit 1): 当此位置1时,表示正在进行擦除操作。 - **MASS** (Bit 2): 保留位,通常设置为0。 - **HVEN** (Bit 3): 在进行编程或擦除操作时,此位置1。当FLCR寄存器不为0时,无法访问Flash中的内容(包括执行程序)。 此外,M68HC908还提供了Flash块保护寄存器,用于定义Flash的保护区域。用户程序必须位于这个保护区域内,而需要更改的数据则应该放在保护区域之外。 需要注意的是,不同型号的芯片可能使用不同的方式来保存这个保护寄存器的内容,有些使用Flash单元,有些则使用RAM单元。如果是RAM单元的话,则需要在系统复位后立即写入保护地址。 ##### 2. GP32等Flash编程方法 对于配备了较大RAM空间的M68HC908系列单片机(如GP32、SR12、MR32等),可以采用以下步骤来进行Flash编程: 1. **编写擦除和编程子程序**:在用户程序所在的Flash保护区内编写擦除和编程子程序。 2. **将擦除子程序拷贝至RAM**:在对Flash进行编程之前,将擦除子程序从Flash复制到RAM中。 3. **备份待擦除数据**:将待擦除的Flash数据区内容复制到RAM中。具体复制的大小取决于所使用的芯片型号。例如,GP32擦除时的一块大小为128字节。 4. **执行擦除子程序**:切换到RAM中执行擦除Flash的子程序,完成后返回主程序(位于Flash中)。 5. **将编程子程序拷贝至RAM**:接着将编程子程序从Flash复制到RAM。 6. **执行编程子程序**:再次切换到RAM中执行编程子程序,完成将RAM中的数据(包括新数据以及未被修改但已擦除的数据)写回Flash中。完成后返回主程序,完成一次完整的编程操作。 #### 三、示例程序分析 下面是一个简单的示例程序,用于演示如何使用M68HC08进行Flash擦除与编程操作: ```assembly WBF1 EQU $50 ; Working Buffer 1 WBF2 EQU $51 ; Working Buffer 2 COUNT EQU $52 ; Write Counter 1~128 WTME EQU $53 ; Wait Time (32MHz: 24, 16MHz: 12) TMP EQU $54 DBUF EQU $100 ; Data to be written to Flash CBUF EQU $180 FLCR EQU $FE08 FLSPR EQU $FF7E FLSH EQU $8000 FRGM: SEI ; Flash memory PGM Subroutine CLRH CLRX PRGM1: LDA EFLASH, X ; Erase Flash Code → RAM: CBUF STA CBUF, X INCX CPX #EFEND-EFLASH BLO PRGM1 LDHX #FLSH ; Erase Address MOV #24, WTIME ; 32MHz JSR CBUF ; Execute Flash erase CLRX CLRH PRGM2: LDA WFLASH, X ; Write Flash Code → RAM: CBUF STA CBUF, X INCX CPX #EFLASH-WFLASH BLO PRGM2 LDHX #FLSH ; Programming address MOV #24, WTIME ; 32MHz MOV #128, COUNT ; 128 Bytes JSR CBUF ; Execute Flash Write RTS WFLASH: CLR WBF2 ; Entry: H:X Flash Address LDA COUNT CMP #64 BLS WFLSH0 SUB $64 STA COUNT LDA #64 BRA WFLSH1 WFLSH0: CLRA WFLSH1: PSH ALDA #1 ; 1 → PGM STA FLCR LDA FLSPR ; Read Flash Protect Reg STA, X BSR P1DL10 LDA #9 ; 1 → HVEN STA FLCR BSR P1DL10 WFLSH2: PSHH PSHX CLRH LDX WBF2 LDA DBUF,X ; Read DATA PULX PULH STA, X ; Write to Flash BSR P1DL30 AIX #1 INC WBF2 DBNZ COUNT, WFLSH2 ; Loop 1 Page (1–64 Bytes) LDA #8 STA FLCR BSR P1DL10 LD ``` 通过以上示例程序可以看到,整个擦除和编程过程非常严谨,涉及到多个步骤,包括但不限于初始化、擦除、编程、等待时间等。这对于理解和掌握M68HC08 Flash存储器的编程方法至关重要。
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助