Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: lpc17xx и sleep-моде
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
mempfis_
Всем добрый день.
Хочу научится усыплять этот процессор для снижения энергопотребления.
Из режимов пониженного энергопотребления подходит только sleep - когда тактирование процессора останавливается а переферия остаётся рабочей.

По таблице Table 45. Encoding of reduced power modes на стр. 62 определяю что в РСОN 2 младших бита должны быть 0
00 Execution of WFI or WFE enters either Sleep or Deep Sleep mode as defined by the SLEEPDEEP bit in the Cortex-M3 System Control Register.

Бит SLEEPDEEP в System Control Register после старта 0 т.е. определён переход в sleep

Делаю так:
Код
PCON = 0; //указываю что переход в sleep
asm("wfi") //пытаюсь усыпить процессор


Из разрешенных прерываний в NVIC uart0/2/3 и таймер 0

В итоге получаю вот что - программа продолжает работать но такое чувство что многократно замедляется исполнение задач.
Наглядно это видно в значительном уменьшении потока отладочной информации из устройства.
Есть подозрение что происходит пропуск прерываний от таймера. Визуально пропусков прерываний от uarts не заметно т.к. строки с текстом приходят без пропусков символов.

Кто работал с sleep-режимами в lpc17xx подскажите где и что я могу упускать. Заранее спасибо.
sysel
Надо настроить "System Control Register" (SCR).

Я засыпаю так:
Код
  
PCON = 0x00UL;
SCR = 0x02UL;
asm (" wfi \n");


И ещё: учтите, что когда ядро спит, обращения к памяти ядра и флеш некорректны.
Если у Вас будет заведён DMA, необходимо буферы для него и Linked List Item-ы хранить AHB SRAM
mempfis_
Всем спасибо. Проблема решена.
Пропуск прерываний от таймера оказался не пропуском а недосчётом - в прерывании взводился флаг прерывания и всё. Задача системных таймеров видела взвод флага но не знала сколько раз возникало прерывание. Отсюда и замедление исполнения всех задач.

Приведённый ниже код успешно переводит процессор в sleep без дополнительных настроек.

Код
PCON = 0; //указываю что переход в sleep
asm("wfi") //пытаюсь усыпить процессор

Velund
[удалено ввиду утраты актуальности]
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.