mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430-Über USART(SPI) mehre Bytes ohne Zeitverlust senden


Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem MSP430 soll über SPI z.B. in einem MAX 1407 (mit integriertem
Uhrenbaustein) die Uhr gestellt werden.
Dazu habe ich folgendes Programmteil (in C) verwendet:
void Sekunden_stellen(void)
  {
    char sek_schr = 0xA0, sek=00; // in sek die aktuelle Sekunde
eintragen Beispiel: 00
    P2OUT &=~BIT5;                    //mit CS=L --> Freigabe
    TXBUF0 = 0x9C;                     //RTC/AL Steuerregister
beschreiben
    Pause();
    TXBUF0 = 0x80;                      // 1000 0000
    Pause();
    TXBUF0 = sek_schr;
    Pause();
    TXBUF0 = sek;
   Pause();
    TXBUF0 = 0x9C;                     // RTC/AL Steuerregister
schreiben (zurücksetzen)
   Pause();
    TXBUF0 = 0x00;
}
Obwohl das Stellen funktioniert, stören mich die Pauseschleifen, deren
Länge ich durch Probieren ermittelt habe.
Wie könnte man das Programm so schreiben, dass immer nur solange
gewartet wird, bis der Sendevorgang abgeschlossen ist?
Ich hatte es mir so gedacht:

   TXBUF0 = 0x9C;                       //RTC/AL Steuerregister
schreiben  10 01110 0
    while (IFG1&UTXIFG0);
    TXBUF0 = 0x80;                      // 1000 0000
    while (IFG1&UTXIFG0);
     .
  .
Geht leider nicht, (einige Sendepakete werden weggelassen) da ich
vermutlich mit „while (IFG1&UTXIFG0)“ auf dem Holzweg bin

Wie könnte man das Programm ändern, damit immer solange gewartet wird,
bis ein einzelner Sendevorgang abgeschlossen ist?
MfG
Wolfgang

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm vielleicht schafft der ausgangsbaustein solche übertragungsraten
nicht?
(Ich kenn mich mit uart nicht aus aber bei i2c kann das z.b passieren
kann auch sein das der uc die raten nicht schafft ist bei dir aber
unwahrscheinlich da du ja wartest bis der uc fertig ist)
Die while lösung ist auch nicht zu verwenden sondern man sollte besser
mit interrupts arbeiten wenn man sowieso schon welche hat;)
mfg Flo

Autor: Holger Menges (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Wolfgang,

soweit ich weiß mußt du das TXEPT - Flag abfragen (Transmitter empty
Flag), d.h. du darst nur Daten laden, wenn dieses gesetzt ist.

Viel Grüße,
Holger

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, der Fehler ist, dass die Bedingung für das Busy-Flag genau falsch
herum ist. Es muss lauten:

while (!(IFG1 & UTXIFG0))

Guck dir mal meine USART-Libary auf www.mathar.com an. Ich habe nach
dem Fehler damals aber auch Stunden gesucht ... ;-)

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur gut, dass ich damit nicht Geld verdienen muss und dass es das
Mikrocontrollerforum gibt.
Mit
 while (!(IFG1&UTXIFG0))
funktioniert es bestens. Danke Sebastian!
Wollte mir Deine Software mal ansehen, kann sie aber unter
MSP430/USART1 bzw. USART2 nicht finden.
MfG
Wolfgang

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

den Link zu der Library usart.c findest du hier (erster Absatz):

http://mathar.com/msp_thermo2.html

Eine Erklärung, wie das mit den USART-Flags funktioniert, habe ich
hier:

http://mathar.com/msp_funk2.html

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.