CC3220学习笔记---点亮LED ROM API版

来源:互联网 发布:手机bobble是什么软件 编辑:程序博客网 时间:2024/05/13 11:24
上篇文章,花了很大的力气用直接访问内存的方式实现了跑马灯。那么在CC3220学习笔记---ROM Services这篇文章中,我们得知,TI公司为CC3220实现了一个外设驱动库driverlib API,专门用于此MUC的使用。此驱动库可在RAM中调用,也可在ROM中直接调用。那么今天我们就用驱动库的这两种调用方式直接实现跑马灯。

使用上篇文章创建工程的方式无法访问驱动库,搞半天也不得法。最后没办法,只能在现有工程基础上写程序了。这些细节以后有机会再弄清楚吧。

一、导入example项目【timerled】
在菜单中单击【Project】-->【Import CCS Projects】,单击【Browse】按钮,选择【C:\ti\simplelink_cc32xx_sdk_1_30_01_03\examples\rtos\CC3220SF_LAUNCHXL\drivers\timerled\tirtos\ccs】文件夹,然后单击【finish】按钮将timeled项目导入Project Explorer。

在Project Exploer中的【timerled】项目上点右键,选择【Copy】菜单,然后在Project Exploer空白处右键选择【Paste】菜单,在弹出的窗口中,填入新项目的名称“demo_gpio_lib”。点确定后,生成一个新的项目。

展开拷贝过来的项目,删!删!删!,最后剩下如下图所示文件:


打开【main_tirtos.c】文件,删除里面的代码,然后拷贝如下代码:

#include <ti/devices/cc32xx/inc/hw_memmap.h>#include <ti/devices/cc32xx/inc/hw_types.h>#include <ti/devices/cc32xx/driverlib/gpio.h>#include <ti/devices/cc32xx/driverlib/pin.h>#include <ti/devices/cc32xx/driverlib/prcm.h>void delay(int temp){    int i = 0;    for (i = 0; i < temp; i++);}int main(void){    //开启GPIOA1时钟    PRCMPeripheralClkEnable(PRCM_GPIOA1, PRCM_RUN_MODE_CLK);    //设置3个LED引脚为输出方向    GPIODirModeSet(GPIOA1_BASE, 0x0E, GPIO_DIR_MODE_OUT);    //配置3个LED引脚为GPIO,电流强度为2mA    PinTypeGPIO(PIN_64, PIN_MODE_0, false);    PinTypeGPIO(PIN_01, PIN_MODE_0, false);    PinTypeGPIO(PIN_02, PIN_MODE_0, false);    int flag = 2;    while(1)    {        //写GPIO        GPIOPinWrite(GPIOA1_BASE, 0x0E, flag);        flag = (flag == 8) ? 2 : flag << 1;        delay(0xfffff);    }}

编译,运行,跑马灯实现。这次时间调快了些。代码我就不细讲了,和寄存器版基本一样,只是拿库函数替代了寄存器的直接访问,这些函数也就是实现访问寄存器的功能。这个版本的代码访问的是RAM内的库函数。

下面来实现访问ROM内库函数版本的跑马灯,其实很简单,首先包含以下头文件:
#include <ti/devices/cc32xx/driverlib/rom.h>
#include <ti/devices/cc32xx/driverlib/rom_map.h>
然后给库函数加上“MAP_”前缀。
最终代码如下:
#include <ti/devices/cc32xx/inc/hw_memmap.h>#include <ti/devices/cc32xx/inc/hw_types.h>//这两行为新添加的头文件#include <ti/devices/cc32xx/driverlib/rom.h>#include <ti/devices/cc32xx/driverlib/rom_map.h>#include <ti/devices/cc32xx/driverlib/gpio.h>#include <ti/devices/cc32xx/driverlib/pin.h>#include <ti/devices/cc32xx/driverlib/prcm.h>void delay(int temp){    int i = 0;    for (i = 0; i < temp; i++);}int main(void){    //开启GPIOA1时钟    MAP_PRCMPeripheralClkEnable(PRCM_GPIOA1, PRCM_RUN_MODE_CLK);    //设置3个LED引脚为输出方向    MAP_GPIODirModeSet(GPIOA1_BASE, 0x0E, GPIO_DIR_MODE_OUT);    //配置3个LED引脚为GPIO,电流强度为2mA    MAP_PinTypeGPIO(PIN_64, PIN_MODE_0, false);    MAP_PinTypeGPIO(PIN_01, PIN_MODE_0, false);    MAP_PinTypeGPIO(PIN_02, PIN_MODE_0, false);    int flag = 2;    while(1)    {        //*((volatile unsigned long *)(0x40005000 + 0x038)) = flag;        MAP_GPIOPinWrite(GPIOA1_BASE, 0x0E, flag);        flag = (flag == 8) ? 2 : flag << 1;        delay(0xfffff);    }}
编译,运行。实现同样的功能。

0 0