Jump to content
Sign in to follow this  
fj604

ADC calibration constants

Recommended Posts

Modified a little... because I was bored. Jumper P1.1 and P1.5 accordingly.

 

//******************************************************************************
//  MSP430G2xx2 Demo - Timer_A, Ultra-Low Pwr UART 2400 Echo, 32kHz ACLK
//
//  Description: Use Timer_A CCR0 hardware output modes and SCCI data latch
//  to implement UART function @ 2400 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 LPM3 with all activity interrupt driven.
//  After a character has been received, the UART receive function forces exit
//  from LPM3 in the Mainloop which echo's back the received character.
//  ACLK = TACLK = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO
//  //* An external watch crystal is required on XIN XOUT for ACLK *//
//
//               MSP430G2xx2
//            -----------------
//        /|\|              XIN|-
//         | |                 | 32kHz
//         --|RST          XOUT|-
//           |                 |
//           |   CCI0B/TXD/P1.5|-------->
//           |                 | 2400 8N1
//           |   CCI0A/RXD/P1.1|<--------
//
#define RXD       0x02                      // RXD on P1.1
#define TXD       0x20                      // TXD on P1.5

//   Conditions for 2400 Baud SW UART, ACLK = 32768

#define Bitime_5  0x06                      // ~ 0.5 bit length + small adjustment
#define Bitime    0x0E                      // 427us bit length ~ 2341 baud

unsigned int RXTXData;
unsigned char BitCnt;
char *Flash_ptr;
char curdata;
char ValidInput = 0;

void TX_Byte (void);
void RX_Ready (void);
unsigned char LowCharToHex(unsigned char input);

//  D. Dang
//  Texas Instruments Inc.
//  December 2010
//  Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
//******************************************************************************

#include  


void main (void)
{
WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
CCTL0 = OUT;                              // TXD Idle as Mark
TACTL = TASSEL_1 + MC_2;                  // ACLK, continuous mode
P1SEL = TXD + RXD;                        //
P1DIR = TXD;                              //

unsigned int i=0;
// Mainloop
for (;
{
	RX_Ready();                               // UART ready to RX one Byte
	_BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/ interr until char RXed
	switch(RXTXData)
	{
	case 'A':
	case 'a':
		Flash_ptr = (char *)0x10C0;              // Initialize Flash segment A ptr
		break;
	case 'B':
	case 'b':
		Flash_ptr = (char *)0x1080;              // Initialize Flash segment B ptr
		break;
	case 'C':
	case 'c':
		Flash_ptr = (char *)0x1040;              // Initialize Flash segment C ptr
		break;
	case 'D':
	case 'd':
		Flash_ptr = (char *)0x1000;              // Initialize Flash segment D ptr
		break;
	default: ValidInput = 1;
	}
	if(ValidInput == 0)
	{
		for (i = 0; i < 64; i++)
		{
			curdata = *Flash_ptr++;          // copy value segment C to seg D
			RXTXData = curdata;
			RXTXData = LowCharToHex((RXTXData>>4)&0x0F);
			TX_Byte();
			RXTXData = LowCharToHex(curdata&0x0F);
			TX_Byte();
			RXTXData = ' ';
			TX_Byte();
		}
	}
	ValidInput = 0;
 //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
 while (CCR0 != TAR)                       // Prevent async capture
   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 =  CCIS0 + 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 + OUTMOD0 + CM1 + CAP + CCIE;   // Sync, Neg Edge, Cap
}

// 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 (RXTXData & 0x01)
     CCTL0 &= ~ OUTMOD2;                   // TX Mark
     RXTXData = RXTXData >> 1;
     BitCnt --;
   }
 }
// RX
 else
 {
   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(LPM3_bits);               // Clear LPM3 bits from 0(SR)
     }
//>>>>>>>>>> Decode of Received Byte Here <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   }
 }
}

// LowCharToHex(mychar&0x0F);
// LowCharToHex(mychar>>4);
unsigned char LowCharToHex(unsigned char input)
{
unsigned chars[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
if(input >=0 && input <= 15)
	return chars[input];
else
	return '.';
}

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...