Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ:

Отправлено Юрий_СВ (217.12.195.250) 20 июня 2011, г. 19:16
В ответ на: Возможно... отправлено J_H 20 июня 2011, г. 18:10

Пытался использовать и 2-й канал (на другой порт) (для отладки)... Не особо влияет..
Период запускающего таймера - 8 мкс (125 кГц), SND_DMA_BUF_LEN=160
При включенной "двойной буферизации 0, 1" и режим канала "single" - период 70 мкс (частота - 14+ кГц)
Без двойной буферизации - 50 мкс (20 кГц)
Без "single" - 25 мкс (40 кГц)
(для всех случаев размер пачки - 1 байт)
(включён повтор, кол-во повторов 0(безконечно) )


// --------------------- ПДП ---------------------
//контроллер
DMA.CTRL=0x00; // выключаем ПДП контроллер ENABLE=0
while (DMA.CTRL&0x80); // ожидаем выключения (после выдачи буферов)
DMA.CTRL=0x40; // сбрасываем ПДП контроллер RESET=1
while (DMA.CTRL&0x40); // ожидаем выполнения сброса

DMA.CTRL=0x83; // включаем ПДП контроллер ENABLE=1, DBUFMODE=DISABLED, PRIMODE=CH0123
// "двойная буферизация" запрещена, фиксированный приоритет каналов
//-------------------------------------------------------------------------------
//канал 0
DMA.CH0.CTRLA=0x00; // выключаем канал ПДП контроллера CHEN=0
while (DMA.CH0.CTRLA&0x80); // ожидаем выключения (после выдачи буферов)
DMA.CH0.CTRLA=0x40; // сбрасываем канал ПДП контроллера CHRST=1
while (DMA.CH0.CTRLA&0x40); // ожидаем выполнения сброса


DMA.CH0.CTRLB=0x30; // сброс флагов прерываний, запрет прерываний
DMA.CH0.ADDRCTRL=0x50; // SRCRELOAD=BLOCK, SRCDIR=INC, DESTRELOAD=NONE, DESTDIR=FIXED
DMA.CH0.TRIGSRC=0x40; // TRIGSRC=TCC0 overflow - событие, запускающее пересылку через ПДП
DMA.CH0.REPCNT=0; // кол-во повторов передачи блока (буфера) = не ограничено

DMA.CH0.TRFCNT=SND_DMA_BUF_LEN; // задаём размер блока (буфера)

DMA.CH0.SRCADDR0= buf;
DMA.CH0.SRCADDR1=((unsigned int)buf)>>8;
DMA.CH0.SRCADDR2=0;


DMA.CH0.DESTADDR0=&(PORTD.OUT);
DMA.CH0.DESTADDR1=( (unsigned int)(&(PORTD.OUT)) )>>8;
DMA.CH0.DESTADDR2=0;

DMA.CH0.CTRLA=0xa0; //a4; // включаем канал ПДП контроллера CHEN=1, SINGLE=1, BURSTLEN=1


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

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

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru