Board logo

标题: 求助,908LJ12的片内FLASH在线编程作为EPROM用 [打印本页]

作者: jalon    时间: 2005-4-23 22:13     标题: 求助,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一直复位 写操作好象没复位 但是由于无法读 也不知道写得对不对 请大家分析
作者: oceanx    时间: 2005-4-24 20:17

1、先擦后写
2、把要写入的FLASH地址放在0x8000开始的地方试试
3、要把FLASH保护寄存器打开哦
作者: jalon    时间: 2005-4-24 21:07

哦 能说些具体的嘛~
我明天到实验室再测试啊 搞了1-2天了 问题还没解决啊
作者: tgw_smile    时间: 2005-4-25 08:52

jalon:
   呵呵,一看就知道你的名字
  不要去调用内部的程序,可能其本身地址就有问题。
作者: hare_01    时间: 2005-4-25 11:07

内部的程序没问题, 试一下以下的程序. 你须先把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
作者: jalon    时间: 2005-4-25 17:39

请问 楼上的
你的数据DATA SIZE的大小好象不对啊~还有 开RAM的单元好象也很大啊~
另外 FILE——PTR一定要在 0080的地方吗?
作者: tgw_smile    时间: 2005-4-25 18:29

0080是RAM的起始地址,你的程序应该从这里开始运行
作者: oceanx    时间: 2005-4-25 20:15

晕了,今天翻起LJ12的资料。。。
监控ROM中擦写的子程序入口是:0xFCBE(Program a range of locations)
烧录的子程序入口是:0xFC06(Erase a page or the entire array)
你调用这两个子程序就可以了,我这边都做成功了
FC00是Emulated EEPROM write呀,不能实现FLASH的写入
作者: jalon    时间: 2005-4-25 20:29

OCEANX, 我想用FLASH存一些不丢失的系数
然后程序上电调用这些系数,该调用那些程序啊
几天测试下来怎么都不成功啊~
用FC06测试写 数据程序好象能运行
但是上电调用写的FLASH系数(用FF30) 好象程序一直同不过啊
作者: oceanx    时间: 2005-4-26 09:58

先擦写啊调用0xFCBE,再烧录0xFC06
其他那些子程序就不需要了。
你的主程序需要写入参数到Flash里面的时候就调用0xFCBE和0xFC06,需要读的时候用些指针指向这些Flash单元,就可以读回值了。
作者: jalon    时间: 2005-5-11 21:47

我看到MOTO的1个LJ12设计电表的例子 可以调用 EPREAD $FC03 和EPWRITE $FC00可以实现,而我在程序中总是无法读写 程序一运行到调用1快 就复位 不知道为什么啊 郁闷了几天 还是没搞定啊 做个实验的帮助贴下啊
作者: strongchen    时间: 2005-5-12 10:25

先把COP (WATCHDOG) 关掉试试吧。
作者: seuafu2005    时间: 2005-5-12 10:25

oceanx的方式也可以采用。
jalon的地址也是对的,这两个都是可以用的,只是jalon的代码有问题。

LDHX #BUS_SPEED
这一句是把BUS_SPEED所在的地址放到HX寄存器里面。

LDHX BUS_SPEED
这一句是把BUS_SPEED地址里面的内容,即bus speed具体的数字放进hx里面

应该用后面一句来运行程序
作者: jalon    时间: 2005-5-12 22:25

不对啊
应该用地址方式调用的 手册上写得很清楚啊
我把程序拷贝给大家 看看 不知道为什么程序执行到那里 单片机就复位啊
定义 FILEPTR:
BUS_SPEED
DATA_SIZE
ADDRH
ADDRL
DATA..
初始化
SEI
STA      $FFFF
LDHX   #FILEPTR
JSR      地址
CLI
程序就是不行啊
作者: seuafu2005    时间: 2005-5-13 09:35

哦,我看的是datasheet182页的样例程序,它用了LDHX FILEPTR。
是应该用LDHX #FILEPTR

看你的初始化中 COP没有关掉,
把CONFIG1寄存器的bit0置1,默认的watchdog是打开的。
mov #$41, CONFIG1

另外,尽量用DS.B 和DS.W来开辟RAM空间,比较清楚。
作者: jalon    时间: 2005-5-13 16:56

郁闷啊 ~
今天 用 LK24 测试可以了
但是同样程序 LJ12不 行啊
不做到 为啥
作者: strongchen    时间: 2005-5-13 17:08

LJ12 和 LJ24 的程序调用参数及入口地址完全相同吗?
作者: jalon    时间: 2005-5-13 21:14

是呀 手册上LJ12和LK24是相同的
不知道 LJ12的手册更新没
作者: strongchen    时间: 2005-5-16 10:28

你的LJ12和LK24的总线频率也完全相同吗?
作者: jalon    时间: 2005-5-16 22:08

相同的啊 都是32.768 PLL 成 8M的总线速度啊
作者: strongchen    时间: 2005-5-17 09:55

检查一下,COP确实关掉了吗?(因为CONFIG寄存器复位后只能写一次,再写是无效的)
作者: jalon    时间: 2005-6-14 22:11

问题已经解决
主要是每次 调用程序的时候都要初始化入口参数
然后是写操作前要擦除操作 打开快保护容许




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0