MSP430 SPI sendet in falscher Reihenfolge -> LSB zuerst

OP #3117434
Lesenswert?
• ▲
▼
Moin,

hier stehe ich schon wieder mit einem Problem:
1
void spi_init(void)
2
{
3
  WDTCTL = WDTPW + WDTHOLD;       // Stop WDT
4
  //Verwende UCB0, da UCA0 von serieller Kommunkation belegt, UCB0 kann kein UART
5
    /* Disable USCI */
6
    UCB0CTL1 |= UCSWRST;
7

8
    /*
9
     * Control Register 0
10
     *
11
     * ~UCCKPH -- Data is changed on the first UCLK edge and captured on the following edge
12
     * UCCKPL -- Inactive state is high
13
     * UCMSB -- MSB first
14
     * ~UC7BIT -- 8-bit
15
     * UCMST -- Master mode
16
     * UCMODE_0 -- 3-Pin SPI
17
     * UCSYNC -- Synchronous Mode
18
     *
19
     * Note: ~<BIT> indicates that <BIT> has value zero
20
     */
21
    UCB0CTL0 = UCCKPH + UCMSB + UCMST + UCMODE_0 + UCSYNC; //mode(0,0)
22

23
    /*
24
     * Control Register 1
25
     *
26
     * UCSSEL_2 -- SMCLK
27
     * UCSWRST -- Enabled. USCI logic held in reset state
28
     */
29
    UCB0CTL1 = UCSSEL_2 + UCSWRST;
30

31
    /* Bit Rate Control Register 0 */
32
    UCB0BR0 = 2;
33

34
    /* Enable USCI */
35
    UCB0CTL1 &= ~UCSWRST;
36
    //_EINT();                              // Enable interrupts
37
}
38

39

40
void spi_send_char(char c)             // ein einzelnes zeichen über die serielle schnittstelle (USART1) senden
41
{
42
    while (!(IFG2 & UCB0TXIFG));           // warten, bis USART1 TX-buffer sendebereit
43
    UCB0TXBUF = c;
44

45

46
}

Wenn ich nicht vollkommen zu blöd bin mein Oszilloskop abzulesen (nicht 
ganz ausgeschlossen), sendet dieser Code-Schnippsel einen übergebenen 
char mit dem LSB zuerst, also rückwärts. Wieso tut er das?

Gruß
Hannes
OP #3117540
Lesenswert?
• ▲
▼
Oh Mist.

Ich hätte schwören können, dass ich erwähnt habe, dass ich versuche, mit 
einem MCP2515 zu kommunizieren.

Daher auch der Befehl 0xa0, um das Statusregister auszulesen.
Während ich diesen Befehl sende, sollte (laut Datenblatt) der Ausgang 
auf high-impedance sein (ist er auch) und dann beim Lesen die Daten 
ausgegeben werden. Dabei wird der Ausgang aber nur auf GND gezogen, 
Daten spuckt er nicht aus.

Hoffentlich liegt es nicht daran, dass das Register leer ist, wäre es 
das, wäre die Mühe umsonst.

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.