No.
leon_heller:
I’d use a chip with a hardware UART, and do the other one in software.Leon
could u please send me the code which has hardware uart and software uart
Which chip are you using? You should be able to find the code on the TI web site.
Leon
i’m using msp430f2232.which has one hardware uart.i tried the TI websit i didn’t fine which doesn’t has hardware uart and software uart.could u please send me the link or example code
The hardware UART details are in the user’s guide; just write your own code. Why can’t you use the software UART code I gave you?
Leon
1.i want to know how to mix the hardware uart program and software uart program
2.i have some doubt in hardware setup.
3.here i’m using p1.1-txd and p2.2 -rxd in software uart program,
4.p3.4-UTXD0 and p3.5-URXD0 in hardware uart,
5.my objective is i have take data from gps to pc through microcontroller(MSP430f2232)
6.and i have to send the commands from pc to gps through microcontroller(MSP430f2232).
Why don’t you simply connect the GPS to the PC? You don’t need the MSP430.
Leon
in between i have check one NMEA message and i have to insert one more message
any one can help ?
Hello all,
Here i have enclosed the code which i’m using.This is communication between gps to pc through msp430,now i want to change it means
-
i want to receive data through software uart from gps to pc through msp
-
i wan to transfer data from pc to gps using hardware uart
could any one can help me.
#include <msp430x14x.h>
#include<stdio.h>
#include “stdarg.h”
#define RXD 0x04 // RXD on P2.2
#define TXD 0x02 // TXD on P1.1
#define Bitime_5 52 // ~ 0.5 bit length + small adjustment-(104)
#define Bitime 104 // 8.6 us bit length ~ 115942 baud-(208)
#define DELTA 488 //1953
static unsigned int RXTXData;
unsigned int i=0,j,count=0,index,I=0;
unsigned char BitCnt,buffer;
static const char string = { “STOPO\r\n” };
void TX_Byte (void);
void RX_Ready (void);
void Set_DCO (void);
void delay(int a);
void main (void)
{
volatile unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
BCSCTL1 |= DIVA_3; // ACLK = LFXT1CLK/8
Set_DCO(); // Set DCO
CCTL0 = OUT; // TXD Idle as Mark
TACTL = TASSEL_2 + 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
P6SEL = 0x00; // Select P6 port as I/O
P6DIR = 0xFF; // Set P6 port to Output direction
P6OUT = 0x10;
while(1)
{
for (index=0;index<250;index++)
{
RX_Ready();
_BIS_SR(LPM3_bits+GIE);
buffer[index] = RXTXData;
}
for (index=0;index<225;index++)
{
RXTXData =buffer[index];
TX_Byte();
i = 10;
do (i–);
while (i != 0);
}
RXTXData=0x0D;
TX_Byte();
}
}
// 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
//printf(“%s”,RXTXData);
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 = CM_2 + CCIS0+ OUTMOD0 + CAP + CCIE ; // Sync, Neg Edge, Cap
}
void Set_DCO (void) // Set DCO to selected frequency
{
unsigned int Compare, Oldcapture = 0;
CCTL2 = CM_1 + CCIS_1 + CAP; // CAP, ACLK
TACTL = TASSEL_2 + MC_2 + TACLR; // SMCLK, cont-mode, clear
while (1)
{
while (!(CCIFG & CCTL2)); // Wait until capture occured
CCTL2 &= ~CCIFG; // Capture occured, clear flag
Compare = CCR2; // Get current captured SMCLK
Compare = Compare - Oldcapture; // SMCLK difference
Oldcapture = CCR2; // Save current captured SMCLK
if (DELTA == Compare) break; // If equal, leave “while(1)”
else if (DELTA < Compare)
{
DCOCTL–;
if (DCOCTL == 0xFF) // DCO is too fast, slow it down
{
if (!(BCSCTL1 == (XT2OFF + DIVA_3)))
BCSCTL1–; // Did DCO role under?, Sel lower RSEL
}
}
else
{
DCOCTL++; // DCO is too slow, speed it down
if (DCOCTL == 0x00)
{
if (!(BCSCTL1 == (XT2OFF + DIVA_3 + 0x07)))
BCSCTL1++; // Did DCO role over? Sel higher RSEL
}
}
}
CCTL2 = 0; // Stop CCR2
TACTL = 0; // Stop Timer_A
}
// 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;
_BIC_SR_IRQ(SCG1 + SCG0);
}
else
{
RXTXData = RXTXData >> 1;
if (CCTL0 & SCCI) // Get bit waiting in receive latch
RXTXData |= 0x80;
BitCnt --; // All bits RXed?
if ( BitCnt == 0)
{
CCTL0 &= ~ CCIE; // All bits RXed, disable interrupt
_BIC_SR_IRQ(CPUOFF); // Clear LPM0 bits from 0(SR)
}
}
}
// 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 --;
}
}
}
could you please correct this code
It shouldn’t be too hard to do this yourself, you just need to take the time to read through the hardware and software UART examples you already have, figure out and understand how they work, and then put them together. Rushing into it without first understanding how it works won’t get you anywhere.
If you have specific questions, we can try to help you answer them, but it’s unlikely that you’ll find someone to do your work for you.
hi thanks roko,
i’ll do myself and i’ll let u know.