Форум РадиоКот https://radiokot.ru/forum/ |
|
Проблема с SPI https://radiokot.ru/forum/viewtopic.php?f=58&t=142383 |
Страница 1 из 1 |
Автор: | vinni_puh [ Пт фев 24, 2017 14:47:17 ] |
Заголовок сообщения: | Проблема с SPI |
Пытаюсь активировать аппаратный 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 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |