Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекция - Си

.pdf
Скачиваний:
67
Добавлен:
18.05.2014
Размер:
431.24 Кб
Скачать

Пример.

Работа с АЦП с использованием прерываний (4)

// Настройка АЦП void setUpAdc (void)

{

//Режим: 8 бит, не спящий; остальные параметры - по умолчанию

//Время выборки и частота тактирования здесь не настроены; adc->ADC_MR =

AT91C_ADC_LOWRES_8_BIT | AT91C_ADC_SLEEP_NORMAL_MODE;

//Включить 4й канал (потенциометр)

adc->ADC_CHER = AT91C_ADC_CH4;

//Включить выставление сигнала прерывания

//по завершению преобразования

adc->ADC_IER = AT91C_ADC_EOC4;

}

51

// Считываем результат
unsigned int adcCode = adc->ADC_CDR4 & 0x03FF; //..... Делаем что-то с adcCode
//Сбрасываем флаг выполнения преобразования adcIsRunning = false;

Пример. Работа с АЦП с использованием прерываний (5)

// Флаг, свидетельствующий о том, что выполняется преобразование static volatile unsigned char adcIsRunning = false;

// Обработчик прерывания от АЦП static void adcInterruptHandler(void)

{

}

int main(void)

{setUpAic(); setUpAdc(); while (1)

{// Если преобразование не выполняется, запускаем снова if (!adcIsRunning) // if (adcIsRunning == false)

{adcIsRunning = true;

adc->ADC_CR = AT91C_ADC_START; // 0x02; Запуск АЦП

 

}

 

// ... Делаем что-то полезное

} }

52

 

Спасибо за внимание!

Вопросы?

53