0 / 0 / 0
Регистрация: 11.10.2013
Сообщений: 326
|
|
1 | |
Вопрос по одновременному включению EXTI и AWU12.11.2016, 11:59. Показов 5018. Ответов 2
Метки нет (Все метки)
Дописываю устройства для сбора данных с датчиков для умного дома на STM8
Суть вопроса: У устройства есть 2 основных режима работы. 1) 95 % времени оно спит. 2) 5 % Времени опрашивает 2 датчика DS18B20 на независимых шинах, 1 датчик RH22, 2-аналоговых входа (датчики протечек) Кроме этого на борту имеются 2штуки 32 разрядных счетчика - которым глубоко наплевать на все режимы работы, приоритет у них максимальный когда устройство находится в спячке. Проблема в следующем, AWU режим работает без нареканий контроллер восстает из небытия и запускает обработчик через каждые 30 секунду. Проблема возникает со счетчиками при изменении лог уровня на входе во время нахождения самого контроллера в спячке. преднастройка контроллера перед переходом в HALT в принципе не вызывает сложности "настройки для перехода в Active Halt" Код
void sleep_mode(void) { AWU->APR &=(~0x3F) | 0x3E; // сброс предделителя и установка его на 62 AWU->TBR |=0xF; //установка таймера делителя на 30сек AWU->CSR |=AWU_CSR_AWUEN ; //все настроено на 30 сек. EXTI->CR1 &=(~EXTI_CR1_PDIS); сброс параметров прерывания EXTI->CR1 |= (0b10 << 6); //прерывание по спаду и по подьему FLASH->CR1 &=(~FLASH_CR1_HALT) | FLASH_CR1_AHALT; //врубаем микропотребление для Ftosh CNT_PORT_READ_IRQ(); // подключаем для PD2 и PD3 - прерывания enableYmtirrupts(); _asm("halt"); } Код
EXTI->CR1 |= (0b10 << 6); Возможны следующие варианты развития событий: Черной линией показан тайм слот работы AWU, справа и слева от него это режим когда контроллер бодрствует и опрашивает всевозможные датчики. в этом режиме никаких проблем быть не может. Далее возможна 1 ситуация без возникновения прерывания и 4 ситуации когда придется запускать обработчик 1) Без прерывания - уровень меняется с "0" на "1" когда контроллер бодствовал и с "1" на "0" после просыпания контроллера (синяя линия) - тут все понятно. 2) желтая линия на входе в режим спячки "1" на выходе - "0" - опять нет проблем если настроено Код
EXTI->CR1 |= (0b10 << 6) Код
EXTI->CR1 |= (0b10 << 6) P\S Хотелось бы услышать мнение кто сталкивался с таким, все идет к тому что придется добавлять несколько флагов и опрос счетчиков делать до ухода в Halt и сразу после выхода из него. Все усугубляется тем, что оба счетчика на одном прерывании висят и передвинуть я их не могу на соседние порты. Ну и еще одна фишечка STM8s хотя может у других тоже такое есть - правильно ли я понял, что пока вывод порта настроен на прерывание, получить его состояние - не получится, обязательно нужно перевести перед считыванием его в режим без прерывания у меня это макросами сделано. Код
#define CNT_PORT_READ() CNT_PORT->CR2 &=(u8)(~CNT1_PIN)&(u8)(~CNT2_PIN); #define CNT_PORT_READ_IRQ() CNT_PORT->CR2 |= (u8)CNT1_PIN | (u8)CNT2_PIN;
0
|
12.11.2016, 11:59 | |
Ответы с готовыми решениями:
2
вопрос по AWU STM8L101 вопрос по включению резонансного контура Вопрос по обработке бита ожидания в EXTI и NVIC IAR + STM8S103K3 + AWU |
0 / 0 / 0
Регистрация: 11.10.2013
Сообщений: 326
|
|
12.11.2016, 13:55 | 2 |
В общем вопрос можно закрыть - у меня же кварца нема тут :) перетащил 1Wire устройства на выводы "обрубки" под кварц (PA1, PA2) тем самым освободив 2 нормальных вывода :) на соседнем GPIO.
0
|
0 / 0 / 0
Регистрация: 11.10.2013
Сообщений: 326
|
|
13.11.2016, 15:34 | 3 |
Вопрос решил кардинально
Весь обработчик :) Код
INTERRUPT_HANDLER(EXTI_PORTD_IRQHomdler, 6) { _asm("IRET"); } т.е. вместо Код
EXTI->CR1 |= (0b11 << 6); Код
_asm("sym"); EXTI->CR1 |= (0b11 << 6); _asm("rym"); Вся задача обработчика прерывания теперь свелась к тому, чтобы просто обнаружить сам факт того, что какое то событие произошло и нужно чуть пораньше выйти из спячки чтоб его обработать, а при выходе все флаги они вот они лежат готовые и надо их только сравнить с теми которые были до ухода в прерывание... P\S зря грешил на проц, сейчас сижу все процедуры переписываю под новую логику.
0
|
13.11.2016, 15:34 | |
13.11.2016, 15:34 | |
Помогаю со студенческими работами здесь
3
Auto-wakeup (AWU) Combobox поиск по включению Супремум и инфимум на булеане, упорядоченном по включению Повернуть элипс по включению програмы на 90 градусов Звуковая плата препятствует включению компа. Как можно зациклить этот скрипт по включению и выключению Emissions? EXTI у STM8S103K3 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства
Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
|
Что такое NullReferenceException и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
|
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
|
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
|
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
|
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
|
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее:
На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
|
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript
В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
|
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
|
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален
В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
|
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
|
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели
В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
|