реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> AT91SAM7S64 PowerDown
algidim
сообщение May 22 2009, 08:06
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 160
Регистрация: 5-04-06
Из: Москва
Пользователь №: 15 847



Товарищи подскажите, пожалуйста как AT91SAM7S64 перевести в режим PowerDown с минимальным потреблением, чтобы из него только RESETom можно было пробудить. Делаю так :

// Частота работы ядра 500 кГц
pPMC->PMC_MCKR = AT91C_PMC_CSS_SLOW_CLK;
while(!(pPMC->PMC_SR & AT91C_PMC_MCKRDY));

// Отключение внешнего генератора
pPMC->PMC_MOR &= (!AT91C_CKGR_MOSCEN );

// Перевод в низкопотребляемый режим встроенного линейного стабилизатора
AT91F_VREG_Enable_LowPowerMode(pSYS);

// Запрещение переферийного тактирования
AT91C_BASE_PMC->PMC_PCDR=0xFFFFFFFC;

// Запрет системного тактирования
AT91C_BASE_PMC->PMC_SCDR = AT91C_PMC_UDP|AT91C_PMC_PCK|AT91C_PMC_PCK0|AT91C_PMC_PCK1|AT91C_PMC_PCK2;

После выполнения этого кода у меня потребление 1 ma. Может чего не так или в другой последовательности нужно выполнить ? В pdf написано, что при температуре 25 градусов должен потреблять 4 до 15 мКа. Я пробую на плате OLIMEX sam7-p64 выпаял все детали, которые могли потреблять большой ток, возможно что-то упустил, пока найти не могу. Питаю от внешнего стабилизированного блока питания 3,3 вольта. На всех выводах порта лог 1. Для меня потребление мк очень важно, делаю прибор с батарейным питанием. Решил попробовать его, потому что нужен USB и его цена не высока, а так высокой производительности от него мне не требуется.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 22 2009, 16:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(algidim @ May 22 2009, 12:06) *
// Перевод в низкопотребляемый режим встроенного линейного стабилизатора
AT91F_VREG_Enable_LowPowerMode(pSYS);

// Запрещение переферийного тактирования
AT91C_BASE_PMC->PMC_PCDR=0xFFFFFFFC;

Будет логичнее поменять эти два пункта местами.

Цитата(algidim @ May 22 2009, 12:06) *
Я пробую на плате OLIMEX sam7-p64 выпаял все детали, которые могли потреблять большой ток, возможно что-то упустил, пока найти не могу.

Errata на PIO смотрели? Нет ли у Вас пинов, настроенных на вход, и подтянутых встроенным pull-up'ом?
Go to the top of the page
 
+Quote Post
alexvm
сообщение May 27 2009, 11:49
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 27-08-08
Из: Липецк
Пользователь №: 39 845



Вот вариант который я делал для усыпления 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 переносить, а она то не резиновая smile.gif
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 11:00
Рейтинг@Mail.ru


Страница сгенерированна за 2.7462 секунд с 7
ELECTRONIX ©2004-2016