toweroff 1 24 января, 2017 Опубликовано 24 января, 2017 · Жалоба Добрый день Есть устройство, работает под CMSIS_RTOS. Нужно засыпать и просыпаться от изменения состояния на 2х пинах и один раз в час Правильны ли мои мысли в реализации этого хозяйства: 1. Само "засыпание" - у Кейла в примерах это делается в задаче Idle, так и оставим 2. Тактирование GPIO - я так понимаю, без этого никак. Единственное, наверное, перевести на тактирование от внутреннего RC, кварц и PLL отключаем перед засыпанием 3. RTC настраиваем на тактирование от LSE и пусть от батарейки тикает 4. Настраиваем EXTI для пинов и RTC При пробуждении от пинов необходимо только зафиксировать факт изменения состояния пина, увеличить счетчик и снова заснуть Пробуждение от RTC вызовет работу в течение минуты-полторы и снова в сон. Также есть ADC, хотелось бы как-то и его приплести для просыпания, там делитель с +5в примерно до 1в. Получается, его также нужно тактировать? Теперь интересен сам процесс просыпания, например, от пинов. Прерывание настроено, получается, я "очнусь" в обработчике? Точнее, после __WFE() и сразу влечу в прерывание И самый важный момент - оставляя тактирование периферии, я ведь не получу заветный 1мкА потребления? :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 24 января, 2017 Опубликовано 24 января, 2017 · Жалоба UPD Мда... что-то грустно. В Stop режиме у меня отключены все источники тактового сигнала. Получается, я не смогу использовать GPIO периферию? А так как отключен и HSI14, то и ADC в пролете... Ну что ж, придется отключать всю периферию по максимуму и довольствоваться только ~2-3mA в Sleep mode :( По ТЗ мне хватит, но есть ощущение, что что-то я пропустил Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexf 0 24 января, 2017 Опубликовано 24 января, 2017 · Жалоба По ТЗ мне хватит, но есть ощущение, что что-то я пропустил Stop mode - просыпается от любого внешнего прерывания (Any EXTI line configured in the EXTI registers) Standby - минимальное потребление. просыпается от фронта на пине WKUP а так же RTC alarm. И, кстати, можно просыпаться от ножек EXTI но НЕ входить в прерывание (event mode). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 25 января, 2017 Опубликовано 25 января, 2017 · Жалоба Stop mode - просыпается от любого внешнего прерывания (Any EXTI line configured in the EXTI registers) Standby - минимальное потребление. просыпается от фронта на пине WKUP а так же RTC alarm. И, кстати, можно просыпаться от ножек EXTI но НЕ входить в прерывание (event mode). Это все понятно. Непонятно вот что: как работает периферия, генерящая EXTI, если ее тактирование отключено? Ну хорошо, GPIO, его можно смультиплексировать непосредстаенно в дебри EXTI, но как быть с USART и I2C, которые также могут разбудить? Как они могут вообще работать, если нет тактирования? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sigmaN 0 25 января, 2017 Опубликовано 25 января, 2017 · Жалоба На сколько я понимаю USART и I2C не будут работать. EXTI line это ж вроде просто нога проца. Т.е. нога дернулась, проц проснулся. На техасовском DSP я когда-то делал немного грязный хак. Перед сном переводил RX ногу USART в режим внешнего прерывания и когда данные прилетали то прерывание срабатывало от stop битов USARTa. Да, именно эти данные мы проспали, но проц просыпался, перенастраивал ногу на RX и следующий пакет уже принимал. Конкретно как там оно в ARM я не знаю, но думается мне, что пробуждение от внешнего прерывания примерно одинаково у всех реализовано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vasil_Riabko 0 25 января, 2017 Опубликовано 25 января, 2017 · Жалоба Мда... что-то грустно. В Stop режиме у меня отключены все источники тактового сигнала. Внимательно прочитайте RM0091 Reference manual раздел 7.3 Low-power modes Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
toweroff 1 25 января, 2017 Опубликовано 25 января, 2017 · Жалоба EXTI line это ж вроде просто нога проца. Т.е. нога дернулась, проц проснулся. нет, Extended interrupts and events controller - это целая конструкция. Источником пробуждения может быть очень много чего Внимательно прочитайте RM0091 Reference manual раздел 7.3 Low-power modes да, я это уже видел, спасибо но, в любом случае, ADC я туда точно не вкручу, придется довольствоваться Sleep mode хотя... можно перенастроить мой делитель на >Vh от +5в и просыпаться по событию Rise Edge, как вариант пожалуй, да. Пины со свим Falling Edge, входной пин ADC, настроенный на EXTI как просто Rise Edge пин... и RTC на свои линии EXTI - должно получиться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться