Spezielle Fragen zur Software SPI

Gast #3898863
Lesenswert?
• ▲
▼
Hallo,

um kompatibel zum bleiben zur gegenüber liegenden HW SPI habe ich CPOL=1 
und CPHA = 1 gewählt, d.h. die Daten werden auf der steigenden Flanke 
gesampled und nach der fallenden Flanke aktualsiert.

Ein SPI Sniffer erkennt auch die Daten einwandfrei und stellt sie 
richtig dar. Was mir noch "wahlfrei" zu seien scheint ist, dass ich mir 
aktuell aussuchen kann, ob die neuen Masterdaten VOR oder NACH der 
ersten fallenden Flanke aktualisiert werden und ob ich MOSI nach der 
steigenden Flanke auf 0 zurück nehme oder nicht. Aktuell bleibt SDO da 
wo es steht nach einem Bit und wird erst vor der neuen Flanke aufs 
nächste Datum gesetzt. Setzt man es zurück sind oben nur noch Nadeln zu 
sehen, statt Flächen.

Die nächste Idee wäre auf beiden Flanken zu samplen aber eines nach dem 
anderen.

Gibt es da Konventionen?
1
uint8_t spi_transmit(uint8_t data)
2
{
3

4
    uint8_t inbyte;
5
    uint8_t i;
6

7
    STI_GPIP = STI_GPIP | SCLK;     // Clock = HIGH
8
    inbyte   = 0;
9
    
10
    CLI;
11
    for (i=0;i<8;i++)
12
    {
13
       // ----- Clock LOW  (Slave sampled) ------
14
        #ifdef DELAY_ON
15
         delay8(PAUSE);
16
        #endif 
17
         STI_GPIP = STI_GPIP & ~SCLK;
18

19
        // // ----- Bit out SDO  ------
20
        if (data & 0x80)
21
           STI_GPIP = STI_GPIP | SDO;      // "1" out
22
        else 
23
           STI_GPIP = STI_GPIP & ~SDO;     // "0" out
24

25
         // // ----- Clock HIGH  ------
26
        #ifdef DELAY_ON
27
         delay8(PAUSE);
28
        #endif  
29
         STI_GPIP = STI_GPIP | SCLK;
30
         
31
        // // ----- Sample Bit In SDI  ------
32
         if (STI_GPIP & SDI)      // Eine 1 Input?
33
              inbyte |=  0x01;
34
              
35
        // 0 muss nicht berücksichtigt werden, Inbyte = 0
36
              
37
        // Nächste Position, MSB zuletzt
38
        data   <<= 1;        
39
        inbyte <<= 1;
40
    }
41
    STI_GPIP = STI_GPIP & ~SDO;        // "0" out
42
    STI_GPIP = STI_GPIP | SCLK;        // SCLK = 1
43
    
44
    EI;
45
    return (inbyte);
46
}
Angehängte Dateien:
(Firma: Vescomp) #3898923
Lesenswert?
• ▲
▼
Christian J. schrieb:
> um kompatibel zum bleiben zur gegenüber liegenden HW SPI habe ich CPOL=1
> und CPHA = 1 gewählt, d.h. die Daten werden auf der steigenden Flanke
> gesampled und nach der fallenden Flanke aktualsiert.

 Solange du nicht mit ISR arbeitest, gibt es keine Flanken, sondern
 Pegel.
 Als Master erzeugst du den Takt selbst, ist also uninteressant.

 Als Slave (oder Sniffer) wartest du auf CLK=High und ubernimmst den
 aktuellen SDA Zustand.

 Sehe da keinen Problem, ausser dass man bei SPI normalerweise zuerst
 MSB rausschickt, also ist dein Kommentar falsch.
Gast #3898955
Lesenswert?
• ▲
▼
Marc Vesely schrieb:
> Sehe da keinen Problem, ausser dass man bei SPI normalerweise zuerst
>  MSB rausschickt, also ist dein Kommentar falsch.

Danke, der ist noch übrig geblieben, es war zuerst anders herum. Also 
lassen wir es wie es ist, ich arbeite ohne ISR, da die uC während der 
übertragung nichts anderes zu tun haben, auch nicht Bügeln oder Wäsche 
waschen.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.