如果我想要初始化从TWI主机到总线的连接,我会得到一些愚蠢的错误。启动条件将为send,但处理器在无限循环中等待,开始将从属地址发送到总线。
我还分析了总线上的信号,其中一个结果是时钟正在运行,但总线上将没有数据发送。
处理器等待在带有标记箭头的队列中。
我们使用下面的代码来启动和初始化总线...
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)) ); <--
[...]
}
目前我不知道,代码出了什么问题。还是我做错了什么。有谁可以帮我?
在期待中感谢你。
发布于 2017-12-01 21:07:09
在我的工作台上没有硬件的情况下,我最好的猜测是,您应该通过TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
一次将所有标志设置为TWI控制注册表。同时,您可以在3个单独的操作(多个时钟周期)中逐个设置它们,而数据手册隐含地说明必须将标志设置在一起,另请参阅数据手册示例。
https://stackoverflow.com/questions/47315749
复制相似问题