#include #include "SystemInitial.h" unsigned char UCA1_RX_BUFFER[8]; unsigned char UCA1_RX_Count; void UCA1_Initial(void){ //A1 uart initial ( for debug)******************************* P4SEL |= BIT4+BIT5; // P4.4,5 = USCI_A1 TXD/RXD UCA1CTL1 |= UCSWRST; // **Put state machine in reset** UCA1CTL1 |= UCSSEL_2; // SMCLK UCA1BR0 = 145; // 16.77MHz 115200 (see User's Guide P954) UCA1BR1 = 0; // 16.77MHz 115200 UCA1MCTL |= UCBRS_5 + UCBRF_0; // Modulation UCBRSx=5, UCBRFx=0 UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine** UCA1IE |= UCRXIE; // Enable USCI_A1 RX interrupt //A1 uart finish********************************************** } unsigned char HEX_To_ASCII(unsigned char hex){ //example: UCA1TXBUF=HEX_To_ASCII(0x5A) // UART output 'A' (0x41) , ‘5’is ignored unsigned char ASCII_L; ASCII_L=(hex&0x0f)+0x30; if(ASCII_L>0x39)ASCII_L=ASCII_L+7; return (ASCII_L); } void PrintCharASCII(unsigned char data){ //example: PrintCharASCII(0x5A); // UART output '5' 'A' (0x35) (0x41) // while (!(UCA1IFG&UCTXIFG)); // USCI_A1 TX buffer ready? UCA1TXBUF = HEX_To_ASCII(data>>4); while (!(UCA1IFG&UCTXIFG)); // USCI_A1 TX buffer ready? UCA1TXBUF = HEX_To_ASCII(data&0x0F); } void PrintChar(unsigned char data){ //example: PrintChar('A'); // UART output 'A' (0x41) while (!(UCA1IFG&UCTXIFG)); // USCI_A1 TX buffer ready? UCA1TXBUF = data; } void PrintStringASCII(unsigned char *string,unsigned char length){ //example: PrintStringASCII((unsigned char *)RXBUFF,3); RXBUFF={0x5A,0x6B,0x7C,0x8D,0x9E,0x0F}; // UART output '5''A''6''B''7''C' unsigned char i; for(i=0;i>4); while (!(UCA1IFG&UCTXIFG)); UCA1TXBUF=HEX_To_ASCII(*(string+i)); } } void PrintString(unsigned char *string,unsigned char length){ //example: PrintString("good morning",4); // UART output "good" unsigned char i; for(i=0;i RXed character if(UCA1RXBUF==0x0D) { Uart_Console(); //执行控制台操作 UCA1_RX_Count=0; //检测到回车符计数清零,BUFFER }else{ UCA1_RX_BUFFER[UCA1_RX_Count]=UCA1RXBUF; UCA1_RX_Count++; } break; case 4:break; // Vector 4 - TXIFG default: break; } } //Uart Interrupt handler*********************************** // UART 控制台程序,通过check收到的字符来执行相应的命令: void Uart_Console(void){ UCA1IE &= ~UCRXIE; //Disable RX interrupt,until console is done( this is "MUST" ,update 2015/8/28) //console program usuarally runs a long time ,otherwise it will be interrupted //ignore UART RX until console is done if((UCA1_RX_BUFFER[0]=='t')&(UCA1_RX_BUFFER[1]=='e')&(UCA1_RX_BUFFER[2]=='s')&(UCA1_RX_BUFFER[3]=='t')){ PrintEnter(); unsigned char j; for(j=0;j<0x0F;j++) PrintCharASCII(*(Flash_ptrD+j)); PrintEnter(); }else if ((UCA1_RX_BUFFER[0]=='t')&(UCA1_RX_BUFFER[1]=='i')&(UCA1_RX_BUFFER[2]=='m')&(UCA1_RX_BUFFER[3]=='e')){ PrintEnter(); PrintString("Current Time:",13); PrintCharASCII(RTCHOUR); PrintCharASCII(RTCMIN); PrintCharASCII(RTCSEC); PrintEnter(); }else if((UCA1_RX_BUFFER[0]=='p')&(UCA1_RX_BUFFER[1]=='w')&(UCA1_RX_BUFFER[2]=='m')){ PrintEnter(); PrintString("Current PWM:",12); PrintCharASCII(PWM_In_Frequency); PrintCharASCII(PWM_In_Duty); PrintEnter(); }else if((UCA1_RX_BUFFER[0]=='r')&(UCA1_RX_BUFFER[1]=='x')&(UCA1_RX_BUFFER[2]=='0')){ PrintEnter(); PrintString("SPI buffer:",12); PrintStringASCII((unsigned char *)UCA0RxBuffer,128); PrintEnter(); }else if((UCA1_RX_BUFFER[0]=='r')&(UCA1_RX_BUFFER[1]=='x')&(UCA1_RX_BUFFER[2]=='1')){ PrintEnter(); PrintString("SPI RXBUFF1:",12); PrintStringASCII((unsigned char *)RXBUFF[1],64); PrintEnter(); }else if((UCA1_RX_BUFFER[0]=='f')&(UCA1_RX_BUFFER[1]=='l')&(UCA1_RX_BUFFER[2]=='a')&(UCA1_RX_BUFFER[3]=='s')&(UCA1_RX_BUFFER[4]=='h')){ PrintEnter(); unsigned char j; for(j=0;j<0x0F;j++) PrintCharASCII(*(Flash_ptrD+j)); PrintEnter(); } else { PrintEnter(); PrintString("help: ",5); PrintEnter(); PrintString("test: system check",18); PrintEnter(); PrintString("time: system time",17); PrintEnter(); PrintString("pmw: current pwm",16); PrintEnter(); PrintString("rx0: spi buff",14); PrintEnter(); PrintString("rx1: spi RXBUFF1",18); PrintEnter(); } UCA1IE |= UCRXIE; //enable Uart RX interrupt , able to recieve command }