Например TDA7294

Форум РадиоКот • Просмотр темы - вопрос по STM8S и внешним прерываниям
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 09:42:53

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Вт сен 10, 2013 16:10:31 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт янв 05, 2010 14:51:04
Сообщений: 54
Рейтинг сообщения: 0
В STM8S отсутствует статусный регистр, где устаналиваются флаги прерывания от пинов либо от порта в целом. В системе проектирования IAR, как известно, в обработчиках прерываний необходимо сразу сбрасывать флаг прерывания. Соответственно вопрос: если я использую STM8S, то какой флаг мне, собственно говоря, сбрасывать при прерывании от порта? Или вообще ничего не нужно сбрасывать? В STM8L есть статусный регистр SR, в котором нужно сбрасывать флаги внешних прерываний при обработке.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Чт сен 12, 2013 14:14:20 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 21
Рейтинг сообщений: 143
Зарегистрирован: Сб фев 21, 2009 13:11:40
Сообщений: 1900
Откуда: Москва
Рейтинг сообщения: 0
Приветствую. Давно не писал под stm8s, не помню как там - нет проектов старых под рукой.
вот пример обработчика внешнего прерывания из библиотеки:
Код:
INTERRUPT_HANDLER(EXTI_PORTB_IRQHandler, 4)
{
  if ((GPIO_ReadInputData(JOYSTICK_PORT) & JOYSTICK_LEFT_PIN) == 0x00)
  {
    GPIO_WriteReverse(LEDS_PORT, LED1_PIN);
  }
  if ((GPIO_ReadInputData(JOYSTICK_PORT) & JOYSTICK_RIGHT_PIN) == 0x00)
  {
    GPIO_WriteReverse(LEDS_PORT, LED2_PIN);
  }
  if ((GPIO_ReadInputData(JOYSTICK_PORT) & JOYSTICK_UP_PIN) == 0x00)
  {
    GPIO_WriteReverse(LEDS_PORT, LED3_PIN);
  }
  if ((GPIO_ReadInputData(JOYSTICK_PORT) & JOYSTICK_DOWN_PIN) == 0x00)
  {
    GPIO_WriteReverse(LEDS_PORT, LED4_PIN);
  } 
}
нет никаких сбросов флагов.

_________________
Ставим плюсы: )


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Чт сен 12, 2013 14:40:31 
Открыл глаза
Аватар пользователя

Зарегистрирован: Вт янв 05, 2010 14:51:04
Сообщений: 54
Рейтинг сообщения: 0
Спасибо. Приму к сведению. Просто ужасно мало внятного описания на эти камни. Да и в даташите ни слова об этом.


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Чт сен 12, 2013 17:52:58 
Открыл глаза

Зарегистрирован: Ср сен 19, 2012 12:37:44
Сообщений: 47
Откуда: Киев
Рейтинг сообщения: 0
Да, я в свое время тоже флаг искал, который надо сбросить.
Нет такого в 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 и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Пт окт 06, 2017 11:34:37 
Первый раз сказал Мяу!

Зарегистрирован: Ср апр 24, 2013 19:33:05
Сообщений: 21
Рейтинг сообщения: 0
Здравствуйте.
Разбираюсь с STM8S103F3, дошол до внешних прерываний. Не могу понять как работают приоритеты.
По задумки я вхожу в прерывание порта D, не выходя из прерывания активирую прерывание порта С. Т. к. порт С приорететней я должен оказаться в нем, но я остаюсь в D. Подскажите в чем ошибка.
Код:
#include "iostm8s103f3.h"

#define STRINGVECTOR(x) #x
#define ISR( a, b ) \
_Pragma( STRINGVECTOR( vector = (b) ) ) \
__interrupt void (a)( void )

void SomeDelay()
{
  for (unsigned long delay=0; delay<50000; delay++);
};

ISR(PortD_interrupt, EXTI3_vector) //прерывание D порта
{
while (PD_IDR_bit.IDR4 == 0)
{
   PB_ODR_bit.ODR5 ^= 1;
   SomeDelay();
   SomeDelay();
};
};

ISR(PortC_interrupt, EXTI2_vector) //прерывание C порта
{
while (PC_IDR_bit.IDR4 == 0)
{
   PB_ODR_bit.ODR5 ^= 1;
   SomeDelay();
};
};

int main( void )
{
  CLK_CKDIVR = 0;

  PB_DDR = 0xFF;
  PB_CR1 = 0xFF;

  //Настраиваем первую кнопку
  PC_DDR_DDR4 = 0; //На вход..
  PC_CR1_bit.C14 = 1; //Включаем внутренний подтягивающий резистор
  PC_CR2_bit.C24 = 1; //Прерывание разрешено

  //Настраиваем вторую кнопку
  PD_DDR_DDR4 = 0;//На вход..
  PD_CR1_bit.C14 = 1; //Включаем внутренний подтягивающий резистор
  PD_CR2_bit.C24 = 1; //Прерывание разрешено

  //Светодиод, управляемый кнопкой
  PB_DDR_bit.DDR5 = 1; //На выход
  PB_CR1_bit.C15 = 1; //В режиме push-pull

  //Настраиваем оба прерывания на срабатывание по спаду напряжения (задний фронт)
  EXTI_CR1_bit.PCIS = 2;
  EXTI_CR1_bit.PDIS = 2;

  //Устанавливаем приоритеты для прерывания порта С и D
  //ITC_SPR1_VECT2SPR=1;
  //ITC_SPR1_VECT3SPR=3;
 
  asm("RIM"); //Глобально разрешаем прерывания

  while (1); //Затупляемся в цикле
  {
  }
}


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания 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-е.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Пт окт 06, 2017 14:45:18 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
добавлю
из документа 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]
осталось установить биты приоритетов
Код:
I1 I0 Priority Level
1 0 Level 0 (main)
0 1 Level 1 Low
0 0 Level 2 High
1 1 Level 3 (= software priority disabled*)

з.ы. вроде так,мог конечно подзабыть, но таймерах приоритеты у меня работали


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Сб окт 07, 2017 06:28:08 
Первый раз сказал Мяу!

Зарегистрирован: Ср апр 24, 2013 19:33:05
Сообщений: 21
Рейтинг сообщения: 0
1) установка приоритетов закомментирована

Закоментировал умышленно, по задумке должны работать аппаратные приоритеты.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Сб окт 07, 2017 06:53:54 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Вот же, буквально недавно обсуждали приоритеты в stm8 в соседнем топике.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Пн окт 09, 2017 07:11:39 
Первый раз сказал Мяу!

Зарегистрирован: Ср апр 24, 2013 19:33:05
Сообщений: 21
Рейтинг сообщения: 0
Всем спасибо. Удалось настроить программные приоритеты
Код:
//Устанавливаем более низкий приоритет для прерывания порта С, чем для остальных
  ITC_SPR2_VECT5SPR=1;

Только почему не сработали аппаратные?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Пн окт 09, 2017 10:21:56 
Друг Кота
Аватар пользователя

Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25
Сообщений: 3832
Рейтинг сообщения: 0
Цитата:
почему не сработали аппаратные?

не понятный вопрос. От D сработало ж вроде:
но я остаюсь в D
Потом от C не попадает?
имхо SomeDelay() в прерывании лишнее - например, кроме светодиодов в прерывании, можно программные флаги установить, а SomeDelay() в цикле main вызывать по флагу


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Пн окт 09, 2017 12:12:39 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
Только почему не сработали аппаратные?

Цитата:
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

аппаратный приоритет определяет, какое прерывание будет выполняться после завершения текущего.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Вт окт 24, 2017 16:54:59 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Valek174 писал(а):
Код:
//Устанавливаем более низкий приоритет для прерывания порта С, чем для остальных
ITC_SPR2_VECT5SPR=1;

Только почему не сработали аппаратные?

Этот регистр отвечает за вектора 7:4.
Для векторов 7:5 Вы установили левел 2 (00b). Это порты CDE.
Для вектора 4 левел 1 (01b). Порт B.

Т.е. Вы одинаково опустили CDE и еще на один уровень ниже порт B.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: вопрос по STM8S и внешним прерываниям
СообщениеДобавлено: Ср окт 25, 2017 18:49:37 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Я был невнимателен. ITC_SPR2_VECT5SPR - это видимо структура с битовыми полями. Тогда все что я написал тут , конечно же неверно.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y