Moin! Ich möchte mit dem oben genannten Prozessor im Speicher abgelegte Daten mit dem Sendemodul des UART0 senden. Das Empfangsmodul soll damit nichts zu tun haben (Stichwort: echo RXBuffer...wer was damit anfangen kann), das Senden soll also nicht durch den Interrupt des Empfangsmoduls ausgelöst werden (so wie ich es in allen Beispielprogrammen gefunden habe...dort werden immer erst Zeichen eingelesen, der Interrupt des Empfangsmoduls löst bei jedem gültigen Zeichen im Empfangspuffer einen Interrupt aus, der dazu benutzt wird, das gerade eingelesene Zeichen gleich wieder zu senden). Ein Knackpunkt ist auch die richtige Initialisierung der USART des MSP430. Also falls es jemanden gibt, der auch schon mal den USART des MSP430 zum reinen Senden benutzt hat oder einfach nur mehr Ahnung vom MSP430 hat als ich...ich hoffe auf gute Vorschläge. Danke Guenna
Guenna, es ist kein Problem, mit der MSP430-UART0 nur zu senden. Es gibt sogar einen separaten Interruptvektor für den Sender. Vielleicht helfen Dir die folgenden einfachen Funktionen (Demoprogramm, mit IAR-Entwicklungssystem erzeugt): #include <msp430x12x2.h> #define TXL 12 // Port1-Bits: #define RTS 0x01 #define EnableInterrupts() _BIS_SR(GIE) static short Txi; static BYTE RxAddr, CheckSum; static char TxBuffer[TXL] = { 0x37, 'A', 'F', 'F', 'E', 'N', 'Z', 'I', 'R', 'K', 'U', 0x88 }; // Initialisierung, Baudrate aus 32KHz-Takt gewinnen. void InitUart ( void ) // Baudrate = 1200 Bd, Fehler ca. 1.1% { P1OUT &= ~RTS; // RTS deaktiviert. P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD UCTL0 |= SWRST; // Reset UART UTCTL0 |= SSEL0; // UCLK = ACLK UBR00 = 27; // 32k/1200 = 27.3 UBR10 = 0; UMCTL0 = 0; // Modulation UCTL0 |= CHAR+MM; // 8-bit character + Addressbit. ME2 |= UTXE0+URXE0; // Enable USART0 TXD/RXD UCTL0 &= ~SWRST; // Initalize USART state machine } // Wenn kein Empfang erwünscht, URXE0 weglassen. #pragma vector=UART0TX_VECTOR __interrupt void IntTxUart ( void ) { if ( Txi < TXL ) // nächstes Zeichen senden. { TXBUF0 = TxBuffer[Txi++]; } else // fertig, Sender abschalten. { IE2 &= ~UTXIE0; // Disable USART0 TX interrupt } } // Sendung starten. void SendUart ( void ) { P1OUT |= RTS; // RTS aktivieren. Delay(2); TXBUF0 = TxBuffer[0]; // Erstes Zeichen senden. Txi = 1; IE2 |= UTXIE0; // Enable USART0 TX interrupt } // Warte bis TxBuffer fertig gesendet. void WaitTxReady ( void ) { while ( Txi < TXL ); while ( !(UTCTL0 & TXEPT) ); Delay(2); P1OUT &= ~RTS; } void main(void) { WDTCTL = WDTPW+WDTHOLD; // Stop watchdog timer P1DIR |= RTS|BLINKY; // Set P1 to output direction InitUart(); EnableInterrupts(); // Enable interrupts while (TRUE) { SendUart(); WaitTxReady(); } } Ciao, Yagan
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.