3586|0

662

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【TI首届低功耗设计大赛】slotg(03):串口功能 - LED显示控制 [复制链接]

这一篇是 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 函数所需要的数据。


程序码:
  1. #include "driverlib.h"

  2. void main(void)
  3. {
  4.         // stop watchdog
  5.         WDT_A_hold(WDT_A_BASE);

  6.         GPIO_setAsOutputPin(GPIO_PORT_P4,GPIO_PIN6);    // LED1
  7.         GPIO_setAsOutputPin(GPIO_PORT_P1,GPIO_PIN0);    // LED2

  8.         GPIO_setOutputLowOnPin(GPIO_PORT_P4,GPIO_PIN6);
  9.         GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);

  10.         // LFXT Setup
  11.         //Set PJ.4 and PJ.5 as Primary Module Function Input.
  12.         /*

  13.          * Select Port J
  14.          * Set Pin 4, 5 to input Primary Module Function, LFXT.
  15.          */
  16.         GPIO_setAsPeripheralModuleFunctionInputPin(
  17.                 GPIO_PORT_PJ,
  18.                 GPIO_PIN4 + GPIO_PIN5,
  19.                 GPIO_PRIMARY_MODULE_FUNCTION
  20.                 );

  21.         //Set DCO frequency to 1 MHz
  22.         CS_setDCOFreq(CS_DCORSEL_0, CS_DCOFSEL_0);
  23.         //Set external clock frequency to 32.768 KHz
  24.         CS_setExternalClockSource(32768, 0);
  25.         //Set ACLK=LFXT
  26.         CS_clockSignalInit(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);
  27.         //Set SMCLK = DCO with frequency divider of 1
  28.         CS_clockSignalInit(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
  29.         //Set MCLK = DCO with frequency divider of 1
  30.         CS_clockSignalInit(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
  31.         //Start XT1 with no time out
  32.         CS_LFXTStart(CS_LFXTDRIVE_0);


  33.         // Configure UART pins
  34.         //Set P2.0 and P2.1 as Secondary Module Function Input.
  35.         /*

  36.          * Select Port 2d
  37.          * Set Pin 0, 1 to input Secondary Module Function, (UCA0TXD/UCA0SIMO, UCA0RXD/UCA0SOMI).
  38.          */
  39.         GPIO_setAsPeripheralModuleFunctionInputPin(
  40.                 GPIO_PORT_P2,
  41.                 GPIO_PIN0 + GPIO_PIN1,
  42.                 GPIO_SECONDARY_MODULE_FUNCTION
  43.                 );

  44.         /*
  45.          * Disable the GPIO power-on default high-impedance mode to activate
  46.          * previously configured port settings
  47.          */
  48.         PMM_unlockLPM5();

  49.         // Configure UART
  50.         if ( STATUS_FAIL == EUSCI_A_UART_initAdvance(EUSCI_A0_BASE,
  51.                                                      EUSCI_A_UART_CLOCKSOURCE_ACLK,
  52.                                                      3,
  53.                                                      0,
  54.                                                      146,
  55.                                                      EUSCI_A_UART_NO_PARITY,
  56.                                                      EUSCI_A_UART_LSB_FIRST,
  57.                                                      EUSCI_A_UART_ONE_STOP_BIT,
  58.                                                      EUSCI_A_UART_MODE,
  59.                                                      EUSCI_A_UART_LOW_FREQUENCY_BAUDRATE_GENERATION ))
  60.                 return;

  61.         EUSCI_A_UART_enable(EUSCI_A0_BASE);

  62.         EUSCI_A_UART_clearInterruptFlag(EUSCI_A0_BASE,
  63.                                         EUSCI_A_UART_RECEIVE_INTERRUPT);

  64.         // Enable USCI_A0 RX interrupt
  65.         EUSCI_A_UART_enableInterrupt(EUSCI_A0_BASE,
  66.                                      EUSCI_A_UART_RECEIVE_INTERRUPT); // Enable interrupt

  67.         __enable_interrupt();
  68. }
  69. //******************************************************************************
  70. //
  71. //This is the USCI_A0 interrupt vector service routine.
  72. //
  73. //******************************************************************************
  74. #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
  75. #pragma vector=USCI_A0_VECTOR
  76. __interrupt
  77. #elif defined(__GNUC__)
  78. __attribute__((interrupt(USCI_A0_VECTOR)))
  79. #endif
  80. void USCI_A0_ISR(void)
  81. {
  82.         uint8_t RXData;

  83.         switch (__even_in_range(UCA0IV, USCI_UART_UCTXCPTIFG)) {
  84.         case USCI_NONE: break;
  85.         case USCI_UART_UCRXIFG:
  86.                 RXData = EUSCI_A_UART_receiveData(EUSCI_A0_BASE);
  87.                 switch (RXData) {
  88.                 case '0':
  89.                     GPIO_setOutputLowOnPin(GPIO_PORT_P4,GPIO_PIN6); // LED1
  90.                     GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0); // LED2
  91.                     EUSCI_A_UART_transmitData (EUSCI_A0_BASE,RXData);
  92.                     break;
  93.                 case '1':
  94.                     GPIO_setOutputHighOnPin(GPIO_PORT_P4,GPIO_PIN6);
  95.                     GPIO_setOutputLowOnPin(GPIO_PORT_P1,GPIO_PIN0);
  96.                     EUSCI_A_UART_transmitData (EUSCI_A0_BASE,RXData);
  97.                     break;
  98.                 case '2':
  99.                     GPIO_setOutputLowOnPin(GPIO_PORT_P4,GPIO_PIN6);
  100.                     GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN0);
  101.                     EUSCI_A_UART_transmitData (EUSCI_A0_BASE,RXData);
  102.                     break;
  103.                 case '3':
  104.                     GPIO_setOutputHighOnPin(GPIO_PORT_P4,GPIO_PIN6);
  105.                     GPIO_setOutputHighOnPin(GPIO_PORT_P1,GPIO_PIN0);
  106.                     EUSCI_A_UART_transmitData (EUSCI_A0_BASE,RXData);
  107.                     break;
  108.                 default:
  109.                     EUSCI_A_UART_transmitData (EUSCI_A0_BASE,'?');
  110.                     break;
  111.                 }
  112.                 break;
  113.         case USCI_UART_UCTXIFG: break;
  114.         case USCI_UART_UCSTTIFG: break;
  115.         case USCI_UART_UCTXCPTIFG: break;
  116.         }
  117. }
复制代码

工程文件:
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


 
点赞 关注(2)

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表