Thread 中讨论的其他器件:Z-stack
工具与软件:
您好!
我正在尝试配置一些引脚以唤醒器件。 但是、当这三个引脚中的两个(BSP_KEY_1、BOARD_SWITCH_NC_PIN)被触发时、看门狗会有时触发、而不是始终触发
为什么会发生这种情况?
以下是 hal_sys_ctrl.c 文件的代码及其配置
Filename: hal_sys_ctrl.c
/**************************************************************************************************
* @fn SysCtrlWakeupSetting
*
* @brief Setup which peripherals can/cannot wakeup the processor
*
* input parameters
*
* @param None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
void SysCtrlWakeupSetting(void)
{
/* GPIO A, C and SM Timer can wake up the processor */
GPIOIntWakeupEnable(GPIO_IWE_PORT_A);
GPIOIntWakeupEnable(GPIO_IWE_PORT_B);
GPIOIntWakeupEnable(GPIO_IWE_PORT_C);
GPIOIntWakeupEnable(GPIO_IWE_PORT_D);
GPIOIntWakeupDisable(GPIO_IWE_USB);
GPIOIntWakeupEnable(GPIO_IWE_SM_TIMER);
/* Setup GPIO B as a falling edge */
GPIOPowIntTypeSet(BSP_KEY_BASE, BSP_KEY_1, GPIO_POW_FALLING_EDGE);
GPIOPowIntTypeSet(BOARD_SWITCH_NC_BASE, BOARD_SWITCH_NC_PIN, GPIO_POW_FALLING_EDGE);
GPIOPowIntTypeSet(I2C_INT_BASE, I2C_GPIO_PIN, GPIO_POW_FALLING_EDGE);
}
/**************************************************************************************************
* @fn SysCtrlPowIntEnableSetting
*
* @brief Enable power-up interrupt for the specified port, using
* GPIO_PI_IEN register
*
* input parameters
*
* @param None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
void SysCtrlPowIntEnableSetting(void)
{
GPIOPowIntEnable(BSP_KEY_BASE, BSP_KEY_1);
GPIOPowIntEnable(BOARD_SWITCH_NC_BASE, BOARD_SWITCH_NC_PIN);
GPIOPowIntEnable(I2C_INT_BASE, I2C_GPIO_PIN);
}
/**************************************************************************************************
* @fn SysCtrlPowIntDisableSetting
*
* @brief Disable power-up interrupt for the specified port, using
* GPIO_PI_IEN register
*
* input parameters
*
* @param None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
void SysCtrlPowIntDisableSetting(void)
{
GPIOPowIntDisable(BSP_KEY_BASE, BSP_KEY_1);
GPIOPowIntDisable(BOARD_SWITCH_NC_BASE, BOARD_SWITCH_NC_PIN);
GPIOPowIntDisable(I2C_INT_BASE, I2C_GPIO_PIN);
}
/**************************************************************************************************
* @fn SysCtrlPowIntDisableSetting
*
* @brief Clear the Power Interrupt registers
*
* input parameters
*
* @param None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
void SysCtrlPowIntClear(void)
{
GPIOPowIntClear(BSP_KEY_BASE, BSP_KEY_1);
GPIOPowIntClear(BOARD_SWITCH_NC_BASE, BOARD_SWITCH_NC_PIN);
GPIOPowIntClear(I2C_INT_BASE, I2C_GPIO_PIN);
}
/**************************************************************************************************
* @fn SysCtrlClockStartupSetting
*
* @brief Setup clock startup sequence
*
* input parameters
*
* @param None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
void SysCtrlClockStartSetting(void)
{
/* Setup the clock startup sequence to 32 MHz external
* osc and 32k sourced from external oscillator
*/
IOCPadConfigSet(GPIO_D_BASE, 0xC0, IOC_OVERRIDE_ANA);
SysCtrlClockSet(OSC_32KHZ, false, SYS_CTRL_SYSDIV_32MHZ);
}
#define BSP_KEY_BASE GPIO_B_BASE //!< Common key Base
#define BSP_KEY_1 GPIO_PIN_3 //!< PB3 Common key 1
#define PUSH_BTN_1_PIN_INIT() \
{ \
/* Configure button as input */ \
GPIOPinTypeGPIOInput(BSP_KEY_BASE, BSP_KEY_1); \
IOCPadConfigSet(BSP_KEY_BASE, BSP_KEY_1, IOC_OVERRIDE_PUE); \
}
#define PUSH_BTN_1_INITIALIZE_INTERRUPT(_cb) \
{ \
GPIOPinIntClear( BSP_KEY_BASE, BSP_KEY_1 ); \
GPIOPinIntEnable( BSP_KEY_BASE, BSP_KEY_1 ); \
ioPinIntRegister( BSP_KEY_BASE, BSP_KEY_1, _cb ); \
GPIOIntTypeSet( BSP_KEY_BASE, BSP_KEY_1, GPIO_FALLING_EDGE); \
}
#define BOARD_SWITCH_NC_BASE GPIO_A_BASE
#define BOARD_SWITCH_NC_PIN GPIO_PIN_7
#define SWITCH_NC_PIN_INIT() \
{ \
GPIOPinTypeGPIOInput(BOARD_SWITCH_NC_BASE, BOARD_SWITCH_NC_PIN); \
IOCPadConfigSet(BOARD_SWITCH_NC_BASE, BOARD_SWITCH_NC_PIN, IOC_OVERRIDE_PUE); \
}
#define SWITCH_NC_PIN_INTERRUPT(_cb)\
{\
GPIOPinIntClear( BOARD_SWITCH_NC_BASE, BOARD_SWITCH_NC_PIN );\
GPIOPinIntEnable( BOARD_SWITCH_NC_BASE, BOARD_SWITCH_NC_PIN );\
ioPinIntRegister( BOARD_SWITCH_NC_BASE, BOARD_SWITCH_NC_PIN, _cb );\
GPIOIntTypeSet( BOARD_SWITCH_NC_BASE, BOARD_SWITCH_NC_PIN, GPIO_FALLING_EDGE );\
}
#define I2C_INT_BASE GPIO_C_BASE
#define I2C_GPIO_PIN GPIO_PIN_6
#define I2C_PIN_INIT()\
{ \
GPIOPinTypeGPIOInput(I2C_INT_BASE, I2C_GPIO_PIN);\
IOCPadConfigSet(I2C_INT_BASE, I2C_GPIO_PIN, IOC_OVERRIDE_PUE); \
}
#define I2C_INITIALIZE_INTERRUPT(_cb) \
{ \
GPIOPinIntClear( I2C_INT_BASE, I2C_GPIO_PIN ); \
GPIOPinIntEnable( I2C_INT_BASE, I2C_GPIO_PIN ); \
ioPinIntRegister( I2C_INT_BASE, I2C_GPIO_PIN, _cb ); \
GPIOIntTypeSet( I2C_INT_BASE, I2C_GPIO_PIN, GPIO_FALLING_EDGE); \
IntPrioritySet(INT_GPIOC, HAL_INT_PRIOR_KEY);\
}