@sheromyan

Как обрабатывать прерывания в STM8 не используя SPL?

Я использую компилятор от Cosmic, в качестве IDE использую STVD. Хотел бы узнать, как написать обработчики прерываний не используя SPL. Допустим, прерывание по таймеру. Я настраиваю регистры нужного таймера, всё сделал как надо, а что дальше?
  • Вопрос задан
  • 1313 просмотров
Решения вопроса 1
@sheromyan Автор вопроса
Нашел сам. В STVD создается вектор прерываний. В main.c записываем функцию:
\@far \@interrupt IRQ_Handler_TIM4(void)
{
/*тут располагается код*/
return;
}
после чего записываем ее в main.h, а также не забываем вписать файл main.h в файл вектора прерываний и вписать обработчик в сам вектор (для TIM4 на STM8S003 это 23 прерывание). Также не забываем разрешить прерывания ассемблерной командой RIM (_asm("RIM\n");) Всё, оно работает, при соблюдении условий, которые вы указали при настройке таймера.
Возможные грабли:
1. Правильно настроили таймер, включили прерывания, всё скомпилировалось, но прерывание не наступает. Решение: забыли подать тактирование на таймер (есть такой фетиш у ST).
2. Не включено прерывание по событию. Решение: настройте таймер согласно Reference manual на нужный чип.
На самом деле граблей много, главное - внимательно изучать Reference manual, особенно описание регистров.
В чём плюс отказа от SPL: всегда знаешь как это работает, ускоряется выполнение программы (меньше вызовов функций) и уменьшается размер прошивки (меньше лишнего кода)(в частности размер прошивки уменьшился с 3 килобайт до 800 байт при том же функционале).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@sbhidden
чтобы убрать неиспользуемые функции (читай - уменьшить код) в меню самого COSMIC-а:
-
появится окно настроек проекта, там:
Вкладка - "выпадающий" список - выбрать
Поставить галку на нажать OK и перекомпилировать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы