shide_3
Oct 15 2012, 06:31
здравствуйте.
http://www.ti.com/lit/ug/slau049f/slau049f.pdf страница 260. описывается устройство генератора baud rate. говорится о том, что можно получить дробный коэффициент деления входной частоты. каким образом это можно сделать? не могу же я "порезать" свой входной тактовый клок на несколько частей, а иначе как отсчитать дробное количество раз входные импульсы клока? блок схема не совсем ясна, описание тоже не очень.
распостраненная схема УАРТА, это когда берется частота в 16 раз больше бодовой, и через 8 тактов происходит синхронизация (мы попадаем в середину импульса). а тут- что то совсем другое.
большое спасибо если кто-то поможет разобраться
Василий123
Oct 15 2012, 07:54
Базовая схема такая же, как всегда: тактовая частота делиться на постоянный коэффициент, задаваемый в регистрах 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
hash20
Oct 15 2012, 07:56
Есть такое, эта дробность потом вылазит ошибкой...
Например я в своих проектах использую внешний кварц на 7.3728 MHZ. При такой частоте кварца нет дробности для всех стандартных скоростей UARTа.
shide_3
Oct 15 2012, 08:34
спасибо за подробный рассказ) стало доходить - что не частота дробная, а период плавает в течении 8 бит
вот только как объяснить пример из даташита (таблица) : BRCLK = 1048576 Гц, скорость 1200 бод, UxBR1=03, UxBR0 = 69, UxMCTL=FF. почему FF?если коэфф.деления 873.81?
аа ну в принципе, если во фрейме 9 бит (1 четности), то тогда примерно так и получается