[an error occurred while processing this directive]
Ответ: Может на улице и жарко, да вот до бреда еще далеко (+)
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Чайник 01 августа 2003 г. 12:29
В ответ на: Нет, всё дело в том, что это дма и ничего запрещать/разрешать не надо, отправлено sdy 01 августа 2003 г. 02:15

Я из-за этого SPI потерял почти месяц времени. Задача была такая - обмен с "внешним миром", переменная длина от 2 до 160 слов. Так вот, "натрахавшись" вдоволь с ДМА, после 3 недель - переписал код на прерывания за 1 день и никакх геммороев с тех пор не осчущаю :)) И вам настоятельно рекомендую отложить использование SPI в ДМА до "прояснения" вопроса. Кстати, там есче много чего работает не так, как в спортах или уарте. Например - после старта, путем записи 1 в регистр конф-ции ДМА контроллера io(SPI0D_CFG), все "нормальные" каналы сбрасывают 15 бит в io(), этот - "возвращает" 1. Другими словами - просто не стартует. Тока со второй попытки это удается сделать ... И есче эта тема "поднималась" на конфе пару страниц назад. В обсуждении принимал участие Димыч, кстати не в курсе появится еще или нет ?

Короче - образец кода:

Этот код - результат кропотливых, многочасовых попыток запустить SPI

Удачи на "дорогах" :))

IOPG = SPI0_Controller_Page; // == 0x4

ar = 0x0000;
io(SPICTL0) = ar; // Сбосить порт
io(SPI0D_CFG) = ar; // Сбросить настройки DMA
ar = 0x00ff;
io(SPI0D_IRQ) = ar; // Сбросить флаг прерывания
io(SPIST0) = ar; // Сбросить статус

ar= 6; io(SPIBAUD0)= ar; // SPI0 Baud rate Register
ar = 0x8005; dm(SPI_HEAD) = ar; // Конфигурация DMA

ar = 0xFC02; io(SPIFLG0) = ar; // SPI0 Flag register
ar = 0x0080; io(SPI0D_CFG) = ar; // SPI DMA Configuration Register Wait until start
ar = SPI_HEAD; io(SPI0D_CP) = ar; // точка след дескриптора

ar = 0x0001; io(SPI0D_CPR) = ar; !!!! Эта команда НАХ... не нужна, поскоку не влияет ни на что ... :))))))

ar = 0x511E; io(SPICTL0) = ar; // SPI0 Control Register in DMA MODE wait until start
ar = 0x8005; io(SPI0D_CFG) = ar; // Старт !!!

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru