如果我想尝试初始化从TWI主站到总线的连接,我会得到一些愚蠢的错误。启动条件将被发送,但处理器在无限循环中等待bevor开始将从机地址发送到总线。
我也分析了总线上的信号,结果是时钟正在运行,但总线上没有数据发送。
处理器在带有标记箭头的行中等待。
我们使用以下代码启动并初始化总线......
void i2c_master_init() {
TWBR = (uint8_t)TWBR_val;
}
void i2c_master_stop() {
TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
}
uint8_t i2c_master_start(uint8_t address) {
TWCR = 0;
TWCR |= (1<<TWSTA);
TWCR |= (1<<TWEN);
TWCR |= (1<<TWINT);
while( !(TWCR & (1<<TWINT)) ); <--
[...]
}
目前我不知道代码出了什么问题。或者我做错了什么。任何人都可以帮助我吗?
感谢您的期待。
答案 0 :(得分:1)
在我的工作台上没有硬件的最好的猜测是你应该通过TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
立即将所有标志设置为TWI控制注册表。同时,您在3个独立的操作(多个时钟周期)中逐个设置它们,而数据表隐含地表示标志必须一起设置 ,另请参阅数据表示例。