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中!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。