新唐MCU技术
直播中

符筹荣

7年用户 990经验值
私信 关注
[问答]

关于M051 I2C SI and ISCstatus触发时间求解

哈搂各位高手们好,小弟刚接触M051买了温子棋老师的书看,可是有一点真的是一直搞不清楚
以下是成是範例
*****************************************
*函数名称:timed_Write_Cycle
*输    入:无
*输    出:无
*功    能:同步的写周期
******************************************/
void Timed_Write_Cycle(void)                  
{
    while (I2STATUS != 0x18) //0x18=00011000 Master Transmit Address ACK
    {
        //启动
        I2CON |= STA;              
        I2CON |= SI;     
        while ((I2CON   SI) != SI);
        I2CON  = ((~STA)   (~SI)); //请问这是i2c清零的动作吗??但是I2C清零不是要写1吗?还是说先写进i2con,等下次I2CON |= SI;发生时在写入

        //设备地址
        I2DAT = EEPROM_SLA | EEPROM_WR; //set address and read/write mode.
        I2CON |= SI; //怪怪的,是I2C清零还是还是启动I2C下个状态,应该是启动I2C下个状态,但是那由谁来写1清零呢
        while ((I2CON   SI) != SI);
    }

    if (I2STATUS != 0x18)                          //检查应答
    {
        DEBUGMSG("Not ACK returned!");
    }

    //停止
    I2CON |= STO;        //why stop?? don't know
    I2CON |= SI;  //请问是清零 还是下个状态启动
    while (I2CON   STO);
}

小弟看了新唐的技术参考手册,可是还是摸不清楚I2C SI触发和status的关係
文件上都是说SI触发后下个周期status反映,但是SI是不是会一直维持到下个status要发生的时候,写一次1进去,作清零,跟触发下次status阿
有没有详细的时序关係图阿,小弟找好多资料都找不到耶
希望这裡的高手可以帮忙一下
感激不尽

更多回帖

发帖
×
20
完善资料,
赚取积分