В STM8S отсутствует статусный регистр, где устаналиваются флаги прерывания от пинов либо от порта в целом. В системе проектирования IAR, как известно, в обработчиках прерываний необходимо сразу сбрасывать флаг прерывания. Соответственно вопрос: если я использую STM8S, то какой флаг мне, собственно говоря, сбрасывать при прерывании от порта? Или вообще ничего не нужно сбрасывать? В STM8L есть статусный регистр SR, в котором нужно сбрасывать флаги внешних прерываний при обработке.
Да, я в свое время тоже флаг искал, который надо сбросить. Нет такого в STM8S.
Кроме того, после выхода из обработчика, если условие для прерывание все еще выполняется - то оно будет сгенерировано опять, и опять, и опять, и опять, и опять... Поэтому в большинстве случаев приходится инвертировать условие
Вот пример кода из одного моего проектика:
Код:
//Process external interrupt char PCIS = EXTI_CR1_PCIS; char IDR = PC_IDR_IDR5; if ((PCIS + IDR) == 2) { //Check is external interrupt //В этом проекте у меня один обработчик на разные типы прерываний, поэтому проверяю что было причиной EXTI_CR1_PCIS = ~PCIS; //Invert interrupt sensivity
<здесь логика обработки> }
Также не нашел простого способа (флага) что бы понять какое из внешних событий вызвало прерывание, в случае когда на несколько ног один обработчик.
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Здравствуйте. Разбираюсь с STM8S103F3, дошол до внешних прерываний. Не могу понять как работают приоритеты. По задумки я вхожу в прерывание порта D, не выходя из прерывания активирую прерывание порта С. Т. к. порт С приорететней я должен оказаться в нем, но я остаюсь в D. Подскажите в чем ошибка.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
Добавлено: Пт окт 06, 2017 13:55:34
Друг Кота
Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53 Сообщений: 3092 Откуда: москва, уфа
Рейтинг сообщения:0
1) установка приоритетов закомментирована 2) для портов C и D оно лежит в регистре ISPR2, по номерам векторов называтся будут наверно VECT5 и VECT6, хз как там в IAR-е.
добавлю из документа RM0016 Software priority register x (ITC_SPRx) Reset value: 0xFF
номера векторов (смотрел правда документ STM8S003, должно быть также вроде) 5 EXTI2 Port C external interrupts 6 EXTI3 Port D external interrupts
значит в регистре (Software priority register x (ITC_SPRx) который Reset value: 0xFF) конкретно ITC_SPR2 раз у него есть установка битов VECT7SPR[1:0] VECT6SPR[1:0] VECT5SPR[1:0] VECT4SPR[1:0] осталось установить биты приоритетов
не понятный вопрос. От D сработало ж вроде: но я остаюсь в D Потом от C не попадает? имхо SomeDelay() в прерывании лишнее - например, кроме светодиодов в прерывании, можно программные флаги установить, а SomeDelay() в цикле main вызывать по флагу
Concurrent interrupt management mode In this mode all interrupts are interrupt priority level 3 so that none of them can be interrupted, except by a TLI, RESET, or TRAP
аппаратный приоритет определяет, какое прерывание будет выполняться после завершения текущего.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения