Witam
Od jakiegos czasu probuje pożenić ATMege32 i pamieć 25C040 za pomocą wbudowanego interfejsu SPI.
Przykłady w manualu do ATMegi sa proste jak gwizdek i w ogóle wszystko wygląda bardzo łatwe, ale jakoś nie mogę tego przeskoczyć.
Zacząłem tak:
no i potem zacząłem próbę zapisu i odczytu danej do i z pamięci:
Zapis
no i odczyt danej z pamięci:
Oczywiście powyższe jest jedną z wielu prób. Niestety żadna z nich nie zakończyła się sukcesem. Dlatego zdecydowałem się zwrócić do Was o pomoc. Jeżeli ktoś zrobił obsługę wbudowanego portu SPI w języku C to może mógłby mi pomóc?
pozdrawiam
Mystik
Od jakiegos czasu probuje pożenić ATMege32 i pamieć 25C040 za pomocą wbudowanego interfejsu SPI.
Przykłady w manualu do ATMegi sa proste jak gwizdek i w ogóle wszystko wygląda bardzo łatwe, ale jakoś nie mogę tego przeskoczyć.
Zacząłem tak:
SPCR = 0x72; //setup SPI
SPSR = 0x00; //setup SPI
no i potem zacząłem próbę zapisu i odczytu danej do i z pamięci:
Zapis
void SPI_WyslijZnak(char data)
{
PORTB&=~0b00010000; //PortB.4 jako CS = poziom niski
SPDR=data;
while (!(SPSR & (1<<SPIF)) );
SPSR &=~SPIF; //kasowanie znacznika końca transmisji
PORTB|=0b00010000; //PortB.4 jako CS poziom wysoki
}
void SPI_WyslijDane(char adres, char data)
{
SPSR &=~SPIF;
SPI_WyslijZnak(0b00000010); //instrukcja zapisu danej do pamięci
SPI_WyslijZnak(adres); //przesłanie adresu
SPI_WyslijZnak(data); //przesłanie danej
}
no i odczyt danej z pamięci:
char SPI_OdbierzData(char adres)
{
SPSR &=~SPIF; //kasowanie znacznika końca transmisji
PORTB&=~0b00010000; //CS=poziom niski
SPDR=0b00000011; //instrukcja odbioru danej z pamięci
while (!(SPSR & (1<<SPIF)) );
SPSR &=~SPIF; //skasowanie znacznika końca transmisji
SPDR=adres; //przasłanie adresu danej
while (!(SPSR & (1<<SPIF)) );
SPSR &=~SPIF; //skasowanie znacznika końca transmisji
SPDR=33; //wysłanie czegokolwiek, zeby w SPDR
znalazła się wartość danej
while (!(SPSR & (1<<SPIF)) );
SPSR &=~SPIF; //skasowanie znacznika końca transmisji
PORTB|=0b00010000; //CS=poziom wysoki
return SPDR;
}
Oczywiście powyższe jest jedną z wielu prób. Niestety żadna z nich nie zakończyła się sukcesem. Dlatego zdecydowałem się zwrócić do Was o pomoc. Jeżeli ktoś zrobił obsługę wbudowanego portu SPI w języku C to może mógłby mi pomóc?
pozdrawiam
Mystik