CC26XX定时器以及按键中断
来源:互联网 发布:淘宝秋水兰熙旗舰店 编辑:程序博客网 时间:2024/06/05 12:00
一.按键中断
/****************************************************************************** @file board_key.c @brief This file contains the interface to the SRF06EB Key Service. Group: CMCU, SCS Target Device: CC2640R2 ****************************************************************************** Copyright (c) 2014-2017, Texas Instruments Incorporated All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of Texas Instruments Incorporated nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ****************************************************************************** Release Name: simplelink_cc2640r2_sdk_1_40_00_45 Release Date: 2017-07-20 17:16:59 *****************************************************************************//********************************************************************* * INCLUDES */#include <stdbool.h>#include <ti/sysbios/knl/Clock.h>#include <ti/sysbios/family/arm/m3/Hwi.h>#include <ti/sysbios/knl/Semaphore.h>#include <ti/sysbios/knl/Queue.h>#include <ti/drivers/pin/PINCC26XX.h>#ifdef USE_ICALL#include <icall.h>#endif#include <inc/hw_ints.h>#include "util.h"#include "board_key.h"#include "board.h"/********************************************************************* * TYPEDEFS *//********************************************************************* * LOCAL FUNCTIONS */static void Board_keyChangeHandler(UArg a0);static void Board_keyCallback(PIN_Handle hPin, PIN_Id pinId);/******************************************************************************* * EXTERNAL VARIABLES *//********************************************************************* * LOCAL VARIABLES */// Value of keys Pressedstatic uint8_t keysPressed;// Key debounce clockstatic Clock_Struct keyChangeClock;// Pointer to application callbackkeysPressedCB_t appKeyChangeHandler = NULL;// Memory for the GPIO module to construct a HwiHwi_Struct callbackHwiKeys;// PIN configuration structure to set all KEY pins as inputs with pullups enabledPIN_Config keyPinsCfg[] ={#if defined(CC2650_LAUNCHXL) || defined(CC2640R2_LAUNCHXL) || defined(CC1350_LAUNCHXL) Board_BTN1 | PIN_GPIO_OUTPUT_DIS | PIN_INPUT_EN | PIN_PULLUP, Board_BTN2 | PIN_GPIO_OUTPUT_DIS | PIN_INPUT_EN | PIN_PULLUP,#elif defined(CC2650DK_7ID) || defined(CC1350DK_7XD) Board_KEY_SELECT | PIN_GPIO_OUTPUT_DIS | PIN_INPUT_EN | PIN_PULLUP, Board_KEY_UP | PIN_GPIO_OUTPUT_DIS | PIN_INPUT_EN | PIN_PULLUP, Board_KEY_DOWN | PIN_GPIO_OUTPUT_DIS | PIN_INPUT_EN | PIN_PULLUP, Board_KEY_LEFT | PIN_GPIO_OUTPUT_DIS | PIN_INPUT_EN | PIN_PULLUP, Board_KEY_RIGHT | PIN_GPIO_OUTPUT_DIS | PIN_INPUT_EN | PIN_PULLUP,#endif PIN_TERMINATE};PIN_State keyPins;PIN_Handle hKeyPins;/********************************************************************* * PUBLIC FUNCTIONS *//********************************************************************* * @fn Board_initKeys * * @brief Enable interrupts for keys on GPIOs. * * @param appKeyCB - application key pressed callback * * @return none */void Board_initKeys(keysPressedCB_t appKeyCB){ // Initialize KEY pins. Enable int after callback registered hKeyPins = PIN_open(&keyPins, keyPinsCfg); PIN_registerIntCb(hKeyPins, Board_keyCallback);#if defined(CC2650_LAUNCHXL) || defined(CC2640R2_LAUNCHXL) || defined(CC1350_LAUNCHXL) PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_BTN1 | PIN_IRQ_NEGEDGE); PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_BTN2 | PIN_IRQ_NEGEDGE);#elif defined(CC2650DK_7ID) || defined(CC1350DK_7XD) PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_SELECT | PIN_IRQ_NEGEDGE); PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_UP | PIN_IRQ_NEGEDGE); PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_DOWN | PIN_IRQ_NEGEDGE); PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_LEFT | PIN_IRQ_NEGEDGE); PIN_setConfig(hKeyPins, PIN_BM_IRQ, Board_KEY_RIGHT | PIN_IRQ_NEGEDGE);#endif#ifdef POWER_SAVING //Enable wakeup#if defined(CC2650_LAUNCHXL) || defined(CC2640R2_LAUNCHXL) || defined(CC1350_LAUNCHXL) PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_BTN1 | PINCC26XX_WAKEUP_NEGEDGE); PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_BTN2 | PINCC26XX_WAKEUP_NEGEDGE);#elif defined(CC2650DK_7ID) || defined(CC1350DK_7XD) PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_SELECT | PINCC26XX_WAKEUP_NEGEDGE); PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_UP | PINCC26XX_WAKEUP_NEGEDGE); PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_DOWN | PINCC26XX_WAKEUP_NEGEDGE); PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_LEFT | PINCC26XX_WAKEUP_NEGEDGE); PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_RIGHT | PINCC26XX_WAKEUP_NEGEDGE);#endif#endif //POWER_SAVING // Setup keycallback for keys Util_constructClock(&keyChangeClock, Board_keyChangeHandler, KEY_DEBOUNCE_TIMEOUT, 0, false, 0); // Set the application callback appKeyChangeHandler = appKeyCB;}/********************************************************************* * @fn Board_keyCallback * * @brief Interrupt handler for Keys * * @param none * * @return none */static void Board_keyCallback(PIN_Handle hPin, PIN_Id pinId){ keysPressed = 0;#if defined(CC2650_LAUNCHXL) || defined(CC2640R2_LAUNCHXL) || defined(CC1350_LAUNCHXL) if ( PIN_getInputValue(Board_BTN1) == 0 ) { keysPressed |= KEY_LEFT; } if ( PIN_getInputValue(Board_BTN2) == 0 ) { keysPressed |= KEY_RIGHT; }#elif defined(CC2650DK_7ID) || defined(CC1350DK_7XD) if ( PIN_getInputValue(Board_KEY_SELECT) == 0 ) { keysPressed |= KEY_SELECT; } if ( PIN_getInputValue(Board_KEY_UP) == 0 ) { keysPressed |= KEY_UP; } if ( PIN_getInputValue(Board_KEY_DOWN) == 0 ) { keysPressed |= KEY_DOWN; } if ( PIN_getInputValue(Board_KEY_LEFT) == 0 ) { keysPressed |= KEY_LEFT; } if ( PIN_getInputValue(Board_KEY_RIGHT) == 0 ) { keysPressed |= KEY_RIGHT; }#endif Util_startClock(&keyChangeClock);}/********************************************************************* * @fn Board_keyChangeHandler * * @brief Handler for key change * * @param UArg a0 - ignored * * @return none */static void Board_keyChangeHandler(UArg a0){ if (appKeyChangeHandler != NULL) { // Notify the application (*appKeyChangeHandler)(keysPressed); }}/******************************************************************************************************************************************/
1.首先设置PIN属性keyPinsCfg:设置了输入使能,以及上拉
2.Board_initKeys中PIN_setConfig设置了下降沿触发。
#define PIN_IRQ_DIS (PIN_GEN|(0x0<<16)) ///< (*) Disable IRQ on pin#define PIN_IRQ_NEGEDGE (PIN_GEN|(0x5<<16)) ///< Enable IRQ on negative edge#define PIN_IRQ_POSEDGE (PIN_GEN|(0x6<<16)) ///< Enable IRQ on positive edge#define PIN_IRQ_BOTHEDGES (PIN_GEN|(0x7<<16)) ///< Enable IRQ on both edges3.Util_constructClock设置了回调函数。
4. PIN_registerIntCb(hKeyPins, Board_keyCallback);设置驱动层回调
5.应用回调:
appKeyChangeHandler = appKeyCB;
*6.如果开启了低功耗,需要设置为:
PIN_setConfig(hKeyPins, PINCC26XX_BM_WAKEUP, Board_KEY_RIGHT | PINCC26XX_WAKEUP_NEGEDGE);
二.定时器
定时器使用前必须由Util_constructClock()函数创建,其运行模式由该函数的参数指定。
1.三个选项介绍:
定时器周期
- #define SBP_PERIODIC_EVT_PERIOD1 500
- // Internal Events for RTOS application
- #define SBP_STATE_CHANGE_EVT 0x0001
一个定时器的数据结构
- static Clock_Struct periodicClock;
2.具体操作
- //初始化定时器
- Util_constructClock(&GUA_periodicClock, SimpleBLEPeripheral_clockHandler,
- SBP_GUA_PERIODIC_EVT_PERIOD, 0, false, SBP_GUA_PERIODIC_EVT);
- //启动定时器
- Util_startClock(&GUA_periodicClock);
void Util_stopClock(Clock_Struct *pClock) { Clock_Handle handle = Clock_handle(pClock); // Stop clock instance Clock_stop(handle); }
阅读全文
0 0
- CC26XX定时器以及按键中断
- 按键中断 定时器
- 按键中断 定时器中断的练习
- 按键消抖(定时器中断)
- CC26XX的RTOS定时器任务的建立。
- (驱动)(中断)(定时器)中断结合定时器完成按键消抖的驱动程序
- 按键中断
- 按键中断
- 按键 中断
- 按键中断
- 按键中断
- 定时器中断和按键中断控制dht11温湿度采集串口输出实验源码
- 中断-----按键中断驱动程序
- 基于中断的按键驱动以及其测试程序
- 定时器中断
- 定时器中断
- 定时器中断
- 中断定时器
- 网站自动登录功能(安全-代码简洁)的设计
- new delete operator new oprator delete operator new[] operator delete[] 详解
- Web性能压力测试工具——Siege详解
- (一)如何制作信息管理系统的注册页面
- LintCode:M-带重复元素的排列
- CC26XX定时器以及按键中断
- python连接mysql ---处理数据
- 进入不了o的erp登陆界面(记录日常)
- python 数据表格的合并和重塑--pd.concat
- 使用CSDN-markdown编辑器
- 智能小车23:检测电压模块实验
- Oracle学习笔记 读一致性(ORA-01555错误机制分析)及Undo表空间大小设置
- 人工智能爆发 中美AI芯片大比拼
- 算法与数据结构