/* * uart_control.c * * Created on: Jul 28, 2014 * Author: BHill */ #include "msp430.h" unsigned char tx_data_str[36], rx_data_str[36], rx_flag, dec_str[6], eos_flag=0; char dec_char[6]; void uart_init(int br){ volatile int temp=0; //Set baud rate to 300, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600 volatile unsigned int brvec[]={0x55, 0x15, 0x0B, 0x05, 0x83, 0x41, 0xA1, 0x16, 139, 69, 35, 17}; volatile unsigned int hrvec[]={0xD0,0x34,0x1A,0x0D,6,3,1,1,0,0,0,0}; BCSCTL1 = CALBC1_16MHZ; // Set DCO DCOCTL = CALDCO_16MHZ; // BCSCTL1 = CALBC1_1MHZ; // Set DCO // DCOCTL = CALDCO_1MHZ; // P1DIR |=( BIT1+BIT2); P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = brvec[br]; UCA0BR1 = hrvec[br]; // UCA0BR0=104; UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt rx_flag=0; __bis_SR_register(GIE); // interrupts enabled } void uart_write_string(int vals, int vale){ int i; for(i=vals;i23){ rx_flag=0; } } char uart_get_char(int num){ return rx_data_str[num]; } void uart_set_char(char tx_data,int num){ tx_data_str[num]=tx_data; } void conv_hex_dec(int val){ volatile int temp,prev; unsigned int divider=10000; volatile int n=1,z=0,neg=0; dec_str[0]='0'; if (val<0){ neg=1; val=val*(-1); dec_str[0]='-'; } prev=0; for(n=1;n<6;n++){ temp=(val-prev)/divider; dec_str[n]=temp+0x30; prev=prev+(temp*divider); divider=divider/10; } } int conv_dec_hex ( void ){ volatile int num,k,temp; num=0; for (k=1;k<6;k++){ num*=10; temp=dec_char[k]; if (dec_char[k]>0x39) return 0x7FFF; if (dec_char[k]<0x30) return 0x7fff; num+=(dec_char[k]-0x30); } if (dec_char[0]=='-') num=num*(-1); return num; }