本帖最后由 roalychen 于 2012-11-24 11:30 编辑
就是I2C,AVR叫TWI接口
以下代码:
void TWI_Init(void)
{
TWCR= 0x00; //disable twi
TWBR= 0xff; // (1<<6) | (1<<5) | (1<<2); //set bit rate
TWSR= 0x00; //set prescale
TWAR= 0x00; //set slave address
TWCR= (1<<TWEN); //enable twi
}
unsigned char I2C_Start(void)
{
unsigned char retval;
(TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)); // start
{I2C_Timer = 20; while(!(TWCR&(1<<TWINT)) && I2C_Timer);} // I2CWaitAck(); I2C_Timer在定时器里自减
retval = (TWSR&0xf8); // I2CChkAck();
if(retval !=I2C_START)
{
(TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN)); // I2CStop();
return I2C_ERR;
}
return I2C_CRR;
}
问题是,执行这个函数后,进入了UART1的接收中断服务函数(中断向量31),UART1的中断标志位确实置位了,但实际上没有往UART1发送任何数据
请高手帮忙看看是怎么回事
这段程序确实可以与从设备通信,但怎么就触发了UART1的接收中断了呢?
UART1的在不操作I2C的时候也是可以正常工作的 |