Hallo. Ich möchte mit dem MSP430f149 eine USART Kommunikation aufbauen. Durch die Hilfe von mathar.com will ich ein einfaches Echo erzeugen. Problem: nichts passiert. Einstellungen sind bei COM Terminal und beim Hardwaremanager sind identisch. Wo kann mein Fehler noch liegen. Ich benutze den ACLK der (7,3728 MHz /2). mfg Rico #include "msp430x14x.h" unsigned char answer1[] = "Buchstabe "; unsigned char answer2[] = " gedrueckt\r\n"; char i, j; void main(void) { WDTCTL = WDTPW + WDTHOLD; // watchdog aus //takt einstellen BCSCTL1|=XTS+XT2OFF+DIVA_1; //initialisierung von ACLK, XTS aktiviert den externen quarz __bic_SR_register(OSCOFF); //löscht das bit(0) OSCOFF im statusregister> LFXT1 is on do //do-schleife überprueft ob OFIFG-flag gesetzt ist { IFG1 &=~OFIFG; //löscht OFIFG for (i=0xFF;i>0;i--); } while (IFG1&OFIFG); //abbruchbedinung BCSCTL2=SELM_3+SELS; //SELM_3 soll den LFXTCLK soll den MCLK generieren P2SEL=0x01; //schaltet pin2.0 die sonderfunktion(ACLK) ein (funktioniert aber nicht) P5SEL=0x70; //schaltet pin5.4-5-6 (01110000) die sonderfunktion ein MCLK, SMCLK, ACLK P1DIR=0x01; P2DIR=0x01; P1OUT=0x01; P3SEL = 0x30; // P3.4 und P3.5 als USART0 TXD/RXD ME1 |= UTXE0 + URXE0; // TX- und RX-modul erst mal anschalten UCTL0 |= CHAR; // 8 data bits, 1 stop bit, no parity (8N1) UTCTL0 |= SSEL0; // ACLK als UCLK festlegen SSEL0 entspricht logisch 01 UBR00 = 0x60; // 19200 baud aus 3,6864MHz(ACLK/2) erzeugen, N=192 ohne rest UBR10 = 0x00; UMCTL0 = 0x00; // korrektur der division UCTL0 &= ~SWRST; // USART freigeben IE1 |= URXIE0 + UTXIE0; // TX- und RX-interrupts anschalten IFG1 &= ~UTXIFG0; // initales interrupt-flag loeschen _BIS_SR(LPM3_bits + GIE); // ab in den LPM3 mit interrupts ... } #pragma vector=UART0TX_VECTOR __interrupt void usart0_tx (void) { if (i < sizeof answer1-1) // string schon zu ende? TXBUF0 = answer1[i++]; // string ausgeben else if (i == sizeof answer1-1) // wenn erster string zu ende ... { TXBUF0 = RXBUF0; // ... dann den getippten buchstaben ausgeben i++; } else if (j < sizeof answer2-1) // wenn auch der ausgegeben ist ... TXBUF0 = answer2[j++]; // ... dann den zweiten string ausgeben } #pragma vector=UART0RX_VECTOR __interrupt void usart0_rx (void) { i = 0; j = 0; TXBUF0 = answer1[i++]; // ersten buchstaben von answer1 ausgeben }
1 | UBR00 = 0x60; // 19200 baud aus |
2 | 3,6864MHz(ACLK/2) erzeugen, N=192 ohne rest |
192 = 0x60??? ab dafür...
Hallo,Ich häge auch an dem Baudraten einstellungen. Ich hab ein 4,9125MHZ Quarz und will 115200 Baud erzeugen. laut http://www.msp430.info/modules.php?name=Gadgets&op=uart müßte Ich UBR01=0x2A; UBR11=0x00; UMCTL1=0x5B; /* uart1 4915200Hz 115200bps (115110bps) */ verwenden.Das klappt aber nicht! Kann mir jemand die richtigen Einstellungen geben? Vielen Dank Markus
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.