Hallo,
ich verwende das Beispiel "msp430x24x_uscia0_uart_01_115k.c" von TI um
die UART-Schnittstelle von meinem MSP430F247 zu erstellen.
Wenn ich zusätzlich noch eine Funktion erstelle um ein Zeichen zu
versenden ,funktioniert das wunderbar. Das Empfangen von Zeichen
funktioniert jedoch selbst bei unverändertem Beispielcode nicht. Der
RX-Buffer scheint immer leer zu sein und ein Interrupt wird
dementsprechend auch nie ausgelöst.
Hat jemand schon ein ähnliches Problem gehabt?
Hier mal der unveränderte Beispielcode vom
"msp430x24x_uscia0_uart_01_115k.c":
Danke für die Antwort.
Mein Problem ist jedoch, dass er erst gar nicht in die ISR rein springt.
Wenn ich dort einen Breakpoint setzte, wird er trotzdem nie erreicht.
Ich kenne den 247 nicht, aber hast du einen Uhrenquarz (32,768khz) dran.
Sonst geht garnix. Jedenfalls bei den alten war das so, weil die die Clk
für den DCO verwenden.
2. Fehlt nicht ein #include signal.h ???
Irgendwas musst für den Interrupt noch eingebunden werden, soweit ich
dass noch weiß.
>Ich kenne den 247 nicht, aber hast du einen Uhrenquarz (32,768khz) dran.>Sonst geht garnix. Jedenfalls bei den alten war das so, weil die die Clk>für den DCO verwenden.
Das ist ja grad das Tolle, dass man dann eben keinen Quarz braucht!
>2. Fehlt nicht ein #include signal.h ???>Irgendwas musst für den Interrupt noch eingebunden werden, soweit ich>dass noch weiß.
Nein, "msp430x24x.h" reicht!
Ist überhaupt der richtige RX-Pin beschaltet?
@Stefan und Jorg. Bei den alten Brauchte man einen zum abgleich, damit
das stibil lief. Mit den neuen MSPs hab ich leider keine Erfahrung.
Ob das mit dem DCO so richtig hinhaut kann ich auch nicht sagen und ob
es da nicht zu Jitter kommt.
Hast du sicher RX Pin 0 verwendet und nicht RX1?
Die neuen werden ab Werk bei versch. Frequenzen kalibriert und die
entspr. Kalibrierwerte im INFO_A abgelegt. Deshalb ja auch:
1
if(CALBC1_1MHZ==0xFF||CALDCO_1MHZ==0xFF)
2
{
3
while(1);// If calibration constants erased
4
// do not load, trap CPU!!
5
}
6
BCSCTL1=CALBC1_1MHZ;// Set DCO
7
DCOCTL=CALDCO_1MHZ;
>Ob das mit dem DCO so richtig hinhaut kann ich auch nicht sagen und ob>es da nicht zu Jitter kommt.
Das haut hin und der DCO ist erstaunlich genau.
Hab mal 'nen 2012 mit Fön und Kältespray malträtiert und keine mir
messbare Abweichung feststellen können.
Danke, das ist sehr interessant. Habe mit dem 169er und einem noch
älteren Modell gespielt, da wurde im Datenblatt hingewiesen, dass der
DCO nicht zu ganau ist. Aber wie gesagt, das war damals.
Benjamin S. schrieb:
> ...hast du einen Uhrenquarz (32,768khz) dran. Sonst geht garnix. Jedenfalls> bei den alten war das so, weil die die Clk für den DCO verwenden.
Einen Uhrenquarz habe ich leider nicht. Wenn das wirklich so ist, dann
kan ich wohl leider nicht empfangen.
> ...Fehlt nicht ein #include signal.h ??? Irgendwas musst für den> Interrupt noch eingebunden werden, soweit ich dass noch weiß.
Das dieses Beispiel direkt von TI stammt und zum MSP dazugehört, gehe
ich davon aus, dass der Code vollständig sein sollte.
>Einen Uhrenquarz habe ich leider nicht. Wenn das wirklich so ist, dann>kan ich wohl leider nicht empfangen.
Wie schon gesagt: Wenn senden geht, ist der CLK OK!
Wir wissen immer noch nicht, ob der richtige RX-Pin verwendet wird und
ob an dem Pin überhaupt was ankommt.
Weitere Fehlerquellen:
Baudrate, Stopbits, Parity
Falls da irgendwas nicht stimmt, wird auch kein RX-IRQ ausgelöst, siehe
User-Guide UCAxCTL1-Register, UCRXEIE-Bit (hier =0)