SMBus 求助

2020-01-30 13:37发布

if((SMB0DAT&0xFE) == (SLAVE_ADDR&0xFE)) // Decode address
{                          // If the received address matches,
    ACK = 1;                // ACK the received slave address
    if((SMB0DAT&0x01) == READ) // If the transfer is a master READ,
    {
          //SMB0DAT = SMB_DATA_OUT[sent_byte_counter-1];
          //sent_byte_counter++;
         //SMB0DAT = 0x77;
        
         SMB0DAT = FLASH_ByteRead((FLADDR)(FLASH_LOW_ADDRESS + address));   
        address++;
    }else
    {
          data_flag = 0;
    }
}
else                           // If received slave address does not
{                              // match,
        ACK = 0;                // NACK received address
}


这是SMBus中断里面一部分代码。如果我使用红 {MOD}部分代码,程序可以正常运行出正确结果;如果使用蓝 {MOD}代码,在中断读flash内容,再赋值给SMBus的数值寄存器就不行。
我判断是读flash时间太长,请问各位高手,这里该怎样决解这个问题。

前提:我使用具有SMBus接口的MCU作为I2C次设备,把接收的数据存在MCU的片内flash中!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
吴绍昂
1楼-- · 2020-01-30 19:06
抱歉!红 {MOD}代码包含两种情况,一种变量赋值;一种常量赋值。忘记说明啦,在此补充一下!谢谢!
wmm20031015
2楼-- · 2020-01-30 20:40
RAM里开BUFF
吴绍昂
3楼-- · 2020-01-30 21:45
wmm20031015 发表于 2013-5-2 14:14
RAM里开BUFF

能否稍微解释一下!谢谢!
wmm20031015
4楼-- · 2020-01-31 01:23
 精彩回答 2  元偷偷看……
吴绍昂
5楼-- · 2020-01-31 01:44
wmm20031015 发表于 2013-5-2 20:03
所有需要通过SMBUS发送的数据都放RAM里面做缓冲,如果数据有变动,必要的情况下写到FLASH里 ...

ram空间没那么多!?
wmm20031015
6楼-- · 2020-01-31 06:44
FLASH按页读取、写入,如果没有时间响应SMBUS,把SCL拉低,SMBUS的上位机会自动等待直到超时

一周热门 更多>