shide_3 0 15 октября, 2012 Опубликовано 15 октября, 2012 · Жалоба здравствуйте. http://www.ti.com/lit/ug/slau049f/slau049f.pdf страница 260. описывается устройство генератора baud rate. говорится о том, что можно получить дробный коэффициент деления входной частоты. каким образом это можно сделать? не могу же я "порезать" свой входной тактовый клок на несколько частей, а иначе как отсчитать дробное количество раз входные импульсы клока? блок схема не совсем ясна, описание тоже не очень. распостраненная схема УАРТА, это когда берется частота в 16 раз больше бодовой, и через 8 тактов происходит синхронизация (мы попадаем в середину импульса). а тут- что то совсем другое. большое спасибо если кто-то поможет разобраться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vas123 0 15 октября, 2012 Опубликовано 15 октября, 2012 (изменено) · Жалоба Базовая схема такая же, как всегда: тактовая частота делиться на постоянный коэффициент, задаваемый в регистрах UxBR1 и UxBR0 (всего 16 бит). Но есть еще регистр UxMCTL, данные в котором обрабатываются побитно. Как это происходит хорошо видна на Figure 13-8 "BITCLK Baud Rate Timimg". Если в регистрах UxBR1: UxBR0 записана величина N, то через N/2 периодов тактовой частоты BRCLK тактовый сигнал BITCLK должен измениться с "0" на "1". На самом деле он меняется, только если очередной бит регистра UxMCTL равен 0, в противном случае изменение происходит на один период позже. Каждый раз используется следующий бит регистра UxMCTL (начинается все с младшего бита). Длительность "0" сигнала BITCLK равна либо N/2 либо N/2+1, в зависимости от очередного бита UxMCTL. Длительность "1" сигнала BITCLK равна N/2, если N четное, и N/2+1, если N нечетное. Т.е. период сигнала BITCLK равен N или N+1 периодов сигнала BRCLK, в зависимости от очередного бита UxMCTL. Таким образом, тактовая частота BITCLK немного "плавает" вокруг среднего значения. Если частота BRCLK заметно выше BITCLK, то такая схема вполне нормально работает. Вычислить нужные значения можно по формулам в разделе "Baud Rate Bit Timing". Единственное, что нужно сделать, это по возможности равномерно распределить "0" и "1" в байте UxMCTL. Примеры для тактовой частоты BRCLK 8,389 МГц: 600.002 бод = 8389000/(369Dh + 5/8) = 8389000/(13981 + 0.625) = 8389000/13981.625 U0MCTL = ABh ;пять единичных битов U0BR0 = 9Dh U0BR1 = 36h 9599.771 бод = 8389000/(0369h + 7/8) = 8389000/(873 + 0.875) = 8389000/873.875 U0MCTL = 7Fh ;семь единичных битов U0BR0 = 69h U0BR1 = 03h Изменено 15 октября, 2012 пользователем Василий123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
hash20 0 15 октября, 2012 Опубликовано 15 октября, 2012 · Жалоба Есть такое, эта дробность потом вылазит ошибкой... Например я в своих проектах использую внешний кварц на 7.3728 MHZ. При такой частоте кварца нет дробности для всех стандартных скоростей UARTа. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shide_3 0 15 октября, 2012 Опубликовано 15 октября, 2012 (изменено) · Жалоба спасибо за подробный рассказ) стало доходить - что не частота дробная, а период плавает в течении 8 бит вот только как объяснить пример из даташита (таблица) : BRCLK = 1048576 Гц, скорость 1200 бод, UxBR1=03, UxBR0 = 69, UxMCTL=FF. почему FF?если коэфф.деления 873.81? аа ну в принципе, если во фрейме 9 бит (1 четности), то тогда примерно так и получается Изменено 15 октября, 2012 пользователем shide_3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться