共2条
1/1 1 跳转至页
F1121,FLASH 用F1121对信息FLASH写出错
问
程序如下:
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值不对。不知为什么会出错。 ??????????
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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |