Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2021-апр-18 20:42

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 6 сообщений ] 
Автор Сообщение
СообщениеДобавлено: 2013-окт-03 16:06 
Не в сети

Зарегистрирован: 2012-сен-06 11:18
Сообщения: 15
Проблемы с SPI в 1986ВЕ93.

Инициализирую модуль SSP так:

/* Конфигурируем SSP1 в режиме SPI, Slave, .....*/
RST_CLK_PCLKcmd(RST_CLK_PCLK_SPI1, ENABLE);
// разрешаем тактирование модуля SSP1
RST_CLK->SSP_CLOCK |= 0x01000000;
// разрешаем тактовую частоту на SSP1 без деления
SPI1->SSPx_CPSR = 2;
// устанавливаем коэф. деления тактовой частоты для SSP1 = 2

SPI1->SSPx_CR0 = 0x00000007;
// скорость последовательного обмена - без доп. деления(SCR=0),
// регистрация бита передним фронтом CLK (SPH=0),
//полярность CLK - активный уровень 1(SPO=0),
// формат обмена - SPI (FRF=0b00),
// размер слова данных = 8 бит (DSS= 0b0111)

SPI1->SSPx_CR1 |= SPI_SSPx_CR1_SOD | SPI_SSPx_CR1_MS;
// выдача на ТxD в режиме ведомого запрещена (SOD=1)
// модуль SSP1 в режиме ведомого (MS=1)

...........................................................................................................
// перед началом основного цикла программы разрешаем работу модуля
SPI1->SSPx_CR1 |= SPI_SSPx_CR1_SSE;

while (1)
{.....................................................................


Далее в цикле опрашиваем флаг в регистре статуса модуля на предмет приема байта данных

if ((SPI1->SSPx_SR) & SPI_SSPx_SR_RNE)
{......................
по факту приема байта, делаем с ним все что нам нужно, а потом запрещаем и снова разрешаем работу модуля SSP чтобы принять следующий байт
(это очень странно но по другому не работает. Без этого приняв первый байт и сбросив соотв. флаг по факту чтения модуль больше не устанавливает этот флаг при приеме следующего байта). А когда мы делаем это

SPI1->SSPx_CR1 &= ~SPI_SSPx_CR1_SSE;
// выключаем модуль SSP1
SPI1->SSPx_CR1 |= SPI_SSPx_CR1_SSE;
// разрешаем работу SPI


то вроде бы все налаживается.
Но....... Теперь столкнулись с проблемой.
Иногда, примерно раз в 20 - 30 мин, модуль SSP снова замирает (флаг принятого байта не устанавливается по приходу посылки). Это продолжается несколько минут, после чего работа модуля сама собой возобновляется. Так же работа возобновляется после сброса кристалла.

Вот такой триллер. Помогите!!! А то срок уже близенько и скоро нас будут подвергать застрелялинью...


Вернуться к началу
СообщениеДобавлено: 2013-окт-03 18:25 
Не в сети

Зарегистрирован: 2010-июл-08 08:50
Сообщения: 734
Откуда: АО "ПКК Миландр"
Интересно у вас настроены тактовые сигналы SSP блока. Вы же настраиваете блок в режим ведомого, значит, тактовый сигнал модуля должен быть как минимум в 12 раз выше максимальной скорости обмена данными. По вашему коду видно, что соотношение тактового сигнала к скорости передачи данных равна 2
kwn1978 писал(а):
...
SPI1->SSPx_CPSR = 2;
...
SPI1->SSPx_CR0 = 0x00000007;
...
такая настройка возможна только для режима ведущий. Загляните в спецификацию в раздел "Контроллер SSP" -> "Общий обзор модуля SSP" -> "Соотношения между тактовыми сигналами"


Вернуться к началу
СообщениеДобавлено: 2013-окт-04 13:09 
Не в сети

Зарегистрирован: 2012-сен-06 11:18
Сообщения: 15
Спасибо Petr.
Все понял, но проверить смогу только в понедельник.
Результат сообщу.


Вернуться к началу
СообщениеДобавлено: 2013-окт-08 09:20 
Не в сети

Зарегистрирован: 2012-сен-06 11:18
Сообщения: 15
Здравствуйте все.
Попробовал вчера воспользоваться советом Petr. НЕ ПОМОГЛО.
Собственно изменил только значение загружаемое в регистр CPSR.
Теперь так:
SPI1->SSPx_CPSR = 12;
Вопрос как этот регистр вообще может влиять на ситуацию если в режиме ведомого синхра приходит от мастера.
Конечно может быть я что то ещё упустил из виду.

По прежнему, если не включать/выключать SSP после приема каждого байта, то после первого же байта прием прекращается (бит RNE не устанавливается), а если прием это делать, то прием идет но иногда замирает примерно на 30 - 60 сек.

Что делать? Что может быть причиной такого поведения? Не могли бы вы на своих средствах попробовать организовать Slave SPI, и если у вас получится прислать мне настройки?

От мастера идет информация в таком виде:
1) чатсота CLK примерно 1,25 МГц
2) У СLK активный высокий уровень (1). выдается синхра в середине битового интервала.
3) передаётся пакет больше десятка байт.
4) Все это сопровождается низким уровнем FSS

К стати пробовал держать FSS в 0 всю посылку и устанавливать в 1 поле каждого байта, разницы никакой.
Но все равно напишите пожалуйста как правильнее. И за одно по времени между переходом в 0 FSS и началом передачи первого бита данных вопрос?

Зарание благодарен.


Вернуться к началу
СообщениеДобавлено: 2013-окт-09 09:25 
Не в сети

Зарегистрирован: 2013-фев-14 08:40
Сообщения: 20
Цитата:
Вопрос как этот регистр вообще может влиять на ситуацию если в режиме ведомого синхра приходит от мастера.
так на ведомом
Цитата:
тактовый сигнал модуля должен быть как минимум в 12 раз выше максимальной скорости обмена данными
Например при одинаковом CPSR на ведомом SCR ставите 0, на мастере соответственно не менее 11-ти.
Тогда:
Цитата:
FSSPCLK(min) => 12 x FSSPCLKIN(max) [for slave mode].
SSP_CLK/CPSR(на слэйве) => 12*(SSP_CLK / (CPSR * (1+SCR) )) (на мастере)
для SSP_CLK = 80Мгц:
80000000/2 = 12*(80000000/(2*(1+11)))

ну типа того


Вернуться к началу
СообщениеДобавлено: 2013-ноя-29 22:18 
Не в сети

Зарегистрирован: 2012-сен-06 11:18
Сообщения: 15
Здравствуйте! Пришлось сделать большой перерыв в работе с МК 1986...
Тема про Slave SPI по прежнему не закрыта.
Выкладываю исходник где инициализируется SSP и далее используется. Там у меня всё в кучу потому как это первый блин... извиняюсь...


Вложения:
Комментарий к файлу: расширение *.с почему то запрещено. пришлось поставить расширение rar, но это не архив
main.rar [26.03 КБ]
711 скачиваний
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 6 сообщений ] 

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB