Witam
Chcę połączyć dwa procki po SPI i o ile wiem co zrobić z masterem, to nie mogę nigdzie znaleźć w jaki sposób slave powinien odebrać bajt.
Po zainicjowaniu mastera (którym jest ATMEGA32) wysyłam w taki sposób (kiedyś tak nadawałem do przetwornika AC):
Problemem jest odbiór przez Slavea - nie mogę ustalić (to, co jest w datasheecie jest dla mnie mało jasne), czy przerwanie SPI Serial Transfer Complete jest generowane w Slavie, czy można się nim jakoś posłużyć, czy trzeba jakoś inaczej, np w pętli sprawdzać stan SS i reagować na niego.
LEDy, które podłączam do portu SPI Slavea migają, więc SCK i MOSI jest elektrycznie dołączone do procesora.
Jeśli ktoś miał z tym do czynienia to prosiłbym o kilka linijek kodu.
Dzięki, pozdrawiam.
Dodano po 2 [godziny] 52 [minuty]:
Testuję coś takiego:
ale nie działa. PORTD jest jako wyjście, przerwania są uaktywnione.
Chcę połączyć dwa procki po SPI i o ile wiem co zrobić z masterem, to nie mogę nigdzie znaleźć w jaki sposób slave powinien odebrać bajt.
Po zainicjowaniu mastera (którym jest ATMEGA32) wysyłam w taki sposób (kiedyś tak nadawałem do przetwornika AC):
void SPI_send(void)
{
PORTB &=~_BV(4);
SPDR = byte_to_send;
while(!(SPSR & (1<<SPIF))); //Wait
PORTB |=_BV(4);
}
Problemem jest odbiór przez Slavea - nie mogę ustalić (to, co jest w datasheecie jest dla mnie mało jasne), czy przerwanie SPI Serial Transfer Complete jest generowane w Slavie, czy można się nim jakoś posłużyć, czy trzeba jakoś inaczej, np w pętli sprawdzać stan SS i reagować na niego.
LEDy, które podłączam do portu SPI Slavea migają, więc SCK i MOSI jest elektrycznie dołączone do procesora.
Jeśli ktoś miał z tym do czynienia to prosiłbym o kilka linijek kodu.
Dzięki, pozdrawiam.
Dodano po 2 [godziny] 52 [minuty]:
Testuję coś takiego:
void SPI_SlaveInit(void)
{
/* Set MISO output, all others input */
DDRB=0X00;
DDRB|=_BV(4);
/* Enable SPI */
SPCR = (1<<SPE);
SPCR = (1<<SPIE);
}
SIGNAL(SIG_SPI)
{
PORTD=0xff;
}
ale nie działa. PORTD jest jako wyjście, przerwania są uaktywnione.