Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: инициализация SPI на PIC
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
KAPTEP
В общем с пиками дел мало имел, хочу инициализировать SPI на нем
вот то что получилось

Код
    list    p=16F877A
    #include    <p16F877A.inc>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cycle_1    equ    0x20
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;Prepare;;;;;;;;;;;;;;;;;;;;
    clrf    PORTA
    clrf    PORTC
    clrf    PORTD
    bcf    STATUS,RP0    
       movlw    0x00
    movwf    INTCON
    movlw    b'11010011'
    movwf    PORTC
    movlw    b'00000100'
    movwf    PORTD
    movlw    b'11111110'
    movwf    PORTA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;Initial;;;;;;;;;;;;;;;;;;;
SPI_Initial
    bsf    STATUS,RP0    
    bsf TRISC,3
    bsf    TRISC,5
    bcf TRISC,2          ;;cs low
    bcf    SSPSTAT,SMP    
    bcf    SSPSTAT,CKE         
    bcf    STATUS,RP0       ;; 0
    bcf    SSPCON,0       ;ведущий режим SPI,
    bcf SSPCON,1       ;тактовый сигнал
    bcf    SSPCON,2       ; =Focs/4
    bcf SSPCON,3
    bsf SSPCON,4
    bsf SSPCON,5

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;Power cycle;;;;;;;;;;;;;;
    bsf    STATUS,RP0
    bsf TRISC,2          ;;cs high
    bcf    STATUS,RP0    

loop
    movlw    0xFF
    movwf    SSPBUF
    goto    loop
    end


В общем я ожидаю получить на осцилографе импульсы с выхода SCK и SDO ...... А вокруг тишина....
Vlad27
Так они же (SCK, SDO) у вас как входы сконфигурированы.
KAPTEP
Ну хорошо, просто я и так и так пробовал, сейчас поиенял, ситуация не изменилась....что еще может быть
Danis
Цитата(KAPTEP @ Nov 27 2010, 07:16) *
Ну хорошо, просто я и так и так пробовал, сейчас поиенял, ситуация не изменилась....что еще может быть


PIC16 не использовал. Но в PIC18, PIC24 SPI часто посажена на аналоговые пины и нужно указать что пины цифровые, иначе ниче не получается.
KAPTEP
Да, спасибо...заработала....хреновина -)
HammerN
Уже какой день бьюсь с инициализацией SPI, ничего не выходит, вроде все перепроверил, все норм (вроде), а контроллер не хочет в прерывание входить! Подскажите в чем может быть проблема.
Код
   ANSEL=   0b00000000;    // все выводы как цифровые
   ANSELH=  0b00000000;    // все выводы как цифровые
   CM1CON0= 0b00000000;    // отключаем компаратор
   CM2CON0= 0b00000000;    
   ADCON0=  0b00000000;    // отключаем АЦП

   TRISA= 0b00001000;  
   TRISB= 0b00010000;   // RB6= SCK RB4= SDI/SDA
   TRISC= 0b00000000;   // RC7= SDO RC6= SS
   RC6=   1;

   GIE=   1;  
   PEIE=  1;  
   SSPIE= 1;
  
   IRCF0= 1;  // 111 = 8MHz
   IRCF1= 1;  
   IRCF2= 1;

   SMP= 0;
   CKE= 1;
   CKP=   1;  
   SSPM0= 0;   // 0000 = SPI Master mode, clock = FOSC/4
   SSPM1= 0;  
   SSPM2= 0;
   SSPM3= 0;
   SSPEN= 1;


а вот сама работа с SPI

Код
char SPI_RW(char DATA_OUT)   // вывод в SPI
{  
    SSPBUF= DATA_OUT;
    while (!SPI_FLAG);
    SPI_FLAG = 0;
    return SSPBUF;
}


SPI_FLAG устанавливается в прерывании, в которое он так не хочет упорно входить, соответственно так и остается в цикле.
Vlad27
Микроконтроллер какой? Соответствует ли ассемблерный листинг сишной программке?
HammerN
Микроконтроллер PIC16F689. Листинг соответствует сишной программе, т.е компилятор ничего не оптимизировал и не удалил.
stas00n
HammerN, а разве не надо биты TRIS, соответствующие всем выводам SSP установить в "1" (сделать входами)? Посмотрите в даташите схему соответствующих выводов портов, возможно, выходы модуля SSP у Вас "закорочены" на выходную защелку PORTx
Цитата
SPI_FLAG устанавливается в прерывании
А обработчик прерывания покажите, может в нем проблема? Или прерывание вообще не возникает? Что в отладке видно?
HammerN
TRIS устанавливал в соответствие с даташитом, как указано в разделе SPI.

вот обработчик, но тут все просто, выставлет флаг и все.
Код
void interrupt isr(void)  
{
   if ((SSPIE) && (SSPIF))
   {
        SPI_FLAG= 1;
        SSPIF= 0;
   }
}


прерывание вообще не возникает, такое ощущение что SPI просто выключен, раз он даже флаг не ставит, а отладка просто виснет в бесконечном цикле, т.к флаг выставлять никто не хочет.
Vlad27
Посмотрите еррату 80243m.pdf, возможно ваш случай.
stas00n
HammerN, вроде все правильно у Вас, в протеусе работает, а в MPLAB SIM действительно не возникает прерывание, да и не должно, посмотрите ограничения симулятора:
Цитата
For devices with the listed peripherals, these peripherals are NOT supported:
...
Serial I/O (i.e., SSP including I2C and SPI). As a result, the SSPSTAT register has been made readable and writable.
Note: You can use stimulus to emulate many of the signals of SPI and have firmware read data as if it was SPI.

Креплю проект в MPLAB и DSN файл для протеуса.




Vlad27, там про прием в режиме ведомого - не тот случай.
Vlad27
Цитата(stas00n @ Jan 18 2011, 15:37) *
Vlad27, там про прием в режиме ведомого - не тот случай.


Совершенно верно, проглядел.
HammerN
stas00n, СПАСИБО огромное! уж на что, а на симулятор я даже и не подумал.
MMMika
Господа специалисты.
Помогите новичку!
Имеется блок с PIC18F6520, который после сбоя по питанию ЧАСТИЧНО перестал нормально функционировать.
На блоке есть разъем (DB9), далее MAX232, дальше USART2 выводы контроллера (6;8;5;4).
Мои попытки связаться с контроллером из различных программ (MPLAB, PCWHD Compiler)
с ноутбука безрезультатны. (пишет нет связи, или проверьте кабель)
Кабель и MAX232 исправны.
В блоке есть возможность установки нескольких перемычек, возможно какие-то
использовались для организации связи через USART2.
Помогите установить связь с ноутбука с PIC18F6520.
С уважением Mika
dENIM
а что за блок, название у него есть? santa2.gif
MMMika
Название ничего не говорящее CC10.
Блок работал в системе связи системы ЧПУ станка и переферии входа/выхода.
Имеет порт Ethernet для связи с центральным компьютером, и инфракрасную линию
для связи с модулями входов/выходов, подключенную к USART1 PIC18F6520.
В настоящий момент не реагирует на запросы с центрального компьютера станка,
ни опрашивает инфракрасную линию связи.
Контроллер реагирует только на кнопку выбора адреса в сети Ethernet, вполне
нормально.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.