原料:TI CC2650 Sensortag
开发环境:Code Composer Studio v8
驱动版本:tirtos_cc13xx_cc26xx_2_20_01_08, ble_sdk_2_02_01_18
工程:Simple_peripheral_cc2650stk_app
1. 打开simple_peripheral.c,导入PIN引脚驱动文件:
#include <ti/drivers/pin/PINCC26xx.h>
2. 声明pin引脚设置和状态,以及simple_peripheral任务调用的Handler.
static PIN_Config SBP_configTable[] =
{ Board_LED1 | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
Board_BUTTON0 | PIN_INPUT_EN | PIN_PULLUP | PIN_HYSTERESIS, PIN_TERMINATE };
static PIN_State sbpPins;
static PIN_Handle hSbpPins;
static uint8_t LED_value = 0;
注意到Board_LED1和Board_BUTTON1都已经在Board.h头文件中定义好,Board_LED1对应原理图中的LED1(红色LED),而Board_BUTTON0对应于原理图中的BUTTON2,都指向于IOID_0
/* These #defines allow us to reuse TI-RTOS across other device families */
#define Board_LED1 Board_STK_LED1
#define Board_LED2 Board_STK_LED2#define Board_BUTTON0 Board_KEY_LEFT
#define Board_BUTTON1 Board_KEY_RIGHT
在CC2650STK.h中:
/* Discrete outputs */
#define Board_STK_LED1 IOID_10
#define Board_STK_LED2 IOID_15
#define Board_BUZZER IOID_21
#define Board_LED_ON 1
#define Board_LED_OFF 0
#define Board_BUZZER_ON 1
#define Board_BUZZER_OFF 0/* Discrete inputs */
#define Board_KEY_LEFT IOID_0
#define Board_KEY_RIGHT IOID_4
#define Board_RELAY IOID_3
在原理图中:
3. 声明硬中断的中断应用程序(ISR).
static void buttonHwiFxn(PIN_Handle hPin, PIN_Id pinId);
static void buttonHwiFxn(PIN_Handle hPin, PIN_Id pinId) {
//set event in SBP task to process outside of hwi context events |= SBP_BTN_EVT;
//wake up the application
Semaphore_post(sem); }
中断程序将在程序任务中设置事件,并适时唤醒它以降低硬中断的资源处理量
4. 在simple_peripheral_taskFxn()中定义事件和相关处理来自以上中断程序的事件.
#define SBP_BTN_EVT
if (events & SBP_BTN_EVT)
{ events &= ~SBP_BTN_EVT;//clear event
//toggle LED1
if (LED_value) { PIN_setOutputValue(hSbpPins, Board_LED1 , LED_value--); }
else { PIN_setOutputValue(hSbpPins, Board_LED1, LED_value++); } }
5. 打开pins,在simple_peripheral_init()设置中断.
// Open pin structure for use
hSbpPins = PIN_open(&sbpPins, SBP_configTable);
// Register ISR
PIN_registerIntCb(hSbpPins, buttonHwiFxn);
// Configure interrupt
PIN_setConfig(hSbpPins, PIN_BM_IRQ, Board_KEY_UP | PIN_IRQ_NEGEDGE);
// Enable wakeup
PIN_setConfig(hSbpPins, PINCC26XX_BM_WaKEUP, Board_KEY_UP|PINCC26XX_WAKEUP_NEGEDGE);
编译、下载并运行以上程序。
试验结果:
按下左键(SW2)红色LED指示灯亮,再次按下时LED熄灭,试验成功