Я читал в книге "Последовательный порт полный, 2-е издание", что часы UART должны быть в 16 раз больше скорости передачи данных , но я никогда не видел ни одного микроконтроллера, в котором мы задаем частоту UART, прежде чем настраивать его на конкретную скорость передачи данных. ставка. Так:
1) Почему частота должна быть в 16 раз выше скорости передачи?
2) Можете ли вы привести пример любого микроконтроллера, где мы устанавливаем частоту UART?
3) Какова цель установки тактовой частоты UART, если у нас есть таймеры? Например, мы генерируем скорость передачи в простом 89c52 через Таймер 1, и мы не устанавливаем никакой частоты.
4) Какова идея установки скорости передачи данных с помощью таймера, как мы это делаем в 89c5x. Как это связано с частотой UART?
5) RS-232 — «рекомендуемый стандарт 232», а UART — физический. Аппаратное обеспечение выполняет параллельно-последовательные и последовательно-параллельные преобразования. Я прав?
6) Содержит ли UART счетчик, чтобы после начального бита он ждал 8 циклов, а затем после каждых 16 циклов выборки брались из линии RX для обнаружения бита?
1) Почему частота должна быть в 16 раз выше скорости передачи?
Как уже указывал Крис в комментариях, тактового сигнала нет, UART RS-232 — это асинхронные системы. Это означает, что мы понятия не имеем, когда начнутся входящие данные, и можно с уверенностью сказать, что часы передатчика будут работать с несколько иной скоростью, чем часы получателей. Чтобы справиться с этим, UART выполняет передискретизацию входящих данных, чтобы он мог получить разумную меру того, где находятся переходы в данных. Для передискретизации вам нужны часы, работающие значительно быстрее, чем скорость передачи данных.
2) Можете ли вы привести пример любого микроконтроллера, где мы устанавливаем частоту UART?
Практически все они будут содержать различные регистры для установки этого. например, на LPC1768 есть регистр дробного делителя для установки тактового предварительного делителя на логику UART. Как правило, установка тактовой частоты для логики UART также устанавливает скорость передачи для вывода, поэтому может быть неочевидно, что вы устанавливаете часы на 16-кратную скорость передачи.
3) Какова цель установки тактовой частоты на UART, если у нас есть таймеры? Например, мы генерируем скорость передачи в простом 89c52 через Таймер 1, и мы не устанавливаем никакой частоты.
Чтобы вы могли запускать каждый UART с разной скоростью передачи данных, не используя все свои таймеры?
4) Какова идея установки скорости передачи данных с помощью таймера, как мы это делаем в 89c5x. Как это связано с частотой UART?
Понятия не имею, не использовал эту часть, но это кажется немного странным.
5) RS-232 рекомендуется стандартный 232, а UART — физический. Аппаратное обеспечение выполняет параллельно-последовательные и последовательно-параллельные преобразования. Я прав?
Да, UART имеет 8-битный буфер приема и передачи, процессор работает только с байтами данных, аппаратное обеспечение UART обрабатывает преобразование в последовательный порт и обратно.
6) Содержит ли UART счетчик, чтобы после начального бита он ждал 8 циклов, а затем после каждых 16 циклов выборки брались из линии RX для обнаружения бита?
Он содержит конечный автомат, который отслеживает текущую точку цикла передачи/приема. Этот конечный автомат будет содержать как счетчики, так и логику для обнаружения переходов, стартовых и стоповых битов и генерации/проверки битов четности. Если вы не хотите создавать свой собственный UART, вам не нужно беспокоиться о том, что именно происходит внутри этого конечного автомата. Если вы хотите создать свой собственный UART, то это совершенно новая тема.
Вопрос и некоторые ответы сбивают с толку «часы», «частоту» и «скорость передачи».
Как объяснялось, внутри UART есть часы, которые обычно в 16 раз превышают желаемую скорость передачи данных. Когда у меня были волосы, эти часы были подключены к UART с помощью аппаратного делителя, обычно устанавливаемого DIP-переключателями, от кварцевого генератора.
Но UART, такой как 16550 или UART в микроконтроллере, содержит схему делителя. Когда вы «устанавливаете скорость передачи данных» путем записи в регистр UART, вы устанавливаете делитель. На вход подаются высокочастотные часы, часто часы процессора.
Таким образом, 16550 часто будет иметь вход от кварцевого генератора 1,8432 МГц. Разделите это на 16, и вы получите 115200 бод, самую высокую скорость, доступную для этого UART, использующего этот вход. Чтобы получить эту скорость передачи, вы должны установить делитель скорости передачи UART на 1. Установите делитель на 2, и вы получите 57600 бод. Установите его на три, и вы получите 38400 бод и т. д.
У более необычных UARTS есть логика «дробного делителя», которая позволяет вам получить стандартную скорость передачи данных (или близкую к ней) от входного генератора, которая не является целым числом, кратным скорости передачи данных.
Некоторые из принципов проектирования UART восходят к временам, когда совокупная стоимость кристалла, схемы деления на три и делителя частоты в степени двойки была ниже, чем стоимость полностью программируемого делителя частоты.
Наиболее универсальным способом разработки UART было бы использование отдельных программируемых делителей частоты для передачи и приема, каждый из которых настроен на 1-кратную скорость передачи данных, и «глушить» каждый на программируемом счете, когда соответствующая сторона UART простаивает. Однако для этого потребовалось бы использование двух отдельных полностью программируемых делителей частоты. Дешевле иметь один программируемый делитель, совместно используемый для передачи и приема, но он должен работать достаточно быстро, чтобы и передатчик, и приемник могли независимо разделить его дальше.
Крис Стрэттон
Аймал
Крис Стрэттон
Лиор Коган
ТониМ
ДжиммиБи
Олин Латроп
стоббе
Старожил