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

 
 
> LPC1768+DMA+SSP, Как правильно сбросить переполненный канал
Golikov A.
сообщение Jan 19 2015, 16:36
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Всем привет!

Есть такая проблемка на LPC1768 настроен SSP в режиме slave
входные данные при помощи DMA перегружаться в буфер 1024 байта.

если на вход напихать данных так штук 2000, то буфер переполняется, для сброса этого дела
я
1. выключаю DMA каналы,
2. дожидаюсь что пропал битик включения канала
3. вычитываю буфер FIFO SSP
4. переинициализирую DMA канал

и мне приходит последний байт, хоть убейся об него...

Такая же переинициализация в середине обмена - все хорошо, а по переполнению вот такая фигня.

Кто сталкивался, как победить?

Как почистить кроме входного еще и выходной SPP FIFO?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Jan 20 2015, 09:51
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Цитата
У Вас неоптимально сконфигурён DMA для SSP. Там надо разрешить блоковую передачу. тогда будет ложить не по слову, а сразу будет половину SSP FIFO заполнять. при возможности.
См. DMACCxControl::SBSize и DBSize.

что есть оптимально? SPI работает на 8МГц клока, при тактовой проца 100, ограничение слейв режима . Времени на передачу очередного символа полно, тем более в DMA есть FIFO, что мне даст браст передача в этом случае? Только что из выходного фифо надо будет чистить ни 1 а 4 символаsm.gif. И что я на вход смогу получать только сообщения кратные 4? Чет мне кажется это как раз не оптимально...

Цитата
Кто-ж так построил систему? Почему так? А почему не постоянный или кратный некоторому целому размеру DMA?

адаптация езернет системы на SPI. Сохранение протокола, ничего поделать нельзя.

Цитата
Кто Вам мешает его завести на любой пин 0го или 1го порта или EINT?
Тяжелая судьба программиста, как схемотехник завел и сделал, так и будет.

Цитата
Не понял... Зачем?????? wacko.gif
Обычно CS опускается в начале всей транзакции и поднимается в конце.


А вот это прям отдельная!!!!!!! Потому что так работает slave SSP в этом проце. Он зараза по чипселекту байты из фифо в сдвиговый перекладывает и обратно. Потому если им не дергать на каждое слово, то получите только 1 слово из всего сообщения, это прям ваще все поломало!
я планировал этот Чипселект использовать как кадровая синхронизация, а вот хрен там! Опять же я не ожидал что в SSP нет прерывания на прием символа. Ровно как я что-то был не в курсе что 1 порт не является портом с прерыванием.

А вот оно так сложилось, и первая ревизия платы такая, не выбрасывать же ее теперь.
Потому у меня по проводку готовности данных происходит еще и кадровая синхронизация. И фронты я полингом отлавливаю... эх...

В общем стечение обстоятельств

интересно если 2 SSEL ноги с разных портов настроить, прокинется сигнал с одной на другую? ведь они должны соединиться внутри... может так и прерывание можно с порта на порт перенестиsm.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jan 20 2015, 10:35
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Golikov A. @ Jan 20 2015, 15:51) *
адаптация езернет системы на SPI. Сохранение протокола, ничего поделать нельзя.

И кто же мешает дополнять эти кадры padding-ом до некоторого нужного размера?
Надеюсь - хоть канальный уровень протокола обмена у вас какой-то прописан, который поможет определить фактическую длину кадра?

Цитата(Golikov A. @ Jan 20 2015, 15:51) *
Тяжелая судьба программиста, как схемотехник завел и сделал, так и будет.

Авторитета у вас нет laughing.gif
У нас если я скажу, что нужно переделать схему - переделывают, переразводят.
И в удалённых проектах, в которых участвовал - тоже.

Цитата(Golikov A. @ Jan 20 2015, 15:51) *
А вот это прям отдельная!!!!!!! Потому что так работает slave SSP в этом проце. Он зараза по чипселекту байты из фифо в сдвиговый перекладывает и обратно. Потому если им не дергать на каждое слово, то получите только 1 слово из всего сообщения, это прям ваще все поломало!

Не надо. Это Вы что-то не так делаете. Ищите ошибку у себя. SSP (даже слэйв) в LPC не требует дёрганья CS на каждое слово.
Разрешите хотя-бы burst-запросы. Возможно что у Вас SSP выставляет burst-запрос к DMA, а раз он запрещён в DMA и не отрабатывается, то
он остаётся висеть необслуженным и SSP новых запросов не ставит, ждёт пока первый обслужится.
Вобщем - что-то Вы не так делаете.
И не надо наговаривать на проц. sm.gif
SSP там хороший и прямой. Просто куча проектов уже на нём с использованием связки SSP+DMA sm.gif

Цитата(Golikov A. @ Jan 20 2015, 15:51) *
в курсе что 1 порт не является портом с прерыванием.
А вот оно так сложилось, и первая ревизия платы такая, не выбрасывать же ее теперь.
Потому у меня по проводку готовности данных происходит еще и кадровая синхронизация. И фронты я полингом отлавливаю... эх...

Так перед тем как садиться схему делать и ПО писать, сперва следует мануал на МК изучить, чтобы такого не было wink.gif

Цитата(Golikov A. @ Jan 20 2015, 16:14) *
правильно не 1 микросекунда, а 100 тактов. И это время не на вспоминание следующего слова, а на выбор его из памяти для ДМА и на решение всех его конфликтов. А так как в ДМА есть еще фифо на 4 слова, то получается 400 тактов. в Таком раскладе браст просто даст борьбу ДМА раз в 400 тактов, а не барст раз в 100 тактов и все... так даже как то понадежнее выглядит.

А теперь ещё учтите, что в это самое время CPU выполняет программу и может читать код по этой-же самой шине. И что приоритет у CPU выше чем у DMA (к сожалению).
И что читать он может сразу пакет, и что flash имеет тактовую не 100МГц, а всего максимум 20.
У меня в реальности были проблемы с SSP+DMA даже с разрешёнными пакетными запросами на частоте 20МГц (при аппаратно-формируемом SSEL (SPI-мастер) возникали
просечки в сигнале SSEL). Из-за того что изредка не успевали данные из ОЗУ считываться. Поэтому я стараюсь не использовать на LPC17xx аппаратно-формируемый SSEL.
А у вас ещё более жёсткая ситуация.
К тому-же у Вас слэйв - это ещё хуже. Могут возникать underflow FIFO. Тут очень аккуратно надо продумывать работу CPU во время такой транзакции, чтобы он
не занимал полностью шину.

Цитата(Golikov A. @ Jan 20 2015, 16:14) *
чудно... надо будет попробовать, хотя я чет не очень понимаю как приняв меньше барста будет осуществлена транзакция... на передачу понятно, он передает по 4, и в конце сколько осталось, а на приеме то наверняка будет ждать заполнения на 4, иначе как он 4 от 1 отличит...

Как я понимаю - SSP автоматом определяет какой запрос ставить - burst или simple в зависимости от заполненности FIFO. Если в FIFO менее 4 слов, то,
думаю, SSP будет ждать поступления 4 слов или, по истечению таймаута, выставит simple-запрос.

И по приёму 1го слова тоже есть прерывание в SSP. И здесь Вы неправы wink.gif Оно называется прерыванием таймаута.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Golikov A.   LPC1768+DMA+SSP   Jan 19 2015, 16:36
- - jcxz   Цитата(Golikov A. @ Jan 19 2015, 22:36) К...   Jan 20 2015, 03:34
- - Golikov A.   Не будет... Да сейчас я себе злобный буратино, но ...   Jan 20 2015, 08:04
|- - jcxz   Цитата(Golikov A. @ Jan 20 2015, 13:15) S...   Jan 20 2015, 08:15
- - Golikov A.   ЦитатаВы уверены? Вообще-то у канала нет бита выкл...   Jan 20 2015, 09:02
|- - jcxz   Цитата(Golikov A. @ Jan 20 2015, 15:02) б...   Jan 20 2015, 09:26
|- - jcxz   Цитата(Golikov A. @ Jan 20 2015, 15:51) ч...   Jan 20 2015, 10:04
- - Golikov A.   правильно не 1 микросекунда, а 100 тактов. И это в...   Jan 20 2015, 10:14
- - Golikov A.   Пробросить один сигнал периферии на 2 ноги не выхо...   Jan 20 2015, 10:41
|- - jcxz   Цитата(Golikov A. @ Jan 20 2015, 16:41) П...   Jan 20 2015, 11:19
- - Golikov A.   ЦитатаНе хватает авторитета попросить схемотехника...   Jan 20 2015, 11:48
|- - jcxz   Цитата(Golikov A. @ Jan 20 2015, 17:48) К...   Jan 20 2015, 14:23
- - Golikov A.   ЦитатаЭто короткий проводок, может даже - сопля на...   Jan 20 2015, 14:43
|- - jcxz   Цитата(Golikov A. @ Jan 20 2015, 20:43) В...   Jan 20 2015, 16:27
- - Golikov A.   ну теперь разбивкой на пакеты будет сигнал CS, кот...   Jan 20 2015, 16:45
|- - jcxz   Цитата(Golikov A. @ Jan 20 2015, 22:45) п...   Jan 20 2015, 17:40
- - Golikov A.   Переписал, да чудо - чудесное. Наконец то заработа...   Jan 20 2015, 18:51
|- - jcxz   Цитата(Golikov A. @ Jan 21 2015, 00:51) П...   Jan 21 2015, 04:03
- - Golikov A.   однако ДМА поддерживается весьма небольшим числом ...   Jan 21 2015, 08:13
|- - jcxz   Цитата(Golikov A. @ Jan 21 2015, 14:13) о...   Jan 21 2015, 09:21
- - Golikov A.   Доступ к периферии у ДМА ограничен, не знаю можно ...   Jan 21 2015, 10:16
|- - jcxz   Цитата(Golikov A. @ Jan 21 2015, 16:16) Д...   Jan 21 2015, 10:55
- - Golikov A.   написано что периферийный блоки поддерживающие GP_...   Jan 21 2015, 11:22
|- - jcxz   Цитата(Golikov A. @ Jan 21 2015, 17:22) н...   Jan 22 2015, 03:09
- - Golikov A.   а синхронизация как? Прерывание по первому пришедш...   Jan 22 2015, 07:00
|- - jcxz   Цитата(Golikov A. @ Jan 22 2015, 13:00) а...   Jan 22 2015, 08:57
- - бомж   Цитата(Golikov A. @ Jan 19 2015, 18:36) В...   Feb 2 2015, 20:05
- - Golikov A.   ЦитатаЯ вот так справился с такой проблемой: ну пл...   Feb 2 2015, 20:52
|- - бомж   > ну плохо вы справились и не с той проблемой.....   Feb 3 2015, 22:17
- - Golikov A.   Цитата>читая из регистра данных вы вычитываете ...   Feb 4 2015, 06:01


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:39
Рейтинг@Mail.ru


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