主题中讨论的其他器件: TMP116
工具/软件:Code Composer Studio
您好!
我想测试多个 GPIO 输入中断、但我存在冻结问题。 我在"CC3220SF_SKB.c"、"CC3220SF_SKB.h"和"SKB_Board.h"库文件上设置引脚定义。 当我启动程序时、我只能看到 Input1 (GPIO-28)、 INPUT2 (GPIO-22)、 INPUT4 (GPIO-7)、 INPUT5 (GPIO-8) 回调函 数的消息、但在一段时间后、程序被冻结、我无法通过调试(UART0)从任何回调函数中获得任何应答。
另一方面、我无法从其他输入(INPUT3、INPUT6、INPUT7、INPUT8、INPUT9) 回调函数读取消息。 这些无法正常工作的输入是否存在配置错误? 为什么无法 激活这些输入的回调函数?
注意: 我将所有输入配置为 GPIO_CFG_IN_pu (内部上拉)和 GPIO_CFG_IN_INT_FALLING (中断在下降沿激活)。
(二 主代码 *********
/*
*==== gpiointerrupt.c ====
*
#include
#include
/*驱动程序头文件*/
#include
#include
#include
/*示例/板头文件*/
#include "SSKB_Board.h"
静态 Display_Handle hSerial;
/*
*==== gpioButtonFxn0 ===
* Input1上 GPIO 中断的回调函数。
*
void gpioButtonFxn0 (uint_least8_t 索引)
{
/*清除 GPIO 中断并切换 LED */
GPIO_TOGGLE (Output1);
Display_printf (hSerial、0、0、"*** GPIO-28输入***\n");// UART-0发送 YAPILIYOR
}
/*
*==== gpioButtonFxn1 =========
* Input2上 GPIO 中断的回调函数。
*并非所有电路板都使用此功能。
*
void gpioButtonFxn1 (uint_least8_t 索引)
{
/*清除 GPIO 中断并切换 LED */
GPIO_TOGGLE (Output1);
Display_printf (hSerial、0、0、"*** GPIO-22输入***\n");// UART-0发送 YAPILIYOR
}
/*
*==== gpioButtonFxn2 =========
* Input3上 GPIO 中断的回调函数。
*并非所有电路板都使用此功能。
*
void gpioButtonFxn2 (uint_least8_t 索引)
{
/*清除 GPIO 中断并切换 LED */
GPIO_TOGGLE (Output1);
Display_printf (hSerial、0、0、"*** GPIO-5输入***\n");// UART-0发送 YAPILIYOR
}
/*
*==== gpioButtonFxn3 ===
* Input4上 GPIO 中断的回调函数。
*并非所有电路板都使用此功能。
*
void gpioButtonFxn3 (uint_least8_t 索引)
{
/*清除 GPIO 中断并切换 LED */
GPIO_TOGGLE (Output1);
Display_printf (hSerial、0、0、"*** GPIO-7输入***\n");// UART-0发送 YAPILIYOR
}
/*
*==== gpioButtonFxn4 ===
* Input5上 GPIO 中断的回调函数。
*并非所有电路板都使用此功能。
*
void gpioButtonFxn4 (uint_least8_t 索引)
{
/*清除 GPIO 中断并切换 LED */
GPIO_TOGGLE (Output1);
Display_printf (hSerial、0、0、"*** GPIO-8输入***\n");// UART-0发送 YAPILIYOR
}
/*
*==== gpioButtonFxn5 ===
* Input6上 GPIO 中断的回调函数。
*并非所有电路板都使用此功能。
*
void gpioButtonFxn5 (uint_least8_t 索引)
{
/*清除 GPIO 中断并切换 LED */
GPIO_TOGGLE (Output1);
Display_printf (hSerial、0、0、"*** GPIO-9输入***\n");// UART-0发送 YAPILIYOR
}
/*
*==== gpioButtonFxn6 ===
* Input7上 GPIO 中断的回调函数。
*并非所有电路板都使用此功能。
*
void gpioButtonFxn6 (uint_least8_t 索引)
{
/*清除 GPIO 中断并切换 LED */
GPIO_TOGGLE (Output1);
Display_printf (hSerial、0、0、"*** GPIO-3输入***\n");// UART-0发送 YAPILIYOR
}
/*
*==== gpioButtonFxn7 =========
* Input8上 GPIO 中断的回调函数。
*并非所有电路板都使用此功能。
*
void gpioButtonFxn7 (uint_least8_t 索引)
{
/*清除 GPIO 中断并切换 LED */
GPIO_TOGGLE (Output1);
Display_printf (hSerial、0、0、"*** GPIO-4输入***\n");// UART-0发送 YAPILIYOR
}
/*
*==== gpioButtonFxn8 =========
* Input9上 GPIO 中断的回调函数。
*并非所有电路板都使用此功能。
*
void gpioButtonFxn8 (uint_least8_t 索引)
{
/*清除 GPIO 中断并切换 LED */
GPIO_TOGGLE (Output1);
Display_printf (hSerial、0、0、"*** GPIO-30输入***\n");// UART-0发送 YAPILIYOR
}
/*
*==== mainThread ====
*
void * mainThread (void * arg0)
{
/*调用驱动程序初始化函数*/
GPIO_init();
display_init();
/*打开主机显示屏以输出*/
hSerial = Display_open (Display_Type_UART、NULL);
if (hSerial == NULL){
while (1);
}
Display_printf (hSerial、0、0、"*** GPIO 中断测试***\n");// UART-0发送 YAPILIYOR
/*配置 LED 和按钮引脚*/
GPIO_setConfig (Output1、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_setConfig (Input1、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig (Input2、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig (Input3、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig (Input4、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig (Input5、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig (Input6、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig (Input7、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig (Input8、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING);
GPIO_setConfig (Input9、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING);
/*打开用户 LED */
GPIO_WRITE (Output1、Board_GPIO_ON);
/*安装按钮回调*/
GPIO_setCallback (Input1、gpioButtonFxn0);
GPIO_setCallback (Input2、gpioButtonFxn1);
GPIO_setCallback (Input3、gpioButtonFxn2);
GPIO_setCallback (Input4、gpioButtonFxn3);
GPIO_setCallback (Input5、gpioButtonFxn4);
GPIO_setCallback (Input6、gpioButtonFxn5);
GPIO_setCallback (Input7、gpioButtonFxn6);
GPIO_setCallback (Input8、gpioButtonFxn7);
GPIO_setCallback (Input9、gpioButtonFxn8);
/*启用中断*/
GPIO_enableInt (Input1);
GPIO_enableInt (Input2);
GPIO_enableInt (Input3);
GPIO_enableInt (Input4);
GPIO_enableInt (Input5);
GPIO_enableInt (Input6);
GPIO_enableInt (Input7);
GPIO_enableInt (Input8);
GPIO_enableInt (Input9);
while (1);
//返回(NULL);
}
(二 SKB_BOARD.h
#ifndef __Board_H
#define __Board_H
#define Board_CC3220SF_LAUNCHXL
#ifdef __cplusplus
extern "C"{
#endif
#include
#define Board_initGeneral() Board_init()/*已弃用*/
#include "CC3220SF_SKB.h"
#define ADC0 CC3220SF_ADC0
//#define Board_CAPTURE0 CC3220SF_LAUNCHXL_CAPTURE0
//#define Board_CAPTURE1 CC3220SF_LAUNCHXL_CAPTURE1
//#define Board_CRYPTO0 CC3220SF_LAUNCHXL_CRYPTO0
#define Board_GPIO_on CC3220SF_GPIO_on
#define Board_GPIO_off CC3220SF_GPIO_off
#define Output1 CC3220SF_GPIO_OUT_9 // PIN-64 -红色 LED
#define output2 CC3220SF_GPIO_OUT_17 // PIN-8
#define Output3 CC3220SF_GPIO_OUT_22 // PIN-15
#define Output4 CC3220SF_GPIO_OUT_25 // PIN-21
#define Input1 CC3220SF_GPIO_IN_28 // PIN-18
#define Input2 CC3220SF_GPIO_IN_22 // PIN-15
#define Input3 CC3220SF_GPIO_IN_5 // PIN-60
#define Input4 CC3220SF_GPIO_IN_7 // PIN-62
#define Input5 CC3220SF_GPIO_IN_8 // PIN-63
#define Input6 CC3220SF_GPIO_IN_9 // PIN-64
#define Input7 CC3220SF_GPIO_IN_3 // PIN-58
#define Input8 CC3220SF_GPIO_IN_4 // PIN-59
#define Input9 CC3220SF_GPIO_IN_30 // PIN-53
#define Board_GPIO_TMP116_EN CC3220SF_LAUNCHXL_GPIO_TMP116_EN
#define I2C0 CC3220SF_LAUNCHXL_I2C0
//#define Board_I2S0 CC3220SF_LAUNCHXL_I2S0
/* CC3220SF_LAUNCHXL_SPI0为 NWP 保留*/
#define Board_SPI0 CC3220SF_LAUNCHXL_SPI1
#define BOARD_SPI_MASTER CC3220SF_LAUNCHXL_SPI1
#define Board_SPI_SLAVE CC3220SF_LAUNCHXL_SPI1
#define DEBUG_UART CC3220SF_UART0
#define IMU_UART CC3220SF_UART1
#define Board_WATCHDOG0 CC3220SF_LAUNCHXL_WATCHDOG0
/*特定于电路板的 I2C 地址*/
#define Board_TMP006_ADDR (0x41)
#define Board_I2C_TMP006_ADDR Board_TMP006_ADDR
#ifdef __cplusplus
}
#endif
#endif /*__Board_H */
e2e.ti.com/.../GPIO_5F00_INPUT_5F00_INTERRUPT_5F00_TEST_5F00_CCS.rar