Перейти к содержанию
    

LPC2138: АЦП в режиме прерываний.

Если в функции обработки прерывания по завершению преобразования АЦП0 я после чтения результата вставлю запуск

очередного преобразования (AD0CR_bit.START = 1), то контроллер виснет. Но если в функции обработки прерывания

я устанавливаю флаг завершения преобразования, а следующее преобразование запускаю в main, то все работает.

 

// так работает

void ADC0Init()

{

PINSEL0_bit.P0_5 = 0x03;

AD0CR_bit.SEL = 0x80;

AD0CR_bit.CLKDIV = 5;

AD0CR_bit.BURST = 0;

AD0CR_bit.CLKS = 0;

AD0CR_bit.PDN = 1;

AD0CR_bit.START = 0;

}

 

void ADC0_int()

{

AdcResult = AD0DR_bit.VVDDA; //AdcResult и AdcReady - глобальные

AdcReady = 1;

}

 

void main()

{

AD0CR_bit.START = 1;

while (1)

{

if (AdcReady )

{

AdcReady = 0;

AD0CR_bit.START = 1;

}

}

}

 

// так виснет

void ADC0_int()

{

AdcResult = AD0DR_bit.VVDDA;

AD0CR_bit.START = 1;

}

 

void main()

{

AD0CR_bit.START = 1;

while (1)

{

}

}

Может, кто подскажет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

я устанавливаю флаг завершения преобразования, а следующее преобразование запускаю в main, то все работает.

....

Может, кто подскажет?

 

Что же вам еще подсказать, если и так все работает?

 

ps: не вижу смысла в запуске АЦП в прерывании от АЦП. Вы насильно вводите систему с состояние коллапса. Другое дело запускать AЦП по прерыванию таймера с заданной частотой дискретизации, а по прерыванию от АЦП считывать рез-тат АЦП.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AD0CR_bit.CLKDIV = 5;

Для такой частоты тактировки ADC у Вас просто захлебывается контроллер - за 66 тактов

он даже из обработчика перывания (если у Вас после START и возврата в обертку еще команды есть, то наверняка) может не успеть выйти. При тактировки "разумными" частотами проблем не будет.

Естественно, что и для "рабочего" варианта Вы не получите полного потока отсчетов - они

просто массово теряются. Подумайте над необходимой Вам частотой отсчетов.

Вообще в START из обработчика абсолютно ничего противоестественного нет. Хотя может Вам просто BURST mode нужен?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В LPC2378 может быть выбран только один канал АЦП или данные можно получать с нескольких каналов? Мне одновременно требуется обрабатывать два канала АЦП, крутил, вертел и ничего - тока по одному получается. Прерывание может быть от любого канала, но в этот момент хотелось бы принять данные с обоих каналов. Реально такое осуществить? Как?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В LPC2378 может быть выбран только один канал АЦП или данные можно получать с нескольких каналов? Мне одновременно требуется обрабатывать два канала АЦП, крутил, вертел и ничего - тока по одному получается. Прерывание может быть от любого канала, но в этот момент хотелось бы принять данные с обоих каналов. Реально такое осуществить? Как?

 

Изначально вопрос был о LPC2138. В нём можно запускать синхронно два АЦП. Проверено на частотах квантования до 450КГц.

При этом устанавливал PCLK = CCLK, то есть частота периферии равна частоте ядра. Внуртенняя частота АЦП должна быть не выше 4.5МГц (требование даташита).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Изначально вопрос был о LPC2138. В нём можно запускать синхронно два АЦП. Проверено на частотах квантования до 450КГц.

При этом устанавливал PCLK = CCLK, то есть частота периферии равна частоте ядра. Внуртенняя частота АЦП должна быть не выше 4.5МГц (требование даташита).

В LPC2378 я не обнаружил два регистра управления. А 2138 в наличии увы не имею. То есть хоть расшибись одновременно два канала АЦП на 2378 не обработать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В LPC2378 я не обнаружил два регистра управления. А 2138 в наличии увы не имею. То есть хоть расшибись одновременно два канала АЦП на 2378 не обработать?

Обрабатывать можно, измеряться будут последовательно - BURST mode.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...