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 A, C as a falling edge */
GPIOPowIntTypeSet(BSP_KEY_DIR_BASE, BSP_KEY_LEFT | BSP_KEY_RIGHT |
BSP_KEY_UP | BSP_KEY_DOWN, GPIO_POW_FALLING_EDGE);
GPIOPowIntTypeSet(BSP_KEY_SEL_BASE, BSP_KEY_SELECT, GPIO_POW_FALLING_EDGE);
//设置PB0、PC2、PC3可以唤醒
GPIOPowIntTypeSet(GPIO_B_BASE,GPIO_PIN_0,GPIO_POW_FALLING_EDGE);
GPIOPowIntTypeSet(GPIO_C_BASE,GPIO_PIN_2,GPIO_POW_FALLING_EDGE);
GPIOPowIntTypeSet(GPIO_C_BASE,GPIO_PIN_3,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_DIR_BASE, BSP_KEY_LEFT | BSP_KEY_RIGHT | BSP_KEY_UP |
BSP_KEY_DOWN);
GPIOPowIntEnable(BSP_KEY_SEL_BASE, BSP_KEY_SELECT);
//设置PB0、PC2、PC3可以唤醒
GPIOPowIntEnable(GPIO_B_BASE,GPIO_PIN_0);
GPIOPowIntEnable(GPIO_C_BASE,GPIO_PIN_2);
GPIOPowIntEnable(GPIO_C_BASE,GPIO_PIN_3);
}
/**************************************************************************************************
* @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_DIR_BASE, BSP_KEY_LEFT | BSP_KEY_RIGHT | BSP_KEY_UP |
BSP_KEY_DOWN);
GPIOPowIntDisable(BSP_KEY_SEL_BASE, BSP_KEY_SELECT);
//禁止PB0、PC2、PC3喚醒中断
GPIOPowIntDisable(GPIO_B_BASE,GPIO_PIN_0);
GPIOPowIntDisable(GPIO_C_BASE,GPIO_PIN_2);
GPIOPowIntDisable(GPIO_C_BASE,GPIO_PIN_3);
}
/**************************************************************************************************
* @fn SysCtrlPowIntDisableSetting
*
* @brief Clear the Power Interrupt registers
*
* input parameters
*
* @param None.
*
* output parameters
*
* None.
*
* @return None.
**************************************************************************************************
*/
void SysCtrlPowIntClear(void)
{
GPIOPowIntClear(BSP_KEY_DIR_BASE, BSP_KEY_LEFT | BSP_KEY_RIGHT | BSP_KEY_UP |
BSP_KEY_DOWN);
GPIOPowIntClear(BSP_KEY_SEL_BASE,BSP_KEY_SELECT);
//清除PB0、PC2、PC3唤醒中断
GPIOPowIntClear(GPIO_B_BASE,GPIO_PIN_0);
GPIOPowIntClear(GPIO_C_BASE,GPIO_PIN_2);
GPIOPowIntClear(GPIO_C_BASE,GPIO_PIN_3);
}
/**************************************************************************************************
* @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);
}
可以进入低功耗模式,却不能通过外部中断唤醒