Forum: Mikrocontroller und Digitale Elektronik MSP Beispielcode


von CC (Gast)


Lesenswert?

Hallo,

ich bin gerade dabei die Senderoutinen eines MSP-Mikrocontrollers nach 
zu verfolgen und dabei auf die Beispielfunktion TransmitPacket() 
gestossen.

1
void TransmitPacket(void)
2
{  
3
4
  txBytesLeft = PACKET_LEN;   
5
  txPosition = 0; 
6
  packetTransmit = 0; 
7
  transmitting = 1;       
8
  
9
  Strobe( RF_STX );      // Strobe STX   
10
  
11
  TA0CCR1   = TX_TIMER_PERIOD;   
12
  TA0CCTL1 |= CCIE; 
13
  TA0CTL |= MC_2 + TACLR;   // StartTimer
14
15
  __bis_SR_register(LPM3_bits + GIE); 
16
  __no_operation(); 
17
  
18
  TA0CCR1 = TX_TIMER_PERIOD;   // x cycles
19
  TA0CCTL1 &= ~(CCIE); 
20
  TA0CTL &= ~(MC_3);           // Turn off timer         
21
}

Wenn ich es richtig verstehe, dann wird mit dem Strobe Command der 
Transceiver aktiviert und die Funktion läuft sodann bis zum Eintritt in 
den LowPowerMode3, pausiert dort dann aber, bis ein Interruptereignis 
den Controller weckt...
Richtig?

Der Programmstil erscheint mir für die Fälle überaus gefährlich zu sein, 
in denen es noch weitere Interruptquellen gibt, da die Funktion dann 
möglicherweise vor Ablauf der TX-Timer Periode den Timer abschaltet und 
sodann eine Situation eintritt, in der der Controller das Ende einer 
Sendung niemals mitbekommt...
Richtig?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Da es mittlerweile sehr viel unterschiedliche MSP430-Varianten gibt, 
wäre es hilfreich, wenn Du verrietest, welche Variante Du meinst.

Und wenn Du ein Quelltextfragment zitierst, wäre es hilfreich, den 
gesamten Quelltext zu sehen, bzw. dessen Quelle zu kennen.

Ohne die kann man nur darauf hinweisen, daß Interrupts beim MSP430 
priorisiert sind ...

Achja, und für Quelltext solltest Du die [ c ] [ /c ] -Tags verwenden. 
Das steht oberhalb des Editorfensters, in das Du Deinen Beitrag gerade 
reingeschrieben hast.

Ich ändere das mal für Dich ...

> Wenn ich es richtig verstehe, dann wird mit dem Strobe Command

Irgendwas passieren. Das kann die Kernschmelze auslösen, das kann eine 
LED anschalten oder auch gar nichts machen, ohne den Quelltext kann man 
da nur raten.

von sdg (Gast)


Lesenswert?

Daher gibt es ja für jeden IRQ unterschiedliche priorities. Außerdem 
wird manchmal im TX-Interrupt ( RX-IRQ) einfach allgemein die 
Interruptfähigkeit des MSP ausgeschalten, dann bekommt er alles mit.

Also ich hatte noch nie Probleme beim senden und Empfangen mit anderen 
IRQs, eher bei anderen IRQ-Aufrufe, also immer erstmal drauflostesten 
und wieder melden falls es wirklich Probleme geben sollte.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.