MSP430 Timer_A UART

Hey there,

I'm trying to make a simple project work. There's a demo: MSP430F20xx Demo - Timer_A, Ultra-Low Pwr UART 2400 Echo, 32kHz ACLK from TI, it does work but I wanted to use p1.2&p1.6 ports instead of p1.1&p1.5 (TA1 instead of TA0) so I changed lines

RXD EQU 002h ; RXD on P1.1 TXD EQU 020h ; TXD on P1.5

with

RXD EQU 004h ; RXD on P1.2 TXD EQU 040h ; TXD on P1.6

after that I changed &CCTL0 and &CCR0 with &CCTL1 and &CCR1 respectively. It won't work :( Any suggestions?

This is the code:

RXD equ 004h ; RXD on P1.2 TXD equ 040h ; TXD on P1.6

; RAM Registers Used RXTXData equ 0200h ; Register for RX or TX UART Data BitCnt equ 0202h ; Register used to count UART bits MYTXA equ 'A' ; ; Conditions for 1200 Baud SW UART, ACLK =3D 32768 Bitime_5 equ 014 ; .5 bit length + small adjustment Bitime equ 027 ; 427us bit length ~ 2341 baud

;--------------------------------------------------------------------------= =AD---

ORG 0F800h ; Program Start ;--------------------------------------------------------------------------= =AD---

RESET mov.w #280h,SP ; Initialize Stackpointer call #Init_Sys ; Initialize System Peripherals again mov.w &MYTXA,&RXTXData call #TX_Byte ; TX Back RXed Byte Received jmp again

Mainloop call #RX_Ready ; UART ready to RX one Byte

bis.w #LPM3,SR ; Enter LPM3 Until Byte RXed call #TX_Byte ; TX Back RXed Byte Received jmp Mainloop ; ; ;--------------------------------------------------------------------------= =AD---

Init_Sys ; Subroutine to set-up peripherals ;--------------------------------------------------------------------------= =AD---

StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT SetupTA mov.w #TASSEL0+MC1,&TACTL ; ACLK, continous mode SetupC0 mov.w #OUT,&CCTL1 ; TXD Idle as Mark SetupP1_2 bis.b #TXD,&P1SEL ; P1.1/TA0 for TXD function

bis.b #TXD,&P1DIR ; TXD output on P1 bis.b #RXD,&P1SEL ; P2.2/TA0 as RXD input eint ; General Enable Interrupts

ret ; ; ;--------------------------------------------------------------------------= =AD---

TX_Byte ; Subroutine that Transmit One Byte from RXTXData Buffer. ;--------------------------------------------------------------------------= =AD---

TX_1 mov.w &TAR,&CCR1 ; Current state of TA counter cmp.w &TAR,&CCR1 ; !!Prevent async capature!! jne TX_1 add.w #Bitime,&CCR1 ; 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, 8 data

  • SP mov.w #OUTMOD0+CCIE,&CCTL1 ; TXD =3D mark =3D idle ;CCIS0+ TX_Wait bit.w #CCIE,&CCTL1 ; Wait for TX completion jnz TX_Wait ; ret ; ; ;--------------------------------------------------------------------------= =AD---

RX_Ready ; Subroutine that will Receive One Byte into RXTXData Buffer.

;--------------------------------------------------------------------------= =AD---

mov.w #08,&BitCnt ; Load Bit Counter, 8 data

bits SetupRX mov.w #SCS+CCIS0+OUTMOD0+CM1+CAP+CCIE,&CCTL1 ; Sync,Neg Edge,Cap ret ; ; ;--------------------------------------------------------------------------= =AD---

TAx_ISR ; CCR1/UART ISR: RXTXData Buffer holds UART Data. ;--------------------------------------------------------------------------= =AD---

add.w #Bitime,&CCR1 ; Time to Next Bit bit.w #CCIS1,&CCTL1 ; RX on ISCCIB? jnz UART_RX ; Jump --> RX UART_TX cmp.w #00h,&BitCnt ; jne TX_Next ; Next bit? bic.w #CCIE,&CCTL1 ; All Bits TX or RX, Disable Int. reti ; TX_Next bic.w #OUTMOD_4,&CCTL1 ; TX Mark rra.w &RXTXData ; LSB is shifted to carry jc TX_Test ; Jump --> bit =3D 1 TX_Space bis.w #OUTMOD_4,&CCTL1 ; TX Space TX_Test dec.w &BitCnt ; All bits sent (or received)? reti ; ; UART_RX bit.w #CAP,&CCTL1 ; Compare mode for start bit edge jz RX_Bit ; Start bit edge? RX_Edge bic.w #CAP,&CCTL1 ; Switch to Compare mode add.w #Bitime_5,&CCR1 ; First databit 1.5 bits from edge reti ; RX_Bit bit.w #SCCI,&CCTL1 ; Get bit waiting in receive latch rrc.b &RXTXData ; Store received bit RX_Test dec.w &BitCnt ; All bits sent (or received)? jnz RX_Next ; Next bit? ;>>>>>>>>>> Decode of Received Byte Here

>>>>>>>
Reply to
tonykl
Loading thread data ...

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.