HC908LK24芯片IIC模块有一些疑问:<br />https://bbs.21ic.com/upfiles/img/20081/2008111161740765.jpg<br />对于上图做为主发送,start之前MMTXBE=0,MMRW=0。当MMAST=1之后,IIC模块会发送一个开始信号。按图所示会紧接着发送"设备地址和R/W"。<br />问题1:在此之后在ACK之前要求DATA2->MMDTR。但此时DATA1中的数据还没有发出去呀,那不就把DATA1覆盖了?<br /><br />问题2:程序(AN3291)<br /> MIMCR_MMRW = 0;<br /> MMADR = slaveAddr;<br /> //MMDTR = 0xa5;有没有这句话,波形差很多<br /> //start of transmit bytes to iic bus--<br /> MIMCR_MMAST = 1;<br /> while(!(MMSR_MMTXBE)); //注1;<br /> while(MMSR_MMRXAK);<br /> //--SLAVE ACK OCCURRED--<br /> MMDTR = 0x11;<br /> while(!(MMSR_MMTXBE));<br /> MMDTR = 0xFF; //generate scl impulse for slave to send Ack bit;<br /> while(MMSR_MMRXAK);<br /> MIMCR_MMAST = 0;<br /> ;-------------------------------------<br /> 有MMDTR = 0xa5句话,发送完"设备地址和R/W"后,有应答时钟,从机回复应答,紧接着IIC模块发送MMDTR内容0xA5。<br />没有MMDTR = 0xa5句话,发送完"设备地址和R/W"后,没有应答时钟,从机无法回复应答。<br />在例程中,有"MMDTR = 0xFF; //generate scl impulse for slave to send Ack bit;"这句话,<br />是不是"MMDTR = 0xFF;"除了发送数据,还有发送应答时钟的任务。<br /> |
|