Вот вариант который я делал для усыпления AT91SAM7S256:
// перевод свободных пинов на выход в 0, к примеру PA5, PA10, PA22 и т.д. (один "неправильный" вывод на ток потребления влияет очень сильно)
AT91F_PIO_CfgOutput (AT91C_BASE_PIOA, AT91C_PIO_PA5|AT91C_PIO_PA10|AT91C_PIO_PA22);
*AT91C_PIOA_CODR = (AT91C_PIO_PA5|AT91C_PIO_PA10|AT91C_PIO_PA22);
// USB transceiver disabled (enabled by default):
// если USB не используется, DDM и DDP - на землю.
*AT91C_PMC_PCER = ((unsigned int) 1 << AT91C_ID_UDP); // enable clock UDP for USB transceiver disabled
AT91F_UDP_DisableTransceiver(AT91C_BASE_UDP);
*AT91C_PMC_PCDR = ((unsigned int) 1 << AT91C_ID_UDP); // disable clock UDP
// Disable All Interrupt
AT91F_AIC_DisableIt(AT91C_BASE_AIC, 0xFFFFFFFF);
// Analog-to-Digital Converter de-activated.
AT91F_ADC_CfgModeReg(AT91C_BASE_ADC, AT91C_ADC_SLEEP_MODE);
// Other System Clock Disable.
AT91F_PMC_CfgSysClkDisableReg(AT91C_BASE_PMC, AT91C_PMC_UDP | AT91C_PMC_PCK0 | AT91C_PMC_PCK1);
// All peripheral clocks de-activated.
AT91F_PMC_DisablePeriphClock (AT91C_BASE_PMC, 0xFFFFFFFB); // кроме PIOA (для клавиатуры нужно было)
// Selection Slow Clock~32kHz for Master Clock ~32kHz/2 (Master Clock Prescaler=2) --> (~ -7.4mA_3.3v относительно MCK~45MHz)
AT91F_PMC_CfgMCKReg (AT91C_BASE_PMC, AT91C_PMC_CSS_SLOW_CLK);
while(!(AT91F_PMC_GetStatus(AT91C_BASE_PMC) & AT91C_PMC_MCKRDY));
// Disable PLL (MUL=0) (~ -2mA_3.3v)
AT91F_CKGR_CfgPLLReg(AT91C_BASE_CKGR, 0);
// Disable Main Oscillator (~ -0.3mA_3.3v)
AT91F_CKGR_DisableMainOscillator(AT91C_BASE_CKGR);
// Enable PIOA interrupt
*AT91C_AIC_IECR = ((unsigned int) 1 << AT91C_ID_PIOA); (для клавиатуры)
// Voltage regulator is in Low-power mode.
*AT91C_VREG_MR|= AT91C_VREG_PSTDBY; // 1.65V (~ -30uA_3.3v)
// Go the Processor in IDLE (DEEP) MODE --> STOP Command. (во время отладки лучше закомментировать....)
// The Processor Idle Mode is achieved by disabling the Processor Clock, which is automatically re-enabled by any enabled fast or normal interrupt, or by the reset.
*AT91C_PMC_SCDR = AT91C_PMC_PCK; // disable Processor Clock (Idle Mode) (~ -2.3mA_3.3v_относительно MCK=RC/2~32kHz/2)
В общем всё что можно выжать для Ultra low power: onto 3.3V_AMP1 =34.3uA и onto 1.8V_AMP2 = 4.0uA, см. стр. 553 AT91SAM7S Series Preliminary.pdf
У меня получалось чуть более 40uA на AT91SAM7S256 с тактированием порта для обработки прерывания от клавиатуры (прерывания тактирование на порт не отключал).
Причём при 500Hz реакция на клавиатуру была тормознутая поэтому делитель оставил равным 2 для Slow Clock.
А разница в токе потребления при работе PIOA практически незаметна при Slow Clock / 64 или на 2 (I_PIO Controller =12uA/MHz).
Пробовал ещё вариант с __ramfunc PowerDownAbsolute, но в RAM по энергопотреблению разницы не заметил на пониженной частоте, да и
в обработке прерываний приходилось вызываемые функции в RAM переносить, а она то не резиновая