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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как будить проц CxM3 переодически из Sleep?
Spider
сообщение Oct 18 2012, 15:42
Сообщение #16


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



усыпить я и тут могу, и тоже в ИдлХук, а проснуться то как?
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 18 2012, 15:49
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Alexey Belyaev @ Oct 18 2012, 18:42) *
усыпить я и тут могу, и тоже в ИдлХук, а проснуться то как?

Так прерывание и разбудит.
Чем такой вариант не устраивает?
Go to the top of the page
 
+Quote Post
Spider
сообщение Oct 18 2012, 15:53
Сообщение #18


В поисках истины
***

Группа: Свой
Сообщений: 431
Регистрация: 7-01-06
Из: Россия
Пользователь №: 12 923



Прерываний то тма тмущая, в любой ОС есть же SysTick прерывания.
А надо только по КОНКРЕТНОМУ прерывания, от таймера через 200ms например.
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 18 2012, 15:56
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(Alexey Belyaev @ Oct 18 2012, 18:53) *
Прерываний то тма тмущая, в любой ОС есть же 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)

Go to the top of the page
 
+Quote Post
esaulenka
сообщение Oct 19 2012, 10:43
Сообщение #20


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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

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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 19 2012, 11:32
Сообщение #21


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(esaulenka @ Oct 19 2012, 16:43) *
Или это задел под несколько прерываний, по которым работу продолжать не надо (проснулись - отработали - сразу уснули) ?

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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 19 2012, 11:35
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(esaulenka @ Oct 19 2012, 13:43) *
Или это задел под несколько прерываний, по которым работу продолжать не надо (проснулись - отработали - сразу уснули) ?

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

PS. Что странно в GCC такой код не заработал - пришлось добавить пару NOP-ов после __enable_irq. Или так и надо делать, а пример с ошибкой?
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Oct 19 2012, 15:48
Сообщение #23


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

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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


Я наблюдал похожие грабли:
Код
void TIMER0_IRQHandler (void) __irq
{
  // что-то полезное
  T0IR = 0x01;                                // Clear match 0 interrupt
}

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


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
_Артём_
сообщение Oct 19 2012, 18:18
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322



Цитата(esaulenka @ Oct 19 2012, 18:48) *
Я наблюдал похожие грабли:

Да, ситуация похожая.
Цитата(esaulenka @ Oct 19 2012, 18:48) *
Влетал в прерывание два раза - до контроллера прерывания не доходило, что флаг прерывания сброшен.
Нашёл рекомендации использовать инструкции для синхронизации (ISB, кажется), но сделал проще - перенёс сброс флага в начало. Конкретное место, в котором есть проблема, раскапывать поленился.

Хотелось бы знать какой барьер правильней ставить...
Помогает в общем-то любой, и даже NOP.

Мне кажется более правильным использовать DSB, но так ли это...
Go to the top of the page
 
+Quote Post
nx6310
сообщение Nov 23 2012, 09:03
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 28-06-10
Пользователь №: 58 174



Можно процессор переводить в STOP режим, Просыпаться по будильнику RTC ALARM. Из STOP можно выйти только по по внешнему прерыванию или по прерыванию будильника ALARM RTC, в этом режиме отключается вся периферия кроме внешних прерываний и часов реального времени. Потребление уменьшится и другие прерывания не надо будет отключать.
Go to the top of the page
 
+Quote Post
MK2
сообщение Nov 23 2012, 11:20
Сообщение #26


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 30-10-10
Пользователь №: 60 535



Можете запретить прерывания и будить когда вам надо по нужному event
инструкция __WFI
Go to the top of the page
 
+Quote Post

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

 


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


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