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