-
- Представь себе, что ты используешь 9-й бит как бит адреса для
автоматического пробуждения МК на шине, чтобы они не отвлекались на
чужие обмены с чужими данными. И ты не хочешь готовить пакеты из
16-битных символов для DMA, а хочешь 8-битные. Но как-то надо
отправить первый символ с адресом в девятом ([8]) бите. - Nikolay_Po(05.07.2026 09:34)
- Я опыты, описанные здесь не проверял, но если там действительно
привязка к внутреннему счетчику, можно сделать несколько
предположений. У UART есть свой делитель, причем разделенный на
целую и дробную части. Возможно, проверка наличия данных в регистре
синхронна либо со счетчиком в целом, либо с его целой частью. @COKPOWEHEU(445 знак., 05.07.2026 12:47)
- Вот как выглядит. На видео - делитель UART = 306 при тактовой шины
144МГц. Видно, что включение передатчика (DE) трансивера линии,
стоит как вкопанное с прошлого периода (синхронизация задержана на
1мс). А вот начало передачи, стартовый бит, дрожит. Но размах
джиттера строго не выходит за битовый интервал. Nikolay_Po(1 знак., 06.07.2026 10:22, ссылка)
- Отношение BRR/16=19.125. Получается, восемь возможных позиций
(0.125^-1) для старта. На видео их не видно чётко, зато виден
промежуток - центр стартового бита, который не закрывается при
джиттере ни спадом, ни фронтом старт-бита. И похоже, он имеет
размер как раз порядка 1/8 от битового интервала. Nikolay_Po(103 знак., 06.07.2026 10:48, картинка)
- Может, доведете эксперименты до какого-то финала и оформите в виде
отдельного полноценного информационного поста? Я думаю, эта
особенность будет интересна не только спецам по ch32v317. И, если
позволите, я бы продублировал на других форумах (если, конечно, не
сделаете этого сами). - @COKPOWEHEU(06.07.2026 21:42)
- Эксперименты проводить не буду, мне уже главное понятно (и
сталкивался ранее, с CH32V203, но там было не важно) - если BRR не
кратен некоторым значениям, допустим, значению 16, то возможен
джиттер начала передачи первого символа посылки в пределах одного
бита. Nikolay_Po(421 знак., 06.07.2026 21:50)
- "Эксперименты проводить не буду, мне уже главное понятно" Хорошо. Если будет не лень, тогда сам потыкаюсь. Может и еще чего интересного обнаружится. @COKPOWEHEU(238 знак., 07.07.2026 14:00)
- Эксперименты проводить не буду, мне уже главное понятно (и
сталкивался ранее, с CH32V203, но там было не важно) - если BRR не
кратен некоторым значениям, допустим, значению 16, то возможен
джиттер начала передачи первого символа посылки в пределах одного
бита. Nikolay_Po(421 знак., 06.07.2026 21:50)
- Может, доведете эксперименты до какого-то финала и оформите в виде
отдельного полноценного информационного поста? Я думаю, эта
особенность будет интересна не только спецам по ch32v317. И, если
позволите, я бы продублировал на других форумах (если, конечно, не
сделаете этого сами). - @COKPOWEHEU(06.07.2026 21:42)
- Отношение BRR/16=19.125. Получается, восемь возможных позиций
(0.125^-1) для старта. На видео их не видно чётко, зато виден
промежуток - центр стартового бита, который не закрывается при
джиттере ни спадом, ни фронтом старт-бита. И похоже, он имеет
размер как раз порядка 1/8 от битового интервала. Nikolay_Po(103 знак., 06.07.2026 10:48, картинка)
- +1, скорее всего так и есть, и это не баг, а фича. Хочешь, чтобы
передача 1-го байта не прерывалась - дождись пока он не окажется в
сдвиговом регистре. То, что это произойдет сразу - никто не
обещает. TXE - это самый хороший признак для проверки. - il-2(05.07.2026 13:15, +1)
- Так и сделал. Пришлось использовать прерывание TxE, чтобы не тупить в высокоприоритетном SysTick'е. - Nikolay_Po(06.07.2026 09:49)
- Вот как выглядит. На видео - делитель UART = 306 при тактовой шины
144МГц. Видно, что включение передатчика (DE) трансивера линии,
стоит как вкопанное с прошлого периода (синхронизация задержана на
1мс). А вот начало передачи, стартовый бит, дрожит. Но размах
джиттера строго не выходит за битовый интервал. Nikolay_Po(1 знак., 06.07.2026 10:22, ссылка)
- понял - ты извращенец не сам по себе, а по принуждению :) - klen(05.07.2026 10:39)
- Я опыты, описанные здесь не проверял, но если там действительно
привязка к внутреннему счетчику, можно сделать несколько
предположений. У UART есть свой делитель, причем разделенный на
целую и дробную части. Возможно, проверка наличия данных в регистре
синхронна либо со счетчиком в целом, либо с его целой частью. @COKPOWEHEU(445 знак., 05.07.2026 12:47)
- Представь себе, что ты используешь 9-й бит как бит адреса для
автоматического пробуждения МК на шине, чтобы они не отвлекались на
чужие обмены с чужими данными. И ты не хочешь готовить пакеты из
16-битных символов для DMA, а хочешь 8-битные. Но как-то надо
отправить первый символ с адресом в девятом ([8]) бите. - Nikolay_Po(05.07.2026 09:34)