Hallo µC Forum,
ich versuche schon den ganzen Tag über die serielle Schnittstelle mit TX
UART0 PIN 3.4 etwas an den Rechner auszugeben.
Das Senden über RX funktioniert ... es ist also erstmal ausgeschlossen
das der falsche COM Anschluss oder ähnliches gewählt ist.
Die Baudrate ist am Terminal und im Code auf 9600 gestellt. Den µC habe
ich auch schon einmal ausgetauscht um auszuschließen das, dass PIN
kaputt ist. Ich arbeite mit IAR Workbench.
Am TX liegen 3,2V von seitens des µC an. Ich habe folgende zwei
Funktionen geschrieben.
1 | void InitUart ()
|
2 | {
|
3 | P3SEL |= P4 + P5; //set PIN 3.4 & 3.5 as UART
|
4 | P3DIR |= P4; //output direction, P3.4 output
|
5 |
|
6 | __enable_interrupt(); //enable general interrupt
|
7 |
|
8 | //muss USCI extra gestartet werden? ME1 gibt es nicht?
|
9 |
|
10 | //Control Register 0 - UCA0CTL0
|
11 | UCA0CTL0 &= ~UC7BIT; //UC7BIT - 0 8-bit character data bit
|
12 | //UCMODEx - 00 UART mode
|
13 | //UCSPB - 00 one stop bit
|
14 | //UCSYNC - 0 UART mode
|
15 |
|
16 | //Control Register 1 - UCA0CTL1
|
17 | UCA0CTL1 = UCSSEL_0; //UCA0CTL1 - 00 Clock Source UCLK = ACLK
|
18 |
|
19 | //Baudrate
|
20 | UCA0BR0 = 0x03; //32k/9600 - 3,413
|
21 | UCA0BR1 = 0x00;
|
22 |
|
23 | //Modulation
|
24 | UCA0MCTL = 0x4A; //0100 1010 - 3433 4343
|
25 |
|
26 | UCA0CTL0 &= ~UCSWRST; //Clear UCSWRST - UART freigeben
|
27 |
|
28 | IE2 |= UCA0RXIE; //Interrupt Enable RX interrupt
|
29 |
|
30 | //initiales interrupt flag löschen??
|
31 | }
|
32 |
|
33 | void EchoUart() //run in main while(1)
|
34 | {
|
35 | //wenn Buffer bereit dann ...
|
36 | //Variante 1
|
37 | UCA0TXBUF = 'A'; //send char
|
38 | //Variante 2
|
39 | //UCA0TXBUF = UCA0RXBUF; //echo rx
|
40 | P1OUT ^= BIT0; //toggle LED P1.0
|
41 | }
|
In den Beispielen zur UART steht immer das man das Modul aktivieren
muss, doch im F2618 Header gibt es kein ME1 und ein intiales Flag das
gelöscht werden soll habe ich auch nicht gefunden. Der in den Beispielen
aufgeführte Befehl zum programmieren eines UART Interrupts funktioniert
mit dem F2618 leider auch nicht:
1 | #pragma vector=USART0RX_VECTOR
|
2 | __interrupt void usart0_rx (void)
|
Ob der USART Buffer bereit ist lässt sich auch nicht abfragen (while
(!(IFG2 & UTXIFG1));) da ich UTXIFG1 nicht kenne.
Der TI UG schreibt zur Intitialisierung folgendes:
Initializing or Re-Configuring the USCI Module
The recommended USCI initialization/re-configuration process is:
1. Set UCSWRST (BIS.B #UCSWRST,&UCAxCTL1)
2. Initialize all USCI registers with UCSWRST = 1 (including UCAxCTL1)
3. Configure ports.
4. Clear UCSWRST via software (BIC.B #UCSWRST,&UCAxCTL1)
5. Enable interrupts (optional) via UCAxRXIE and/or UCAxTXIE
Das habe ich doch somit alles gemacht oder? Ich würde mich freuen wenn
mir jemand helfen kann.