苏州大学实验报告模板C语言,苏州大学实验报告-Flash在线编程实验.doc

苏州大学实验报告

院、系        年级专业     姓名    学号

课程名称                      成绩

指导教师         同组实验者      实验日期

实验名称:  Flash在线编程实验

一.实验目的

通过该实验,进一步熟悉MT-IDE嵌入式开发系统环境、汇编和C语言以及调试方式;进一步学习串口的相关内容;掌握Flash存储器在线编程的基本概念;熟悉GP32芯片Flash存储器在线编程擦除和写入的步骤;理解课本中的程序代码。

二.实验内容

通过PC机的串口发送数据到MCU方,然后将接受到的数据写入到flash中以0x8000地址开始的一页中。最后将写入的数据读出发送到PC端校验。

三.实验过程

(一)基本过程

(1)页擦除操作

下面过程可以擦除GP32的Flash存储器的一页(128字节):

① $2→FLCR(1→ERASE位,0→MASS位):进行页面擦除;

② 读Flash块保护寄存器FLBPR;

③ 向被擦除的Flash页内任意一个地址写入任意值,为方便起见,一般向待擦除页首地址写入0;

④ 延时tnvs(>10μs);

⑤ $A→FLCR(1→HVEN位);

⑥ 延时terase(>1ms);

⑦ $8→FLCR(0→ERASE位);

⑧ 延时tnvh(>5μs);

⑨ $0→FLCR(0→HVEN位);

⑩ 延时trcv(>1μs),完成一页的擦除操作。

(2)整体擦除操作

下面过程擦除GP32的整个Flash区域,以便把新的程序装入Flash存储器,这是应用系统研制过程中开发工具对GP32编程的准备工作。

① 6→FLCR(1→ERASE位,1→MASS位):进行整体擦除;

② Flash块保护寄存器FLBPR;

③ 向被擦除的Flash任意一个地址写入任意值,为方便起见,一般向首地址写入0;

④ 延时tnvs(>10μs);

⑤ $E→FLCR(1→HVEN位、MASS位、ERASE位);

⑥ 延时tMerase(>4ms);

⑦ $C→FLCR(0→ERASE位);

⑧ 延时tnvhl(>100μs);

⑨ $0→FLCR(0→HVEN位、MASS位);

⑩ 延时trcv(>1μs),完成整体擦除操作。

(3)编程操作

MC68HC908GP32的Flash编程操作以行(64字节)为单位进行的。当然,一次写入可以小于一行,但不能大于一行。对于已经写过的部分未经擦除不能重新写入变更其数据,否则将引起数据出错。写入过程如下:

a. $1→FLCR(1→PGM位);

b. 读Flash块保护寄存器FLBPR;

c. 向将要写入的Flash行内任意一个地址写入任意值,为方便起见,一般向行首地址写入0,这一步选定了所要编程的行,以下的目标地址必需在这一行中;

d. 延时tnvs(>10μs);

e. $9→FLCR(1→HVEN位);

f. 延时tpgs(>5μs);

g. 待写数据写入对应的Flash地址;

h. 延时tprog(>30μs),完成一个字节的写入(编程)工作;

i. 重复g、h,直至同一行内各字节写入完毕;

j. $8→FLCR(0→PGM位);

k. 延时tnvh(>5μs);

l. $0→FLCR(0→HVEN位);

m. 延时trcv(>1μs)以后,完成本行写入工作,可以读出校验。

四.编程

(一)流程图

开始

头文件

和声明

MCU、SCI初始化

复位

1 ?

结束

图1 Flash存储器流程图

(二)所用寄存器名称及其所用的位

Flas控制寄存器(Flash Control Register,FLCR)

数据位

D7 D6 D5 D4 D3 D2 D1 D0

定义

x x x x HVEN MASS ERASE PGM

复位

0 0 1 0 0 0 0 0

Flash块保护寄存器(Flash Block Protect Register,FLBPR)

Flash块保护寄存器设定的只是保护区域的起始地址,保护区域的结束地址始终为Flash存储区的结束地址($FFFF)。对MC68HC908GP32而言,FLBPR设定的是16位起始地址的第14~7位(第15位恒为1)。

(三)主要代码段

1.汇编方式:

主程序部分代码

……

MainInit:: //复位后程序从此开始执行

//[系统初始化]

SEI

LDHX #$023F //堆栈初始化

TXS

JSR MCUInit //调系统初始化子程序GP32Init

//[串行口初始化]

JSR SCIInit

//[程序总循环入口]

MainLoop:

//[发送1个握手信号86]

LDA #86 //发送握手信号86

JSR SCISend1

//[等待接收1的握手信号56]

JSR SCIRe1

CMP #56 //是否是56?

BNE MainLoop //否,继续握手

//[等待接收1个字节=要写入的字符个数(<=64)并存到N中]

JSR SCIRe1

STA N

//[等待接收N个字节并存到以DATA1为首址的内存中]

LDA N

LDHX #DATA1

JSR SCIReN

//[擦除以Fdata为首地址的Flash区(1页,GP32:128字节)]

LDA #%00000010 //保护$8100~$FFFF的FLASH区域

STA FLBPR

LDHX #Fdata

JSR EraseSub

//[将以DATA1开始的N个数写入以Fdata为首址的Flash区]

LDA #%00000010 //保护$8100~$FFFF的FLASH区域

STA FLBPR

LDHX #DATA1 //RAM首地址->RAMandFlash[0-1]

STHX RAMandFlash

LDHX #Fdata //Flash首地址->RAMandFlash[2-3]

STHX RAMandFlash+2

LDA N //写入FLASH的数据个数

JSR WriteSub

//[向PC机发送写入Flash区的N个数据,供PC机接收并比较]

LDHX #Fdata

LDA N

JSR SCISendN

//[转程序总循环入口]

JMP MainLoop

……

2.C语言方式:

主程序部分代码

…………

void main()

{

INT8U *p;

MCUInit(); //MCU初始化

SCIInit(); //串口初始化

//主循环开始

while(1)

{

SCISend1(86); //发送握手信号86

//等待接收一个字节的握手信号

if(SCIRe1(p)!=56) //是否是56?

continue; //否,继续握手

//等待接收写入的数据个数(N<=128)并存放到N中

SCIReN(1,data);

N=data[0];

//等待接收N个字节的数据并存放到以data数组中

SCIReN(N,data);

//调用EarseFlash()程序之前要保护后一页之后的区域

//如:EarseFlash(0x8000),则要保护的为$8100后的区域

FLBPR=0b00000010; //保护$8100~$FFFF的FLASH区域

EraseFlash(0x8000);//擦除0x8000为始址的一个页

//调用WriteFlash()程序之前要保护后一页之后的区域

//如:WriteFlash(0x8000),则要保护的为$8100后的区域

FLBPR=0b00000010; //保护$8100~$FFFF的FLASH区域

WriteFlash(0x8000);//将数据写入flash

//读出flash中的数据发给pc机比较

SCISendN(N,(INT8U *)0x8000);

}

}

五.实验问答(根据实验指导书所列举的问题)

1.flash在线编程的过程中有哪些注意点?

在进行flash在线编程过程中,有如下几点需要注意:一、严格按照芯片手册上的步骤和时序编程,进行恰当的延时,以避免延时过长或过短。二、由于flash在线编程时需要对其加高压,导致对flash存储器的存储区读取不稳定。可能导致程序不能正常执行。因而擦除、写入子程序要转入RAM区执行。三、由于擦写子程序要在移到RAM区所以在调用子程序时要注意使用BSR指令。

2.当用flash区存储一些需要变动的参数时,应如何注意哪些问题?

当用flash区存储一些需要变动的参数时,要注意flash擦除后才能写入的特性、并且一次擦除至少为一页。所以如果一些参数变动时,需要先将该参数所在页的数据读出后更新,再擦除整页,最后重新写入。

六.实验小结

通过该实验,了解了flash在线编程的基本概念,熟悉和掌握了MT-IDE嵌入式开发系统环境及其调试方式,进一步熟悉汇编编程和C语言编程;通过在GP32上的练习,了解了如何GP32上进行Flash在线编程。

第5页

展开阅读全文

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值