Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

394 Часть 111. Практическое программирование микроконтроллеров АVR Программирование UART Перед использованием UART его нужно включить, установить в нужный режим, а также задать скорость обмена. В листинге 1 5 . 1 приведена простейшая последова­ тельность действий для современных типов контроллеров, содержащих модуль USART (вы с ней уже знакомы по случаям применения UART в предыдущих гла­ вах). ; асинхронный режим UART , тактовая частота 4 МГц ldi temp , 2 5 ; скорость передачи 9 6 0 0 при 4 МГц ВAUD=2 5 out UBRRL, tetnp ldi temp , ( l<<RXEN ) 1 ( l <<TXEN ) ; разрешение приема/передачи out UCSRВ, temp Число UBRR для делителя частоты, размещающегося в регистрах uвRRН: UBRRL (в на­ шем случае - 2 5 ) , определяется из таблиц, которые имеются в описании соответ­ ствующего контроллера (там же приводится и ошибка для выбранного значения частоты), или рассчитывается, исходя из заданной скорости обмена BAUD: BAUD = he/ 1 6(UBRR + 1 ) В старшей части uвRRн, неиспользованной в нашем случае, работают только млад­ шие четыре разряда, итого значение UBRR в расширенном модуле USART может быть 1 2-разрядным (т. е. от О до 4095) . На практике в большинстве случаев доста­ точно устанавливать значение лишь младшего регистра ( uвRRL ) - например, при тактовой частоте 4 МГц его максимально возможное значение 2 5 5 даст нестандарт­ ную скорость обмена 976 бит/с (ближайшая стандартная 1 200 обеспечивается зна­ чением UBRR, равным 2 о в ) . ПОДРОБНОСТИ Во всех описаниях АVR-контроллеров есть раздел под названием «Examples of Baud Rate Setti пg» , в котором приводятся таблицы необходимых значений uвRR для стан­ дартных скоростей обмена в зависимости от тактовой частоты контроллера , потому подсчитывать что-то по приведенной формуле самостоятельно необходимо лишь в случае использования кварца , частота которого в таблицах отсутствует. Из этих таблиц можно также узнать максимальную скорость обмена, доступную при заданной тактовой частоте. Приемлемы все значения, при которых ошибка составляет 0,2% и менее (в таблицах они выделены жирным шрифтом) . Так мы можем узнать , что при «круглых» значениях тактовой частоты (1 МГц, 2 МГц, 4 МГц и т. д. ) точные значения скорости обмена получаются далеко не во всех случаях. Для тактовой частоты 1 ,000 МГц в обычном режиме максимальная скорость обмена составит 4800, для 4,000 МГц - 1 9 200 (а для «ардуиновских» 1 6 МГц, между прочим, не более 76 800) . Как видно из таблиц, эти ограничения в ряде случаев можно обойти , если дополни­ тельно установить специальный бит u2x (он находится в регистре ucsRA ) , удваивающий скорость обмена. Таким образом для 1 ,000 МГц можно достичь привычного значения 9600, а для 4,000 МГц повысить максимальную скорость до 38 400. Кроме того, можно видеть, что для «круглых» значений тактовой частоты , начиная с 2 МГц, работают не-

RkJQdWJsaXNoZXIy MTExODQxMg==