打印

8bit_MCU救命啊!STM8S105 写EEPROM 多了,中断就不响应了!

[复制链接]
6498|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
上树的猪|  楼主 | 2011-9-1 05:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
长话短说

目前 能从实验 的现象 稳定再现,  写入EEPROM    几个字节 正常
写入 十几个 字节,  EEPROM 写入 正常, 但是中断 就再也不能响应了!!

不知道 是 我程序 问题, 还是  芯片的问题!

大家有没有类似现象?

部分代码
========================================================

/**********************************************************
*
**********************************************************/
#define WR_PG_DIS ( 1 << 0 )
#define HVOFF_BIT ( 1 << 6 )

/**********************************************************
*  奶奶的 资料上说是 EOP 结果 STM8S105 等不到 EOP, 后来看ST库,结果
*  他等的是 HVOFF
*************************************************/
void WaitEOP( void )
{
    unsigned char flagstatus;
    unsigned short TimeOut;

    for( TimeOut = 0; TimeOut < 0xFFFF; TimeOut++ )
    {
        flagstatus = ( FLASH_IAPSR & ( WR_PG_DIS | HVOFF_BIT ));

        if( flagstatus != 0 )
        {
            break;
        }
    }
    //超时退出
}

/**********************************************************
*  
**********************************************************/
void InitWriteEEPROM( void )
{
    if( 0 == FLASH_IAPSR_DUL )
    {
        FLASH_DUKR = 0xAE;  
        FLASH_DUKR = 0x56;

        while( 0 == FLASH_IAPSR_DUL );
    }
}

/**********************************************************
*  就是EEPROM 空的时候  执行这个时候,有问题的
*****************************************************/
void LoadDefaultSysPara( void )
{
    InitWriteEEPROM();

    *(( unsigned char * ) EEPROM_ServicePosition ) = 50;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_BackwashPosition ) = 10;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_BrineDrawPosition ) = 10;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_WashPosition ) = 40;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_ReFillPosition ) = 50;
    WaitEOP();

    *(( unsigned char * ) EEPROM_SafeDuration ) = 15;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_G_FlowModulusH ) = 6;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_G_FlowModulusL1 ) = 9;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_G_FlowModulusL2 ) = 4;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_G_FlowModulusL3 ) = 4;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_M_FlowModulusH ) = 2;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_M_FlowModulusL1 ) = 6;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_M_FlowModulusL2 ) = 2;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_M_FlowModulusL3 ) = 0;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_Language ) = LangType_English;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_ValveType ) = 1;  
    WaitEOP();
    *(( unsigned char * ) EEPROM_DefaultType ) = 2;  
    WaitEOP();
}
沙发
bobo5650| | 2011-9-1 08:50 | 只看该作者
兄弟你真勤快,这么早发帖...
应该就是RWW的问题了,105没RWW,写eeprom的时候程序是停止的...

使用特权

评论回复
板凳
上树的猪|  楼主 | 2011-9-1 09:12 | 只看该作者
兄弟你真勤快,这么早发帖...
应该就是RWW的问题了,105没RWW,写eeprom的时候程序是停止的...
bobo5650 发表于 2011-9-1 08:50


没办法, 老板说是 我软件 BUG 让我 好好查查......

但是  程序停止的,   怎么中断也会停止?   

就算 写的时候 停止   那写完了, 应该 放开 呀?  

难道是 芯片 BUG  写完了,它 也 不让中断 响应 ?

使用特权

评论回复
地板
IJK| | 2011-9-1 09:28 | 只看该作者
2L说得有理。记得STM8如果没有RWW(Read While Write),在写eeprom时不能响应中断,记得在PM(Program Manual)里面说了

使用特权

评论回复
5
tuyanjun| | 2011-9-1 09:38 | 只看该作者
减小写E2的时间,我就是这么做的,四字节一次写入

使用特权

评论回复
6
上树的猪|  楼主 | 2011-9-1 09:57 | 只看该作者
2L说得有理。记得STM8如果没有RWW(Read While Write),在写eeprom时不能响应中断,记得在PM(Program Manual)里面说了
IJK 发表于 2011-9-1 09:28



写的时候 不能响应 . 是 没问题

但是  写完了呢 ?    写完了 应该 响应了吧 ?

难道 写  期间 发生多次中断,   这个中断就死掉了?

使用特权

评论回复
7
香水城| | 2011-9-1 10:00 | 只看该作者
写的时候 不能响应 . 是 没问题

但是  写完了呢 ?    写完了 应该 响应了吧 ?

难道 写  期间 发生多次中断,   这个中断就死掉了?
上树的猪 发表于 2011-9-1 09:57


写完EEPROM,CPU会响应中断;至于写期间发生多次中断,这个中断会不会死掉,就要看你的设备怎么处理了,还要看你的中断处理程序。

使用特权

评论回复
8
上树的猪|  楼主 | 2011-9-1 10:24 | 只看该作者
写完EEPROM,CPU会响应中断;至于写期间发生多次中断,这个中断会不会死掉,就要看你的设备怎么处理了,还要看你的中断处理程序。
香水城 发表于 2011-9-1 10:00


GPIO 中断啊...  没标志位啊...

使用特权

评论回复
9
today_lucky| | 2012-3-16 14:42 | 只看该作者
MARK!

使用特权

评论回复
10
hf5542| | 2012-3-22 10:36 | 只看该作者
MARK!!

使用特权

评论回复
11
明月小厨| | 2012-12-11 21:48 | 只看该作者
6mS的时间能有很多中断要发生吗?这点时间都不能等吗?要不你外挂串口的FLASHRAM;这样就没事了;

使用特权

评论回复
12
TECHWELL| | 2014-5-14 13:52 | 只看该作者
   我用STM8S105K4,也遇到了写EEPROM时程序halt之问题
   在ST官网上的、最新的文档CD00200092.PDF(STM8S105xx之datasheet,February 2014 DocID14771 Rev 13)中,明明白白地吹:
4.3 Flash program and data EEPROM memory
• Up to 32 Kbytes of Flash program single voltage Flash memory
• Up to 1 Kbytes true data EEPROM
• Read while write: Writing in data memory possible while executing code in program memory
• User option byte area
   这儿的专家,却说没这个RWW功能了。
   我应该相信专家?
   还是该相信官方文档??
  我可以骂娘吗???

  香水城,能加我QQ么?
  396936661

使用特权

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

本版积分规则

6

主题

39

帖子

0

粉丝