ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Понедельник
9 февраля
1569515 Топик полностью
beefdeadbeef (Вчера, 23:20, просмотров: 21) ответил IBAH на Спасибо. Значит i2c_send_start() не вызывает запрос ДМА... И я не понял, какое действие вызывает запрос ДМА? i2c_send_7bit_address()? зачем тогда ожидать I2C_SR1_ADDR? может его можно сбросить по окончании передачи ДМА
Рукав пришивается только на данные, т.е. i2c_enable_dma() делает ничего, пока не взведён TxE в SR1 -- а он "set when DR is empty in transmission. TxE is not set during address phase." 

А address phase закончилась, когда мы прошли последние две строчки в update(), поскольку

"Reading I2C_SR2 after reading I2C_SR1 clears the ADDR flag, even if the ADDR flag was set after reading I2C_SR1. Consequently, I2C_SR2 must be read only when ADDR is found set in I2C_SR1 or when the STOPF bit is cleared."

RM0008, 26.6 I2C registers