Reply by neptunetg July 29, 20052005-07-29
I solved my own problem.  Thanks Micah for helping.
Nate


--- In msp430@msp4..., "neptunetg" <neptunetg@y...> wrote:
> The demo code is below.  I'm using a
MSP430F413.  This demo is 
> available on TI's website.  The header describes exactly what it 
> does.  All I need is the transmit portion of this code, but I'm 
> having a pickle of a time getting it extracted and modified.  My 
> transmit port is P1.2  .  Basically, I want to put an 8 bit value 
in 
> what they are calling RXTXData, call the routine
and send it out 
the 
> port 1.2 at 9600 baud.  Thanks for replying.
> 
> Nate
> 
> ;******************************************************************
**
> **********
> ;   MSP-FET430P410 Demo - Timer_A, UART 9600 Echo, DCO SMCLK
> ;
> ;   Description: Use Timer_A CCR0 hardware output modes and SCCI 
> data latch 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. Using these hardware features 
eliminates 
> ISR
> ;   latency effects as hardware ensures that input and output 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 = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK 
> 1048576Hz
> ;   //* An external watch crystal between XIN & XOUT is required 
for 
> ACLK *//	
> ;
> ;                 MSP430F413
> ;             -----------------
> ;         /|\|              XIN|-
> ;          | |                 | 32kHz
> ;          --|RST          XOUT|-
> ;            |                 |
> ;            |    P1.0/CCI0A/TX|-------->
> ;            |                 | 9600 8N1
> ;            |    P1.1/CCI0B/RX|<--------
> ;
> ;   M. Buccini
> ;   Texas Instruments Inc.
> ;   Feb 2005
> ;   Built with IAR Embedded Workbench Version: 3.21A
> ;******************************************************************
**
> **********
> #include  <msp430x41x.h>
> 
> ;   CPU Registers Used
> #define     RXTXData R4
> #define     BitCnt   R5
> ;
> RXD         EQU     002h                    ; RXD on P1.1
> TXD         EQU     001h                    ; TXD on P1.0
>                                             ;
> ;   Conditions for 9600 Baud SW UART, SMCLK = 1048576
> Bitime_5    EQU     0055                    ; ~ 0.5 bit length
> Bitime      EQU     0109                    ; ~ 9620 baud
> ;
> ;------------------------------
--
> ----------
>             ORG     0E000h                  ;
> ;------------------------------
--
> ----------
> RESET       mov.w   #300h,SP                ; Initialize 
stackpointer
> SetupWDT    mov.w   #WDTPW+WDTHOLD,&WDTCTL
 ; Stop Watchdog Timer
> SetupFLL    bis.b   #XCAP14PF,&FLL_CTL0     ; Configure load caps
> SetupTA     mov.w   #TASSEL1+MC1,&TACTL     ; SMCLK, continous mode
> SetupC0     mov.w   #OUT,&CCTL0             ; TXD Idle as Mark
> SetupP1_2   bis.b   #TXD+RXD,&P1SEL         ; P1.0/1 TA0 for 
TXD/RXD 
> function
>             bis.b   #TXD,&P1DIR             ; TXD output on P1
>             eint                            ; Enable general 
> interrupts
>                                             ;
> Mainloop    call    #RX_Ready               ; UART ready to RX one 
> Byte
>             bis.w   #LPM0,SR                ; Enter LPM0 Until 
Byte 
> RXed
>             call    #TX_Byte                ; TX Back RXed Byte 
> Received
>             jmp     Mainloop                ;
>                                             ;
> ;------------------------------
--
> ----------
> TX_Byte   ; Subroutine Transmits Character from RXTXData Buffer
> ;------------------------------
--
> ----------
>             mov.w   &TAR,&CCR0              ; Current state of TA 
> counter
>             add.w   #Bitime,&CCR0           ; Some time till first 
> bit
>             bis.w   #0100h, RXTXData        ; Add mark stop bit to 
> RXTXData
>             rla.w   RXTXData                ; Add space start bit
>             mov.w   #10,BitCnt              ; Load Bit counter, 
> 8data + ST/SP
>             mov.w   #OUTMOD0+CCIE,&CCTL0    ; TXD = mark = idle
> TX_Wait     bit.w   #CCIE,&CCTL0            ; Wait for TX 
completion
>             jnz     TX_Wait                 ;
>             ret                             ;
>                                             ;
> ;------------------------------
--
> ----------
> RX_Ready  ; Subroutine Readies UART to Receive Character into 
> RXTXData Buffer
> ;------------------------------
--
> ----------
>             mov.w   #08,BitCnt              ; Load Bit Counter, 8 
> data bits
> SetupRX     mov.w  
#SCS+CCIS0+OUTMOD0+CM1+CAP+CCIE,&CCTL0  ; 
> Sync,Neg Edge,cap
>             ret                             ;
>                                             ;
> ;------------------------------
--
> ----------
> TA0_ISR  ;  RXTXData Buffer holds UART Data
> ;------------------------------
--
> ----------
>             add.w   #Bitime,&CCR0           ; Time to next bit
>             bit.w   #CCIS0,&CCTL0           ; RX on CCI0B?
>             jnz     UART_RX                 ; Jump --> RX
> UART_TX     cmp.w   #00h,BitCnt             ;
>             jne     TX_Next                 ; Next bit?
>             bic.w   #CCIE,&CCTL0            ; All Bits TX or RX, 
> Disable Int.
>             reti                            ;
> TX_Next     bic.w   #OUTMOD2,&CCTL0         ; TX Mark
>             rra.w   RXTXData                ; LSB is shifted to 
carry
>             jc      TX_Test                 ; Jump
--> bit = 1
> TX_Space    bis.w   #OUTMOD2,&CCTL0         ; TX Space
> TX_Test     dec.w   BitCnt                  ; All bits sent (or 
> received)?
>             reti                            ;
>                                             ;
> UART_RX     bit.w   #CAP,&CCTL0             ; Capture mode = start 
> bit edge
>             jz      RX_Bit                  ; Start bit edge?
> RX_Edge     bic.w   #CAP,&CCTL0             ; Switch to compare 
mode
>             add.w   #Bitime_5,&CCR0         ;
First databit 1.5 
bits 
> from edge
>             reti                            ;
> RX_Bit      bit.w   #SCCI,&CCTL0            ; Get bit waiting in 
> receive latch
>             rrc.b   RXTXData                ; Store received bit
> RX_Test     dec.w   BitCnt                  ; All bits RXed?
>             jnz     RX_Next                 ; Next bit?
> ;>>>>>>>>>> Decode of Received Byte Here 
>
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
> RX_Comp     bic.w   #CCIE,&CCTL0            ; All bits RXed, 
disable 
> interrupt
>             mov.w   #GIE,0(SP)              ; Decode byte = active 
> in Mainloop
>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<
<<
> <<<<<<<<<
> RX_Next     reti                            ;
> ;
> ;------------------------------
--
> ----------
> ;           Interrupt Vectors
> ;------------------------------
--
> ----------
>             ORG     0FFFEh                  ; RESET Vector
>             DW      RESET                   ;
>             ORG     0FFECh                  ; Timer_A0 Vector
>             DW      TA0_ISR                 ;



Beginning Microcontrollers with the MSP430

Reply by neptunetg July 29, 20052005-07-29
The demo code is below.  I'm using a MSP430F413.  This demo is 
available on TI's website.  The header describes exactly what it 
does.  All I need is the transmit portion of this code, but I'm 
having a pickle of a time getting it extracted and modified.  My 
transmit port is P1.2  .  Basically, I want to put an 8 bit value in 
what they are calling RXTXData, call the routine and send it out the 
port 1.2 at 9600 baud.  Thanks for replying.

Nate

;********************************************************************
**********
;   MSP-FET430P410 Demo - Timer_A, UART 9600 Echo, DCO SMCLK
;
;   Description: Use Timer_A CCR0 hardware output modes and SCCI 
data latch 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. Using these hardware features eliminates 
ISR
;   latency effects as hardware ensures that input and output 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 = LFXT1 = 32768Hz, MCLK = SMCLK = default DCO = 32 x ACLK 1048576Hz
;   //* An external watch crystal between XIN & XOUT is required for 
ACLK *//	
;
;                 MSP430F413
;             -----------------
;         /|\|              XIN|-
;          | |                 | 32kHz
;          --|RST          XOUT|-
;            |                 |
;            |    P1.0/CCI0A/TX|-------->
;            |                 | 9600 8N1
;            |    P1.1/CCI0B/RX|<--------
;
;   M. Buccini
;   Texas Instruments Inc.
;   Feb 2005
;   Built with IAR Embedded Workbench Version: 3.21A
;********************************************************************
**********
#include  <msp430x41x.h>

;   CPU Registers Used
#define     RXTXData R4
#define     BitCnt   R5
;
RXD         EQU     002h                    ; RXD on P1.1
TXD         EQU     001h                    ; TXD on P1.0
                                            ;
;   Conditions for 9600 Baud SW UART, SMCLK = 1048576
Bitime_5    EQU     0055                    ; ~ 0.5 bit length
Bitime      EQU     0109                    ; ~ 9620 baud
;
;--------------------------------
----------
            ORG     0E000h                  ;
;--------------------------------
----------
RESET       mov.w   #300h,SP                ; Initialize stackpointer
SetupWDT    mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop Watchdog Timer
SetupFLL    bis.b   #XCAP14PF,&FLL_CTL0     ; Configure load caps
SetupTA     mov.w   #TASSEL1+MC1,&TACTL     ; SMCLK, continous mode
SetupC0     mov.w   #OUT,&CCTL0             ; TXD Idle as Mark
SetupP1_2   bis.b   #TXD+RXD,&P1SEL         ; P1.0/1 TA0 for TXD/RXD 
function
            bis.b   #TXD,&P1DIR             ; TXD output on P1
            eint                            ; Enable general 
interrupts
                                            ;
Mainloop    call    #RX_Ready               ; UART ready to RX one 
Byte
            bis.w   #LPM0,SR                ; Enter LPM0 Until Byte 
RXed
            call    #TX_Byte                ; TX Back RXed Byte 
Received
            jmp     Mainloop                ;
                                            ;
;--------------------------------
----------
TX_Byte   ; Subroutine Transmits Character from RXTXData Buffer
;--------------------------------
----------
            mov.w   &TAR,&CCR0              ; Current state of TA 
counter
            add.w   #Bitime,&CCR0           ; Some time till first 
bit
            bis.w   #0100h, RXTXData        ; Add mark stop bit to 
RXTXData
            rla.w   RXTXData                ; Add space start bit
            mov.w   #10,BitCnt              ; Load Bit counter, 
8data + ST/SP
            mov.w   #OUTMOD0+CCIE,&CCTL0    ; TXD = mark = idle
TX_Wait     bit.w   #CCIE,&CCTL0            ; Wait for TX completion
            jnz     TX_Wait                 ;
            ret                             ;
                                            ;
;--------------------------------
----------
RX_Ready  ; Subroutine Readies UART to Receive Character into 
RXTXData Buffer
;--------------------------------
----------
            mov.w   #08,BitCnt              ; Load Bit Counter, 8 
data bits
SetupRX     mov.w  
#SCS+CCIS0+OUTMOD0+CM1+CAP+CCIE,&CCTL0  ; 
Sync,Neg Edge,cap
            ret                             ;
                                            ;
;--------------------------------
----------
TA0_ISR  ;  RXTXData Buffer holds UART Data
;--------------------------------
----------
            add.w   #Bitime,&CCR0           ; Time to next bit
            bit.w   #CCIS0,&CCTL0           ; RX on CCI0B?
            jnz     UART_RX                 ; Jump --> RX
UART_TX     cmp.w   #00h,BitCnt             ;
            jne     TX_Next                 ; Next bit?
            bic.w   #CCIE,&CCTL0            ; All Bits TX or RX, 
Disable Int.
            reti                            ;
TX_Next     bic.w   #OUTMOD2,&CCTL0         ; TX Mark
            rra.w   RXTXData                ; LSB is shifted to carry
            jc      TX_Test                 ; Jump --> bit = 1
TX_Space    bis.w   #OUTMOD2,&CCTL0         ; TX Space
TX_Test     dec.w   BitCnt                  ; All bits sent (or 
received)?
            reti                            ;
                                            ;
UART_RX     bit.w   #CAP,&CCTL0             ; Capture mode = start 
bit edge
            jz      RX_Bit                  ; Start bit edge?
RX_Edge     bic.w   #CAP,&CCTL0             ; Switch to compare mode
            add.w   #Bitime_5,&CCR0         ; First databit 1.5 bits 
from edge
            reti                            ;
RX_Bit      bit.w   #SCCI,&CCTL0            ; Get bit waiting in 
receive latch
            rrc.b   RXTXData                ; Store received bit
RX_Test     dec.w   BitCnt                  ; All bits RXed?
            jnz     RX_Next                 ; Next bit?
;>>>>>>>>>> Decode of Received Byte Here 
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
RX_Comp     bic.w   #CCIE,&CCTL0            ; All bits RXed, disable 
interrupt
            mov.w   #GIE,0(SP)              ; Decode byte = active 
in Mainloop
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<
<<<<<<<<<
RX_Next     reti                            ;
;
;--------------------------------
----------
;           Interrupt Vectors
;--------------------------------
----------
            ORG     0FFFEh                  ; RESET Vector
            DW      RESET                   ;
            ORG     0FFECh                  ; Timer_A0 Vector
            DW      TA0_ISR                 ;
            



Reply by Micah Stevens July 29, 20052005-07-29
Send your routine, and also the type of MSP you're using.. 

On Friday 29 July 2005 9:39 am, neptunetg wrote:
>  Can anyone please help me? I'm having a rather difficult time
>  implementing a UART Transmit at 9600 Baud. I have been trying to
>  modify the APP NOTE that waits for a character to be received and then
>  echos that character. I just want to write an ASCII character to the
>  UART. I am using port 1.2 for my output and I don't know if thats
>  complicating matters or not. Any code snippet would be greatly
>  appreciated.
>
>  Thanks!
>
>
>
>
>
>
>  .
>
>
>
>
>
>
> SPONSORED LINKS
> Msp430   Texas instruments   Hardware
>
>
> .

Reply by neptunetg July 29, 20052005-07-29
Can anyone please help me?  I'm having a rather difficult time 
implementing a UART Transmit at 9600 Baud.  I have been trying to 
modify the APP NOTE that waits for a character to be received and then 
echos that character.  I just want to write an ASCII character to the 
UART.  I am using port 1.2 for my output and I don't know if thats 
complicating matters or not.  Any code snippet would be greatly 
appreciated.

Thanks!