这一篇是 MSP430FR5969 LaunchPad 的基础练习篇,在 CCS6下使用 DriverLib 库的方式编程。
在 MSP430FR5969 LaunchPad 上有2颗连接到MCU的LED分别是:
LED1 红色,接在 P4.6
LED2 绿色,接在 P1.0
我们依官网例程 EUSCI_A_UART 做修改,从串口接收到的命令来控制这2颗LED的亮灭,命令如下:
数字 0 - LED1、LED2 灭,串口回应 0
数字 1 - LED1 亮,LED2 灭,串口回应 1
数字 2 - LED1 灭,LED2 亮,串口回应 2
数字 3 - LED1、LED2 亮,串口回应 3
其他 - LED 状态不变,串口回应 ?
程序中使用了外部的 32768Hz 晶振,而我们要将串口的 BaudRate 设定在9600,在 TI 官网提供了在线的计算工具:
http://software-dl.ti.com/msp430 ... onverter/index.html
输入相关设定后得到了 EUSCI_A_UART_init 函数所需要的数据。
程序码:
- #include "driverlib.h"
- void main(void)
- {
- // stop watchdog
- WDT_A_hold(WDT_A_BASE);
- GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN6); // LED1
- GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0); // LED2
- GPIO_setOutputLowOnPin(GPIO_PORT_P4,GPIO_PIN6);
- GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);
- // LFXT Setup
- //Set PJ.4 and PJ.5 as Primary Module Function Input.
- /*
- * Select Port J
- * Set Pin 4, 5 to input Primary Module Function, LFXT.
- */
- GPIO_setAsPeripheralModuleFunctionInputPin(
- GPIO_PORT_PJ,
- GPIO_PIN4 + GPIO_PIN5,
- GPIO_PRIMARY_MODULE_FUNCTION
- );
- //Set DCO frequency to 1 MHz
- CS_setDCOFreq(CS_DCORSEL_0, CS_DCOFSEL_0);
- //Set external clock frequency to 32.768 KHz
- CS_setExternalClockSource(32768, 0);
- //Set ACLK=LFXT
- CS_clockSignalInit(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);
- //Set SMCLK = DCO with frequency divider of 1
- CS_clockSignalInit(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
- //Set MCLK = DCO with frequency divider of 1
- CS_clockSignalInit(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
- //Start XT1 with no time out
- CS_LFXTStart(CS_LFXTDRIVE_0);
- // Configure UART pins
- //Set P2.0 and P2.1 as Secondary Module Function Input.
- /*
- * Select Port 2d
- * Set Pin 0, 1 to input Secondary Module Function, (UCA0TXD/UCA0SIMO, UCA0RXD/UCA0SOMI).
- */
- GPIO_setAsPeripheralModuleFunctionInputPin(
- GPIO_PORT_P2,
- GPIO_PIN0 + GPIO_PIN1,
- GPIO_SECONDARY_MODULE_FUNCTION
- );
- /*
- * Disable the GPIO power-on default high-impedance mode to activate
- * previously configured port settings
- */
- PMM_unlockLPM5();
- // Configure UART
- if ( STATUS_FAIL == EUSCI_A_UART_initAdvance(EUSCI_A0_BASE,
- EUSCI_A_UART_CLOCKSOURCE_ACLK,
- 3,
- 0,
- 146,
- EUSCI_A_UART_NO_PARITY,
- EUSCI_A_UART_LSB_FIRST,
- EUSCI_A_UART_ONE_STOP_BIT,
- EUSCI_A_UART_MODE,
- EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION ))
- return;
- EUSCI_A_UART_enable(EUSCI_A0_BASE);
- EUSCI_A_UART_clearInterruptFlag(EUSCI_A0_BASE,
- EUSCI_A_UART_RECEIVE_INTERRUPT);
- // Enable USCI_A0 RX interrupt
- EUSCI_A_UART_enableInterrupt(EUSCI_A0_BASE,
- EUSCI_A_UART_RECEIVE_INTERRUPT); // Enable interrupt
- __enable_interrupt();
- }
- //******************************************************************************
- //
- //This is the USCI_A0 interrupt vector service routine.
- //
- //******************************************************************************
- #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
- #pragma vector=USCI_A0_VECTOR
- __interrupt
- #elif defined(__GNUC__)
- __attribute__((interrupt(USCI_A0_VECTOR)))
- #endif
- void USCI_A0_ISR(void)
- {
- uint8_t RXData;
- switch (__even_in_range(UCA0IV, USCI_UART_UCTXCPTIFG)) {
- case USCI_NONE: break;
- case USCI_UART_UCRXIFG:
- RXData = EUSCI_A_UART_receiveData(EUSCI_A0_BASE);
- switch (RXData) {
- case '0':
- GPIO_setOutputLowOnPin(GPIO_PORT_P4,GPIO_PIN6); // LED1
- GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0); // LED2
- EUSCI_A_UART_transmitData (EUSCI_A0_BASE,RXData);
- break;
- case '1':
- GPIO_setOutputHighOnPin(GPIO_PORT_P4,GPIO_PIN6);
- GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);
- EUSCI_A_UART_transmitData (EUSCI_A0_BASE,RXData);
- break;
- case '2':
- GPIO_setOutputLowOnPin(GPIO_PORT_P4,GPIO_PIN6);
- GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN0);
- EUSCI_A_UART_transmitData (EUSCI_A0_BASE,RXData);
- break;
- case '3':
- GPIO_setOutputHighOnPin(GPIO_PORT_P4,GPIO_PIN6);
- GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN0);
- EUSCI_A_UART_transmitData (EUSCI_A0_BASE,RXData);
- break;
- default:
- EUSCI_A_UART_transmitData (EUSCI_A0_BASE,'?');
- break;
- }
- break;
- case USCI_UART_UCTXIFG: break;
- case USCI_UART_UCSTTIFG: break;
- case USCI_UART_UCTXCPTIFG: break;
- }
- }
复制代码
工程文件:
EX03.rar
(537.72 KB, 下载次数: 7)
【TI首届低功耗设计大赛】slotg(01):Energia下的风火轮LED跑马灯
https://bbs.eeworld.com.cn/thread-450543-1-1.html
【TI首届低功耗设计大赛】slotg(02):CCS6下的风火轮LED跑马灯
https://bbs.eeworld.com.cn/thread-451185-1-1.html