esdart 发表于 2010-7-20 09:34:23

请教傻孩子书中关于TWI通讯的问题

在《深入浅出avr单片机》“傻孩子求职记”一章的I2C抢答器的例程里看到从机的主程序这样写的。
void main(void)
{
    System_INIT();                                          //代码初始化
   
    Time = 0xB0;

    while(1)
    {
      if(TCCR1B != 0)
      {
            if((PINB&0x01) == 0x00)
            {
                TIMERSTOP;
                Time = TCNT1H;
                Time = TCNT1L;
                TWCR |= (1<<TWSTA);               //启动总线
                TWIProcess = TWIInProcess;
                while(TWIProcess != TWIProcessOver)
                {
                  if (TWIProcess == TWIPrecessHan)
                        TWCR |= (1<<TWSTA);         //再次尝试竞争总线
                  if (TWIProcess == TWIProcessERR)
                        continue;
                }
            }
      }
    }                                       
}

在启动总线之后就进入了下面的循环,直到这组数据发送完成,如果总线仲裁失败,CPU会一直耗在这个循环里面。不知理解的对不对,我想请教一下,怎样能够在中断里自动处理总线仲裁失败情况,并自动再次尝试竞争总线而不需要CPU总是查询发送是否完成?
while(TWIProcess != TWIProcessOver)
{
    if (TWIProcess == TWIPrecessHan)
         TWCR |= (1<<TWSTA);         //再次尝试竞争总线
    if (TWIProcess == TWIProcessERR)
         continue;
}
页: [1]
查看完整版本: 请教傻孩子书中关于TWI通讯的问题