Сейчас на всех вестибюлях станций метро вешают светодиодные часы-термометр. Какой-то гений на Ленинском проспекте повесил их прямо на решетку вентшахты, встроенной в вестибюль, в итоге вокруг мороз, а термометр весело сообщает о нуле градусов
(
Read more... )
Он может быть установлен в единицу (для генерации сообщения TXIS) программой, но такая запись возможна, только если NOSTRETCH=1.
Сгенерируется прерывание, если установлен бит TXIE, и запрос DMA, если установлен TXDMAEN.
Бит 0 аналогичен (очищается сам(by hardware) по записи в регистр I2Cx_TXDR. Устанавливается, если необходимо записать новую порцию данных в регистр),
но запись в него единицы приведет к очистке регистра данных(ясно, что до их фактической передачи, вроде ж регистр чистится сам после отправки пачки данных, так?)
Reply
Это не единственная разница, судя по поведению. Я до сих пор не понимаю логику этих флагов, какой нужен для чего и в каких ситуациях.
Reply
Reply
Ситуация - надо передать два байта по и2ц(после адреса). Инициализирую передачу, пишу в TXDR первый байт сразу.
Потом ловлю прерывание по флагу(одному из этих двух), которое говорит нам что байт передался и можно слать следующий. Пишу в TXDR второй байт, завершаю передачу, все отлично.
Веселуха начинается при попытке повторить тоже самое еще раз. В случае если использовался флаг TXIS - все ок, тот же алгоритм приводит к правильному результату. А вот если использовать TXE, то первый байт второй посылки будет не тот что мы запишем, а такой же, как второй байт первой посылки. Не знаю, баг это или фича, в ERRATA про это нет(хотя другие косяки с I2C там описаны). Ну и в любом случае описание кривое - можно было бы поподробнее расписать чем отличаются биты и когда что применять. Впрочем это типично для ST :)
Reply
А чтобы очистить его - делаем flush установкой TXE в 1.
Reply
Reply
Leave a comment