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

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

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

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

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

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


 
Опции темы
Непрочитано 29.08.2017, 11:17  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 551
Сказал спасибо: 37
Сказали Спасибо 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
Адрес: Ростов-на-Дону
Сообщений: 112
Сказал спасибо: 14
Сказали Спасибо 32 раз(а) в 21 сообщении(ях)
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.RU
 
Регистрация: 21.02.2007
Сообщений: 551
Сказал спасибо: 37
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не работает SPI.

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

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

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

Последний раз редактировалось worldmasters; 30.08.2017 в 14:01.
worldmasters вне форума  
Непрочитано 31.08.2017, 10:06  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 112
Сказал спасибо: 14
Сказали Спасибо 32 раз(а) в 21 сообщении(ях)
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.RU
 
Регистрация: 21.02.2007
Сообщений: 551
Сказал спасибо: 37
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не работает SPI.

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

Сообщение от worldmasters Посмотреть сообщение
Он в симмуляторе виснет. MPLABX 4.0
а отладка с пиккит2/3 ни как? или как?
jump вне форума  
Непрочитано 01.09.2017, 00:52  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 112
Сказал спасибо: 14
Сказали Спасибо 32 раз(а) в 21 сообщении(ях)
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.RU
 
Регистрация: 21.02.2007
Сообщений: 551
Сказал спасибо: 37
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Не работает SPI.

началось ...
worldmasters вне форума  
Непрочитано 03.09.2017, 11:21  
varostov
Прописка
 
Регистрация: 14.10.2006
Адрес: Ростов-на-Дону
Сообщений: 112
Сказал спасибо: 14
Сказали Спасибо 32 раз(а) в 21 сообщении(ях)
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, время: 20:15.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot