ATMega 2560上的TWI在无限循环中等待

时间:2017-11-15 19:29:54

标签: avr i2c atmega

如果我想尝试初始化从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)) );   <--

        [...]

    }

目前我不知道代码出了什么问题。或者我做错了什么。任何人都可以帮助我吗?

感谢您的期待。

1 个答案:

答案 0 :(得分:1)

在我的工作台上没有硬件的最好的猜测是你应该通过TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)立即将所有标志设置为TWI控制注册表。同时,您在3个独立的操作(多个时钟周期)中逐个设置它们,而数据表隐含地表示标志必须一起设置 ,另请参阅数据表示例。