Перейти к содержанию
    

вопрос по uart контроллеру скорости приема-передачи

здравствуйте. http://www.ti.com/lit/ug/slau049f/slau049f.pdf страница 260. описывается устройство генератора baud rate. говорится о том, что можно получить дробный коэффициент деления входной частоты. каким образом это можно сделать? не могу же я "порезать" свой входной тактовый клок на несколько частей, а иначе как отсчитать дробное количество раз входные импульсы клока? блок схема не совсем ясна, описание тоже не очень.

распостраненная схема УАРТА, это когда берется частота в 16 раз больше бодовой, и через 8 тактов происходит синхронизация (мы попадаем в середину импульса). а тут- что то совсем другое.

большое спасибо если кто-то поможет разобраться

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Базовая схема такая же, как всегда: тактовая частота делиться на постоянный коэффициент, задаваемый в регистрах 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

Изменено пользователем Василий123

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть такое, эта дробность потом вылазит ошибкой...

 

Например я в своих проектах использую внешний кварц на 7.3728 MHZ. При такой частоте кварца нет дробности для всех стандартных скоростей UARTа.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо за подробный рассказ) стало доходить - что не частота дробная, а период плавает в течении 8 бит

 

вот только как объяснить пример из даташита (таблица) : BRCLK = 1048576 Гц, скорость 1200 бод, UxBR1=03, UxBR0 = 69, UxMCTL=FF. почему FF?если коэфф.деления 873.81?

аа ну в принципе, если во фрейме 9 бит (1 четности), то тогда примерно так и получается

Изменено пользователем shide_3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...