Hallo Zusammen, ich baue eine USB verbindung mit dem MSP430F2618 via HyperTerminal (HT) auf. Daten vom µC werden im HT angezeigt. Nun will ich dort eine Eingabe machen (Zahlen) die dann den RX Interrupt auslösen sollen. Weiss der Kuku warum, aber es klappt nicht. Ich benutze den MSPGCC. Hier mal ein Teil vom Code: void init(void) { WDTCTL = WDTPW + WDTHOLD; // Watchdog aus UCA0CTL1 |= UCSWRST; // Software reste enable anschalten UCA0CTL1 |= UCSSEL_2; // SMCLK aktiviert P3SEL = 0x30; // Secondary peripheral module funktion is selectet for P3.4 and P3.5 = USCI_A0 TXD/RXD UCA0BR0 = 0x4E; // 9k6 baud bei 12MHz aus Tabelle 15-5, gültig wenn UCOS16 =1 UCA0BR1 = 0x00; UCA0MCTL = UCBRF1 + UCOS16; UCA0CTL1 &= ~UCSWRST; // Parameter übernehmen und Schnittstelle aktivieren IE2 |= UCA0RXIE ; // RX Interrupt anschalten IFG2 &= ~UCA0RXIFG; // initales RX-Interrupt-Flag löschen } int main(void) { //Initialisierungen init(); // Main Initialisierung init_DAC(); // DAC aktivieren hf_oszi(); // Kontrollfunktion ob der Oszillator richtig schwingt sprint("\r\n Bitte geben Sie den gewuenschten Daempfungswert in 0.5dB Schritten zwischen \r\n 0dB und 17dB ein\r\n"); //hier noch ein wenig Programm welcher Uninteressant ist } interrupt(USCIAB0RX_VECTOR) usart0_rx(void) { led_fast(); } So das ist mal der grobe Code. Ich habe ausserdem an XT1 und an XT2 12MHz anliegen. Macht das evtl. schon Probleme? Zuerst lag nur an XT2 die 12MHz an und da habe ich ihn nicht ans laufen bekommen und der einfachheithalber habe ich dann auch noch an XT1 die 12 MHz anschlossen. Wenn ich auf der Tastatur tippe, sehe ich dies dem Oszi. Was habe ich übersehen? Wo liegt evtl. mein Fehler? Mit sonnigen Grüßen Björn
Inituialisiere mal erst den Quarz und dann die UART. Wenn du den Takt einfach umschaltest, kann das komsiche Effekte verursachen.
Hallo, ich habe mal die reihenfolge geändert aber führte leider nicht zum Ziel. In einem beispielcode konnte noch einen Zeile finden die den Genral Inerrupt setzt. __bis_SR_register(GIE); und testweise auch __bis_SR_register(LPM3_bits + GIE); Danach löst er zwar einen Interrupt aus wenn ich eine Taste drücke, aber - führt den Rest des Programms nicht mehr aus und wartet nurnoch auf den Interrupt - und wenn ich einen Interrupt auslöse durch eingabe eines Zeichens wiederholt der meine Interrupt Routine immer wieder, als wenn der Interrupt ständig ausgelöst wird, bzw nicht zurückgesetzt wird. Ich habe mal den Befehl zum Rücksetzten des Interrupts in der Routine eingefügt IFG2 &= ~UCA0RXIFG; aber half auch nichts. Vielleicht noch eine Idee?
Hast du denn überhaupt eine Endlosschleife in deiner main()? Und laufen denn die Code-Beispiele von TI mit der UART? Das würde ich erst mal testen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.