Перейти к содержанию
    

Как будить проц CxM3 переодически из Sleep?

усыпить я и тут могу, и тоже в ИдлХук, а проснуться то как?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

усыпить я и тут могу, и тоже в ИдлХук, а проснуться то как?

Так прерывание и разбудит.

Чем такой вариант не устраивает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прерываний то тма тмущая, в любой ОС есть же SysTick прерывания.

А надо только по КОНКРЕТНОМУ прерывания, от таймера через 200ms например.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Прерываний то тма тмущая, в любой ОС есть же SysTick прерывания.

А надо только по КОНКРЕТНОМУ прерывания, от таймера через 200ms например.

2.5.2.1 Wakeup from WFI or sleep-on-exit

Normally, the processor wakes up only when it detects an exception with sufficient priority to cause

exception entry.

Some embedded systems might have to execute system restore tasks after the processor wakes up, and

before it executes an interrupt handler. To achieve this set the PRIMASK bit to 1 and the FAULTMASK

bit to 0. If an interrupt arrives that is enabled and has a higher priority than current exception priority,

the processor wakes up but does not execute the interrupt handler until the processor sets PRIMASK

to zero. For more information about PRIMASK and FAULTMASK see Section 2.1.3.6 (p. 11)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Артём, можно вопрос по коду в сообщении #8?

 

Что-то до меня не доходит необходимость флажка и while'а. Или это задел под несколько прерываний, по которым работу продолжать не надо (проснулись - отработали - сразу уснули) ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или это задел под несколько прерываний, по которым работу продолжать не надо (проснулись - отработали - сразу уснули) ?

Думаю, что да. Мало ли какие ещё прерывания разрешены к этому моменту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или это задел под несколько прерываний, по которым работу продолжать не надо (проснулись - отработали - сразу уснули) ?

По сути - да (хотя прерывание в примере только одно).

В примере запускается RC-генератор и процессор засыпает пока не произойдёт wake-up по готовности RC. Таже можно запустить несколько прерываний, например SysTick и измерить время установления RC.

 

PS. Что странно в GCC такой код не заработал - пришлось добавить пару NOP-ов после __enable_irq. Или так и надо делать, а пример с ошибкой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

код не заработал - пришлось добавить пару NOP-ов после __enable_irq

 

Я наблюдал похожие грабли:

void TIMER0_IRQHandler (void) __irq
{
  // что-то полезное
  T0IR = 0x01;                                // Clear match 0 interrupt
}

Влетал в прерывание два раза - до контроллера прерывания не доходило, что флаг прерывания сброшен.

Нашёл рекомендации использовать инструкции для синхронизации (ISB, кажется), но сделал проще - перенёс сброс флага в начало. Конкретное место, в котором есть проблема, раскапывать поленился.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я наблюдал похожие грабли:

Да, ситуация похожая.

Влетал в прерывание два раза - до контроллера прерывания не доходило, что флаг прерывания сброшен.

Нашёл рекомендации использовать инструкции для синхронизации (ISB, кажется), но сделал проще - перенёс сброс флага в начало. Конкретное место, в котором есть проблема, раскапывать поленился.

Хотелось бы знать какой барьер правильней ставить...

Помогает в общем-то любой, и даже NOP.

 

Мне кажется более правильным использовать DSB, но так ли это...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно процессор переводить в STOP режим, Просыпаться по будильнику RTC ALARM. Из STOP можно выйти только по по внешнему прерыванию или по прерыванию будильника ALARM RTC, в этом режиме отключается вся периферия кроме внешних прерываний и часов реального времени. Потребление уменьшится и другие прерывания не надо будет отключать.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...