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

 
 
> LPC1768 как очистить TX FIFO SSP слейва?
GetSmart
сообщение Oct 9 2013, 08:57
Сообщение #1


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Собственно вопрос. По поводу очистки RX FIFO можно вычитать до упора и даже больше регистр данных.
Вопрос интересен для ситуации, когда мастер выключил SS, а в TX FIFO слейва остались старые данные, которые надо обновить для работы с новым фреймом. (фрейм в данном случае - последовательность слов, объединённых неразрывным SS).


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
swisst
сообщение Oct 9 2013, 10:34
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 163
Регистрация: 16-02-07
Из: Харьков
Пользователь №: 25 425



по примеру UARTa бита FIFO Reset я не нашел. предлагаю пойти тем же путем, что и с RX FIFO - писать полный фрейм. если фрейм меньше глубины FIFO - дополнять чем-нибудь.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 9 2013, 11:14
Сообщение #3


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Хорошая идея.
Жаль SSP в этом проце какой-то недоделанный. Нет прерывания изменения SS, нельзя работать пословно через прерывания, хотя флаги в регистре статуса присутствуют. FIFO не отключается. И ещё много нужного нет. Почему-то.

Сообщение отредактировал GetSmart - Oct 10 2013, 01:35


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
jcxz
сообщение Oct 9 2013, 14:19
Сообщение #4


Гуру
******

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



Насколько помню, SSP0 можно использовать как SPI (он на тех же ногах), а в нём FIFO нет.
Ещё можно (я так делал) подогнать размер пересылаемого кадра под кратный половине FIFO, изменяя разрядность данных, и получать в конце него половинное прерывание.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 12 2013, 08:20
Сообщение #5


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Пороверил работу SSP на LPC1114/301. Вроде бы у них почти одинаковый SSP. Оказывается нельзя забивать FIFO "выше крыши". Лишние данные не принимаются. Даже запись CR1 = 0; CR1 = 6; не помогает для очистки (выключение SSP и включение). Помогло CR1 = 0; затем сброс через PRESETCTRL и далее полная переинициализация SSP. При этом FIFO полностью очистился.

Ещё интересная деталь. При работе в слейве с CPOL = CPHA = 0 обязательно между словами нужно передёргивать SS. Иначе на MISO будет постоянно удерживаться последний (младший) бит первого переданного слова до сброса SS. При CPOL = CPHA = 1 такой фичи нет.

И ещё полубага с FIFO. Слейв, при отсутствии новых TX-данных, должен передавать последнее загруженное слово. В процессорах без FIFO оно так и работает. Например, можно один раз загрузить рег.данных нулём и таким образом сигнализировать мастеру отсутствие готовности слейва, пока он не начнёт загружать в регистр данных что-то реальное. Здесь же слейв после передачи последнего загруженного слова смещает указатель FIFO ещё на один элемент вперёд и на нём останавливается, передавая только его. А там находится заранее непредсказуемое значение из ранее загруженных. Аппаратно глюк заключается в пост-инкременте указателя при записи в FIFO. А догоняющий указатель доходит до впереди идущего и останавливается. Будь там пред-инкремент, было бы всё ОК.

Сообщение отредактировал GetSmart - Oct 13 2013, 07:44


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
megajohn
сообщение Oct 14 2013, 07:14
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(GetSmart @ Oct 12 2013, 12:20) *
И ещё полубага с FIFO


отпишитесь плз в Support. Чтобы NXP были в курсе.


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 14 2013, 10:31
Сообщение #7


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



У меня нет такой возможности.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 28 2013, 22:12
Сообщение #8


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Кажется ещё одна полубага. Возможно, сброс через PRESETCTRL вводит пины SSP в режим мастера.

При работе SSP в слейве для сброса FIFO приходится (как описано ранее) переинициализировать SSP. При этом пины, сконфигурированные в IOCON как работающие с SSP на короткое время активируются в мастер-режиме. При этом линия SS занимается "перетягиванием каната" с настоящим мастером и там наблюдается логический уровень примерно половина от 3.3 вольт. На SCK то же самое, хотя это уже частично из-за того, что мои мастер и слейв в разных режимах SPI работают, 0 и 3 соответственно.

Переинициализация происходит так
Код
        SSP0CR1 = 0x04;
        PRESETCTRL_bit.SSP0_RST_N = 0;
        PRESETCTRL_bit.SSP0_RST_N = 1;
        SSP0IMSC = 0x05;
        SSP0CR0 = 0x0cf;
        SSP0CPSR = 2;
        SSP0CR1 = 0x06;
        SSP0SR;

При отключении SSP в первой команде бит слейва остаётся включённым, но всё-равно.

Сообщение отредактировал GetSmart - Oct 29 2013, 05:58


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th July 2025 - 12:36
Рейтинг@Mail.ru


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