Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Не работает SPI.

Непрочитано 29.08.2017, 11:17  
worldmasters
Гражданин KAZUS.RUN
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Не работает SPI.

Здравствуйте.
Есть PIC24F16KA101. Почему то не стартует SPI модуль.
При попытке передать данные он повисает в ожидании флага навечно. ((
Вот код иницйиализации:

Инициализация осцилятора и основных настроек
Код:
TRISA = LATA = 0xFF;
    TRISB = LATB = 0xFF;

    AD1CON1 = 0x0000;
    AD1CON2 = 0x0000;
    AD1CON3 = 0x0000;
    AD1PCFG = 0xffff; // all pins digital

    CM1CON = 0x0000; // disable comparator
    CM2CON = 0x0000;

// внутренний осцилятор с умножителем
    OSCCON = 0x0001; // 8MHz and 4xPLL = 32MHz
    CLKDIV = 0x0000;

    RCONbits.SWDTEN = 0; // disable watchdog
    RCONbits.WDTO = 0;
Инициализация SPI
Код:
 PMD1 = 0; // enable all available periph
    PMD2 = 0;
    PMD3 = 0;
    
    RCFGCAL = 0x0000;

    SPI1STATbits.SPIEN = 0;

    IFS0bits.SPI1IF = 0;
    IEC0bits.SPI1IE = 0; // disable interrupt
    IPC2bits.SPI1IP = 7;

    SPI1STATbits.SPIEN = 0; // disable
    SPI1STATbits.SPISIDL = 0; // work in Idle

    // wrong??
    SPI1STATbits.SPIBEC = 1; // element count 
    SPI1STATbits.SRMPT = 1; // ready send or receive
    SPI1STATbits.SPIROV = 0; // clear overflow
    SPI1STATbits.SR1MPT = 1; // receive FIFO empty
    SPI1STATbits.SISEL = 0b101; //Interrupt when the last bit is shifted out of SPI1SR; now the transmit is complete
    SPI1STATbits.SPITBF = 0; // hardware clear or set
    SPI1STATbits.SPIRBF = 0; // hardware clear or set
    // ----------

    SPI1CON1bits.DISSCK = 0; // internal clock enable
    SPI1CON1bits.DISSDO = 0; // use SDO1
    SPI1CON1bits.MODE16 = 0; // 8 bit mode
    SPI1CON1bits.SMP = 0; // middle sampled data
    SPI1CON1bits.CKE = 0; // set data idle to active
    SPI1CON1bits.SSEN = 0; // SS not used
    SPI1CON1bits.CKP = 0; // low - idle, active - high
    SPI1CON1bits.MSTEN = 1; // master mode
    SPI1CON1bits.SPRE = 6;
    SPI1CON1bits.PPRE = 3;

    SPI1CON2 = 0x000;
    SPI1STATbits.SPIEN = 1; // start SPI

    UINT16 data = 0xba; // test data
    SPI1BUF = data; // write to buffer for TX
    while (!SPI1STATbits.SPIRBF); // Вот тут вечный висяк. 

!! если остановить в этом месте то и регистры не показывают никаких изменений. Все флаги в том состоянии которое было до записи данных в SPI1BUF.

    data = SPI1BUF; // read the received value
Другие модули (таймер, усарт) работают нормально.
Подскажите пожалуйста что это может быть?? Или я куда то не туда смотрю?
Спасибо.
Реклама:
worldmasters вне форума  
Непрочитано 30.08.2017, 10:00  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 114
Сказал спасибо: 14
Сказали Спасибо 33 раз(а) в 22 сообщении(ях)
varostov на пути к лучшему
По умолчанию Re: Не работает SPI.

В MPLAB X можно подключить плагин MCC (конфигуратор кода). Я, хоть и пользуюсь своими библиотеками, периодически использую его для "контроля", если какой-то новый модуль не заработал. Подключаете в MCC SPI1, конфигурируете по своим желаниям, раздаёте пины (в процессорах с PPS или альтернативными подключениями) и нажимаете "Generate". Далее в исходниках смотрите пример инициализации модуля. Ну а если понравится структура проекта - продолжаете кодить в нём...Нажмите на изображение для увеличения
Название: 2017-08-30_08-44-23.png
Просмотров: 0
Размер:	149.8 Кб
ID:	118197
varostov вне форума  
Непрочитано 30.08.2017, 11:24  
worldmasters
Гражданин KAZUS.RUN
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не работает SPI.

Окак... спасибо, щас проверим ))

Проверил. (( все равно лажа какая то ..
Взял код инициализации из конфигуратора, отправил в отладчике байт по СПИ. В теории должен получить в буфере спи 0 но оттуда считалось тоже самое значение которое было туда записано...

Что за бред то твориться..

Последний раз редактировалось worldmasters; 30.08.2017 в 14:01.
worldmasters вне форума  
Непрочитано 31.08.2017, 10:06  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 114
Сказал спасибо: 14
Сказали Спасибо 33 раз(а) в 22 сообщении(ях)
varostov на пути к лучшему
По умолчанию Re: Не работает SPI.

Сообщение от worldmasters Посмотреть сообщение
Взял код инициализации из конфигуратора
А почему было принято решение, что проблема в инициализации? Даже при удачной инициализации можно всё испортить неправильно написанными функциями, некорректно подключенными пинами, да чего уж там - неправильно разведённой платой или "забытыми" блокировочными конденсаторами по питанию. Возьмите целиком драйвер SPI из MCC и проверьте соединение со slave микросхемой:
Master Slave
==============
SCLK(out) --- SCLK(in)
SDO(out) --- SDI(in)
SDI(in) --- SDO(out)
CS(out) --- CS(in)
varostov вне форума  
Непрочитано 31.08.2017, 12:27  
worldmasters
Гражданин KAZUS.RUN
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не работает SPI.

Он в симмуляторе виснет. MPLABX 4.0.
Остальные то прерывания работают, и таймер и усарт. А тут даже флаги не меняют свое состояние. До железа еще не дошел. Как можно переходить к железу если в симмуляторе вообще никак не идет ничего. В слепую что ли тыкаться..
Может где то включить симмулятор надо, но я нигде ничего похожего не нашел... в настрйоках только уарт можно включить для стимулуса.
worldmasters вне форума  
Непрочитано 31.08.2017, 14:06  
jump
Почётный гражданин KAZUS.RUN
 
Регистрация: 20.06.2006
Адрес: Украина, Запорожье
Сообщений: 8,009
Сказал спасибо: 0
Сказали Спасибо 4,955 раз(а) в 2,379 сообщении(ях)
jump на пути к лучшему
По умолчанию Re: Не работает SPI.

Сообщение от worldmasters Посмотреть сообщение
Он в симмуляторе виснет. MPLABX 4.0
а отладка с пиккит2/3 ни как? или как?
jump вне форума  
Непрочитано 01.09.2017, 00:52  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 114
Сказал спасибо: 14
Сказали Спасибо 33 раз(а) в 22 сообщении(ях)
varostov на пути к лучшему
По умолчанию Re: Не работает SPI.

Сообщение от worldmasters Посмотреть сообщение
Как можно переходить к железу если в симмуляторе вообще никак не идет ничего.
Ой, извините, я не обратил внимания, что вы симулируете .

На самом деле нет ни одного симулятора, 100% повторяющего реальный девайс, кроме того и так непростой процесс познания нового компонента дополняется необходимостью корректно "обяснить" симулятору, а что же всё-таки хотелось соорудить - не зря ведь интернет забит криками: "Помогите! У меня в симуляторе не работает!".
Применение симулятора для МИКРОКОНТРОЛЛЕРОВ имхо оправдано только в 3-х случаях:
1) Вы замахнулись на очень дорогой процессор, чтобы удивить работодателя, а денег пока нет или идти деталь будет 4-6 недель...
2) Вы студент, не знающий, за какую часть берут в руки включённый паяльник или как втыкать DIP-корпуса в цанговую отладочную плату.
3) Вы живёте в такой глуши, что туда даже Aliexpress не доходит, а программировать жуть как хочется...

Но самое неприятное - это когда вроде бы нормально работающая в симуляторе программа при переносе в реальный процессор приказывает долго жить... Поэтому позвольте дать совет: соберите на макетке ваше устройство, подрыгайте ножкой со светодиодом (типа "Hello, world" у микроконтроллерщиков), последовательно запустите интерфейсы с реальными абонентами, и когда основные программно/аппаратные детские болезни будут преодолены - можно переносить всё на плату. А с опытом многие разработчики сначала разводят плату, а только потом на первом собранном образце начинают писать программу, периодически сохраняясь и проверяя, не нарушил ли работу всей программы нахальный свеженаписанный модуль .

Последний раз редактировалось varostov; 03.09.2017 в 11:23.
varostov вне форума  
Непрочитано 01.09.2017, 13:03  
worldmasters
Гражданин KAZUS.RUN
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не работает SPI.

началось ...
worldmasters вне форума  
Непрочитано 03.09.2017, 11:21  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 114
Сказал спасибо: 14
Сказали Спасибо 33 раз(а) в 22 сообщении(ях)
varostov на пути к лучшему
По умолчанию Re: Не работает SPI.

Закончилось.
varostov вне форума  
 
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Однокристальные трансиверы TRC101 от RFM... Panchiks Автоматика и аппаратура связи 340 15.05.2017 21:10
Не работает SPI через DMA eddy ARM 13 20.01.2014 18:27
Прерывание от SSP в режиме SPI slave на PIC16F87* JekaKey PIC 2 14.11.2012 16:53
Работа с EEPROM по SPI dominik2 Микроконтроллеры, АЦП, память и т.д 15 05.05.2012 00:24
Не удаётся запустить SPI на At90S8515 Coder Микроконтроллеры, АЦП, память и т.д 3 30.03.2005 14:17


Часовой пояс GMT +4, время: 21:15.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.