реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Прерывания в HT PICC 18
musa
сообщение Feb 20 2010, 09:41
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 033
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 668



Помогите начинающему. Как правильно описать приоритеты прерываний в программе на С.
Go to the top of the page
 
+Quote Post
volodya
сообщение Feb 22 2010, 07:07
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



Дык в мануале стр. 65
Код
void interrupt low_priority tc_clr(void){
tick_count = 0;
}
и
void interrupt tc_int(void){
++tick_count;}

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


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post
musa
сообщение Feb 22 2010, 13:14
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 033
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 668



Цитата(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, хотелось бы по подробней.
Go to the top of the page
 
+Quote Post
volodya
сообщение Feb 23 2010, 07:10
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



Директива #pragma interrupt_level позволяет предотвратить вызов функции в прерывании одновременно с исполнением ее в main блоке. (в описании для STD версии это подробнее описано)


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post
musa
сообщение Feb 23 2010, 11:38
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 033
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 668



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


Ну это несколько расплывчато. А более подробно
Go to the top of the page
 
+Quote Post
volodya
сообщение Feb 24 2010, 05:57
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 194
Регистрация: 14-02-07
Из: УКРАИНА
Пользователь №: 25 344



Сразу оговорюсь-давно не использовал PICC18 в новых версиях PRO может интерпретироваться иначе.
Объявляется обработчик с идентификатором void interrupt и low_priority (если есть).
В обработчике после проверки флагов вызывается обработчик ф-ции для соотв. флага.
Если присутствует вызов ф-ции из обработчика и main части вываливается ERROR №ххх , поскольку при вызове функции в обработчике прерывания и одновременно в main цикле возможны конфликты и ошибки.
Для разрешения конфликтов исп. #pragma interrupt_level х , при этом (чесно не вспомню) или сохраняются лок. переменные ф-ции main части(в обработчике) или всавляется запрет прерывания в main.
В мануале есть описание и примеры приложены к PICC18.
Попробуйте посмотреть дизасмемблером. Удачи!!!


--------------------
"Для того чтобы избежать критики, надо ничего не делать, ничего не говорить и никем не быть"
"Каждый из нас бывает дураком по крайней мере пять минут в день; мудрость заключается в том, чтобы не превысить лимит." Элберт Хаббард
Go to the top of the page
 
+Quote Post
musa
сообщение Mar 2 2010, 17:16
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 033
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 668



Столкнулся с ещё одной проблемой. В PIC18F4585 упорно не хочет работать прерывание по переполнению 1-го таймера. С таймером 0 нет проблем. В чём нюанс.
Go to the top of the page
 
+Quote Post
HHIMERA
сообщение Mar 2 2010, 21:23
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 10-07-09
Пользователь №: 51 126



Цитата(musa @ Mar 2 2010, 20:16) *
Столкнулся с ещё одной проблемой. В PIC18F4585 упорно не хочет работать прерывание по переполнению 1-го таймера. С таймером 0 нет проблем. В чём нюанс.


А Peripheral Interrupt Enable bit установлен???

Сообщение отредактировал HHIMERA - Mar 2 2010, 21:24
Go to the top of the page
 
+Quote Post
musa
сообщение Mar 3 2010, 04:49
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 033
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 668



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


Вот как раз его то и не устанавливал. Просто в мануале написано что он активизирует периферийные прерывания. Но не понятно относится ли таймер к ним. Таймер 0 работает и без этрго бита.
Go to the top of the page
 
+Quote Post
Herz
сообщение Mar 3 2010, 07:49
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



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

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

[attachment=41424:Clipboard01.jpg]
Go to the top of the page
 
+Quote Post
Herz
сообщение Mar 3 2010, 08:02
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287



Глюк.

Сообщение отредактировал Herz - Mar 3 2010, 08:04
Go to the top of the page
 
+Quote Post
musa
сообщение Mar 3 2010, 12:50
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 033
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 668



Цитата(Herz @ Mar 3 2010, 10:49) *
Как это не понятно? А если посмотреть?


Спасибо. На картинку я вообще как то не посмотрел.
Go to the top of the page
 
+Quote Post
musa
сообщение Mar 7 2010, 12:15
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 033
Регистрация: 26-02-07
Из: Москва
Пользователь №: 25 668



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


Чтото тоже не помогло. Без прерывания таймер1 работает (Простенькая программа моргание светодиодом). Как только пытаешься сделать это через прерывание, не работает. Гдето туплю, не пойму где.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th June 2025 - 20:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01474 секунд с 7
ELECTRONIX ©2004-2016