ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 июля
1594456 Топик полностью
@COKPOWEHEU (Сегодня, 12:47, просмотров: 58) ответил Nikolay_Po на Представь себе, что ты используешь 9-й бит как бит адреса для автоматического пробуждения МК на шине, чтобы они не отвлекались на чужие обмены с чужими данными. И ты не хочешь готовить пакеты из 16-битных символов для DMA, а хочешь 8-битные. Но как-то надо отправить первый символ с адресом в девятом ([8]) бите.
Я опыты, описанные здесь не проверял, но если там действительно привязка к внутреннему счетчику, можно сделать несколько предположений. У UART есть свой делитель, причем разделенный на целую и дробную части. Возможно, проверка наличия данных в регистре синхронна либо со счетчиком в целом, либо с его целой частью. 

Факт записи из DATAR в сдвиговый регистр сопровождается сбросом флага TXE. Соответственно, можно тупо его дождаться перед стартом DMA, для которого триггером является этот же бит. Если гонку поймать сложно даже специально, вряд ли на ожидание уйдет много тактов.

Для проверки, как вариант, можно максимально снизить частоту APBx, чтобы замедлить саму периферию. И поиграться с делителями UART, чтобы узнать влияют ли они и если да, то как именно.