logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Interfejs SPI - sprawdzenie kodu

Przemo_2014 08 Mar 2010 01:05 1314 3
REKLAMA
  • #1 7799324
    Przemo_2014
    Poziom 19  
    Witam;

    Napisałem poniższy kod do obsługi interfejsu SPI w ATmega32:

    
                        /* ZMIENNE DLA SPI */
    #define DDR_SPI DDRB
    #define DD_MOSI PINB5
    #define DD_SCK PINB7
    
    #include<avr/io.h>
    #include<avr/delay.h>
    #include<avr/interrupt.h>
    
    void SPI_MasterInit()
    {
     //Ustawienie MOSI i SCK jako wyjście pozostałe wejścia
     DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
     
     //Aktywacja SPI,tryb Master, ustawienie zegara fck/16
     //SPE - zezwolenie na SPI sprzętowe
     //MSTR - wybór trybu master
     //SPR0 SPR1 - ustawienie szybkości SCK
     //CPOL - polaryzacja sygnału zegarowego
     //SPI2X - dwukrotne zwiekszenie szybkości SCK
     SPCR = (1<<SPE)|(1<<MSTR)|(1<<CPOL)|(1<<CPHA);
     SPSR = _BV(SPI2X);
    }
    
    void SPI_MasterTransfer(unsigned char cData)
    {
     //Start transmisji
     SPDR = cData;
     //Czekanie na zakończenie transmisji
     while(!(SPSR & (1<<SPIF)));
    }
    
    void main()                // program główny
    {
      SPI_MasterInit();
      while(1)
      {
       SPI_MasterTransfer(0x10101010);
      }                
    }
    
    


    wszystko się kompiluje i po wgraniu na atmege nie dostaje żadnego sygnału na nóżce sck dlaczego ? Kod sprawdzałem kilka razy i wydaje mi się że jest napisany poprawnie.
    I jak dokonuje się zmiany kolejności wysyłania bitów czy transmisja zaczyna się od MSB czy też LSB ?

    Pozdrawiam
  • REKLAMA
  • Pomocny post
    #2 7799671
    loocasm
    Poziom 15  
    Spójrz tutaj: konfiguracja SPI. Wydaje mi się, że to kwestia programowego ustawienia SS jako wyjście.
  • REKLAMA
  • #3 7801294
    AVRowiec
    Poziom 18  
    0x10101010
    można tak podawać hex'y?

    Jeśli ma być binarnie to powinno być 0x...
REKLAMA