Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; 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
Составить ответ | Вернуться на конференцию
Ответы