[AVR] USI, fehlender /SS Pin, Software Implementation

OP Persönliche Seite #4783917
Guten Morgen,

im Datenblatt des zB ATTiny84 heißt es:

> The USI Three-wire mode is compliant to the Serial Peripheral Interface
> (SPI) mode 0 and 1, but does not have the slave select (SS) pin
> functionality. However, this feature can be implemented in software
> if necessary. Pin names used by this mode are: DI, DO, and USCK.

Hab dann mal weiter gesucht, aber hat wohl noch niiiiiemals jemand 
gemacht ;-)

Naja, meine Lösung ist folgende:
1
uint8_t wait_for_spi_data() {
2
    USISR=(1<<USIOIF);
3
    while (!(USISR & (1<<USIOIF))) {
4
        if (!(PINA & (1<<PA7)))
5
            USISR &= ~((1<<USICNT3) | (1<<USICNT2) | (1<<USICNT1) | (1<<USICNT0));
6
    };
7
    return USIDR;
8
}

Auf Deutsch: Wenn mein CS (in dem Fall High-Aktiv) nicht gesetzt ist, 
wird der SR-Counter auf 0 gesetzt.

Ist das die übliche Vorgehensweise, wie man es machen sollte?

Viele Grüße,

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.