Вот таким кодом я "глушил" Кит до очень маленького потребления. Естественно, после этого разбудить его не удается, поэтому так глубоко усыплять его не стоит.
__ramfunc void PowerDownAbsolute(void) { //Flash is in standby mode (__ramfunc)
while (1) ; }
void PowerDown(void) {
// Disable Interrupts AT91F_AIC_DisableIt(AT91C_BASE_AIC, 0xFFFFFFFF );
//Analog-to-Digital Converter de-activated. AT91F_ADC_CfgModeReg(AT91C_BASE_ADC, AT91C_ADC_SLEEP_MODE);
//USB transceiver disabled. AT91F_UDP_DisableTransceiver(AT91C_BASE_UDP); //ARM Core in idle mode. AT91F_PMC_CfgSysClkDisableReg(AT91C_BASE_PMC, AT91C_PMC_UDP | AT91C_PMC_PCK | AT91C_PMC_PCK0 | AT91C_PMC_PCK1 | AT91C_PMC_PCK2);
// Pull-Up off AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,0xFFFFFFFF); //AT91F_PIO_CfgPullup(AT91C_BASE_PIOA,0); //Tri-state //AT91F_PIO_CfgOpendrain(AT91C_BASE_PIOA,0xFFFFFFFF); //AT91F_PIO_CfgOpendrain(AT91C_BASE_PIOA,0); // Все на вход //AT91F_PIO_CfgInput(AT91C_BASE_PIOA,0xFFFFFFFF);
//All peripheral clocks de-activated. AT91F_PMC_DisablePeriphClock ( AT91C_BASE_PMC, 0xFFFFFFFF );
//MCK @ 500Hz. AT91F_PMC_CfgMCKReg (AT91C_BASE_PMC,AT91C_PMC_CSS_SLOW_CLK | AT91C_PMC_PRES_CLK_4); while(!(AT91F_PMC_GetStatus(AT91C_BASE_PMC) & AT91C_PMC_MCKRDY));
AT91F_CKGR_CfgPLLReg(AT91C_BASE_CKGR,0);
// Disable Main Oscillator AT91F_CKGR_DisableMainOscillator(AT91C_BASE_CKGR); while(!(AT91F_PMC_GetStatus(AT91C_BASE_PMC) & AT91C_PMC_MOSCS));
//Voltage regulator is in Low-power mode. AT91F_VREG_Enable_LowPowerMode(AT91C_BASE_VREG);
//ARM Core in idle mode. PowerDownAbsolute();
while (1) ; }
|