Hallo liebes Forum,
ich beschäftige mich mit den MSP430. Als Chip benutze ich den G2553.
Als neues Kapitel, habe ich mir die Kommunikation via SPI vorgenommen.
Ich hab mich soweit durch den Family Guide - SPI Kapitel - und durch das
Internet bzgl SPI durchgelesen.
Und stieß dann auf die Idee und den Code, die zwei
Kommunikationsleitungen die der G2553 hat, miteinander zu verbinden, um
so die LED anzusteuern.
Also habe ich die Pins: P1.1 mit P1.6, P1.2 mit P1.7 und P1.4 mit P1.5
verbunden. (Siehe Bild)
Nun habe ich das im Programm so eingestellt, dass P1.6, P1.7 und P1.5
vom Master angesteurt werden und die restlichen vom Slave.
Mein Vorhaben war, ein Zeichen - hier das A - per Master an den Slave zu
schicken und wenn er es erhalten hat, die LED auszuschalten.
Zwar, gelingt es mir (wie auf dem zweiten Foto zu sehen), das Zeichen im
TXBUF zu holen, aber gelangt es nicht in den RXBUF.
TESTWEISE, wie in den Kommentaren zu erkennen, habe ich in der ISR vom
RX, vor der 'if' Anweisung die LED vorher angesteuert, ...
1
__interruptvoidUSCI0RX_ISR(void)
2
USCI0RX_ISR(void)
3
{
4
// P1OUT |= BIT0; // Testweise, ob es bis hierhin kommt -> ja tut es
5
6
if(UCA0RXBUF=='A')
7
{
..., und es gelang mir erfolgreich die einzuschalten.
Nur, macht das Programm, beim Vergleich nicht weiter, bzw. geht nicht in
die 'if' Anweisung rein.
Danke im voraus für jede Hilfe.
Ich sehe nirgendwo das UCB RX interrupt Bit.
Ich sehe auch ein paar Fehler bei den Interrupt Bezeichnungen. Schau die
Dir mal ganz in Ruhe an.
Edit: In diesem Falle braucht man Interrupts nicht unbedingt.
Hi, danke für die schnelle Antwort.
Jim M. schrieb:> Ich sehe nirgendwo das UCB RX interrupt Bit.
Meinst du das hier?
Das ich das UCB RX ebenfalls aktivieren muss?
1
IE2|=UCB0TXIE+UCB0RXIE+UCA0TXIE+UCA0RXIE;
Jim M. schrieb:> Ich sehe auch ein paar Fehler bei den Interrupt Bezeichnungen. Schau die> Dir mal ganz in Ruhe an.
Leider, habe ich da nichts finden können. Auch weiter im Internet
geschaut, speziell zu den SPI Interrupts und mal im Beispiel Code von TI
geschaut, aber die machen das auch so wie ich.
Ich mein, ich hab doch die Bezeichnungen richtig:
Von Master B0 TX ...
1
__interruptvoidUSCIB0TX_ISR(void)
... zu Slave A0 RX
1
__interruptvoidUSCIA0RX_ISR(void)
Oder stehe ich total auf den Schlauch und erkenne nicht, was du meinst?!
full power schrieb:> LPM4?> Bist du dir sicher, dass du den willst? ;-)
Hab das auch mal testweise geändert, tut sich aber nicht viel.
1
__bis_SR_register(GIE);//enable interrupts
Hab es sogar mit den Flag löschen probiert, wie in einem anderen Thread
hier im Forum ich gefunden habe.
Benjamin H schrieb:> Als neues Kapitel, habe ich mir die Kommunikation via SPI vorgenommen.>> Ich hab mich soweit durch den Family Guide - SPI Kapitel - und durch das> Internet bzgl SPI durchgelesen.>> Und stieß dann auf die Idee und den Code, die zwei> Kommunikationsleitungen die der G2553 hat, miteinander zu verbinden, um> so die LED anzusteuern.> Also habe ich die Pins: P1.1 mit P1.6, P1.2 mit P1.7 und P1.4 mit P1.5> verbunden. (Siehe Bild)
Das und auch das Bild beschreibt nicht wirklich, was Du da versuchst.
Du scheinst zwei 'G2553 zu verwenden, und an die ist irgendwie irgendwo
'ne LED angeschlossen. Oder soll da ein Controller mit sich selbst
reden?
Das ist alles nebulös und unklar.
Wie wäre es mit einem Bild, das tatsächlich zeigt, was Du machst?
(Schaltplan)
Ansonsten hat TI funktionierende Codebeispiele für alle seine
MSP430-Varianten, auch für den 'G2553. Und wenn das nicht reicht, kann
man sich den Code ansehen, den "Grace" ausgibt, oder den Code, der als
Laufzeitumgebung bei Energia dabei ist.
Hallo Rufus, danke für die Antwort.
Ich hab es jetzt hinbekommen.
Das einzige was ich nun geändert habe, war dass ich beim Slave die
'Clock polarity' von 'low' zu 'high'
und die 'clock phase' von 'captured on the first UCKL edge' zu 'changed
on the first UCKL edge'
Also: UCCKPH = 0 und UCCKPL = 1
Rufus Τ. F. schrieb:> Du scheinst zwei 'G2553 zu verwenden, und an die ist irgendwie irgendwo> 'ne LED angeschlossen. Oder soll da ein Controller mit sich selbst> reden?
Genau, ich benutze nur einen Controller, der mit sich selbst redet.
Aber nur für den Anfang als experiment. Mein vorhaben ist, dass er mit
einer SD-Karte kommuniziert.
Was ich jetzt beginnen werde ;-)
Benjamin H schrieb:> Genau, ich benutze nur einen Controller, der mit sich selbst redet.
Dann ist die SPI-Schnittstelle ein sehr ungeeigneter Kandidat für
derartige Tests.
Also hab das mal mit der SD Karte angeschlossen um zu testen, aber
funktioniert leider nicht.
Als SD Karte benutze ich die SanDisk Ultra SDHC 8GB, die 9 Pins hat.
Hab mal wieder die verschiedensten Sachen ausprobiert, aber leider ohne
positives Ergebnis.
Was mir klar wurde, ist dass das Timing eine große Rolle spielt beim
SPI.
Ich will damit sagen, wann ich das Signal über die CS Leitung gebe ist
von Bedeutung. (Falls ich mich hier nicht irre)
Im Anhang findet ihr eine Skizze, wie ich den MC mit der SD-Karte
angeschlossen habe.
Zudem habe ich bei der CS Leitung noch einen Pull-UP Widerstand benutzt.
Da ich diesen Tipp mal nachgegangen bin, den ich im Internet gefunden
habe.