Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SSP в STR912FA
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Aprox
Помогите, если кто уже прошел успешно этап разбирательства. Проблема в следующем. Использую SSP1 в STR912FA44W. Действую по описаниям в мануале и по примерам применения. Хочу добиться чтения с пина MISO в режиме мастера. Для этого пишу в DR (т.е. в Tx FIFO) байт и после контролируемой выдержки на его передачу, читаю из DR(т.е. из Rx FIFO). С удивлением вижу, что принимается не тот байт, что пришел от периферии, а тот, который я посылал по Tx! Чтения данных не получается. Как ни сравнивал свой код с примерами использования SSP, никаких отличий не нашел. Диаграммы сигналов по лог.анализатору нормальные. В errata про SSP ничего нет. Куда рыпаться дальше- не знаю. Помогите, кто проходил эту проблему.
MALLOY2
Цитата(Aprox @ Aug 12 2008, 19:02) *
Помогите, если кто уже прошел успешно этап разбирательства. Проблема в следующем. Использую SSP1 в STR912FA44W. Действую по описаниям в мануале и по примерам применения. Хочу добиться чтения с пина MISO в режиме мастера. Для этого пишу в DR (т.е. в Tx FIFO) байт и после контролируемой выдержки на его передачу, читаю из DR(т.е. из Rx FIFO). С удивлением вижу, что принимается не тот байт, что пришел от периферии, а тот, который я посылал по Tx! Чтения данных не получается. Как ни сравнивал свой код с примерами использования SSP, никаких отличий не нашел. Диаграммы сигналов по лог.анализатору нормальные. В errata про SSP ничего нет. Куда рыпаться дальше- не знаю. Помогите, кто проходил эту проблему.



У меня SSP работает нормально, может бит луббека установлен ? (Бит LMB в CR1)
Подключена ли ножка NSS и если да то куда подтянута ?
Код тоже неплохо посмотреть ?
Что значит контролируемой выдержки ? SSP синхронный дуплексный порт тоесть чтение происходит вместе с передачей.

Вот мой кусок примитивного обмена по SSP

Код
/******************************************************************************
* FUNCTION: spi_process  
*
* PARAMETERS:   u8_t data - байт записываемый в SPI
* DESCRIPTION:  Выполняет обмен 1 байтом по SPI
* RETURNS:      Прочитанный байт с SPI
*
* DATE: 30.12.2006
******************************************************************************/
u8_t spi_process(u8_t data)
{
  SSP1_DR = data;
  while((SSP1_SR & 0x04) == 0);
  return(SSP1_DR);
}
Aprox
Цитата(MALLOY2 @ Aug 12 2008, 19:54) *
У меня SSP работает нормально, может бит луббека установлен ? (Бит LMB в CR1)

нет, проверял
Цитата
Подключена ли ножка NSS и если да то куда подтянута ?

штатный сигнал NSS не использую. Генерю CS как output GPIO. Он накрывает всю посылку целиком. В MotorolaFrame это невозможно-каждый символ посылки с отдельным CS .
Цитата
Что значит контролируемой выдержки ? SSP синхронный дуплексный порт тоесть чтение происходит вместе с передачей.

Выдержка точно, как в вашем примере
Код
  while((SSP1_SR & 0x04) == 0);
Aprox
Ура, нашел! Как всегда- сам дурак. Hо поучительно, поэтому спешу поделиться. Проблема оказалась в пине NSS. Его штатную функцию я отключил и заменил на программную генерацию nCS, который накрывает не один символ, а всю передаваемую последовательность символов. Так надо было. Когда конфигурировал GPIO на вывод забыл указать в структуре инициализации, что этот пин должен быть отсоединен от внутренней периферии кристалла, т.е. от NSS адаптера SSP. Отсутствовала явно заданная строка
Код
GPIO_Struct.GPIO_IPConnected = GPIO_IPConnected_Disable;
В результате, на мастер SPP при чтении с пина приходил NSS=0, а нужно наоброт =1. Чтение попросту блокировалось и я видел белиберду вместо приходящих символов. Посыпаю голову пеплом.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.