您好,
我正在使用深度睡眠模式 。我想使用休眠唤醒引脚从深度睡眠模式中唤醒。这是可行的吗??
如果可能,请告诉我如何将其配置为从深度睡眠中唤醒??
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
我正在使用深度睡眠模式 。我想使用休眠唤醒引脚从深度睡眠模式中唤醒。这是可行的吗??
如果可能,请告诉我如何将其配置为从深度睡眠中唤醒??
这是为 进入深度睡眠模式而创建的函数、但 WAKE 引脚也不起作用 GPIO 引脚不起作用、但不是每次都起作用、有时甚至 不起作用。
void foring_to _sleep()
{
sleep_init();
//启用自动时钟门控控制。
SysCtlPeripheralClockGating (真);
//在深度睡眠中将 LDO 设置为0.90V。
SysCtlLDODeepSlepSet (SYSCTL_LDO_0_90V);
//在深度睡眠模式中将闪存和 SRAM 设置为低功耗。
SysCtlDeepSlepPowerSet (SYSCTL_FLASH_LOW_POWER | SYSCTL_SRAM_LOW_POWER);
#if (调试)
{
debug_print_time();
debug_print (((uint8_t *)"\t\t");
debug_print (((uint8_t *)"进入睡眠");
debug_print (((uint8_t *)"\r\n");
}
#endif
delay1(10);
LED_ON();
while (GPIOPinRead (GPIO_Porte _BASE、GPIO_PIN_2)=GPIO_PIN_2); //等待直到摄像头断电
delay1(10);
SysCtlDeepSleep ();
while (1)
{
#if (调试)
{
debug_print_time();
debug_print (((uint8_t *)"\t\t");
debug_print (((uint8_t *)"未在深度睡眠模式中输入");
debug_print (((uint8_t *)"\r\n");
}
#endif
}
}
秘书长的报告
我在这里是启动的深度睡眠模式
void sleep_init()
{
SysCtlDeepSlepClockConfigSet (1、(SYSCTL_DSLP_OSC_INT | SYSCTL_DSLP_PIOSC_PD | SYSCTL_DSLP_OSC_EXT32);
HibernateIntClear (HIBERNATE_INT_PIN_WAKE | HIBERNATE_INT_WR_COMPLETE | HIBERNATE_INT_RESET_WAKE);
SysCtlPeripheralDeepSlepEnable (SYSCTL_Periph_GPIOE);
SysCtlPeripheralDeepSlepEnable (SYSCTL_Periph_GPIOD);
SysCtlPeripheralDeepSlepEnable (SYSCTL_Periph_UART3);
SysCtlPeripheralDeepSlepEnable (SYSCTL_Periph_HIBERNATE);
HibernateEnableExpClk (freq);
HibernateClockConfig (HIBERNATE_OSC_LOWDRIVE);
HibernateRTCEnable();
SysCtlPeripheralDeepSlepDisable (SYSCTL_Periph_ADC0 | SYSCTL_Periph_ADC1 | SYSCTL_Periph_CAN0 | SYSCTL_Periph_CAN1 |
SYSCTL_PERIPH_CCM0 | SYSCTL_PERIPH_COMP0 | SYSCTL_PERIPH_EEPROM0 | SYSCTL_PERIPH_EMAC0 |
SYSCTL_PERIPH_EPHY0 | SYSCTL_PERIPH_EPI0 | SYSCTL_PERIPH_GPIOA | SYSCTL_PERIPH_GPIOB |
SYSCTL_PERIPH_GPIOC | SYSCTL_PERIPH_GPIOF | SYSCTL_PERIPH_GPIOG | SYSCTL_PERIPH_GPIOH |
SYSCTL_Periph_GPIOJ | SYSCTL_Periph_GPIOK | SYSCTL_Periph_GPIOL | SYSCTL_Periph_GPIO|
SYSCTL_PERIPH_GPION | SYSCTL_PERIPH_GPIOR | SYSCTL_PERIPH_GPIO | SYSCTL_PERIPH_WTIMER 4 |
SYSCTL_Periph_GPIO| SYSCTL_Periph_I2C0 | SYSCTL_Periph_I2C2 | SYSCTL_Periph_I2C3 |
SYSCTL_PERIPH_I2C4 | SYSCTL_PERIPH_I2C5 | SYSCTL_PERIPH_I2C6 | SYSCTL_PERIPH_I2C7 |
SYSCTL_Periph_I2C8 | SYSCTL_Periph_I2C9 | SYSCTL_Periph_LCD0 | SYSCTL_Periph_ONEWIRE0 |
SYSCTL_PERIPH_PWM0 | SYSCTL_PERIPH_PWM1 | SYSCTL_PERIPH_QEI0 | SYSCTL_PERIPH_QEI1 |
SYSCTL_Periph_SSI0 | SYSCTL_Periph_SSI1 | SYSCTL_Periph_SSI2 | SYSCTL_Periph_SSI3 |
SYSCTL_PERIPH_TIMER0 | SYSCTL_PERIPH_Timer1 | SYSCTL_PERIPH_TIMER2 | SYSCTL_PERIPH_TIMER3 |
SYSCTL_PERIPH_TIMER4 | SYSCTL_PERIPH_TIMER5 | SYSCTL_PERIPH_TIMER6 | SYSCTL_PERIPH_TIMER7 |
SYSCTL_Periph_UART0 | SYSCTL_Periph_UART1 | SYSCTL_Periph_UART2 | SYSCTL_Periph_UART4 |
SYSCTL_Periph_UART5 | SYSCTL_Periph_UART6 | SYSCTL_Periph_UART7 | SYSCTL_Periph_UDMA |
SYSCTL_PERIPH_USB0 | SYSCTL_PERIPH_WDOG0 | SYSCTL_PERIPH_WDOG1 | SYSCTL_PERIPH_WTIME0 |
SYSCTL_PERIPH_WTIMEER1 | SYSCTL_PERIPH_WTIME2 | SYSCTL_PERIPH_WTIME3 | SYSCTL_PERIPH_WTIMEER5);
PTR_WAKE_UP=ButtonIntHandler;
HibernateWakeSet (HIBERNATE_WAKE_PIN | HIBERNATE_WAKE_RTC | HIBERNATE_WAKE_RESET);
HibernateIntEnable (HIBERNATE_INT_PIN_WAKE | HIBERNATE_INT_RESET_WAKE);
HibernateIntRegister (PTR_WAKE_UP);
GPIOPinTypeGPIOInput (GPIO_Porte _BASE、GPIO_PIN_2);
GPIOIntClear (GPIO_Porte _BASE、GPIO_INT_PIN_2);
// GPIODirModeSet (GPIO_Porte _BASE、GPIO_PIN_2、GPIO_DIR_MODE_IN);
// GPIOPadConfigSet (GPIO_Porte _BASE、GPIO_PIN_2、GPIO_Strength _2mA、GPIO_PIN_TYPE_WAKE_HIGH);
GPIOIntTypeSet (GPIO_Porte _BASE、GPIO_PIN_2、GPIO_HIGH_LEVEL);
GPIOIntRegister (GPIO_Porte _BASE、PTR_WAKE_UP);
GPIOIntEnable (GPIO_Porte _BASE、GPIO_INT_PIN_2);
IntMasterEnable();
}
秘书长的报告
这是我的中断处理程序 :-
空 ButtonIntHandler()
{
//按下按钮时延迟此处以实现简单的去抖。
delay1(1);
静态 uint32_t status1、状态;
Status = HibernateIntStatus (0);
if (1 =状态)
{
HibernateIntClear (状态);
}
status1=GPIOIntStatus (GPIO_Porte _BASE、0);
if (1 == status1)
{
GPIOIntClear (GPIO_Porte _BASE、status1);//清除中断
}
LED_ON();
flag=1;
WAKEUP_FLAG=0;
WAKEUP_Handle = 1;
#if (调试)
{
debug_print_time();
debug_print (((uint8_t *)"\t\t");
debug_print (((uint8_t *)"从深度睡眠中唤醒");
debug_print (((uint8_t *)"\r\n");
}
#endif
IntMasterEnable();
Work_TO_DONE ();
}