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

тормозит DMA

Приветствую участников форума! У меня 2 контроллера (LPC1768 и s3c2440) соединены по протоколу SPI. При этом LPC1768 в роли ведущего выдает через свой SSP контроллер, сконфигурированный как SPI, посылку в 8 байт с частотой 10 кГц. Прием посылки в s3c2440 организован через DMA, сконфигурированный для чтения 8 байт, после этого должно возникать прерывание. Проблема в том, что прерывания начинают появляться ~через 15 сек после включения обмена, далее все вовремя, но байты оказываются сдвинутыми на 1. Данные из ведущего появляются вовремя (смотрел по осциллографу).

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


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

Проблема по всей видимости аппаратная. Переключил все действо на другой SPI порт, задержка исчезла. Однако, осталась другая: последний байт, принятый по SPI через DMA оказывается первым байтом следующей посылки. Т.е послал 80 01 C0 03 E0 07 F0 0F, а принял 0F 80 01 C0 03 E0 07 F0. Может, кто-нибудь сталкивался?

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


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

В LPC1768 такое было.

Во первых перед запуском нужно всё грамотно сбросить, все флаги о том что пришли данные, на всех стадиях, НА ВСЕХ. Т.е. у самого SPI, очистить SPI FIFO, контроллер ДМА сбросить, не забыть очистить DMA FIFO, сбросить прерывания, если есть флаг прерывания, на промежуточных стадиях (подсистемма событий) всё очистить. И самое главное - сбрасывать ДМА после всех остальных сбросов.

 

У меня такое было что вроде дма сброшен. принудительно его фифо очищен, SPI сброшен перед сбросом ДМА, флаг прерывания тоже перед ДМА сброшен - запускаешь - точно такой же сдвиг в 1 слово как у автора.

Всё оказалось что нужно было выключить и включить ДМА именно для SPI и после этого сбрасывать ДМА. т.е. сделать что то вроде:

LPC_SSP1->DMACR = 0;

LPC_SSP1->DMACR = 3;

(LPC1768)

 

Только поcле этого норм

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


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

Спасибо за совет, буду продолжать копать в предложенном направлении, хотя у меня уже первый пакет приходит вывернутый, когда DMA было только что инициализировано и по SPI еще ничего не передавалось.

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


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

Теперь возникла задача передавать данные по SPI из s3c2440 в lpc1768 , причем последний по-прежнему работает мастером. Проблема опять та же: ведомый s3c2440 посредством DMA передает сначала конец предыдущей посылки, потом все остальное, кроме конца, т.е имеем сдвиг данных. Лекарство, использованное ранее для приема ведомым, - включать/выключать DMA после получения каждого пакета - не работает. Может, кто сталкивался?

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


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

Я бы даже сказал, что сброс DMA после передачи каждого пакета вредит. Если убрать сброс, то при первом включении посылки идут нормально. Потом, если мастер отрубается, все включается вновь, но криво. Чтобы побороться с кривизной поставил сторожевой таймер, с частотой чуть меньшей, чем частота посылок. В прерывании по приему посылки от DMA таймер сбрасывается, если приема нет, срабатывает прерывание от таймра, в котором сбрасывается DMA. Результат достаточно скромный в 7 из 10 случаев отрубания мастера и срабатывания таймера имеется сдвиг на байт.

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


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

Проблема решена. Надо по таймеру после отключения мастера перейти в режим мастера и выпихнуть байт, застрявший в передающем регистре.

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


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

а в этих процах разве нет возможности настройки у SPI таймингов задержки до отправки бит и после отправки бит? у атмела это точно настраивается всё. И проблем бы возможно не возникало в вашем случае.

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


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

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

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

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

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

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

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

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

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

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