This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

uart rx problem

Other Parts Discussed in Thread: MSP430G2452

hi 

i am joju mohan i have problem with uart rx section my cod is given below . In this tx from mcu is happening but rx is not working 

This is a program for eco rx byte at rate 9600 for launch pad so help me??

 

 

 

 

 

 

 

//***********************************************************

//  Software UART

// 

//***********************************************************

 

#include <msp430g2452.h> 

 

#define TXD BIT1 // TXD on P1.1

#define RXD BIT2     // RXD on P1.2

#define Bitime 13 // 0x0D

#define Bitime_5 5

unsigned int TXByte;

unsigned char BitCnt;

 

 

 

void ConfigWDT(void);

void ConfigClocks(void);

void ConfigUART(void);

void Transmit(void);

void RX_Ready (void);

void main(void)

{

  ConfigWDT();

  ConfigClocks();

  ConfigUART();

   _bis_SR_register(GIE);

 TXByte='J';

 Transmit();

 for (;;)

  {

  RX_Ready();                               // UART ready to RX one Byte

  _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/ interr until char RXed

  Transmit();                                // TX Back RXed Byte Received

  }

}

 

void ConfigWDT(void)

 {

  WDTCTL = WDTPW + WDTHOLD; 

                // Enable WDT interrupt

 }

 

void ConfigClocks(void)

 {

 if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)                                       

   while(1);                    // If calibration data is erased

                             // run FaultRoutine()

  BCSCTL1 = CALBC1_1MHZ; // Set range

  DCOCTL = CALDCO_1MHZ;   // Set DCO step + modulation 

  BCSCTL3 |= LFXT1S_2;                      // LFXT1 = VLO

  IFG1 &= ~OFIFG;                           // Clear OSCFault flag

  BCSCTL2 = 0;               // MCLK = DCO = SMCLK

 }

 

void ConfigUART(void)

  {

  P1SEL |= TXD + RXD; // P1.1 & 2 TA0, rest GPIO

  P1DIR = ~(BIT3 + RXD); // P1.3 input, other outputs

  P1OUT = 0;               // clear output pins

  CCTL0 = OUT;                              // TXD Idle as Mark

  TACTL = TASSEL_2 + MC_2 + ID_3;           // SMCLK/8, continuos mode

  }

 

// Function Transmits Character from TXByte 

void Transmit()

  BitCnt = 0xA;                     // Load Bit counter, 8data + ST/SP

  while (CCR0 != TAR)               // Prevent async capture

    CCR0 = TAR;                     // Current state of TA counter

  CCR0 += Bitime;                   // Some time till first bit

  TXByte |= 0x100;                  // Add mark stop bit to TXByte

  TXByte = TXByte << 1;             // Add space start bit

  CCTL0 =  CCIS0 + OUTMOD0 + CCIE;  // TXD = mark = idle

  while ( CCTL0 & CCIE );           // Wait for TX completion

}

// Timer A0 interrupt service routine

#pragma vector=TIMER0_A0_VECTOR

__interrupt void Timer_A (void)

{

  CCR0 += Bitime;                           // Add Offset to CCR0

 

// TX

  if (CCTL0 & CCIS0)                        // TX on CCI0B?

  {

    if ( BitCnt == 0)

    CCTL0 &= ~ CCIE;                        // All bits TXed, disable interrupt

    else

    {

      CCTL0 |=  OUTMOD2;                    // TX Space

      if (TXByte & 0x01)

      CCTL0 &= ~ OUTMOD2;                   // TX Mark

      TXByte = TXByte >> 1;

      BitCnt --;

    }

  }

// RX

  else

  {

    if( CCTL0 & CAP )                       // Capture mode = start bit edge

    {

    CCTL0 &= ~ CAP;                         // Switch from capture to compare mode

    CCR0 += Bitime_5;

    }

    else

    {

    TXByte = TXByte >> 1;

      if (CCTL0 & SCCI)                     // Get bit waiting in receive latch

      TXByte |= 0x80;

      BitCnt --;                            // All bits RXed?

      if ( BitCnt == 0)

//>>>>>>>>>> Decode of Received Byte Here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

      {

      CCTL0 &= ~ CCIE;                      // All bits RXed, disable interrupt

      _BIC_SR_IRQ(LPM3_bits);               // Clear LPM3 bits from 0(SR)

      }

//>>>>>>>>>> Decode of Received Byte Here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

    }

  }

}

 

// Function Readies UART to Receive Character into RXTXData Buffer

void RX_Ready (void)

{

  BitCnt = 0x8;                             // Load Bit counter

  CCTL0 = SCS + OUTMOD0 + CM1 + CAP + CCIE;   // Sync, Neg Edge, Cap

}

 

**Attention** This is a public forum