Witam;
Napisałem poniższy kod do obsługi interfejsu SPI w ATmega32:
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
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