Hallo zusammen, ich bin bei der Verarbeitung von meine SPI Kommunikation mit mein F2132 (wird nicht erkannt von mein IAR 4.11B !!!) ich hab ein Problem, der ich nicht lösen kann: Der Clock ist völlig random! Als Anhang hab ich ein Screenshot von mein PC Oszilloskop gefügt. Man sieht dass die länge ist nicht regulär... was hab ich wohl falsch eingestellt? Hier mein Code:
1 | //******************************************************************************
|
2 | #include "msp430x21x2.h" |
3 | |
4 | int commUCA(int); |
5 | |
6 | unsigned char MST_Data, SLV_Data; |
7 | |
8 | void main(void) |
9 | {
|
10 | volatile unsigned int i; |
11 | |
12 | WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer |
13 | BCSCTL3 = LFXT1S_2; // Select ACLK from VLO (no crystal) |
14 | BCSCTL1 = CALBC1_8MHZ; // Calibrated range for DCO |
15 | DCOCTL = CALDCO_8MHZ; // Calibrated tap and modulation |
16 | P1OUT = 0x00; // reset outputs |
17 | P1DIR = 0x00; // Inputs |
18 | P2OUT = BIT5 | BIT7; // set to 1 EN & EN2 |
19 | P2DIR = BIT5 | BIT7; // Set dir out (EN & EN2) |
20 | P3OUT = 0x00; // Set slave reset |
21 | P3DIR |= 0x00; // |
22 | P3SEL |= 0x31; // P3.0,4,5 USCI_A0 option select |
23 | UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit SPI master |
24 | UCA0CTL1 |= UCSSEL_2; // SMCLK |
25 | UCA0BR0 |= 0x02; // /2(always write something!) |
26 | UCA0BR1 = 0; // |
27 | UCA0MCTL = 0; // No modulation |
28 | UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** |
29 | IE2 |= UCA0RXIE; // Enable USCI0 RX interrupt |
30 | |
31 | for (i = 50; i > 0; i--); // Wait for slave to initialize |
32 | |
33 | MST_Data = 0x55; // Initialize data values |
34 | SLV_Data = 0x00; |
35 | |
36 | for(;;){ |
37 | commUCA(MST_Data); // Transmit first character |
38 | |
39 | }
|
40 | }
|
41 | |
42 | int commUCA(int TX_Data){ |
43 | |
44 | UCA0TXBUF = TX_Data; |
45 | |
46 | __low_power_mode_0(); |
47 | |
48 | return UCA0RXBUF; |
49 | |
50 | }
|
51 | |
52 | // ISR for Received interrupt
|
53 | #pragma vector=USCIAB0RX_VECTOR
|
54 | __interrupt void USCIA0RX_ISR(void) |
55 | {
|
56 | volatile unsigned int i; |
57 | int dummy = 0; |
58 | while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX buffer ready? |
59 | |
60 | dummy = UCA0RXBUF; |
61 | |
62 | for (i = 3000; i; i--); // Add time between transmissions |
63 | dummy++; |
64 | __low_power_mode_off_on_exit(); |
65 | |
66 | }
|