app_i2c.c里i2c_read_from()函數(shù)里i2c_master_buffer_length = length - 1;但是中斷函數(shù)里
/* address sent, ack received */
? ? ? ? ? ? if(event & RB_I2C_ADDR) {?
? ? ? ? ? ? ? ? /* ack if more bytes are expected, otherwise nack */
? ? ? ? ? ? ? ? if (i2c_master_buffer_index + 1 < i2c_master_buffer_length) {
? ? ? ? ? ? ? ? ? ? I2C_AcknowledgeConfig(ENABLE);
? ? ? ? ? ? ? ? ? ? I2C_DBG("? address sent\n");
? ? ? ? ? ? ? ? ? ? I2C_DBG("? ACK next\n");
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? //XXX: Should not delay too match before NACK?
? ? ? ? ? ? ? ? ? ? I2C_AcknowledgeConfig(DISABLE);
? ? ? ? ? ? ? ? ? ? is_nack_sent = true;
? ? ? ? ? ? ? ? ? ? I2C_DBG("? address sent\n");
? ? ? ? ? ? ? ? ? ? I2C_DBG("? NACK next\n");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
判斷條件是i2c_master_buffer_index + 1 < i2c_master_buffer_length,也就是說接收1字節(jié)和2字節(jié)都是馬上I2C_AcknowledgeConfig(DISABLE);3字節(jié)開始才I2C_AcknowledgeConfig(ENABLE);
這里的ACK和NACK沒有錯誤嗎?我覺得2字節(jié)開始就應(yīng)該要I2C_AcknowledgeConfig(ENABLE);