Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 15. Программирование UART и обмен данными с персональным компьютером 395 стандартизированные повышенные скорости обмена от 250 килобит в секунду. Но бу дут ли на таких скоростях корректно работать адаптеры, соединительньiе кабели и все прочее, - это большой вопрос, потому в обычных условиях их никто не применяет. USART по умолчанию совместим с самым простым UART (формат кадра 8n l ) и везде устроен одинаково, потому в любых контроллерах приведенные процедуры инициализации заработают. Единственное, что может потребоваться, - замена имен регистров (в старших моделях портов может быть несколько, потому к реги страм прибавляются номера о, 1, 2 и т. д. ) . И, к сожалению, для старших моделей ( му AT megaSS/ 1 68/328) регистры USART размещены в области memory mapped, пото для них придется менять способ загрузки значений (см. главу 7). И у собственно UART, и тем более у расширенного USART, есть еще много всяких разных настроек, которые мы здесь не рассматриваем. Единственное, что стоит рассмотреть дополнительно, - прерывания USART, которых аж три штуки: «при ем завершен» (RX Complete), «регистр данных передатчика пуст» (ТХ UDR Empty), а также «передача завершена» (ТХ Complete). Все эти прерывания разрешаются специальными битами: RXCIE, UDRIE и тхсrЕ соответственно, в том же регистре ucsRВ, потому их можно подключать одной командой совместно с разрешением приема/передачи. Последние два прерывания : «регистр данных передатчика пуст» и «передача завершена» - в известной степени дублируют друг друга, только воз никают в разное время : «регистр данных передатчика пуст» возникает сразу, как только текущие данные из буфера передатчика UDR переданы в регистр передат чика (т. е. в момент начала передачи), а «передача завершена» - в момент оконча ния передачи, когда регистр передатчика опустеет. Порядок и целесообразность применения этих прерываний в различных случаях мы рассмотрим на конкретных примерах. П римеры использования UART в разных режимах Пример простейшего приема и отправки без использования прерываний приведен в листинге 1 5 .2 . Здесь принятый байт сразу же посылается обратно. ; Простой прием и отправка байта через UART . device AТmegaB . include "m8def . inc " . def temp = rl б ; рабочий регистр . org О rjmp Reset out com: ; посылка байта из temp с ожид . готовности ret sbis UCSRA, UDRE ; ждем готовности буфера передатчика rjmp out_com out UDR, temp ; отсылаем
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==