在线时间2208 小时
UID2073122
注册时间2016-1-12
NXP金币119
TA的每日心情 | 开心 2020-6-18 08:45 |
---|
签到天数: 812 天 连续签到: 1 天 [LV.10]以坛为家III
金牌会员
 
- 积分
- 6321
- 最后登录
- 2025-7-15
|
本节我们讲解LPC824的WKT,其特性如下: • 32 位可加载减法计数器。加载计数值时计数器会自动启动。超时事件会生成一个中断 /唤醒请求。
• WKT 位于一个独立且始终上电的电源域中。
• WKT 支持三个时钟源。时钟源来源于IRC、内部低功耗振荡器、WKTCLKIN引脚。低功耗振荡器和外部输入时钟可以在所有电源模式工作包括深度掉电,IRC可以在睡眠和激活模式使用。
• WKT 可用于将器件从任何低功耗模式 (包括深度掉电模式)中唤醒,也可用于通用定时。
int main(void)
{
uint32_t regVal;
/* Generic Initialization */
SystemCoreClockUpdate();
Board_Init();
/* Alarm/wake timer as chip wakeup source */
Chip_SYSCTL_EnablePeriphWakeup(SYSCTL_WAKEUP_WKTINT);//选择闹钟唤醒时钟作为唤醒时钟源
/* Enable and reset WKT clock */
Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_WKT);//使能WKT时钟
Chip_SYSCTL_PeriphReset(RESET_WKT);//复位WKT时钟
/* Disable wakeup pad */
Chip_PMU_ClearPowerDownControl(LPC_PMU, PMU_DPDCTRL_WAKEPAD | PMU_DPDCTRL_LPOSCDPDEN);
/* Disable wakeup hysteresis by setting the bit (set to disable),
enable 10KHz oscillator for all power down modes including deep
power-down */
Chip_PMU_SetPowerDownControl(LPC_PMU, PMU_DPDCTRL_WAKEUPPHYS | PMU_DPDCTRL_LPOSCEN |
PMU_DPDCTRL_LPOSCDPDEN);//使能10KHz
/* Enable WKT interrupt */
NVIC_EnableIRQ(WKT_IRQn);//使能WKT中断
/*
* Note that deep power down causes a reset when it wakes up.
* If the CPU was in deep power-down before the reset,
* then PCON, DPDFLAG will be set.
*
* This code clears DPDFLAG (by writing a one to it)
* then sets the RED LED for about 500ms.
*/
if (LPC_PMU->PCON & PMU_PCON_DPDFLAG) {
regVal = LPC_PMU->PCON;
regVal |= PMU_PCON_DPDFLAG;
LPC_PMU->PCON = regVal;
Board_LED_Set(0, true);
delay(0x100000);
}
/* Loop various tests */
while (1) {
/* You'll probably lose the debugger connection in the following
statements as the MCU goes into low power mode. */
/* Wakeup test with 10KHz clock, 1s wakeup, and PMU sleep state */
WakeupTest(WKT_CLKSRC_10KHZ, 1, PMU_MCU_SLEEP);
/* Wakeup test with 10KHz clock, 1s wakeup, and PMU deep sleep state */
WakeupTest(WKT_CLKSRC_10KHZ, 1, PMU_MCU_DEEP_SLEEP);
/* Wakeup test with 10KHz clock, 1s wakeup, and PMU MCU power down state */
WakeupTest(WKT_CLKSRC_10KHZ, 1, PMU_MCU_POWER_DOWN);
/* Wakeup test with 10KHz clock, 1s wakeup, and PMU MCU deep power down state */
WakeupTest(WKT_CLKSRC_10KHZ, 1, PMU_MCU_DEEP_PWRDOWN);
}
}
|
|