求助,908LJ12的片内FLASH在线编程作为EPROM用
- UID
- 109730
- 性别
- 男
|
求助,908LJ12的片内FLASH在线编程作为EPROM用
采用LJ12的片内的监控程序,在用户模式下 将片内的FALSH做为EPROM用为什么不成功呢?请大家帮忙~我的程序大致如下
定义数据快
BUS_SPEED DS 1; 总线速度 $20
DATA_SIZE DS 1;数据个数 $0C
FLASH_ADR DS 2: FLASH 目标地址 $EC00
DATA BUF DS N; 要读 写操作的RAM 块数据 12个
程序好后 LDHX #BUS_SPEED
JSR FC00;写
JSR FC03;读 但是好象数据无法读 CPU一直复位 写操作好象没复位 但是由于无法读 也不知道写得对不对 请大家分析 |
|
|
|
|
|
- UID
- 107265
- 性别
- 男
|
1、先擦后写
2、把要写入的FLASH地址放在0x8000开始的地方试试
3、要把FLASH保护寄存器打开哦 |
|
|
|
|
|
- UID
- 109730
- 性别
- 男
|
哦 能说些具体的嘛~
我明天到实验室再测试啊 搞了1-2天了 问题还没解决啊 |
|
|
|
|
|
- UID
- 108548
- 性别
- 男
|
jalon:
呵呵,一看就知道你的名字
不要去调用内部的程序,可能其本身地址就有问题。 |
签名:
最多300字节
文字将出现在您发表的文章的结尾处。体现您的个性。 |
|
|
|
|
|
- UID
- 104617
- 性别
- 男
|
内部的程序没问题, 试一下以下的程序. 你须先把EEPROM数据放在Data Array 内.
* RAM Profile Memory allocation during EEPROM
* $0080 -- Speed
* $0081 -- Datasize
* $0082 -- BeginAdd
* $0083 -- BeginAddL
* $0084 - $00C3 DataArray
* $00C4 -- chksum
EE_Write equ $FC00
mov #32,Speed ; 8M bus
mov #$10,DataSize
ldhx #$EF00
sthx StartingAddH
sta $FFFF ; clear COP
ldhx #$0080 ; File_ptr
jsr EE_Write ; write data to $EF00 ~ $EF1F |
|
|
|
|
|
- UID
- 109730
- 性别
- 男
|
请问 楼上的
你的数据DATA SIZE的大小好象不对啊~还有 开RAM的单元好象也很大啊~
另外 FILE——PTR一定要在 0080的地方吗? |
|
|
|
|
|
- UID
- 108548
- 性别
- 男
|
0080是RAM的起始地址,你的程序应该从这里开始运行 |
签名:
最多300字节
文字将出现在您发表的文章的结尾处。体现您的个性。 |
|
|
|
|
|
- UID
- 107265
- 性别
- 男
|
晕了,今天翻起LJ12的资料。。。
监控ROM中擦写的子程序入口是:0xFCBE(Program a range of locations)
烧录的子程序入口是:0xFC06(Erase a page or the entire array)
你调用这两个子程序就可以了,我这边都做成功了
FC00是Emulated EEPROM write呀,不能实现FLASH的写入 |
|
|
|
|
|
- UID
- 109730
- 性别
- 男
|
OCEANX, 我想用FLASH存一些不丢失的系数
然后程序上电调用这些系数,该调用那些程序啊
几天测试下来怎么都不成功啊~
用FC06测试写 数据程序好象能运行
但是上电调用写的FLASH系数(用FF30) 好象程序一直同不过啊 |
|
|
|
|
|
- UID
- 107265
- 性别
- 男
|
先擦写啊调用0xFCBE,再烧录0xFC06
其他那些子程序就不需要了。
你的主程序需要写入参数到Flash里面的时候就调用0xFCBE和0xFC06,需要读的时候用些指针指向这些Flash单元,就可以读回值了。 |
|
|
|
|
|
- UID
- 109730
- 性别
- 男
|
我看到MOTO的1个LJ12设计电表的例子 可以调用 EPREAD $FC03 和EPWRITE $FC00可以实现,而我在程序中总是无法读写 程序一运行到调用1快 就复位 不知道为什么啊 郁闷了几天 还是没搞定啊 做个实验的帮助贴下啊 |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
oceanx的方式也可以采用。
jalon的地址也是对的,这两个都是可以用的,只是jalon的代码有问题。
LDHX #BUS_SPEED
这一句是把BUS_SPEED所在的地址放到HX寄存器里面。
LDHX BUS_SPEED
这一句是把BUS_SPEED地址里面的内容,即bus speed具体的数字放进hx里面
应该用后面一句来运行程序 |
|
|
|
|
|
- UID
- 109730
- 性别
- 男
|
不对啊
应该用地址方式调用的 手册上写得很清楚啊
我把程序拷贝给大家 看看 不知道为什么程序执行到那里 单片机就复位啊
定义 FILEPTR:
BUS_SPEED
DATA_SIZE
ADDRH
ADDRL
DATA..
初始化
SEI
STA $FFFF
LDHX #FILEPTR
JSR 地址
CLI
程序就是不行啊 |
|
|
|
|
|
- UID
- 104631
- 性别
- 男
|
哦,我看的是datasheet182页的样例程序,它用了LDHX FILEPTR。
是应该用LDHX #FILEPTR
看你的初始化中 COP没有关掉,
把CONFIG1寄存器的bit0置1,默认的watchdog是打开的。
mov #$41, CONFIG1
另外,尽量用DS.B 和DS.W来开辟RAM空间,比较清楚。 |
|
|
|
|
|