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

 
 
> lpc17xx и sleep-моде, Не получается нормально усыпить
mempfis_
сообщение Jun 23 2011, 08:19
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Всем добрый день.
Хочу научится усыплять этот процессор для снижения энергопотребления.
Из режимов пониженного энергопотребления подходит только 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 подскажите где и что я могу упускать. Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
sysel
сообщение Jun 23 2011, 14:08
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 3-07-07
Пользователь №: 28 852



Надо настроить "System Control Register" (SCR).

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


И ещё: учтите, что когда ядро спит, обращения к памяти ядра и флеш некорректны.
Если у Вас будет заведён DMA, необходимо буферы для него и Linked List Item-ы хранить AHB SRAM
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 25 2011, 18:06
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Всем спасибо. Проблема решена.
Пропуск прерываний от таймера оказался не пропуском а недосчётом - в прерывании взводился флаг прерывания и всё. Задача системных таймеров видела взвод флага но не знала сколько раз возникало прерывание. Отсюда и замедление исполнения всех задач.

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

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

Go to the top of the page
 
+Quote Post
Velund
сообщение May 25 2014, 12:44
Сообщение #4


Знающий
****

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



[удалено ввиду утраты актуальности]
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 00:41
Рейтинг@Mail.ru


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