Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт
Шрифт:
Интервал:
Закладка:
Аналоговые сигналы поступают на вход аналогового мультиплексора. Мультиплексор коммутирует один из аналоговых сигналов на вход АЦП последовательного приближения. Номер коммутируемого канала выбирается программно посредством установки определенных битов в регистрах специальных функций модуля ATD.
Запуск АЦП на преобразование осуществляется программной установкой бита в регистре управления ATDCTL5. После завершения преобразования полученный код загружается в один из регистров результата ADR0H…ADR7H. Номер регистра результата для каждого преобразования выбирается в соответствии с номером измеряемого канала. После завершения преобразования также устанавливаются флаги в регистре состояния ATDSTAT.
АЦП тактируется импульсной последовательностью с выхода делителя частоты fBUS. Выводы VRH и VRL предназначены для подключения внешних источников прецизионного напряжения. Разность напряжений на этих входах URH–URL определяет напряжение полной шкалы преобразования модуля ATD. Если напряжение входного аналогового сигнала UINP≤URL, то на выходе АЦП будет формироваться код $00. При UINP≥URH, результирующий код АЦП будет равняться $FF. Формат представления кода — прямой однобайтовый беззнаковый.
При изучении модуля ATD сначала может показаться, что процесс управления аналого-цифровым преобразованием достаточно сложен и состоит из многих операций. Мы покажем Вам, что это не так, и для этого проведем аналогию между изучаемым процессом и процессом выпечки пирожных. Для выпечки пирожных (или преобразования измеряемого напряжения в код) проделайте следующие действия:
• Включите духовку (для включения модуля ATD бит ADPU в регистре ATDCTL2 следует установить в 1);
• Прогрейте духовку в течение некоторого времени (после включения ATD следует организовать задержку на 100 мкс для завершения переходных процессов в аналоговых цепях и стабилизации системы тактирования АЦП);
• Определите, какую начинку Вы будете добавлять в пирожные: — грецкие орехи, мармелад и т.д. (определите, какой режим аналого-цифрового преобразования Вы будете использовать, и установите соответствующие биты регистров ATDCTL4 и ATDCTL5);
• Положите пирожные в духовку (установите биты регистра ATDCTL5). Они будут готовы через некоторое заранее установленное таймером время. Об окончании приготовления сообщит звуковой сигнал (В регистре ATDSTAT установится флаг SCF).
• Готовые пирожные выложите на блюдо (цифровой код буден помещен в регистры данных). Пирожные готовы для еды, а результат оцифровки для дальнейшего использования в расчетах.
4.22.2. Регистры управления модуля ATD
Ранее мы отметили, что все регистры специальных функций модуля ATD объединены в блок из шестнадцати 16-разрядных слов. Этот блок занимает в памяти 32 однобайтовых ячейки с последовательными адресами. По смысловому назначению все регистры можно разбить на четыре группы:
• Регистры управления. Эти регистры используются для выбора режима работы модуля ATD, для указания номера подлежащего оцифровке канала, для запуска АЦП на преобразование.
• Регистры состояния. Двухбайтовый регистр состояния содержит группу флагов, которые отражают текущее состояние модуля ATD: находится ли он в состоянии преобразования, какой канал преобразуется, или все преобразования уже завершены.
• Регистры результата. Модуль ATD содержит восемь 8-разрядных регистров результата (по числу аналоговых входов модуля). После завершения очередного преобразования полученный код загружается в соответствующий номеру канала регистр результата ADR0H…ADR7H.
• Тестовые регистры. Двухбайтовый регистр ATDTEST предназначен для специальных операций в процессе обязательного тестирования МК на фабрике-производителе. Доступ к этому регистру возможен только в специальном режиме работы МК. В обычном пользовательском режиме работы этот регистр для чтения и для записи недоступен.
Приступим теперь к более подробному рассмотрению формата регистров специальных функций модуля ATD.
Группа регистров управленияЭта группа регистров предназначена для управления режимами работы модуля аналого-цифрового преобразования. Группа объединяет шесть регистров управления ATDCTL0…ATDCTL5. Один из регистров (ATDCTL2) используется для включения модуля ATD в работу, поскольку аппаратные средства МК при выходе из состояния сброса отключают этот модуль для уменьшения энергии потребления. После того, как модуль ATD включили, следует выдержать паузу в 100 мкс, прежде чем подавать сигнал начала преобразования. Задержка в 100 мкс необходима, чтобы завершились переходные процессы включения в аналоговых цепях модуля. Регистры управления используются для выбора между режимами однократного или многократного преобразования, а также для назначения номера канала, подлежащего оцифровке. В режиме многократного преобразования может быть запрограммирована последовательность номеров каналов, которые будут оцифровываться друг за другом автоматически, без дополнительного вмешательства прикладной программы. Или многократные измерения могут проводиться для одного канала. Регистры управления 0, 1 и 3 по своему функциональному назначению используются достаточно редко, поэтому мы рассмотрим их кратко. Напротив, регистры 2, 4 и 5 активно используются в прикладных программах, поэтому будут рассмотрены подробно.
Регистры управления ATDCTL0 и ATDCTL1Регистр управления ATDCTL0 располагается в памяти по адресу $0060. Этот регистр предназначен для принудительного останова аналого-цифрового преобразования, для чего в регистр под управлением программы должен быть записан определенный код. Этот режим крайне редко используется в прикладных программах. Не будем использовать его и мы в наших учебных примерах. Регистр управления ATDCTL1 располагается в памяти по адресу $0061. Он используется только в специальных случаях тестирования ИС МК.
Регистр управления ATDCTL2Рис. 4.84. Формат регистра ATDCTL2
Регистр управления ATDCTL2 располагается в памяти по адресу $0062. Этот регистр в первую очередь используется для включения модуля ATD. Он также содержит флаг окончания преобразования и несколько битов разрешения режимов. Формат регистра приведен на рис. 4.84. Назначение отдельных битов регистра следующее:
ADPU:
Бит разрешения работы модуля ATD. После сброса бит ADPU установлен в 0, и модуль ATD отключен от системы питания. Для включения модуля следует установить бит ADPU в 1. Модуль ATD будет готов к работе через 100 мкс.
AFFC:
Бит выбора режима сброса флагов модуля ATD. Если этот бит установлен в 0, то все установленные флаги сбрасываются обычным способом, т.е. посредством записи 1 в разряд установленного флага. Если же бит установлен в 0, то для всех флагов модуля разрешается как обычный способ сброса, так и ускоренный. Ускоренный способ сброса для каждого флага будет рассмотрен несколько позже.
AWAI:
Бит разрешения работы модуля ATD, когда микроконтроллер находится в состоянии пониженного энергопотребления типа WAIT. Если бит установлен в 0, то модуль ATD продолжает свою работу в состоянии WAIT. При AWAI = 1 работа модуля ATD с состоянии WAIT приостанавливается для понижения энергопотребления.
ASCIE:
Бит разрешения прерывания по флагу окончания преобразования АЦП. Если этот бит установлен в 1, и флаг окончания преобразования ASCIF установился в 1, то генерируется запрос на прерывание. Если бит ASCIE = 0, то прерывания по флагу ASCIF запрещены и его состояние следует контролировать программно.
ASCIF:
Флаг окончания преобразования АЦП. Автоматически устанавливается в 1, если ранее начатое аналого-цифровое преобразование завершено, и полученный код загружен в один из регистров результата. Если прерывания по данному флагу разрешены (ASCIE = 1), то генерируется запрос на прерывание.
Генерация запроса на прерывание с собственным вектором особенно полезна при работе модуля ATD в режиме измерительной сессии. В этом режиме АЦП выполняет несколько последовательных преобразований после единственного запуска под управлением программы. При использовании прерывания МК в течение всего времени преобразования может исполнять другие действия прикладной программы управления. Когда многократное аналого-цифровое преобразование будет завершено, установится флаг окончания преобразования ASCIF, будет выставлен запрос на прерывание, и МК, исполняя подпрограмму прерывания, считает коды оцифровки из регистров результата в память МК. Альтернативой такой организации взаимодействия прикладной программы с модулем ATD является многократный опрос флага ASCIF после программного запуска АЦП. Когда программа обнаружит, что флаг установился, регистры результата как и в предыдущем случае будут считаны. Однако в течение всего времени преобразования МК будет занят обслуживанием АЦП и не сможет исполнять других фрагментов прикладной программы.