www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 Daten über SPI senden


Autor: moritz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe Beispiele gefunden in denen einzelne Bytes über SPI gesendet
und empfangen werden.
Kann ich auch eine Gruppe von z.B. drei Bytes unmittelbar nacheinander 
senden?
Besten Dank im voraus für eine Antwort.
Moritz

Autor: Ziff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, sicher. Einfach warten, bis das worherige draussen ist. Entweder mit 
pollen oder mit dem interrupt.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Z.B. 3 Bytes an den AD DAC schicken:
unsigned char SetExtDAC(unsigned char num, unsigned int data)
{
  
  //AD5663 Command Byte zusammen bauen:
  
  if(num == 0)Byte2 = AD5663_Command3 + AD5663_Address0;
  if(num == 1)Byte2 = AD5663_Command3 + AD5663_Address1;
  if(num > 1)return STATUS_ERROR;
  
  
  Byte1 = ((data >> 8) & 0xFF);      //High-Byte
  Byte0 = (data & 0xFF);          //LOw-Byte
  
  
  SPI1WaitForComplete();          //Senden bereit?
  
  ResetDevCSA;              //Chip-Select
  TXBUF1 = Byte2;              //Command-Byte absetzen
  SPI1WaitForComplete();
  asm("nop");
  asm("nop");
      
  TXBUF1 = Byte1;              //Highbyte senden
  SPI1WaitForComplete();
  asm("nop");
  asm("nop");
  
  TXBUF1 = Byte0;
  SPI1WaitForComplete();
  asm("nop");
  asm("nop");
  SetDevCSA;

  return STATUS_SUCCESS;
}

void SPI1WaitForComplete(void)
{
  while (!(IFG2 & UTXIFG1));                // USART1 TX buffer ready?
  do
  {
    IFG2 &= ~URXIFG1;
  }
  while (URXIFG1 & IFG2); 
}

Autor: moritz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
vielen Dank für die Antwort.
Gibt es Erfahrungen ob man die Datenbytes auf diese Weise
unmittelbar aneinander hängen kann,
das nach dem letzten Bit vom ersten DatenByte
unmittelbar mit dem nächsten Clock-Signal
das erste Bit des zweiten DatenBytes gesendet wird?

Moritz

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, das geht nur bei hinreichend langsamem Takt, denn du musst ja erst 
schauen, ob das letzte Byte raus ist, und dann erst die Daten in den TX 
Buffer kopieren, das dauert ja ein paar Prozessortakte. Direkt 
nacheinander und ohne Jitter wird´s mit dem MSP430 nicht gehn....ist ja 
auch fast nirgends notwendig.

Autor: moritz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,
vielen Dank für deine ausführliche Antwort.
Nachdem ich das Datenblatt von meinem EEPROM AT25010A gelesen hatte,
glaubte ich, die Bytes müssten unmittelbar aufeinander folgen.
Aber vielleicht ist das gar nicht nötig.
Ausprobieren kann ich es leider erst später,
da ich im Moment programmiere ohne Hardware zum testen.

Moritz

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist eigentlich bei SPI in den seltensten Fällen erforderlich. Da ja eh 
nur zur SCLK Flanke was passiert.

Autor: Lars Kollros (variolars)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zum einen is es nich nötig, zum anderen hat der msp aber den netten 
TX-Interrupt, der ausgelöst wird, wenn der TX-Buffer leer ist. Du kannst 
also das nächste Byte laden, während das alte noch übertragen wird

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.