CC2640R2F学习笔记(二.gpiointerrupt例程解析)
文章目录
- 前言
- 一、导入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例程解析)相关推荐
- amazeui学习笔记二(进阶开发4)--JavaScript规范Rules
amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...
- CC2640R2F学习笔记(一.开发环境)
文章目录 前言 一.硬件 二.操作系统 三.SDK 四.CCS 前言 以下列出CC2640R2F学习笔记所基于的软.硬件平台,笔记的所有实验.代码都是在这些平台上来进行的. 一.硬件 开发板LAUNC ...
- motan学习笔记 二 motan架构分析
motan学习笔记 一 微博轻量级RPC框架Motan motan学习笔记 二 motan架构分析 motan学习笔记 三 motan Demo 分析 motan学习笔记 四 motan Demo 之 ...
- Colly 学习笔记(二)——爬虫框架,抓取下载数据(上证A股数据下载)
Colly 学习笔记(二)--爬虫框架,抓取下载数据(上证A股数据下载) Colly 学习笔记(一)--爬虫框架,抓取中金公司行业市盈率数据 Colly 学习笔记(二)--爬虫框架,抓取下载数据(上证 ...
- Netty学习笔记二网络编程
Netty学习笔记二 二. 网络编程 1. 阻塞模式 阻塞主要表现为: 连接时阻塞 读取数据时阻塞 缺点: 阻塞单线程在没有连接时会阻塞等待连接的到达,连接到了以后,要进行读取数据,如果没有数据,还要 ...
- wxpython应用程序对象与顶级窗口_wxPython学习笔记(二)
如何创建和使用一个应用程序对象? 任何wxPython应用程序都需要一个应用程序对象.这个应用程序对象必须是类wx.App或其定制的子类的一个实例.应用程序对象的主要目的是管理幕后的主事件循环. 父类 ...
- ES6学习笔记二arrow functions 箭头函数、template string、destructuring
接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...
- springmvc学习笔记二:重定向,拦截器,参数绑定
springmvc学习笔记二:重定向,拦截器,参数绑定 Controller方法返回值 返回ModelAndView controller方法中定义ModelAndView对象并返回,对象中可添加mo ...
- qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
原博主博客地址:http://blog.csdn.net/qq21497936 本文章博客地址:http://blog.csdn.net/qq21497936/article/details/7851 ...
最新文章
- OI基础系列之最大子数组问题
- POJ - 3538 - Domestic Networks
- 第九课.朴素贝叶斯分类器
- 大多数Web浏览器中都可以使用PUT,DELETE,HEAD等方法吗?
- swoole websocket服务
- CVPR 2022 | GeoTransformer:基于Transformer的点云配准网络
- hdu 1874 Dijkstra算法模板
- WinDbg配置与下载
- Jmeter当获取正则表达式匹配数字为负数时获取所有匹配的值
- 处理api返回的数据_API 乐队指挥家,网关服务正式上线
- centos 下安装配置nfs服务器
- python中奖号_Python分析彩票记录并预测中奖号码过程详解
- 网页自动加拼音html,HTML5给汉字加拼音收起展开组件的实现代码
- 来了 | Python 官方发布整套中文PDF文档(共27本)
- 鲸探发布点评:8月22日发售《孔子圣迹图》系列数字藏品
- 汽车电子(一)--- 整车CAN网络介绍
- C语言输入10名同学3门课,输入10个学生3门课的成绩,统计各科全部及格的人数(c语音)...
- cada0图纸框_按1:1画图后如何出A0图纸图框怎么设置?
- python snmp-cmds get示例
- 安卓期末大作业——图书信息管理系统
热门文章
- 中国游戏行业市场分析(一)关于国内游戏制作的问题
- X3D: Expanding Architectures for Efficient Video Recognition个人论文笔记
- 什么是 VRML 和 X3D
- 国耀明医互联网医院:生活的烦恼谁来倾听!
- 从《福布斯》发布的2011年度的全球富豪榜中看到:中国太需要“互联网精神”
- 陕西广播电视大学计算机应用基础试题,计算机应用基础试题详解之计算机硬件...
- 天下手游获取服务器信息,天下手游如何冲全服务器第一等级 冲级套路分享
- 云服务器8M公网带宽下载速度分析
- 大数据时代之2013
- 嵌入式Linux移植littlevgl7,安富莱V6移植littlevgl的前因后果,附移植好的工程(未优化)...