Ich habe folgendes Problem: Ich kann meine Baudrate des UART2 während des Betriebes mithilfe von DIP-Switches verändern: 4800,9600,19200,38400; Die höheren 3 funktionieren ohne Problem nur sobald ich wieder auf 4800 zurückswitche funktionierts nicht mehr und im Receivebuffer steht 0x00; Zurück auf 9600 oder höher funktionierts wieder. Sobal ich aber einen Reset durchführe und die Baudrate auf 4800 stelle funktioniert es!?
1 | case MHz_1: |
2 | CLEARPORTPIN(P9DIR, BIT4+BIT5); // set port pin to INPUT |
3 | SETPORTPIN(P9OUT, BIT4+BIT5); |
4 | CLEARPORTPIN(P8OUT,ENABLE_TX); |
5 | // SETPORTPIN(P9DIR,TXD_R_PULLUP+RXD_R_PULLUP); // --> output
|
6 | |
7 | // SETPORTPIN(P9OUT,TXD_R_PULLUP+RXD_R_PULLUP); // pullup enable
|
8 | SETPORTPIN(P9SEL,RXD+TXD); //9.4+9.5 |
9 | // portpins are controlled by usci module
|
10 | UCA2IE &=~(1<< UCRXIE); |
11 | UCA2CTL1 |= UCSWRST+UCRXEIE+UCBRKIE; // put USCI state machine in reset |
12 | |
13 | // asynch. uart mode,1 stop bit,8databit,lsb first,no parity
|
14 | |
15 | // UCA1CTL1 |= UCSSEL_1; // ACLK
|
16 | if (baud== bd_4800) |
17 | UCA2CTL1 |= UCSSEL_1; // ACLK --> REFO 32,768 |
18 | else
|
19 | UCA2CTL1 |= UCSSEL_2; //SMCLK --> 1 MHZ |
20 | |
21 | |
22 | // SMCLK Frequency = 1 MHz
|
23 | if (parity==even) |
24 | {
|
25 | UCA2CTL0 |= UCPEN; |
26 | UCA2CTL0 |=UCPAR; //Even Parity |
27 | }
|
28 | else if (parity==odd) |
29 | {
|
30 | UCA2CTL0 |= UCPEN; |
31 | UCA2CTL0 &=~UCPAR; |
32 | }
|
33 | |
34 | switch (baud) |
35 | {
|
36 | |
37 | case bd_4800: //not allowed |
38 | UCA2BR0=6; |
39 | UCA2BR1=0; |
40 | UCA2MCTL = UCBRS_7; |
41 | break; |
42 | |
43 | case bd_9600: |
44 | UCA2BR0=104; |
45 | UCA2BR1=0; |
46 | UCA2MCTL = UCBRS_1; |
47 | break; |
48 | |
49 | case bd_19200: |
50 | UCA2BR0=52; |
51 | UCA2BR1=0; |
52 | UCA2MCTL = UCBRS_0; |
53 | break; |
54 | |
55 | case bd_38400: |
56 | UCA2BR0=26; |
57 | UCA2BR1=0; |
58 | UCA2MCTL = UCBRS_0; |
59 | break; |
60 | |
61 | default:
|
62 | //9600
|
63 | UCA2BR0=104; |
64 | UCA2BR1=0; |
65 | UCA2MCTL = UCBRS_1; |
66 | break; |
67 | }
|
68 | |
69 | break; |
70 | case MHz_4: |
71 | break; |
72 | default: |
73 | return false; |
74 | }
|
75 | UCSCTL7 |= 0x0010; |
76 | |
77 | UCA2CTL1 &= ~UCSWRST; // **Initialize USCI state machine** |
78 | UCA2IE |= UCRXIE; |