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

SPI w trybie podrzędnym, bez przerwań, ręczne wyzerowanie.

rpal 14 Wrz 2008 21:13 944 2
REKLAMA
  • #1 5535781
    rpal
    Poziom 27  
    Mam następujące pytanie:
    AVR pracujący w trybie podrzędnym po odebraniu bajtu danych ustawia znacznik SPIF w rejestrze SPSR, tak wynika z noty katalogowej.
    Po przejściu do obsługi przerwania znacznik ten jest zerowany.
    Jeśli obsługa transmisji nie wykorzystuje mechanizmu przerwań należy go "ręcznie" wyzerować.
    Jeśli transmisja po SPI przesyła serię danych, mam rozumieć że bit SPIF jest ustawicznie ustawiany po wpisaniu w rejestr SPDR odczytanej 8-bitowego słowa ? Dalej proces się ustawicznie powtarza, aż do ustawienia linii SS w stan wysoki, który zatrzymuje transmisję SPI ?
    Pytanie może dość banalne ale wolę się upewnić.
  • REKLAMA
  • Pomocny post
    #2 5536153
    bobbyAIR
    Poziom 20  
    Mniej więcej, to znaczy flaga jeśli nie jest niegdzie zerowana, to po odebraniu pierwszego bajtu zostanie ustawiona i koniec dalszych zmian (kazdy kolejny bajt bedzie wpisywal w nią jedynke ale nic to nie zmieni bo tej jedynki nic w miedzyczasie nie kasuje). Stan wysoki na linii SS również jej nie wyzeruje. Zauważ tez że odczyt najpierw SPSR z ustawiona flagą a potem SPDR będzie powodował zgaszenie tej flagi np
    
    unsigned char SPI_SlaveReceive(void)
    {
      while(!(SPSR & (1<<SPIF)));
      return SPDR;
    }
    
    
  • #3 5536272
    rpal
    Poziom 27  
    Dzieki tak właśnie myślałem.
REKLAMA