文章目录

  • 前言
  • 一、导入gpiointerrupt工程
  • 二、主要文件功能
  • 三、代码解析
    • 1.main_tirtos.c
    • 2.gpiointerrupt.c
  • 四、实验现象
  • 总结
  • 参考

前言

gpiointerrupt例程使用2个按键控制2个LED灯的点亮。使用的外设如下:

  • Board_GPIO_LED0
  • Board_GPIO_LED1
  • Board_GPIO_BUTTON0- 切换Board_GPIO_LED0
  • Board_GPIO_BUTTON1- 切换Board_GPIO_LED1

LED和BUTTON对应的芯片引脚如下:

LED0 LED1 BUTTON0 BUTTON1
DIO6 DIO7 DIO13 DIO14

一、导入gpiointerrupt工程

点击CCS菜单“Project”-"import CCS Project ",在弹出的对话框中点击“Browse”选择gpiointerrupt 例程所在目录:“SDK安装目录\examples\rtos\CC2640R2_LAUNCHXL\drivers\gpiointerrupt”


导入gpiointerrupt工程成功后的界面

二、主要文件功能

  • CC2640R2_LAUNCHXL.h
    CC2640R2_LAUNCHXL板头文件,定义了板级资源和功能函数。
  • CC2640R2_LAUNCHXL.c
    CC2640R2_LAUNCHXL板的所有外设功能都在此文件中实现,包括GPIO、ADC等。
  • Board.h
    此文件将CC2640R2_LAUNCHXL.h定义的板级资源重新定义,方便将TIRTOS移植到其他类型的板。
  • gpiointerrupt.c
    获取按键BUTTON0、BUTTON1的状态,控制LED0、LED1的亮灭。
  • main_tirtos.c
    项目的主程序,负责板级初始化、创造线程、启动TI-RTOS。

三、代码解析

1.main_tirtos.c

main_tirtos.c主要实现三个功能:板级初始化、创造线程、启动TI-RTOS。

int main(void)
{pthread_t           thread;pthread_attr_t      attrs;struct sched_param  priParam;int                 retc;/* Call driver init functions */Board_init();//LAUNCHXL初始化/* Initialize the attributes structure with default values */pthread_attr_init(&attrs);//线程属性初始化/* Set priority, detach state, and stack size attributes */priParam.sched_priority = 1;//将结构体priParam的线程优先级赋值为1retc = pthread_attr_setschedparam(&attrs, &priParam);//设置线程优先级为1retc |= pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED);//设置线程为分离状态retc |= pthread_attr_setstacksize(&attrs, THREADSTACKSIZE);//设置线程堆栈大小if (retc != 0) {/* failed to set attributes */while (1) {}}retc = pthread_create(&thread, &attrs, mainThread, NULL);//创建线程if (retc != 0) {/* pthread_create() failed */while (1) {}}BIOS_start();//启动TI-RTOSreturn (0);
}

Board_init()调用的是CC2640R2_LAUNCHXL.c中的CC2640R2_LAUNCHXL_initGeneral(),将CC2640R2F的电源初始化和IO初始化、休眠外部FLASH。

extern void Board_initHook(void);/**  ======== CC2640R2_LAUNCHXL_initGeneral ========*/
void CC2640R2_LAUNCHXL_initGeneral(void)
{Power_init();//电源初始化if (PIN_init(BoardGpioInitTable) != PIN_SUCCESS) {/* Error with PIN_init */while (1);}//IO初始化/* Perform board-specific initialization */Board_initHook();//休眠外部FLASH
}/**  ======== Board_init ========*/
void Board_init(void)
{CC2640R2_LAUNCHXL_initGeneral();
}

BoardGpioInitTable中的IO配置如下:

    CC2640R2_LAUNCHXL_PIN_RLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,       /* LED initially off */CC2640R2_LAUNCHXL_PIN_GLED | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,       /* LED initially off */CC2640R2_LAUNCHXL_PIN_BTN1 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS,          /* Button is active low */CC2640R2_LAUNCHXL_PIN_BTN2 | PIN_INPUT_EN | PIN_PULLUP | PIN_IRQ_BOTHEDGES | PIN_HYSTERESIS,          /* Button is active low */CC2640R2_LAUNCHXL_SPI_FLASH_CS | PIN_GPIO_OUTPUT_EN | PIN_GPIO_HIGH | PIN_PUSHPULL | PIN_DRVSTR_MIN,  /* External flash chip select */CC2640R2_LAUNCHXL_UART_RX | PIN_INPUT_EN | PIN_PULLDOWN,                                              /* UART RX via debugger back channel */CC2640R2_LAUNCHXL_UART_TX | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL,                         /* UART TX via debugger back channel */CC2640R2_LAUNCHXL_SPI0_MOSI | PIN_INPUT_EN | PIN_PULLDOWN,                                            /* SPI master out - slave in */CC2640R2_LAUNCHXL_SPI0_MISO | PIN_INPUT_EN | PIN_PULLDOWN,                                            /* SPI master in - slave out */CC2640R2_LAUNCHXL_SPI0_CLK | PIN_INPUT_EN | PIN_PULLDOWN,                                             /* SPI clock */

2.gpiointerrupt.c

 *  ======== gpiointerrupt.c ========*/
#include <stdint.h>
#include <stddef.h>/* Driver Header files */
#include <ti/drivers/GPIO.h>/* Example/Board Header files */
#include "Board.h"/**  ======== gpioButtonFxn0 ========*  Callback function for the GPIO interrupt on Board_GPIO_BUTTON0.*/
void gpioButtonFxn0(uint_least8_t index)
{/* Clear the GPIO interrupt and toggle an LED */GPIO_toggle(Board_GPIO_LED0);
}/**  ======== gpioButtonFxn1 ========*  Callback function for the GPIO interrupt on Board_GPIO_BUTTON1.*  This may not be used for all boards.*/
void gpioButtonFxn1(uint_least8_t index)
{/* Clear the GPIO interrupt and toggle an LED */GPIO_toggle(Board_GPIO_LED1);
}/**  ======== mainThread ========*/
void *mainThread(void *arg0)
{/* Call driver init functions */GPIO_init();//初始化GPIO/* Configure the LED and button pins */GPIO_setConfig(Board_GPIO_LED0, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);//配置与LED0相连的GPIO为输出模式、输出状态为低。GPIO_setConfig(Board_GPIO_LED1, GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);//配置与LED1相连的GPIO为输出模式、输出状态为低。GPIO_setConfig(Board_GPIO_BUTTON0, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);//配置与BUTTON0相连的GPIO为输入上拉模式、下降沿触发中断。/* Turn on user LED */GPIO_write(Board_GPIO_LED0, Board_GPIO_LED_ON);//点亮LED0/* install Button callback */GPIO_setCallback(Board_GPIO_BUTTON0, gpioButtonFxn0);//设置按键回调/* Enable interrupts */GPIO_enableInt(Board_GPIO_BUTTON0);//使能BUTTON0中断/**  If more than one input pin is available for your device, interrupts*  will be enabled on Board_GPIO_BUTTON1.*/if (Board_GPIO_BUTTON0 != Board_GPIO_BUTTON1) {/* Configure BUTTON1 pin */GPIO_setConfig(Board_GPIO_BUTTON1, GPIO_CFG_IN_PU | GPIO_CFG_IN_INT_FALLING);/* Install Button callback */GPIO_setCallback(Board_GPIO_BUTTON1, gpioButtonFxn1);GPIO_enableInt(Board_GPIO_BUTTON1);}return (NULL);
}

四、实验现象

运行gpiointerrupt例程,按下BUTTON0,红色LED0将会点亮或熄灭;按下BUTTON1,绿色LED1将会点亮或熄灭。

总结

在gpiointerrupt例程中能够获得的主要知识结构如下:

  • 线程的创建
  • GPIO的配置
  • GPIO中断的使用

参考

CC2640驱动API

CC2640R2F学习笔记(二.gpiointerrupt例程解析)相关推荐

  1. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

  2. CC2640R2F学习笔记(一.开发环境)

    文章目录 前言 一.硬件 二.操作系统 三.SDK 四.CCS 前言 以下列出CC2640R2F学习笔记所基于的软.硬件平台,笔记的所有实验.代码都是在这些平台上来进行的. 一.硬件 开发板LAUNC ...

  3. motan学习笔记 二 motan架构分析

    motan学习笔记 一 微博轻量级RPC框架Motan motan学习笔记 二 motan架构分析 motan学习笔记 三 motan Demo 分析 motan学习笔记 四 motan Demo 之 ...

  4. Colly 学习笔记(二)——爬虫框架,抓取下载数据(上证A股数据下载)

    Colly 学习笔记(二)--爬虫框架,抓取下载数据(上证A股数据下载) Colly 学习笔记(一)--爬虫框架,抓取中金公司行业市盈率数据 Colly 学习笔记(二)--爬虫框架,抓取下载数据(上证 ...

  5. Netty学习笔记二网络编程

    Netty学习笔记二 二. 网络编程 1. 阻塞模式 阻塞主要表现为: 连接时阻塞 读取数据时阻塞 缺点: 阻塞单线程在没有连接时会阻塞等待连接的到达,连接到了以后,要进行读取数据,如果没有数据,还要 ...

  6. wxpython应用程序对象与顶级窗口_wxPython学习笔记(二)

    如何创建和使用一个应用程序对象? 任何wxPython应用程序都需要一个应用程序对象.这个应用程序对象必须是类wx.App或其定制的子类的一个实例.应用程序对象的主要目的是管理幕后的主事件循环. 父类 ...

  7. ES6学习笔记二arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  8. springmvc学习笔记二:重定向,拦截器,参数绑定

    springmvc学习笔记二:重定向,拦截器,参数绑定 Controller方法返回值 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加mo ...

  9. qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)

    原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...

最新文章

  1. OI基础系列之最大子数组问题
  2. POJ - 3538 - Domestic Networks
  3. 第九课.朴素贝叶斯分类器
  4. 大多数Web浏览器中都可以使用PUT,DELETE,HEAD等方法吗?
  5. swoole websocket服务
  6. CVPR 2022 | GeoTransformer:基于Transformer的点云配准网络
  7. hdu 1874 Dijkstra算法模板
  8. WinDbg配置与下载
  9. Jmeter当获取正则表达式匹配数字为负数时获取所有匹配的值
  10. 处理api返回的数据_API 乐队指挥家,网关服务正式上线
  11. centos 下安装配置nfs服务器
  12. python中奖号_Python分析彩票记录并预测中奖号码过程详解
  13. 网页自动加拼音html,HTML5给汉字加拼音收起展开组件的实现代码
  14. 来了 | Python 官方发布整套中文PDF文档(共27本)
  15. 鲸探发布点评:8月22日发售《孔子圣迹图》系列数字藏品
  16. 汽车电子(一)--- 整车CAN网络介绍
  17. C语言输入10名同学3门课,输入10个学生3门课的成绩,统计各科全部及格的人数(c语音)...
  18. cada0图纸框_按1:1画图后如何出A0图纸图框怎么设置?
  19. python snmp-cmds get示例
  20. 安卓期末大作业——图书信息管理系统

热门文章

  1. 中国游戏行业市场分析(一)关于国内游戏制作的问题
  2. X3D: Expanding Architectures for Efficient Video Recognition个人论文笔记
  3. 什么是 VRML 和 X3D
  4. 国耀明医互联网医院:生活的烦恼谁来倾听!
  5. 从《福布斯》发布的2011年度的全球富豪榜中看到:中国太需要“互联网精神”
  6. 陕西广播电视大学计算机应用基础试题,计算机应用基础试题详解之计算机硬件...
  7. 天下手游获取服务器信息,天下手游如何冲全服务器第一等级 冲级套路分享
  8. 云服务器8M公网带宽下载速度分析
  9. 大数据时代之2013
  10. 嵌入式Linux移植littlevgl7,安富莱V6移植littlevgl的前因后果,附移植好的工程(未优化)...