#include "driverlib.h"
#define CS_SMCLK_DESIRED_FREQUENCY_IN_KHZ 1000 //DCO范围
#define CS_SMCLK_FLLREF_RATIO 30 //FLLN
uint32_t clockValue = 0; //存储时钟值
uint8_t ReceiveData = 0; //定义接收数据变量
int main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
PM5CTL0 &= ~LOCKLPM5; //Unlock LPM5
/*DCO频率为1MHz*/
//DCO FLL 时钟源 REFO
CS_initClockSignal(CS_FLLREF,CS_REFOCLK_SELECT,CS_CLOCK_DIVIDER_1);
//(30+1)*32768约等于1MHz
CS_initFLLSettle(CS_SMCLK_DESIRED_FREQUENCY_IN_KHZ,CS_SMCLK_FLLREF_RATIO);
CS_clearAllOscFlagsWithTimeout(1000);
//设置SMCLK时钟源为来自DCO,其他的时钟默认不改变
CS_initClockSignal(CS_SMCLK,CS_DCOCLKDIV_SELECT,CS_CLOCK_DIVIDER_1);
//设置GPIO口作为复用输出端口
GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PORT_P2,GPIO_PIN5+GPIO_PIN6,GPIO_SECONDARY_MODULE_FUNCTION);
/*配置UART初始化设置,选择1MHz,波特率9600*/
EUSCI_A_UART_initParam EUSCI_A_UART_initStucture = {0};
//选择时钟源SMCLK
EUSCI_A_UART_initStucture.selectClockSource = EUSCI_A_UART_CLOCKSOURCE_SMCLK;
//设置时钟的分频值,设置UCBRx这个的值,对应表格是6
EUSCI_A_UART_initStucture.clockPrescalar = 6;
//设置UCBRFx标志位,查表得值为8
EUSCI_A_UART_initStucture.firstModReg = 8;
// 设置UCBRSx标志位,查表得值为0x20
EUSCI_A_UART_initStucture.secondModReg = 0x20;
//选择模式,设置UCOS16位置1,采样模式
EUSCI_A_UART_initStucture.overSampling = EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION;
EUSCI_A_UART_initStucture.parity = EUSCI_A_UART_NO_PARITY; //无校验位
EUSCI_A_UART_initStucture.msborLsbFirst = EUSCI_A_UART_LSB_FIRST; //低位先行
EUSCI_A_UART_initStucture.numberofStopBits = EUSCI_A_UART_ONE_STOP_BIT; //1位停止位
EUSCI_A_UART_initStucture.uartMode = EUSCI_A_UART_MODE;
//上诉设置初始化
EUSCI_A_UART_init(EUSCI_A1_BASE,&EUSCI_A_UART_initStucture);
//开启UART使能
EUSCI_A_UART_enable(EUSCI_A1_BASE);
//清除接收中断标志位
EUSCI_A_UART_clearInterrupt(EUSCI_A1_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG);
//开启UART的接收中断,非发送一连串字符不需要发送中断
EUSCI_A_UART_enableInterrupt(EUSCI_A1_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT);
__bis_SR_register(GIE);
while(1);
}
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
ReceiveData = EUSCI_A_UART_receiveData(EUSCI_A1_BASE);
EUSCI_A_UART_transmitData(EUSCI_A1_BASE,ReceiveData);
ReceiveData = EUSCI_A_UART_receiveData(EUSCI_A1_BASE);
EUSCI_A_UART_clearInterrupt(EUSCI_A1_BASE,EUSCI_A_UART_RECEIVE_INTERRUPT_FLAG);//清除中断标志位
}