打印
[STM8]

STM8S207K6字节写EEPROM时不能执行中断程序???

[复制链接]
6200|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huhuhu_1|  楼主 | 2009-9-24 16:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我使用STM8S207K6,在向EEPROM中写入3字节数据,用时25ms,这期间竟然不能产生中断(我有定时器中断正好在这个期间内发生),通过仿真观察,core的中断级别是最低(I1 I0=10)。请指教,是怎么回事?
代码如下:(c compiler 是cosmic的4.2.8)
     //Delayms(50);
     //eeprom写入操作,用时25ms
     FLASH_Unlock(FLASH_MEMTYPE_DATA); //Unlock the eeprom.
     myShortAddress_eep.Val = addr.Val; //
     currentChannel_eep = currentChannel;
     FLASH_Lock(FLASH_MEMTYPE_DATA); //Lock the eeprom
定时器中断推后了20ms,在前面增加了50ms延时之后,定时器中断准时到来。
沙发
huhuhu_1|  楼主 | 2009-9-26 09:32 | 只看该作者
怎么没有回复咧,是我说的不详细吗???
听说这里有ST的工程师?

使用特权

评论回复
板凳
香水城| | 2009-9-26 16:25 | 只看该作者
可能这个芯片不支持RWW。STM8S的参考手册中有如下说明:


http://www.st.com/mcu/modules.php?name=mcu&file=familiesdocs&FAM=113
Reference Manual
ReferenceDescriptionVersionDateSizeFileFile
RM0016STM8S microcontroller family 5Aug-2009

使用特权

评论回复
地板
huhuhu_1|  楼主 | 2009-9-26 17:32 | 只看该作者
本帖最后由 huhuhu_1 于 2009-9-26 17:36 编辑

我用的STM8S207K6是支持RWW的,在ST的文档 PM0051 Programming manual 第22页中有明确的说明。(我不知道如何把相关的内容截图挂上来,不好意识)。通过仿真也能看到程序是在运行的。
LOW density stm8s 是不支持RWW的
Medium and high density stm8s 是支持RWW的。STM8S207K6是high density。

使用特权

评论回复
5
香水城| | 2009-9-26 18:51 | 只看该作者
注意到你说的问题,所以我在3楼说“可能”,正在与设计师求证,STM8S207K6是否支持RWW。

使用特权

评论回复
6
8bit_MCU| | 2009-10-12 13:45 | 只看该作者
楼主的用法有问题:

你的芯片具有RWW功能,但是你在写EEPROM的时候没有判断上一次操作是否完成就连续写入下一个字节,造成MCU被HOLD住而无法响应中断。

注意:在你写EEPROM前必须保证前一次写操作已经完成,否则就会出现中断不响应的情况。跟RWW功能无关。

使用特权

评论回复
7
huhuhu_1|  楼主 | 2009-10-14 18:49 | 只看该作者
楼上的解释听起来有道理,只是datasheet上没有任何相关的描述。
如果是这样,那就是cosmic的不对了,他设计相关扩展时应该在写EEPROM之前先进行检查。 现在我可麻烦了,我的EEPROM中很多数据是多字节的,采用直接赋值的方法无法进行EEPROM写入忙检查,还得自己来写EEPROM操作函数,太不和谐了!!!!
:'(:'(:'(

使用特权

评论回复
8
Trylin| | 2009-10-14 22:00 | 只看该作者
用STM8S的硬件I2C,搞了两天,还是没搞好,
只好用IO口来模拟时序,一个上午就搞定了,如果作为主机,可以考虑用IO来模拟啊

使用特权

评论回复
9
huhuhu_1|  楼主 | 2009-10-15 17:14 | 只看该作者
请问6楼,你的观点“在写EEPROM的时候没有判断上一次操作是否完成就连续写入下一个字节,造成MCU被HOLD住而无法响应中断”的依据在哪里可以找到?

使用特权

评论回复
10
huhuhu_1|  楼主 | 2009-10-16 08:56 | 只看该作者
通过Disassembly窗口观察,我发现在写入EEPROM的操作中已经有一个等待指令,我猜测这就是在等待写入操作完成。只是我对寻址到0x4859不明白,资料上找不到这个地址的相关信息,请高手指点。下面是相关的代码:
mywi.c:1014                        currentChannel_eep = currentChannel;
0xa5e8 <MyWiTasks+840>      0xC602B8        LD    A,0x02b8            LD    A,currentChannel
0xa5eb <MyWiTasks+843>      0xAE4020        LDW   X,#0x4020           LDW   X,#0x4020
0xa5ee <MyWiTasks+846>      0xCDFC27        CALL  0xfc27              CALL  c_eewrc
。。。。
0xfc27 <c_eewrc>              0xF7                    LD    (X),A            
0xfc28 <c_eewrc+1>          0x72044859FB    BTJT  0x4859,#2,0xfc28   
0xfc2d <c_eewrc+6>          0x81                    RET

使用特权

评论回复
11
huhuhu_1|  楼主 | 2009-10-16 16:19 | 只看该作者
版主,我的问题还没有解决,6楼的兄弟提供的方法不能解决问题。帮忙想想办法,这里先谢过了。

使用特权

评论回复
12
zhaoxinzxzx| | 2009-10-16 23:42 | 只看该作者
你使用的Cosmic版本是多少?

使用特权

评论回复
13
zhaoxinzxzx| | 2009-10-16 23:49 | 只看该作者
你用的那个版本似乎有Bug,寄存器的地址定义有错误!下载最新的版本试试!

使用特权

评论回复
14
huhuhu_1|  楼主 | 2009-10-17 09:23 | 只看该作者
我使用的版本号是4.2.8,编译后的list文件头几行信息如下:
  1                     ; C Compiler for STM8 (COSMIC Software)
   2                     ; Generator V4.2.8 - 03 Dec 2008
   3                     ; Optimizer V4.2.8 - 03 Dec 2008
。。。。
还有更新的版本吗? 我找找。

使用特权

评论回复
15
eric_123| | 2009-10-23 20:05 | 只看该作者
我也碰到过寄存器地址定义错误的,浪费我一天时间查问题,

使用特权

评论回复
16
8bit_MCU| | 2009-11-20 16:04 | 只看该作者
本帖最后由 8bit_MCU 于 2009-11-20 16:19 编辑
通过Disassembly窗口观察,我发现在写入EEPROM的操作中已经有一个等待指令,我猜测这就是在等待写入操作完成。只是我对寻址到0x4859不明白,资料上找不到这个地址的相关信息,请高手指点。下面是相关的代码:
mywi.c ...
huhuhu_1 发表于 2009-10-16 08:56


晕了,这个问题还没解决啊,不好意思,好久没来了。

其实你自己已经找到问题的答案了,你用的这个库是错误的。0x4859不是eop状态位字节啊,有可能就是明明没有写入完成,但是你以为已经写完了,又写了一个新的数据,MCU就被hold住了。关于出处,我去找找看哦。这个市老问题了,所以我强烈推荐写EEPROM时不要用库

使用特权

评论回复
17
huhuhu_1|  楼主 | 2009-12-2 15:46 | 只看该作者
非常谢谢各位,这个问题已经解决了,觉得用“EEPROM”的C扩展还是很方便的,只是它的库写错了,不仅仅是变量的地址错了,连代码也有错。我修改了cosmic的这个库文件,然后重新编译连接,测试ok。下面是错误修改:
1、IAPSR的地址错了。
2、等待指令错了,原指令如下:
wai2:
btjt IAPSR,#EOP,wai2 ; wait for completion
修改后如下:
wai2:
btjf IAPSR,#EOP,wai2 ; wait for completion

更新过的库文件如下,替换掉cosmic的同名文件即可。
Srcstm8.rar (16.49 KB)

使用特权

评论回复
18
sinadz| | 2010-4-11 21:55 | 只看该作者
能在这里面把问题解决了,感觉肯定还是非常不错的,非常佩服工程师回答问题的专业性

使用特权

评论回复
19
today_lucky| | 2012-3-16 14:37 | 只看该作者
Mark!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

62

帖子

0

粉丝