这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » F1121,FLASH 用F1121对信息FLASH写出错

共2条 1/1 1 跳转至

F1121,FLASH 用F1121对信息FLASH写出错

院士
2006-09-17 18:14:16     打赏
F1121,FLASH 用F1121对信息FLASH写出错



关键词: F1121     FLASH     信息     出错    

院士
2006-12-22 22:43:00     打赏
2楼
问 程序如下:
DINT
MOV #0A500H,&FCTL3
MOV #0A502H,&FCTL1
MOV #0,&1002H ;擦除FLASH
WAIT_ BIT #01H,&FCTL3
JNZ WAIT_
MOV #0A540H,&FCTL1
RAM2FLASH BIT #BUSY,&FCTL3 ;将RAM中的数据COPY至FLASH
JNZ RAM2FLASH
CMP #64,R10
JZ R2F_OVER ;COPY完了,退出COPY
MOV R11,0(R9) ;R11为RAM地址,R9为FLASH地址
DECD R11 ;COPY下一个字
DECD R9
INC R10
JMP RAM2FLASH
R2F_OVER MOV #0A510H,&FCTL3 ;写数据完毕
MOV #0A500H,&FCTL1
EINT
上面的程序有时对FLASH写不会出错,有时候会不正确的写入,有时候干脆就没有写(所有的数据为FF)。
FLASH操作的时钟速度应设定为多少?开始我以为是时钟不对,但通过FCTL2设了几种时钟,仍工作不正常。 1: 设一下时钟,257-476K之间。另外注意一下供电,不能低于2.7V。 2: 将时钟设成了370K。问题依旧。电源也是是没有问题的。不知道是什么原因,哪位大侠给指点一下。程序我修改了一下,如下:
;将COPY_ORIG地址开头128字节COPY入信息FLASH
DINT
MOV #0A500H,&FCTL3
MOV #0A502H,&FCTL1
MOV #0,0(R13) ;将信息FLASH擦除,R13指向信息FLASH
WAIT_R_F1 BIT #01H,&FCTL3 ;测试BUSY位
JNZ WAIT_R_F1
CALL #DEL1MS ;延时1MS
MOV #0A540H,&FCTL1 ;写FLASH
MOV #COPY_ORIG,R9 ;RAM的首地址
MOV R13,R10
DECD R10 ;RAM的首地址
MOV #64,R11 ;共有64个字要从RAM中COPY至INFO FLASH
WAIT_R_F2 BIT #BUSY,&FCTL3 ;TEST BUSY
JNZ WAIT_R_F2
MOV R9+,0(R10) ;RAM COPY TO FLASH
INCD R10
DEC R11
JNZ WAIT_R_F2 ;RAM TO FLASH NOT OVER
MOV #0A510H,&FCTL3
MOV #0A500H,&FCTL1
EINT 3: 大家给看看为什么老是会出错。FLASH经常会写出错 4: 没有对FCTL2的设置。所有时序严格按照例程的。
擦写过程中不要设断点不要单步运行,不要开中断。
flash很可靠,我们还没发现过给定条件下擦写失败的。 5: FCTL2在主程序初始化时有设置,频率为300多K。我一开始是完全按例程写的程序,后来发现相当的不可靠。于是在擦除之后就检测BUSY位。如果BUSY位为1就等待。如果BUSY为0就进行写FLASH。这样做了之后要比原先可靠一些。另外,在对FLASH操作时是没有设断点的。断点设在FLASH擦写完成之后,运行到断点时检查发现FLASH值不对。不知为什么会出错。 ??????????

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]