Thread 中讨论的其他器件: SYSBIOS
您好!
我在 msp430fr5994的端口 P8上遇到一个奇怪的行为。
我已将 GPIO P8.2和 GPIO P8.1配置为中断源。 我在引脚上连接了两个带有外部上拉电阻器的按钮。
当我按下连接到 P8.2的按钮时、一切工作正常。
当我按下连接到 P8.1的按钮时、首先触发与 P8.1关联的中断、然后触发与 P8.2关联的中断(我调试了两个事件的精确振铃)。
我使用按下 P.8.2时应切换的绿色 LED 指示灯和 按下 P8.1时应切换的黄色 LED 指示灯
我看到、每次按下连接到 P8.2的按钮时、只有绿色 LED 会改变状态、但当我按下连接到 P8.1的按钮时、黄色 LED 会改变状态、随后是绿色 LED。
我正在使用 TI-RTOS 2.2.0、我刚刚创建了与两个回调相连的 Tow HWI、这两个回调会将事件发布到任务。
在 main.c 中
GPIO_setCallback (button_power、gpioButtonPowerInt);// P8.2
GPIO_setCallback (button_sample、gpioButtonSampleInt);// P8.1
/*启用按钮中断*/
GPIO_enableInt (button_power);
GPIO_enableInt (button_sample);
/*启动 BIOS */
BIOS_start();
在 buttons.c (中断回调)中
void gpioButtonPowerInt (无符号 int 索引)
{
if (index=button_power){
GPIO_clearInt (button_power);
EVENT_POST (btnEvent、Event_ButtonPower);
}
}
void gpioButtonSampleInt (无符号 int 索引)
{
if (index=button_sample){
GPIO_clearInt (button_sample);
EVENT_POST (btnEvent、Event_ButtonSample);
}
}
在 LED.c (任务)中
void LED (void){
UINT evt;
int 键;
while (1){
evt = Event_pend (btnEvent、0、Event_ButtonPower |
EVENT_ButtonSample | Event_Button0 | Event_Button1、BIOS_Wait_Forever);
switch (evt){
案例 Event_ButtonPower:
GPIO_disableInt (button_power);
GPIO_TOGGLE (LED_GREEN);
Task_sleep (600);//去抖
GPIO_enableInt (button_power);
中断;
案例 Event_ButtonSample:
GPIO_disableInt (button_sample);
GPIO_TOGGLE (LED_Yellow);
Task_sleep (600);//去抖
GPIO_enableInt (button_sample);
中断;
}
}
}
在我的.cfg 中
var hwi0Params = new halHwi.Params();
hwi0Params.arg = 8;
hwi0Params.instance.name ="hwi0H";
hwi0Params.maskSetting = XDC.MODULE ("ti.sysbios.interfaces.IHwi").MaskingOption_ALL;
program.global.hwi0H = halHwi.create (19、"&GPIO_hwiIntFxn"、hwi0Params);
var hw1Params = new halHwi.Params();
hw1Params.arg = 5;
hw1Params.instance.name ="hw1H";
hw1Params.maskSetting = xdc.module ("ti.sysbios.interfaces.IHwi").MaskingOption_ALL;
program.global.hw1H = halHwi.create (27、"&GPIO_hwiIntFxn"、hw1Params);
var event0Params = new Event.Params();
event0Params.instance.name ="btnEvent";
program.global.btnEvent = Event.create (event0Params);
VAR task1Params = new Task.Params();
task1Params.instance.name ="ledTask";
program.global.ledTask = Task.create ("&LEDs"、task1Params);
halHwi.dotherAutoNestingSupport = false;
网址为 Board.h
#define LED_GREEN MSP_EXP430FR5994_LED_G
#define LED_YELLOW MSP_EXP430FR5994_LED_Y
#define button_power MSP_EXP430FR5994_button_P
#define button_sample MSP_EXP430FR5994_button_S
这些已添加到 MSP_EXP430FR5994.h 中的枚举中
typedef enum MSP_EXP430FR5994_GPIOName{
MSP_EXP430FR5994_S1 = 0、
MSP_EXP430FR5994_S2、
MSP_EXP430FR5994_button_P、
MSP_EXP430FR5994_button_S、
MSP_EXP430FR5994_LED1、
MSP_EXP430FR5994_LED2、
MSP_EXP430FR5994_LED_G、
MSP_EXP430FR5994_LED_Y、
MSP_EXP430FR5994_GPIOCOUNT
}MSP_EXP430FR5994_GPIOName;
并已在 MSP_EXP430FR5994.c 中触发
GPIO_PinConfig gpioPinConfigs[]={
/*输入引脚*/
/* MSP_EXP430FR5994_S1 *
GPIOMSP430_P5_6 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING、
/* MSP_EXP430FR5994_S2 *
GPIOMSP430_P5_5 | GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING、
/*添加的按钮*/
GPIOMSP430_P8_2 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING、
GPIOMSP430_P8_1 | GPIO_CFG_IN_NOPULL | GPIO_CFG_IN_INT_FALLING、
//
/*输出引脚*/
/* MSP_EXP430FR5994_LED1 *
GPIOMSP430_P1_0 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
/* MSP_EXP430FR5994_LED2 *
GPIOMSP430_P1_1 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
/*添加了 LED */
GPIOMSP430_P4_2 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
GPIOMSP430_P4_1 | GPIO_CFG_OUT_STD | GPIO_CFG_OUT_STR_HIGH | GPIO_CFG_OUT_LOW、
}
增编
我发现、通过按两次连接到 P8.1的按钮(双击)、可以防止绿色 LED 指示灯通勤。
我的代码中的某个位置可能是一个愚蠢的错误? 有人可以提供帮助吗?
谢谢
Damiano