Пытаюсь активировать аппаратный 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 я считываю отправленный байт.
Что-ж, можно дальше программить...
Проблема с SPI
Поклонники продукции Microchip Technology Inc тусуются тут.
- Реклама
Перейти
- Наш сайт
- ↳ Сувенирная лавка Кота
- ↳ О нашем сайте...
- ↳ Опросы, конкурсы...
- ↳ Статьи
- Устройства
- ↳ Аналоговая техника
- ↳ Усилители низкой частоты
- ↳ Радиотехника: приемники, передатчики, антенны
- ↳ АвтоМотоВело
- ↳ Цифровая техника
- ↳ Микроконтроллеры и ПЛИС
- ↳ Интеграция с ПК
- ↳ Умные мысли
- Силовая электроника
- ↳ Сварочное оборудование
- ↳ Питание
- ↳ Управление двигателями
- ↳ Индукционные нагреватели
- ↳ Прочая силовая электроника
- Микроконтроллеры и ПЛИС
- ↳ AVR
- ↳ ARM
- ↳ PIC
- ↳ ПЛИС
- ↳ Периферия
- ↳ Разные вопросы по МК
- ↳ Arduino
- Обучалка
- ↳ Теория
- ↳ Практика
- Технология
- ↳ Изготовление PCB
- ↳ Корпуса
- ↳ Измерения
- Ремонт
- ↳ Не слышно, не видно
- ↳ Не стирает, не готовит
- ↳ Ничего не работает
- ↳ Дохлые потаскунчики
- Посиделки у Кота
- ↳ Травим анекдоты
- ↳ Котоссылки
- ↳ Ищу...
- ↳ МЯЯЯУ!
- ↳ Чистилище
- Базар
- ↳ Куплю
- ↳ Продам
- ↳ Отдам-Обменяю
- ↳ Есть работа
- ↳ Ищу работу
- ↳ Базарные разговорчики