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中!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
把SCL拉低????
你是说,由次设备(F336==下位机)把SCL拉低吗?
有空试试!
如果是读情况!也可以把SCL拉低,等待次设备把flash的内容读到SMB0DAT寄存器,再把SCL拉高?
一周热门 更多>