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

 
 
 
Reply to this topicStart new topic
> Ускорение входа в прерывание, как уменьшить время реагирования на прерывание
ZEbr
сообщение May 13 2014, 05:25
Сообщение #1


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

Группа: Участник
Сообщений: 145
Регистрация: 2-12-10
Из: Воронеж
Пользователь №: 61 356



Есть прграмма написанная на PIC32.
Есть преравание по изменению уровня на ножке проца.
Время входа в прерывание 880 нс.
Вопрос такой. Как уменьшить время входа в прерывание?
Заранее спасибо!
Go to the top of the page
 
+Quote Post
V_G
сообщение May 13 2014, 08:57
Сообщение #2


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

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Какова тактовая частота процессора?
Что вы подразумеваете под "временем входа в прерывание"?
Как вы измеряете это время?
Go to the top of the page
 
+Quote Post
skyv
сообщение May 13 2014, 09:59
Сообщение #3


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

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



А какое время входа в обработчик Вам необходимо иметь и почему?
У dsPIC33, к примеру, это время порядка 5-ти тактов CPU.
Входной фильтр вывода там не дает случайно задержку?

Сообщение отредактировал skyv - May 13 2014, 10:01
Go to the top of the page
 
+Quote Post
ZEbr
сообщение May 13 2014, 11:47
Сообщение #4


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

Группа: Участник
Сообщений: 145
Регистрация: 2-12-10
Из: Воронеж
Пользователь №: 61 356



SCLK = 80MHz.
Под временем понимаю Время входа в обработчик.
Измеряю осциллографом, на ножке которая изменяет свое состояние по прерыванию.
Ножка на которую заведено прерывание подается меандр, по изменению уровня срабатывает прерывание и вкл. или выкл. измеряемая ножка.

Уменьшил время входа в прерывание поставив приоритет 7, время стало 600нс. Но это все равно много!

Сообщение отредактировал ZEbr - May 13 2014, 15:03
Go to the top of the page
 
+Quote Post
ZEbr
сообщение May 15 2014, 10:59
Сообщение #5


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

Группа: Участник
Сообщений: 145
Регистрация: 2-12-10
Из: Воронеж
Пользователь №: 61 356



Сегодня посмотрел в симуляторе, время входа в обработчик составляет 300нс. Не пойму куда съедаются еще 300нс которые я намеряю? sad.gif sad.gif sad.gif

Сообщение отредактировал ZEbr - May 15 2014, 10:59
Go to the top of the page
 
+Quote Post
skyv
сообщение May 15 2014, 12:53
Сообщение #6


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

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



Цитата(ZEbr @ May 13 2014, 14:47) *
Уменьшил время входа в прерывание поставив приоритет 7, время стало 600нс. Но это все равно много!


В Вашей тестовой задаче должен быть только один единственный обработчик.
Для этого случая приоритет не должен влиять на время входа в обработчик или
его влияние должно быть незначительным.
Data Sheet что рассказывает по данному вопросу?

Go to the top of the page
 
+Quote Post
megajohn
сообщение May 15 2014, 13:09
Сообщение #7


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

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



Цитата(ZEbr @ May 15 2014, 14:59) *
Сегодня посмотрел в симуляторе, время входа в обработчик составляет 300нс. Не пойму куда съедаются еще 300нс которые я намеряю? sad.gif sad.gif sad.gif


я в пиках не бум-бум, но насколько понимаю по аналогии с кортексами, частота периферии гораздо ниже чем частота ядра CPU. И собсвенно ожидать моментального "вкл. или выкл. измеряемая ножка" не придется

попробуйте написать тупую программу toggle-ножки покругу и посмотреть осциллом


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post
volodya
сообщение May 16 2014, 05:05
Сообщение #8


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

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



В PIC32 действительно устанавливается частота переферийных модулей с делителем от частоты CPU проверьте настройки.
Дополнительно С компилятор предполагает сохранение некотрых регистров.
Посмотрите ассемблерный код обработчика.


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


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

Группа: Свой
Сообщений: 131
Регистрация: 14-10-08
Из: г. Королев
Пользователь №: 40 940



Вы можете изменить свой скрипт компоновщика таким образом, чтобы Ваше прерывание умещалось непосредственно в таблице векторов прерываний (exception mem).
Go to the top of the page
 
+Quote Post
Василий Иванов
сообщение Jun 3 2015, 05:50
Сообщение #10





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



Основное ускорение обработки прерывания происходит именно при установке приоритета 7. Если приоритет 7, то часть регистров сохраняется аппаратно, а не программно, это сильно укорачивает время до начала обработки вашего прерывания. Долго ковырялся в дизассемблере и разочаровало то, что в PIC32. в любом случае даже при использовании теневых регистров (приоритет7), все равно при входе в прерывание, начинают сохраняться некоторые регистры в стек. Какие только я директивы не использовал, все равно чуть больше десятка операций остается.
Ускорить работу еще можно путем повышения тактовой частоты периферии, там для этого есть отдельный делитель.
Ну и еще вариант- разогнать ядро. У меня разгонялся до 120 МГц, но некоторые экземпляры работали не стабильно. На частоте 110-115 работали нормально все.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Jun 21 2015, 13:05
Сообщение #11


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(Василий Иванов @ Jun 3 2015, 00:50) *
Основное ускорение обработки прерывания происходит именно при установке приоритета 7. Если приоритет 7, то часть регистров сохраняется аппаратно, а не программно, это сильно укорачивает время до начала обработки вашего прерывания. Долго ковырялся в дизассемблере и разочаровало то, что в PIC32.


Оставьте в покое С32 и напишите свой обработчик на ассемблере.
Go to the top of the page
 
+Quote Post
Василий Иванов
сообщение Jun 22 2015, 04:36
Сообщение #12





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



Цитата(ar__systems @ Jun 21 2015, 16:05) *
Оставьте в покое С32 и напишите свой обработчик на ассемблере.

Осталось только обеспечить безопасное использование ресурсов. Чтобы обработчик на ассемблере не помешал остальному коду скомпилированному при помощи С32. Учитывая, то что описание ассемблера предоставлено компанией MIPS, а в микроконтроллере PIC32 функциональность ядра урезана, то разобраться в прявязке ядра к периферии не очень просто. Да и компилятор С32 на мой взгляд имеет мало настроек. Вобщем с ассемблером в PIC32 стоит связываться только если очень нужно.

Чтобы "дергать ножкой" в прерывании, надо внимательно настроить частоту периферии.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Jun 23 2015, 23:40
Сообщение #13


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Привязка ядра к периферии - это что значит? Каких ресурсов? Если вы знаете, для чего вам нужно прерывание, написать обработчик не должно представлять сложностей. Возьмите за основу обработчик сгенерированый C32. может вы можете его улучшить, скажем использовать меньше регистров и как следствие меньше сохранять.

Цитата
Чтобы "дергать ножкой" в прерывании, надо внимательно настроить частоту периферии.


Ну так настройте, в чем проблема?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 15:51
Рейтинг@Mail.ru


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