Spider 0 18 октября, 2012 Опубликовано 18 октября, 2012 · Жалоба усыпить я и тут могу, и тоже в ИдлХук, а проснуться то как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 18 октября, 2012 Опубликовано 18 октября, 2012 · Жалоба усыпить я и тут могу, и тоже в ИдлХук, а проснуться то как? Так прерывание и разбудит. Чем такой вариант не устраивает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Spider 0 18 октября, 2012 Опубликовано 18 октября, 2012 · Жалоба Прерываний то тма тмущая, в любой ОС есть же SysTick прерывания. А надо только по КОНКРЕТНОМУ прерывания, от таймера через 200ms например. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 18 октября, 2012 Опубликовано 18 октября, 2012 · Жалоба Прерываний то тма тмущая, в любой ОС есть же 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) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 19 октября, 2012 Опубликовано 19 октября, 2012 · Жалоба Артём, можно вопрос по коду в сообщении #8? Что-то до меня не доходит необходимость флажка и while'а. Или это задел под несколько прерываний, по которым работу продолжать не надо (проснулись - отработали - сразу уснули) ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 19 октября, 2012 Опубликовано 19 октября, 2012 · Жалоба Или это задел под несколько прерываний, по которым работу продолжать не надо (проснулись - отработали - сразу уснули) ? Думаю, что да. Мало ли какие ещё прерывания разрешены к этому моменту. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 19 октября, 2012 Опубликовано 19 октября, 2012 · Жалоба Или это задел под несколько прерываний, по которым работу продолжать не надо (проснулись - отработали - сразу уснули) ? По сути - да (хотя прерывание в примере только одно). В примере запускается RC-генератор и процессор засыпает пока не произойдёт wake-up по готовности RC. Таже можно запустить несколько прерываний, например SysTick и измерить время установления RC. PS. Что странно в GCC такой код не заработал - пришлось добавить пару NOP-ов после __enable_irq. Или так и надо делать, а пример с ошибкой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 19 октября, 2012 Опубликовано 19 октября, 2012 · Жалоба код не заработал - пришлось добавить пару NOP-ов после __enable_irq Я наблюдал похожие грабли: void TIMER0_IRQHandler (void) __irq { // что-то полезное T0IR = 0x01; // Clear match 0 interrupt } Влетал в прерывание два раза - до контроллера прерывания не доходило, что флаг прерывания сброшен. Нашёл рекомендации использовать инструкции для синхронизации (ISB, кажется), но сделал проще - перенёс сброс флага в начало. Конкретное место, в котором есть проблема, раскапывать поленился. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Артём__ 0 19 октября, 2012 Опубликовано 19 октября, 2012 · Жалоба Я наблюдал похожие грабли: Да, ситуация похожая. Влетал в прерывание два раза - до контроллера прерывания не доходило, что флаг прерывания сброшен. Нашёл рекомендации использовать инструкции для синхронизации (ISB, кажется), но сделал проще - перенёс сброс флага в начало. Конкретное место, в котором есть проблема, раскапывать поленился. Хотелось бы знать какой барьер правильней ставить... Помогает в общем-то любой, и даже NOP. Мне кажется более правильным использовать DSB, но так ли это... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nx6310 0 23 ноября, 2012 Опубликовано 23 ноября, 2012 · Жалоба Можно процессор переводить в STOP режим, Просыпаться по будильнику RTC ALARM. Из STOP можно выйти только по по внешнему прерыванию или по прерыванию будильника ALARM RTC, в этом режиме отключается вся периферия кроме внешних прерываний и часов реального времени. Потребление уменьшится и другие прерывания не надо будет отключать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MK2 0 23 ноября, 2012 Опубликовано 23 ноября, 2012 · Жалоба Можете запретить прерывания и будить когда вам надо по нужному event инструкция __WFI Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться