hc908系列iic问题

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

俺觉得i2c用状态机最简单~~~当然要有DMA就更简单了

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

136

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部