[原创] 【TI首届低功耗设计大赛】+ MSP430外设驱动库

azhiking   2015-1-5 22:27 楼主
熟悉TI Cortex M3/M4的朋友们对于其Driverlib一定印象深刻。很中肯的说,TI在M3/M4系列MCU上编写的Driverlib非常棒,大部分应用,你无须把大部分精力再纠结于寄存器的设置上,也不用拘泥于硬件的细节, 而是利用驱动程序库可以快速的开发系统相关的应用。 非常棒的是MSP430也提供了相似的外设驱动库。尽管像G系列的MCU只有区区若干寄存器,即使完全对寄 存器进行操作来编写应用也不是不可行的事情,但是,从软件的后期维护如代码的升级,移植等等考虑, 采用驱动库是更为明智的选择。而且像高端的430系列,外设繁多,功能复杂,再靠读写寄存器的方式进行 代码编写——虽然可行——绝不推荐! 驱动库中也提供了大量的例程,即便你对硬件不太熟悉,抑或大致了解,也可以通过驱动库中提供的例程, 快速的开发出合适的代码进行评估。 而且驱动库中针对不同的IDE环境,提供了不同的例程,像大家常用的IAR,CCS等都可以很好的支持。 我们先看看TI驱动库用户指南中的介绍: driverlib 0.PNG 使用起来非常便利,我觉得花点时间学习使用驱动库,对于后期的开发绝对大有裨益!! 详细的介绍就不在赘述了,因为TI提供的文档非常全: TI不仅提供了PDF的驱动库用户指南,也提供了在线的API使用指南,针对MSP430FR5XX_6XX的API指南 可以再这里查看到 http://software-dl.ti.com/msp430 ... html/annotated.html 附件中上传一个用户指南:
MSP430FR5xx_6xx_DriverLib_Users_Guide-1_97_00_19.pdf (2.4 MB)
(下载次数: 76, 2015-1-5 22:24 上传)
驱动库的下载: http://software-dl.ti.com/msp430 ... rlib_1_97_00_19.zip 本帖最后由 azhiking 于 2015-1-5 22:27 编辑

回复评论 (2)


利用外设驱动库写的代码:
  1. UWORD BSP_SysClock_Init(void)
  2. {
  3.      /* Select Port J
  4.      * Set Pin 4, 5 to input Primary Module Function, LFXT.
  5.      */
  6.     GPIO_setAsPeripheralModuleFunctionInputPin(
  7.         GPIO_PORT_PJ,
  8.         GPIO_PIN4 + GPIO_PIN5,
  9.         GPIO_PRIMARY_MODULE_FUNCTION
  10.         );

  11.     // Set DCO frequency to 1 MHz
  12.     CS_setDCOFreq(CS_DCORSEL_0, CS_DCOFSEL_6);
  13.     //Set external clock frequency to 32.768 KHz
  14.     CS_setExternalClockSource(32768, 0);
  15.     //Set ACLK=LFXT
  16.     CS_clockSignalInit(CS_ACLK, CS_LFXTCLK_SELECT, CS_CLOCK_DIVIDER_1);
  17.     // Set SMCLK = DCO with frequency divider of 1
  18.     CS_clockSignalInit(CS_SMCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
  19.     // Set MCLK = DCO with frequency divider of 1
  20.     CS_clockSignalInit(CS_MCLK, CS_DCOCLK_SELECT, CS_CLOCK_DIVIDER_1);
  21.     //Start XT1 with no time out
  22.     CS_LFXTStart(CS_LFXTDRIVE_0);

  23.     return SYS_NO_ERROR;
  24. }
  1. UWORD BSP_SPI_Init(void)
  2. {
  3.     //!    P1.6|-> Data Out (UCB0SIMO)
  4.     //!    P1.7|<- Data In (UCB0SOMI)
  5.     //!    P2.2|-> Serial Clock Out (UCB0CLK)

  6.     /*
  7.      * Select Port 2
  8.      * Set Pin 2 to input Secondary Module Function, (UCB0CLK).
  9.      */
  10.     GPIO_setAsPeripheralModuleFunctionOutputPin(
  11.         GPIO_PORT_P2,
  12.         GPIO_PIN2,
  13.         GPIO_SECONDARY_MODULE_FUNCTION
  14.         );
  15.         
  16.     // Configure Pins for UCB0TXD/UCB0SIMO, UCB0RXD/UCB0SOMI
  17.     //Set P1.6, P1.7 as Secondary Module Function Input.

  18.     /*
  19.      * Select Port 1
  20.      * Set Pin 6, 7 to input Secondary Module Function, (UCB0TXD/UCB0SIMO, UCB0RXD/UCB0SOMI).
  21.      */
  22.     GPIO_setAsPeripheralModuleFunctionInputPin(
  23.         GPIO_PORT_P1,
  24.         GPIO_PIN6 + GPIO_PIN7,
  25.         GPIO_SECONDARY_MODULE_FUNCTION
  26.         );

  27.     /*
  28.      * Disable the GPIO power-on default high-impedance mode to activate
  29.      * previously configured port settings
  30.      */
  31.     PMM_unlockLPM5();

  32.     //Initialize Master
  33.     EUSCI_B_SPI_initMasterParam param = {0};
  34.     param.selectClockSource = EUSCI_B_SPI_CLOCKSOURCE_SMCLK;
  35.     param.clockSourceFrequency = CS_getSMCLK();
  36.     param.desiredSpiClock = 5000000;
  37.     param.msbFirst = EUSCI_B_SPI_MSB_FIRST;
  38.     param.clockPhase = EUSCI_B_SPI_PHASE_DATA_CHANGED_ONFIRST_CAPTURED_ON_NEXT;
  39.     param.clockPolarity = EUSCI_B_SPI_CLOCKPOLARITY_INACTIVITY_HIGH;
  40.     param.spiMode = EUSCI_B_SPI_3PIN;
  41.     EUSCI_B_SPI_initMaster(EUSCI_B0_BASE, ¶m);

  42.     //Enable SPI module
  43.     EUSCI_B_SPI_enable(EUSCI_B0_BASE);

  44.     EUSCI_B_SPI_clearInterruptFlag(EUSCI_B0_BASE,
  45.                                    EUSCI_B_SPI_RECEIVE_INTERRUPT
  46.                                    );   
  47.     return SYS_NO_ERROR;
  48. }


点赞  2015-1-6 00:14
赞一个!
点赞  2015-1-7 15:48
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复