Hallo, möchte vom MSP 430 F1121A mehrere Zeichen über die Serie Schnittstelle senden und empfangen. Beispielprogramm habe ich von Texas Instruments runtergeladen. Leider weiß ich nicht, wie ich das Programm dazu bringe, für mich Zeichen zu senden bzw. zu empfangen. Scheinbar ist dieses Problem so trivial, dass es von Texas Instruments nicht behandelt wird. Danke für euere Hilfe!! Reinhold Anbei das Programm-Listing von TI.: --------------------------------------------- //********************************************************************** ******** // MSP-FET430x110 Demo - Timer_A UART 9600 Echo, HF XTAL ACLK // // Description: Use timer_A CCR0 hardware output modes and SCCI data latch to // to implement UART function @ 9600 baud. Software does not directly read and // write to RX and TX pins, instead proper use of output modes and SCCI data // latch are demonstrated. Use of these hardware features eliminates ISR // latency effects as hardware insures that output and input bit latching and // timing are perfectly synchronised with timer_A regardless of other // software activity. In the Mainloop the UART function readies the UART to // receive one character and waits in LPM0 with all activity interrupt driven. // After a character has been received, the UART receive function forces exit // from LPM0 in the Mainloop which echo's back the received character. // ACLK = MCLK = TACLK = HF XTAL = 3.579545MHz // //*An external 3.579545Hz XTAL on XIN XOUT is required for ACLK*// // // MSP430F1121 // ----------------- // /|\| XIN|- // | | | 3.58Mhz // --|RST XOUT|- // | | // | CCI0A/TXD/P1.1|--------> // | | 9600 8N1 // | CCI0B/RXD/P2.2|<-------- // #define RXD 0x04 // RXD on P2.2 #define TXD 0x02 // TXD on P1.1 // Conditions for 9600 Baud HW/SW UART, ACLK = 3.579545MHz #define Bitime_5 0x0BA // ~ 0.5 bit length #define Bitime 0x175 // 104 us ~ 9596 baud unsigned int RXTXData; unsigned char BitCnt; void TX_Byte (void); void RX_Ready (void); // M.Buccini // October 2003 // Built with IAR Embedded Workbench Version: 1.26B // January 2004 // Updated for IAR Embedded Workbench Version: 2.21B //********************************************************************** ******** #include <msp430x11x1.h> void main (void) { unsigned int i; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL do { IFG1 &= ~OFIFG; // Clear OSCFault flag for (i = 0xFF; i > 0; i--); // Time for flag to set } while ( IFG1 & OFIFG ); // OSCFault flag still set? BCSCTL2 |= SELM_3; // MCLK = LFXT1 (safe) CCTL0 = OUT; // TXD Idle as Mark TACTL = TASSEL_1 + MC_2; // ACLK, continuous mode P1SEL = TXD; // P1.1/TA0 for TXD function P1DIR = TXD; // TXD output on P1 P2SEL = RXD; // P2.2/TA0 as RXD input // Mainloop for (;;) { RX_Ready(); // UART ready to RX one Byte _BIS_SR(CPUOFF + GIE); // Enter LPM0 w/ interr until char RXed TX_Byte(); // TX Back RXed Byte Received } } // Function Transmits Character from RXTXData Buffer void TX_Byte (void) { BitCnt = 0xA; // Load Bit counter, 8data + ST/SP CCR0 = TAR; // Current state of TA counter CCR0 += Bitime; // Some time till first bit RXTXData |= 0x100; // Add mark stop bit to RXTXData RXTXData = RXTXData << 1; // Add space start bit CCTL0 = OUTMOD0 + CCIE; // TXD = mark = idle while ( CCTL0 & CCIE ); // Wait for TX completion } // Function Readies UART to Receive Character into RXTXData Buffer void RX_Ready (void) { BitCnt = 0x8; // Load Bit counter CCTL0 = SCS + CCIS0 + OUTMOD0 + CM1 + CAP + CCIE; // Sync, Neg Edge, Capture } // Timer A0 interrupt service routine #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void) { CCR0 += Bitime; // Add Offset to CCR0 // RX if (CCTL0 & CCIS0) // RX on CCI0B? { if( CCTL0 & CAP ) // Capture mode = start bit edge { CCTL0 &= ~ CAP; // Switch from capture to compare mode CCR0 += Bitime_5; } else { RXTXData = RXTXData >> 1; if (CCTL0 & SCCI) // Get bit waiting in receive latch RXTXData |= 0x80; BitCnt --; // All bits RXed? if ( BitCnt == 0) //>>>>>>>>>> Decode of Received Byte Here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< { CCTL0 &= ~ CCIE; // All bits RXed, disable interrupt _BIC_SR_IRQ(CPUOFF); // Clear LPM0 bits from 0(SR) } //>>>>>>>>>> Decode of Received Byte Here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< } } // TX else { if ( BitCnt == 0) CCTL0 &= ~ CCIE; // All bits TXed, disable interrupt else { CCTL0 |= OUTMOD2; // TX Space if (RXTXData & 0x01) CCTL0 &= ~ OUTMOD2; // TX Mark RXTXData = RXTXData >> 1; BitCnt --; } } }
http://www.mikrocontroller.net/forum/read-2-70044.html hatte mal das selbe prob... der denkansatz steht dort, das fertige prog ( & source) steht mir leider nichtmehr zur verfügung, aber helfen kann das bisherige auch ;-)
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.