Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Прерывания в HT PICC 18
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
musa
Помогите начинающему. Как правильно описать приоритеты прерываний в программе на С.
volodya
Дык в мануале стр. 65
Код
void interrupt low_priority tc_clr(void){
tick_count = 0;
}
и
void interrupt tc_int(void){
++tick_count;}

для соотв. младбшего и старшего приоритета
далее в прерываниях проверяются соотв. флаги. и к каждому флагу свой обработчик
musa
Цитата(volodya @ Feb 22 2010, 10:07) *
Дык в мануале стр. 65
Код
void interrupt low_priority tc_clr(void){
tick_count = 0;
}
и
void interrupt tc_int(void){
++tick_count;}

для соотв. младбшего и старшего приоритета
далее в прерываниях проверяются соотв. флаги. и к каждому флагу свой обработчик


Спасибо. Только у меня оно на 105 странице. И ещё, там упоминается вскользь функция
interrupt_level, хотелось бы по подробней.
volodya
Директива #pragma interrupt_level позволяет предотвратить вызов функции в прерывании одновременно с исполнением ее в main блоке. (в описании для STD версии это подробнее описано)
musa
Цитата(volodya @ Feb 23 2010, 10:10) *
Директива #pragma interrupt_level позволяет предотвратить вызов функции в прерывании одновременно с исполнением ее в main блоке. (в описании для STD версии это подробнее описано)


Ну это несколько расплывчато. А более подробно
volodya
Сразу оговорюсь-давно не использовал PICC18 в новых версиях PRO может интерпретироваться иначе.
Объявляется обработчик с идентификатором void interrupt и low_priority (если есть).
В обработчике после проверки флагов вызывается обработчик ф-ции для соотв. флага.
Если присутствует вызов ф-ции из обработчика и main части вываливается ERROR №ххх , поскольку при вызове функции в обработчике прерывания и одновременно в main цикле возможны конфликты и ошибки.
Для разрешения конфликтов исп. #pragma interrupt_level х , при этом (чесно не вспомню) или сохраняются лок. переменные ф-ции main части(в обработчике) или всавляется запрет прерывания в main.
В мануале есть описание и примеры приложены к PICC18.
Попробуйте посмотреть дизасмемблером. Удачи!!!
musa
Столкнулся с ещё одной проблемой. В PIC18F4585 упорно не хочет работать прерывание по переполнению 1-го таймера. С таймером 0 нет проблем. В чём нюанс.
HHIMERA
Цитата(musa @ Mar 2 2010, 20:16) *
Столкнулся с ещё одной проблемой. В PIC18F4585 упорно не хочет работать прерывание по переполнению 1-го таймера. С таймером 0 нет проблем. В чём нюанс.


А Peripheral Interrupt Enable bit установлен???
musa
Цитата(HHIMERA @ Mar 3 2010, 00:23) *
А Peripheral Interrupt Enable bit установлен???


Вот как раз его то и не устанавливал. Просто в мануале написано что он активизирует периферийные прерывания. Но не понятно относится ли таймер к ним. Таймер 0 работает и без этрго бита.
Herz
Цитата(musa @ Mar 3 2010, 06:49) *
Вот как раз его то и не устанавливал. Просто в мануале написано что он активизирует периферийные прерывания. Но не понятно относится ли таймер к ним. Таймер 0 работает и без этрго бита.

Как это не понятно? А если посмотреть?

Нажмите для просмотра прикрепленного файла
Herz
Глюк.
musa
Цитата(Herz @ Mar 3 2010, 10:49) *
Как это не понятно? А если посмотреть?


Спасибо. На картинку я вообще как то не посмотрел.
musa
Цитата(HHIMERA @ Mar 3 2010, 00:23) *
А Peripheral Interrupt Enable bit установлен???


Чтото тоже не помогло. Без прерывания таймер1 работает (Простенькая программа моргание светодиодом). Как только пытаешься сделать это через прерывание, не работает. Гдето туплю, не пойму где.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.