реклама на сайте
подробности

 
 
> ADC+DMA AVR ATxmega192
KIG
сообщение Jan 13 2014, 07:12
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Добрый день!

Использую DMA для передачи значений АЦП в буфер (массив из 4652 ячеек). Останов преобразований АЦП происходит в произвольный момент времени. Однако регистр DMA.CH0.TRFCNT всегда считываю равным 4652.
Подскажите, пожалуйста, в чем ошибка?

Я пишу в буфер по кругу (т.е. когда дохожу до конца массива перепрыгиваю на начало), поэтому мне необходимо знать номер ячейки массива, где записана последняя точка.

Инициализацию DMA и считывание регистра DMA.CH0.TRFCNT следующим образом:

Код
void DMAC_init()
{
  DMA.CTRL=0;//DMA отключен
  DMA.CH0.CTRLA|=(1<<7)|(1<<2);//посылка из 1 байта
                        //разрешение работы 0 канала DMA
                        //singleshot
  DMA.CH0.ADDRCTRL|=(1<<3)|(1<<2);//Начальное значение перезагружается
                                  // в регистр адреса получателя DMA в конце каждой транзакции
  DMA.CH0.ADDRCTRL|=(1);//Инкрементное увеличение адреса получателя                                  
  DMA.CH0.TRIGSRC=0x20;//Запуск оn ADCB
  DMA.CH0.TRFCNT=4652;//Количество байт в блоке
  DMA.CH0.SRCADDR0=0x64;//младший байт адреса RESL ADCB.CH0
  DMA.CH0.SRCADDR1=0x02;//старший байт адреса RESL ADCB.CH0
  DMA.CH0.DESTADDR0=((int)&Ch0)&255;
  DMA.CH0.DESTADDR1=((int)&Ch0)>>8;
}

void main
{
DMAC_init();
DMA.CTRL|=(1<<7);//Включили DMA
ADCB_init();
ADCB.CTRLA|=1;//Включаем АЦП
ADCB.CTRLB|=(1<<3); // Старт первого преобразования АЦП

//....  //работа DMA;

ADCB.CTRLA=0;//Отключил АЦП
unsigned int ch_i;
ch_i=DMA.CH0.TRFCNT;
}


Заранее спасибо!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KIG
сообщение Jan 21 2014, 14:33
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Артем, большое спасибо! Идея c ping-ping режимом DMA очень интересная. Буду реализовывать.

Цитата
Осциллограмма - это значения АЦП без фильтрации?


Все верно!

Цитата
ДМА так и делает, но при этом сбрасывает флаг CH0IF.


CH0IF принадлежит модулю АЦП. Правильно ли я понимаю, что ДМА сбрасывает флаг модуля АЦП? Ранее думал, что этот флаг автоматически сбрасывается при переходе на вектор прерывания или путем записи в него 1.

Цитата
10 тактов не больше. Оптимизация включена?

С оптимизацией были проблемы (наверное, код не корректно написал), программа глючила (точно уже не помню,что там было.. ). Поэтому оптимизация не используется. Попробую снова включить оптимизацию!

Еще вопрос:
правильно ли я понимаю, что DMA может работать, записывая в память отсчеты АЦП, при тех же настройках (что и ранее), если я не буду использовать прерывания АЦП (т.е. ADCB.CH0.INTCTRL=0;//MAX Level is OFF)??

Сообщение отредактировал KIG - Jan 21 2014, 14:38
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Jan 21 2014, 17:19
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(KIG @ Jan 21 2014, 16:33) *
CH0IF принадлежит модулю АЦП. Правильно ли я понимаю, что ДМА сбрасывает флаг модуля АЦП?
Сбрасывает - в мануале искать не буду, но иначе ДМА бы без остановки читал результат. Написал и засомневался, но проверить не на чём (скорее некогда). Посмотрите что симулятор показывает - это он отрабатывает правильно.
Цитата(KIG @ Jan 21 2014, 16:33) *
Ранее думал, что этот флаг автоматически сбрасывается при переходе на вектор прерывания или путем записи в него 1.

Это само собой.

Цитата(KIG @ Jan 21 2014, 16:33) *
С оптимизацией были проблемы (наверное, код не корректно написал), программа глючила (точно уже не помню,что там было.. ). Поэтому оптимизация не используется.

Дело в программе. 100 %.

Цитата(KIG @ Jan 21 2014, 16:33) *
правильно ли я понимаю, что DMA может работать, записывая в память отсчеты АЦП, при тех же настройках (что и ранее), если я не буду использовать прерывания АЦП (т.е. ADCB.CH0.INTCTRL=0;//MAX Level is OFF)??
По идее верно - прерывания и ДМА вместе не удасться использовать.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 22:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016