请教傻孩子书中关于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]