Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Уч. пос. МПТ (2.04.12).pdf
Скачиваний:
406
Добавлен:
22.03.2015
Размер:
10.95 Mб
Скачать

был считан до того, как оказался перезаписан следующим результатом. Бит очищается при чтении регистра ADxGDR.

Бит 31 (DONE). Бит равен единице, если аналого-цифровое преобразование завершено. Этот бит информирует о готовности результата. Бит очищается при чтении РСФ ADxGDR.

Регистр ADxGDR. В то время как регистр ADGSR хранит результата любого последнего преобразования, независимо от использованного канала, регистры AD0DR0–7, AD1DR0–7 (ADxDRx) хранят результаты для каждого канала в отдельности. Значения их битов идентичны битам регистра ADGSR, за исключением отсутствующих битов CHN.

Регистр ADxSTAT. Флаги готовности и потери данных всех каналов объединены в регистрах AD0STAT и AD1STAT (ADxSTAT).

Биты 0–7 (DONE0–7). Биты готовности результата преобразования сигналов в каналах 7–0. В отличие от своих копий в регистрах ADxDRx не очищаются при чтении регистра.

Биты 8–15 (OVERUN0–7). Биты потери результата преобразования сигналов в каналах 0–7. При чтении регистра значение битов сохраняется.

Бит 16 (ADINT). Флаг прерывания от АЦП. Данный разряд устанавливается в единицу и инициирует прерывание в случае, если равен единице один из битов готовности DONE0–7, при условии что прерывание для соответствующего канала разрешено (см. ниже регистр ADxINTEN).

Регистр ADxINTEN содержит биты разрешения прерывания по готовности результата АЦП.

Биты 0–7 (ADINTEN0–7). Биты позволяют разрешить (1) или запретить (0) прерывание, возникающее при завершении преобразования сигнала на каждом из восьми каналов АЦП.

Бит 8 (ADGNTEN). Установка этого бита в единицу разрешает прерывание от АЦП независимо от того, для какого канала получен результат. Для индивидуального выбора каналов следует записать ноль. При сбросе этот бит установлен в единицу.

1.15.4 Порядок настройки АЦП

1. Выполнить настройку АЦП через регистр ADxCR. При установке значений отдельных битов предлагается следующий порядок действий.

а) Выбрать способ запуска АЦП, принимая во внимание сведения в таблицы 1.15.3. Записать значение битов START и BURST в соответствии с выбранным способом запуска. Записать значение бита EDGE, если АЦП запускается сигналом от таймера или внешним сигналом. Если используется программный запуск, необходимо нулевое значение START.

б) Записать единицу в разряд PDN.

в) Если требуемое по заданию время преобразования меньше 2,44 мкс, выбрать разрядность и время преобразования, с учетом выражения (1.15.2).

г) Выбрать тактовую частоту АЦП, так чтобы время преобразования не превышало требуемого по заданию, но не более 4,5 МГц. Рассчитать значение битов CLKDIV по формуле (1.15.1).

67

д) Установить единицы в разряды SEL, соответствующие используемым каналам. Если аппаратное сканирование каналов не используется, должен быть выбран единственный канал.

Приведем пример настройки аналого-цифрового преобразования.

AD0CR=0x00207F02;

Данная команда обеспечивает включение АЦП (бит 21), с делителем частоты 1:128 (биты 8–15), с использованием канала 1 (биты 0–7).

2.Если предполагается использование прерывания по готовности АЦП, установить каналы, для которых будет вырабатываться прерывание (регистр ADINTEN). Если выборочная настройка по каналам не требуется или прерывание от АЦП не используется, оставить регистр ADINTEN без изменений.

3.Подключить портовые линии МК, выполняющие функцию аналоговых входов, через регистры PINSEL0 и PINSEL1 (рисунки 1.9.1, 1.9.2).

4.Если необходимо прерывание от АЦП, настроить контроллер пре-

рываний через регистры VICVectAddr0–15, VICVectCntl0–15 и VICIntEnable.

1.15.5 Программный запуск аналого-цифрового преобразователя

Программный запуск АЦП осуществляется командой логического сложения регистра ADxCR с числом 0x01000000. Это обеспечит установку двоичного кода 001 в биты START, не влияя на остальные биты.

AD0CR|=0x01000000;

1.15.6 Запуск аналого-цифрового преобразователя по таймеру

Для периодического преобразования необходимо:

1.Настроить таймер и схему совпадения для формирования интервалов времени, так как это было описано в разделе 1.13.5.

2.Разрешить формирование схемой совпадения установку одного из сигналов EMC0–3 (регистр TxEMR, биты EMC0–3). При этом прерывание от таймера разрешать не требуется.

3.При обнаружении готовности АЦП сбросить в ноль соответствующий флаг в регистре TxEMR (биты EM0–3), например, командой (для таймера 0 и сигнала EMC1)

T0EMR&=0xFFFFFFFD;

1.15.7 Программный опрос готовности АЦП

Практически могут быть предложены два варианта. Отличие состоит в том, что в первом случае программа МК «зависает» на время преобразования, что крайне нежелательно. Однако может считаться допустимым упрощением алгоритма в случаях, когда время преобразования пренебрежимо мало в данной конкретной специфической задаче.

Проверка готовности АЦП через опрос флага «с зависанием»

while ((AD0STAT & 0x00000002)==0) ; ADRes=AD0DR0;

... // Обработка

68

или

do ADCRes=AD0DR0;

while ((AD0STAT & 0x00000002)==0) ;

... // Обработка

Проверка готовности АЦП без «зависания»

if ((AD0STAT & 0x00000002)!=0) ADRes=AD0DR0;

...; // Обработка

или

ADCRes=AD0DR0;

if ((ADCRes & 0x00000002)!=0)

{

...;

// Обработка

}

Подразумевается, что эти команды будут помещены в вечный цикл, чем обеспечится их периодическое и частое выполнение.

Переменная ADRes должна быть объявлена как целое без знака.

unsigned int ADCRes;

1.15.8 Опрос готовности АЦП по прерыванию

Наиболее эффективным и универсальным можно считать считывание и обработку результата, вынесенную в процедуру обработки прерывания. Для разрешения прерывания по готовности АЦП необходимо:

1.Если требуется запрашивать прерывание по завершении преобразования для нескольких каналов выборочно, произвести соответствующую настройку через регистр ADxINTEN. Если прерывание должно происходить при каждом преобразовании, этот пункт пропустить.

2.Настроить систему прерываний с помощью регистров

VICVectAddr0–15, VICVectCntl0–15 и VICIntEnable.

3.Процедура обработки прерывания должна содержать команду сброса в ноль сигнала EMCx, если прерывание вызвано схемой совпадения таймера (раздел 1.15.4).

1.15.9 Считывание и масштабирование результата АЦП

Результирующий код аналого-цифрового преобразования может быть считан из регистра ADxDRx путем наложения маски и сдвига на шесть разрядов вправо:

N=(AD0DR0 & 0xFFC0) >> 6;

или

N=((AD0DR0 >> 6) & 0x3FF);

Наложение маски (логическое умножение на 0xFFC0) выделяет результат АЦП, сбросив все остальные биты регистра ADxDRx в ноль. Сдвиг вправо удаляет незначащие нули. При этом будет получен результат АЦП «как есть» от 0 до 1023, который может быть сохранен в целочисленную переменную N.

69