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

 
 
> 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:02
Сообщение #2


Гуру
******

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



Цитата
Вы уверены?
Вообще-то у канала нет бита выключения, а только бит разрешения. И я сильно сомневаюсь, что при его запрещении, FIFO канала очистится. Вроде в UM это явно не указано.
Оно даже может не очищаться при подаче аппаратного RESET на процессор.

уверен из юзер мануала

бит называется E - channel enable, не знаю как это понятие перевести иначе как включение канала

также не знаю как перевести иначе следующее высказывание из описания
Цитата
A channel can be disabled by clearing the Enable bit. This causes the current AHB
transfer (if one is in progress) to complete and the channel is then disabled. Any data
in the FIFO of the relevant channel is lost

канал выключается - данные в фифо теряются.

Цитата
Вы сначала выясните где именно у вас байты остаются в каком FIFO - SSP или DMA. Может оба нужно выфлушивать.

как почистить фифо ДМА мы уже разобрались строкой выше. Теперь надо понять как работает ваще ДМА.
При запуске оно набивает 4 слова в свое фифо, и одно слово кладет в FIFO SSP. SSP - отдаст его только по чипселекту и клоку, а на его место сразу ляжет новое слово из ДМА. Если при запущенном обмене его прервать, больше клоков не будет, тогда одно слово останется в FIFO SSP, очистить его иначе как считать мастером невозможно. Кстати при не ДМА обмене там может быть до 8 слов.


Цитата
Странно у вас как-то система построена часть может вдруг сброситься (мастер), а остальная - нет. Может это надо как-то исправить? Сброс общий для обоих сделать.

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

Цитата
Не понимаю - в чём тут проблема?
Программируете DMA на какой-то блок данных. Даже пускай не зная сколько передаст мастер. Когда этот блок закончится - придёт прерывание, в нём запрограммируете на след. блок, пока он заполняется - разгребаете предыдущий.


Какой размер блока? Сообщения переменной длинны, реагировать на них надо как только так сразу. Настроить на минимальную длину и постоянно ворошить блоки, зачем?Сейчас для ДМА выделен буфер 1КБайт, оно туда кладет данные спокойно, а проц этот буфер время от времени проверяет, и если там есть целое сообщение обрабатывает.


Цитата
Если у Вас перегрузился мастер, то заводИте ещё реакцию на прерывание от снятия сигнала CS

А вот тут вас ждут 2 разочарования.
1 - нет такого прерывания, а в добавок этот чипселект может быть на 1 порту, там нет даже GPIO прерывания (они только на 0 и 2 портах)
2 - работа SSP требует опускания и поднимания чипселекта на каждое слово обмена


Цитата
А для мастера требование - задержка от момента старта ПО до ближайшей транзакции по SSP достаточная для очистки.

при условии что он не знает ни момент начала очистки ни момент своего старта, требование невыполнимоsm.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
|- - jcxz   Цитата(Golikov A. @ Jan 20 2015, 15:02) б...   Jan 20 2015, 09:26
- - Golikov A.   ЦитатаУ Вас неоптимально сконфигурён DMA для SSP. ...   Jan 20 2015, 09:51
|- - jcxz   Цитата(Golikov A. @ Jan 20 2015, 15:51) ч...   Jan 20 2015, 10:04
|- - jcxz   Цитата(Golikov A. @ Jan 20 2015, 15:51) а...   Jan 20 2015, 10:35
- - 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 - 23:08
Рейтинг@Mail.ru


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