Поиск по сайту: |
|
По базе: |
|
Главная страница > Применение > Микроконтроллеров > MSP430 |
|
|||||||||||
Реализация функции UART с использованием таймера А3Резюме В данном примере применения описывается как при помощи модуля таймера timer_A3 реализовать функцию UART. Приведенные примеры предназначены для микроконтроллеров семейства MSP430x11x (1), но могут быть адаптированы для любых микроконтроллеров семейства MSP430, которые содержат модуль таймера timer_A. UART реализован на основе аппаратного модуля таймера timer_A3 и прикладной программы. Реализованный приемопередатчик является полудуплексным, управляемым событиями, поддерживает протокол 8N1 и работает на скоростях от 1200 до 115200 бод. Введение В микроконтроллере MSP430x11x (1) возможность ведения последовательной асинхронной передачи данных может быть реализована за счет использования встроенного модуля таймера timer_A3. В данном примере применения описывается несколько функций UART, демонстрирующих RS232 интерфейс между микроконтроллером с Flash памятью MSP430F1121 и персональным компьютером (см. рисунок 1). Также описывается как использовать аппаратный модуль таймера timer_A3, который обеспечивает автоматическое детектирование стартового условия, формирует заданную частоту передачи данных и захватывает биты данных. Аппаратный модуль таймера timer_A3 позволяет существенно сократить код прикладной программы и уменьшить загрузку вычислительного ядра микроконтроллера. Также параметры этого модуля позволяют UART работать в реальном времени в фоновом режиме. Рисунок 1. Демонстрационная схема реализации UART на микроконтроллере MSP430x11x (1) Описание UART, реализованного на модуле таймера Timer_A микроконтроллера MSP430x11x (1) Как показано в рисунке 1, MSP430F1121 ведет последовательный обмен данными с другой системой, в нашем случае с ПК, по RS232 интерфейсу. Обмен данными между системами ведется по трехпроводному кабелю, который содержит линии: передачи, приема и общую. При этом используется протокол 8N1: каждое сообщение содержит 8 информационных бит, не содержит бита проверки на четность и заканчивается одним стоп-битом. Для поддержки других протоколов нужно внести небольшие изменения в функционал UART. Описываемый UART использует нулевой регистр захвата-сравнения (CCR0), один из трех доступных, и таймер timer_A3. CCR0 используется для обнаружения старт-бита, задания скорости обмена данными и захвата данных. Два незадействованных регистра захвата-сравнения могут использоваться для других задач. Регистр CCR0 был выбран совершенно произвольно. Для реализации UART могут быть выбраны любые регистры CCRx. При помощи функции выбора периферийных задач линии P1.1 и P2.2 портов общего назначения подключены к CCR0 timer_A3. Линия P1.1 выбрана для передачи информации, а P2.2 - для приема. Периферийные задачи для выводов назначены при помощи регистров P1SEL и P2SEL. Поскольку вывод P1.1 используется для передачи, то он должен быть настроен на работу в качестве выхода. Осуществляется это установкой соответствующего бита регистра установка направленности линий портов (P1DIR). P2.2 должен работать как вход. По умолчанию у микроконтроллеров семейства MSP430 все выводы настроены на работу в режиме входа. Timer_A3 настроен на работу в непрерывном режиме, что позволяет использовать его одновременно и для других функций. Регистр R4 используется в качестве буфера приемопередатчика (RXTXData). Регистр R5 (BitCnt) используется в качестве регистра подстройки смещения. Регистры R4 и R5 были выбраны произвольно. Для выполнения этих функций могут быть использованы любые регистры вычислительного ядра или ячейки ОЗУ. В режиме приема нулевой управляющий регистр захвата-сравнения (CCTL0) сначала устанавливает модуль CCR0 в режим захвата данных по спадающему фронту сигнала на входе P2.2. Спадающий фронт на этом входе указывает на начала старт-бита. После того, как UART установлен в режим приема данных, от вычислительного ядра не требуется никаких ресурсов для обеспечения готовности принятия кодового слова. Ресурсы вычислительного ядра будут востребованы только после поступления старт-бита на вход P2.2. По спадающему фронту на входе P2.2 текущее значение работающего в свободном режиме таймера timer_A3 (TAR) сохраняется в регистре CCR0. Захват данных осуществляется аппаратными средствами таймера timer_A3 без использования программных средств. Также формируется прерывание для вычислительного ядра. Время задержки обработки прерывания не имеет значения, так как момент появления спадающего фронта точно зафиксирован в регистре CCR0. После обнаружения спадающего фронта старт-бита программное обеспечение перестраивает CCTL0 таким образом, чтобы CCR0 сравнивал данные в середине первого информационного бита. Смещение на 1.5 бита осуществляется за счет увеличения содержимого CCR0 на соответствующее значение. Полученные данные защелкиваются в SCCI. SCCI - считываемая защелка регистра CCTL0. При работе UART SCCI синхронно с CCR0 защелкивает логический уровень, присутствующий на входе P2.2. UART принимает данные, защелкнутые в SCCI. Программное обеспечение не контролирует непосредственно состояние входа P2.2. RX_Bit bit.w #SCCI, &CCTL0 ; получение бита, защелкнутого в SCCI После принятия первого бита содержимое CCR0 увеличивается на величину, позволяющую выполнить захват в середине следующего информационного бита. 8 информационных бит сохраняются программно в регистр RXTXData. Задача передачи данных более простая, так как MSP430 сам решает, когда передавать данные, и при этом не требуется осуществлять поиск никаких фронтов сигналов. Данные, сохраненные в буферном регистре RXTXData, аппаратно сдвигаются на выход P1.1 при помощи регистра CCR0 таймера timer_A. CCR0 перестраивается в режим сравнения для передачи следующего бита при помощи выхода режимно-управлемых битов в CCTL0. Режимно-управляющие биты определяют состояние выхода, которое будет установлено аппаратно в момент последующего сравнения. При этом отпадает необходимость программно отслеживать момент установки значения следующего выходного бита и выполнять саму установку. Программно осуществляется только загрузка значения следующего передаваемого бита: TX_Bit rra.b RXTXData ; смещение LSB для переноса jc TX_Mark ; переход если бит = 1 TX_Space bis.w #OUTMOD2, &CCTL0 ; область ТХ reti; TX_Comp bic.w #CCIE, &CCTL0 ; все биты приняты, блокировка прерывания TX_Mark bic.w #OUTMOD2, &CCTL0 ; метка TX reti; Перед передачей каждого бита программа прокручивает регистр RXTXData для установки бита переноса. Выполняется соответствующий переход и подготавливается режим выхода CCTL0, после чего к CCR0 добавляется длительность одного бита. Вычисление скорости передачи данных CCR0 таймера Timer_A3 используется для формирования скорости передачи данных. В зависимости от требуемой скорости рассчитывается необходимый интервал длительности бита (Bitime). Bitime - величина, на которую должен увеличить свое состояние таймер timer_A3 за время, равное длительности одного бита (см. рисунок 2). Величина Bitime рассчитывается как отношение частоты увеличения таймера timer_A3 и требуемой скорости передачи данных. Рисунок 2. Информационное слово в формате UART8N1 Timer_A3 имеет несколько доступных источников синхроимпульсов и делителей (см. техническое описание микроконтроллера). К возможным источника синхросигнала таймера timer_A3 микроконтроллера MSP430x11x (1) относятся источник вспомогательных синхроимпульсов (ACLK), источник системных синхроимпульсов (SMCLK) и два источника внешних синхроимпульсов. Пример: Рассмотрим формирование скорости передачи данных 9600 бод при помощи таймера timer_A3, синхронизирующегося от источника вспомогательных синхроимпульсов ACLK, который работает от 3.579545 МГц кварцевого резонатора: Bittime = 3 579 545 / 9600 = 372.9 ~ 373 Значение 373 используется потому, что только целочисленное значение Bitime может быть добавлено к CCR0. Погрешность формирования скорости передачи данных 9600 бод при частоте синхроимпульсов 3.579545 МГц, возникающая вследствие округления Bitime, не превышает 0.03 % на бит. Программная загрузка При выборе программной или аппаратной реализации UART разработчики исходят из степени загруженности системы в том или ином случае. Описанная в данном примере применения реализация UART использует возможности аппаратного таймера timer_A3, что позволяет снизить загруженность вычислительного ядра. Модуль таймера Timer_A3 автоматически определяет спадающий фронт старт-бита и защелкивает содержимое информационных бит. Для приема или передачи одного бита требуется не более 26 программных циклов (включая циклы подпрограммы обработки прерывания). Таким образом, степень загруженности вычислительного ядра для обслуживания реализованного UART является функцией, зависящей от частоты основных синхроимпульсов и скорости передачи данных. При использовании частоты MCLK, равной 3.58 МГц, для ведения обмена данными на скорости 9600 бод загрузка составит: Программная загрузка = (26 циклов вычислительного ядра) * (9600 бод) / 3 579 545 = 6.9 % Демонстрационная схема Демонстрационная схема, приведенная на рисунке 1, питается непосредственно от последовательного порта ПК, при этом 3.3 В напряжение питания микроконтроллера формируется стабилизатором с низким падением напряжения TPS76033. Для преобразования уровней сигналов интерфейса использованы два инвертора SN74AHC1G04 производства компании TI. Если необходимо реализовать интерфейс, полностью отвечающий стандарту RS232, то необходимо использовать низкопотребляющие 3 В преобразователи уровня типа MAX2331, которые также производятся компанией TI. Вход сброса подтянут к линии питания, а задающий генератор работает от 3.58 МГц керамического резонатора. Демонстрационная управляющая программа 11x1_uart1.s43 Демонстрационная управляющая программа 11x1_uart1.s43 предназначена для использования в качестве управляющей программы микроконтроллера, присутствующего в схеме на рисунке 1. Это программа формирования эха принятого сигнала. Т.е. ПК передает данные в демонстрационную схему, которая после принятия возвращает их назад. При инициализации происходит настройка всех выводов и синхронизация всех генераторов с кварцевым генератором LFXT1. LFXT1 настроен на работу в высокочастотном (HF) режиме. Если, как в этом примере, для формирования MCLK используется ВЧ резонатор, то он должен быть стабильным или же в режиме защиты от сбоев будет использоваться DCOCLK для формирования MCLK. OSCFAULT может опрашиваться для гарантирования стабильности работы автогенератора перед выбором его для формирования MCLK. SetupBC bis.b #XTS, &BCSCTL1 ; ACLK = LFXT1 ВЧ XTAL SetupOsc bic.b #OFIFG, &IFG1 ; сброс флага ошибки автогенератора mov.b #0FFh, R15 SetupOsc1 dec.b R15 ; формирование задержки для гарантирования запуска jnz SetupOsc1 bit.b #OFIFG, &IFG1 ; флаг ошибки автогенератора установлен? jnz SetupOsc; bis.b #SELM1+SELM0, &BCSCTL2 ; MCLK = LFXT1 Режим защиты от сбоев описан в руководстве по использованию микроконтроллеров семейства MSP430x1xx (документ SLAU049). Основная программа инициализирует UART при помощи подпрограммы RX_Ready, а затем переводит микроконтроллер в режим пониженного потребления LPM0, в котором вычислительное ядро отключено. В этом режиме активны только timer_A3 и ACLK. Даже при отключенном вычислительном ядре UART работает в режиме ожидания поступающих данных как фоновая подпрограмма обслуживания прерывания. После принятия приемопередатчиком информационного слова подпрограмма обслуживания прерывания UART активизирует вычислительное ядро и запускает основную программу. Подпрограмма передачи данных возвращает в ПК принятые данные, которые и отображаются на его мониторе. После этого цикл начинается сначала: микроконтроллер вновь переходит в режим ожидания поступления данных. Данная демонстрационная программа оптимизирована с точки зрения повышения быстродействия. В CCR0_ISR BitCnt используется для автоматического увеличения адреса косвенной адресации, что требуется для обработки передаваемых и принимаемых битов. Программе не требуется опрашивать флаги или уменьшать регистры для определения какой механизм нужно использовать. Автоматическое увеличение адреса используется совместно с поисковой таблицей для мгновенного определения адреса подпрограммы. add.w #Bitime, & CCR0 ; Bitime для следующего бита br @BitCnt + ; переход к соответствующей подпрограмме Преимущество автоматического увеличения адреса состоит в быстродействии и эффективности в условиях ограниченного количества доступных программных циклов. Демонстрационная управляющая программа 11x1_uart2.s43 - использование DCO для задания скорости обмена данными Демонстрационная программа 11x1_uart2.s43 показывает, как реализовать высокоскоростной UART на микроконтроллере семейства MSP430, работающем в режиме сверх низкого потребления и использующего только один 32 768 кГц часовой кварцевый резонатор. Для задания скорости обмена данными может использоваться встроенный в MSP430 задающий генератор с цифровой регулировкой (DCO). DCO - RC генератор с цифровой регулировкой, способный работать в диапазоне частот от 100 кГц до 5 МГц и выше и имеющий время запуска менее 6 мкс. DCO позволяет вести обмен данными даже в режиме сверх низкого потребления: спадающий фронт старт-бита запускает отключенный DCO менее чем за 6 мкс. Демонстрационная программа 11x1_uart2.s43 позволяет вести обмен данными на скорости 9600 бод, используя DCO для задания скорости обмена данными. 32 768 Гц часовой кварцевый резонатор заменяет 3.58 МГц резонатор, использованный в схеме на рисунке 1. DCO работает на частоте 1 228 800 Гц и используется для формирования подсистемных синхроимпульсов (SMCLK), являясь источником синхросигнала для модуля таймера timer_A3. DCO настраивается на высокую частоту при помощи программной системы ФАПЧ. Программная ФАПЧ считает количество синхроимпульсов SMCLK (синхросигнал, формируемый DCO) за период сигнала ACLK (синхросигнал, формируемый 32 768 Гц кварцевым генератором). После этого осуществляется регулировка частоты DCO. при стабильных температуре и напряжении питания частота DCO остается неизменной. Программная ФАПЧ может быть запущена в любое время для подстройки частоты DCO. Подробнее о программной ФАПЧ можно прочитать в техническом описании микроконтроллеров семейства MSP430x11x1 (документ SLAS241). В данном примере основная программа выполняется в режиме LPM3, типовой ток потребления в котором менее 2 мкА, при этом UART готов к приему данных. Эта программа, также как и описанная выше, формирует эхо принятого сигнала. В данном примере для приема кодовой комбинации используется регистр BitCnt. Демонстрационная управляющая программа 11x1_uart3.s43 - использование 32 кГц кварцевого резонатора для задания скорости обмена данными В некоторых случаях источником синхросигнала для таймера timer_A3 должен быть 32 768 Гц часовой кварцевый резонатор. В этом случае также можно реализовать UART, но работающий на более низкой скорости, что позволит избежать ошибок принятия данных. Демонстрационная программа 11x1_uart3.s43 позволяет реализовать UART, работающий на скорости 2400 бод. Программная ФАПЧ для подстройки DCO не требуется, так как синхронизация UART осуществляется от 32 кГц кварцевого автогенератора. В активном режиме вычислительное ядро синхронизируется от высокочастотного DCO. Также в этом примере, регистры RXTXData и BitCnt содержатся в ОЗУ. Выставки концерты Москвы - WeekEnd.ru
Главная - Микросхемы - DOC - ЖКИ - Источники питания - Электромеханика - Интерфейсы - Программы - Применения - Статьи |
|
Впервые? | Реклама на сайте | О проекте | Карта портала тел. редакции: +7 (995) 900 6254. e-mail:info@eust.ru ©1998-2023 Рынок Микроэлектроники |
|