Например TDA7294

Форум РадиоКот • Просмотр темы - Проблема с SPI
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 13:34:24

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Проблема с SPI
СообщениеДобавлено: Пт фев 24, 2017 14:47:17 
Встал на лапы

Карма: 2
Рейтинг сообщений: 2
Зарегистрирован: Ср мар 25, 2015 09:12:45
Сообщений: 99
Рейтинг сообщения: 0
Пытаюсь активировать аппаратный SPI, наткнулся на то, что не могу понять.

Проц - 16F1825.
При конфигурировании настроил самотактирование 32МГц, 2 таймера, один для УАРТа другой для постоянного мигания диодом, активировал УАРТ, с работоспособностью которого проблем нет.
В этом проце предусмотрено конфигурирование пинов под uart и spi - этот регистр тоже настроил вроде правильно.
Решил в отладочных целях применить практику отправки по команде из УАРТа регистров конфигурации и состояния - в зависимости от ситуации.
Настройка регистров SPI как будто тоже правильная.

Задача стоит завести обмен по SPI с микрухой WIZNET5100(как разберусь с интерфейсом).
Поскольку запускаю SPI впервые, сначала хотелось проверить правильность настроек путям снятия импульсов с осцила.
Тут все работает - с MOSI и MCK снимаются и сами передаваемые биты и синхронизация.

Решил проверить MISO. Предположил, что если его подтянуть к плюсу или земле через резистор 2К то я смогу при чтении снять соответственно 0х00 или 0xFF. По крайней мере это логичное предположение.

Делаю следующим образом:

1.Подтягиваю MISO к желаемой точке (+ или земля)
2.Даю в УАРТ команду, по которой происходит следующее:


temp=SSP1BUF; //холостое чтение - очистка бита BF на всякий случай.
SSP1BUF = RcvBuffer[0]; //пишу в SPI байт данных
while (!(SSP1STAT & 0x01)); //Жду пока выставится бит BF
SendBuffer[0]=0xF0; //отправляю флаг того, что выполняется данный блок кода
SendBuffer[2]=SSP1STAT; //цель - обнаружить бит BF
SendBuffer[1]=SSP1BUF; //читаю буфер SPI
SendBuffer[3]=SSP1CON1;
SendBuffer[4]=SSP1STAT; //По идее - после чтения буфера бит BF должен сброситься.

/////////Далее буфер SendBuffer отправляется в TX, и долетает до меня.

Т.е я получаю из УАРТа ответ, содержащий как принятые по SPI данные, так и регистры состояния SPI.
Как и ожидалось, сначала я вижу бит BF, а после чтения из буфера - он сбрасывается. Так же в целом регистры SSP1STAT и SSP1CON1 соответствуют тому, что я прописал в коде.

Не могу понять главного - почему байт SendBuffer[1] всегда прилетает со значением 0х00? Т.е после передачи в SPI бит BF благополучно выставляется, но при чтении я всегда получаю пустой буфер. Вне зависимости от того, куда я подтянул MISO.

Подскажите куда думать... ощущение что пропустил что-то в конфигурации.
TRISы стоят как указано в даташите.

Добавлено after 3 hours 53 seconds:
Набрался терпения, крепкого кофе, и докурил даташит... Все просто было.

Регистр ANSELC вполне себе однозначно конфигурится. Даже при начисто отключеных АЦП и прочего, эти линии все равно следовало выставить как digital i/o

Теперь при подтяжке MISO к плюсу я снимаю 0xFF а к земле - 0х00.
И даже более того - при перемычке между MISO и MOSI я считываю отправленный байт.
Что-ж, можно дальше программить...


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

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


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y