Hi Leute,
ich kriege es einfach nicht hin eine UART-Kommunikation zwischen zwei
F2274 aufzubauen. Hab schon viel rumprobiert, aber es funktioniert
überhaupt nicht so wie ich es mir gedacht habe.
Und zwar sollen erst einmal nur die zwei µCs mit einander reden. Der
eine sendet dem anderen ein Byte. Im Debugger (IAR) setze ich in einen
Breakpoint in der Rx ISR. Aber die wird nie angesprungen.
Hier der Code für den Transmitter. Er soll permanent das selbe,
willkürliche, Byte versenden:
1 | #include "msp430x22x4.h"
|
2 |
|
3 | void main(void)
|
4 | {
|
5 | WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
|
6 | BCSCTL1 = CALBC1_8MHZ; // DCO auf 12MHz einstellen
|
7 | DCOCTL = CALDCO_8MHZ; // DCO auf 12MHz einstellen
|
8 | P1DIR = 0xFF;
|
9 | P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
|
10 | UCA0CTL1 |= UCSSEL_2; // CLK = SMCLK
|
11 | UCA0BR0 = 0x41; // 8MHz/9600 = 833,33
|
12 | UCA0BR1 = 0x3;
|
13 | UCA0MCTL = UCBRS_2;
|
14 | UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
|
15 | IE2 |= UCA0RXIE; // Enable USCI_A0 TX/RX interrupt
|
16 |
|
17 | _EINT();
|
18 |
|
19 | while(1);
|
20 | }
|
21 |
|
22 | // USCI A0/B0 Transmit ISR
|
23 | #pragma vector=USCIAB0TX_VECTOR
|
24 | __interrupt void USCI0TX_ISR(void)
|
25 | {
|
26 | UCA0TXBUF = 0x81;
|
27 | }
|
Und hier der Code für den Receiver. Dort soll halt ienfach mal die ISR
angesprungen werden. Im Debugger schaue ich mir dann den RxBuffer an.
Dort sollte dann ja 0x81 drinstehen, wenn alles geklappt hat:
1 | #include "msp430x22x4.h"
|
2 |
|
3 | void main(void)
|
4 | {
|
5 | WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
|
6 | BCSCTL1 = CALBC1_8MHZ; // DCO auf 12MHz einstellen
|
7 | DCOCTL = CALDCO_8MHZ; // DCO auf 12MHz einstellen
|
8 | P1DIR = 0xFF;
|
9 | P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD
|
10 | UCA0CTL1 |= UCSSEL_2; // CLK = SMCLK
|
11 | UCA0BR0 = 0x41; // 8MHz/9600 = 833,33
|
12 | UCA0BR1 = 0x3;
|
13 | UCA0MCTL = UCBRS_2;
|
14 | UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
|
15 | IE2 |= UCA0RXIE; // Enable USCI_A0 TX/RX interrupt
|
16 |
|
17 | _EINT();
|
18 |
|
19 | while(1);
|
20 |
|
21 | }
|
22 |
|
23 |
|
24 |
|
25 | // USCI A0/B0 Receive ISR
|
26 | #pragma vector=USCIAB0RX_VECTOR
|
27 | __interrupt void USCI0RX_ISR(void)
|
28 | {
|
29 | P1OUT = 0x01;
|
30 | }
|
Bitte Leute, was mache ich falsch? Vielen Dank schon für eure Hilfe.