打印

hc908系列iic问题

[复制链接]
2859|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
czhlcai|  楼主 | 2008-1-11 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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;"除了发送数据,还有发送应答时钟的任务。

相关帖子

沙发
hotpower| | 2008-1-13 17:03 | 只看该作者

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

136

帖子

0

粉丝