С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 11.10.2013
Сообщений: 326
1

Вопрос по одновременному включению EXTI и AWU

12.11.2016, 11:59. Показов 5018. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дописываю устройства для сбора данных с датчиков для умного дома на 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);
меняется в зависимости от состояния в котором находится вывод прямо перед уходом в спячку (0b10 - это проснуться при определении, что на вывод сигнал с 1 изменился на 0, 0b01 - соответственно наоборот.

Возможны следующие варианты развития событий:


Черной линией показан тайм слот работы AWU, справа и слева от него это режим когда контроллер бодрствует и опрашивает всевозможные датчики.
в этом режиме никаких проблем быть не может.

Далее возможна 1 ситуация без возникновения прерывания и 4 ситуации когда придется запускать обработчик
1) Без прерывания - уровень меняется с "0" на "1" когда контроллер бодствовал и с "1" на "0" после просыпания контроллера (синяя линия) - тут все понятно.
2) желтая линия на входе в режим спячки "1" на выходе - "0" - опять нет проблем если настроено
Код
EXTI->CR1 |= (0b10 << 6)
3) зеленая линия на входе в спячку "0" на выходе - "1" При настройке
Код
EXTI->CR1 |= (0b10 << 6)
4) вот тут засада !!! 2 фронта которые мне нужно считать оба без потери, внутри режима спячки.

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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2016, 11:59
Ответы с готовыми решениями:

вопрос по AWU STM8L101
Собственно три детских вопроса. 1. Не понимаю почему в доке (прилагаю скрин) указан прочерк для...

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

Вопрос по обработке бита ожидания в EXTI и NVIC
Описание ситуации. У меня устанавливается бит ожидания EXTI, дальше автоматически устанавливается...

IAR + STM8S103K3 + AWU
Пытаюсь загнать МК в Active-Halt mode. Периодически хочу просыпаться от AWU и проверять некоторые...

2
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");
}
Билбес я просто 10 раз перечитывал страницы 65 и 66 в RM016 и "слоненка не заметил" всего то и нужно было перед тем как включать фронты на подьем и спад сделать запрет прерывания (поставить приоритет программы на 11)
т.е. вместо
Код
EXTI->CR1 |= (0b11 << 6);
сделать
Код
_asm("sym");
EXTI->CR1 |= (0b11 << 6);
_asm("rym");
Короче вернул на один порт выводы, теперь у меня еще один нормальный внешний ADC освободился.
Вся задача обработчика прерывания теперь свелась к тому, чтобы просто обнаружить сам факт того, что какое то событие произошло и нужно чуть пораньше выйти из спячки чтоб его обработать, а при выходе все флаги они вот они лежат готовые и надо их только сравнить с теми которые были до ухода в прерывание...

P\S зря грешил на проц, сейчас сижу все процедуры переписываю под новую логику.
0
13.11.2016, 15:34
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.11.2016, 15:34
Помогаю со студенческими работами здесь

Auto-wakeup (AWU)
Почему работает с включенным HSI (LSI отключен),хотя по мануалу должен от HSE или LSI?...

Combobox поиск по включению
Здравсвуйте. Снова вопрос по combobox. Есть ли какой-либо поиск по содержимому? Хранится оно в...

Супремум и инфимум на булеане, упорядоченном по включению
1)http://ru.wikipedia.org/wiki/Решётка_(теория_множеств)...

Повернуть элипс по включению програмы на 90 градусов
Нужно что бы после включение програмы елипсс спустя несколько секунд плавно плавно повернулся на 90...

Звуковая плата препятствует включению компа.
Кто сталкивался? Значит так... звуковая карта Optiaudio16 на первом пне работает нормально....

Как можно зациклить этот скрипт по включению и выключению Emissions?
Нашел нужный скрипт по анимацию света в окнах. Но там можно добавить только один материал, а мне...

EXTI у STM8S103K3
Не могу разобраться с внешними прерываниями у данного контроллера. это читал, но не могу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
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-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru