Форум программистов  
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Инженерный раздел > Микроконтроллеры, робототехника, схемотехника, 3D принтеры
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 29.08.2017, 14:57   #1
WorldMaster
Профессионал
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Адрес: Россия, Мурманск
Сообщений: 1,444
Репутация: 303

icq: 359393755
По умолчанию Не стартует SPI на PIC24

Здравствуйте.
Есть 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

Проверял флаги ошибок во время выполнения цикла.
Все по нулям:
Код:

IFS0bits.SPF1IF = 0;
    IFS0bits.SPF1IF = 0;
    IEC0bits.SPF1IE = 1;

Другие модули (таймер, усарт) работают нормально.
Подскажите пожалуйста что это может быть?? Или я куда то не туда смотрю?
Спасибо.
__________________
ICQ - 359393755 E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
Если помог - нажми на весы
WorldMaster вне форума   Ответить с цитированием
Старый 31.08.2017, 23:09   #2
digitalis
Форумчанин
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Адрес: Минск
Сообщений: 427
Репутация: 198
По умолчанию

Я - не ПИКоман, посоветовать не могу, могу только порекомендовать форум
http://radiokot.ru/forum/viewforum.p...cf5b84f6c6167e - он больше с "железным" уклоном, а этот - с софтовым. Там много толковых ребят, хотя и ПИКоман'ы
На чем проверялось - в железе или в Противнусе ?
digitalis вне форума   Ответить с цитированием
Старый 31.08.2017, 23:39   #3
WorldMaster
Профессионал
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Адрес: Россия, Мурманск
Сообщений: 1,444
Репутация: 303

icq: 359393755
По умолчанию

в симмуляторе mplabx. в железе похоже что работает. через пиккит3 в отладчике вроде бы правильно все считывает. но отладка в железе очень долгий процесс.. толи глюк мплаба толи где то включить надо спи.
__________________
ICQ - 359393755 E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
Если помог - нажми на весы
WorldMaster вне форума   Ответить с цитированием
Ответ



Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
по spi 16 бит 25-й кадр Помощь студентам 5 18.06.2014 18:55
Нужна помощь по SPI Mersedesik4 Общие вопросы C/C++ 0 13.05.2014 08:44
SPI-обмен между ATmega644 (Master) и ATtiny2313 (Slave shev.mitia Помощь студентам 2 26.02.2011 14:00
SPI-обмен между ATmega644 (Master) и ATtiny2313 (Slave) shev.mitia Софт 1 02.02.2011 22:01
Просьба к тем, кто работал с SPI для Atmel Sannara Помощь студентам 13 18.02.2009 17:34




16:45.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru