Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ускорение входа в прерывание
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
ZEbr
Есть прграмма написанная на PIC32.
Есть преравание по изменению уровня на ножке проца.
Время входа в прерывание 880 нс.
Вопрос такой. Как уменьшить время входа в прерывание?
Заранее спасибо!
V_G
Какова тактовая частота процессора?
Что вы подразумеваете под "временем входа в прерывание"?
Как вы измеряете это время?
skyv
А какое время входа в обработчик Вам необходимо иметь и почему?
У dsPIC33, к примеру, это время порядка 5-ти тактов CPU.
Входной фильтр вывода там не дает случайно задержку?
ZEbr
SCLK = 80MHz.
Под временем понимаю Время входа в обработчик.
Измеряю осциллографом, на ножке которая изменяет свое состояние по прерыванию.
Ножка на которую заведено прерывание подается меандр, по изменению уровня срабатывает прерывание и вкл. или выкл. измеряемая ножка.

Уменьшил время входа в прерывание поставив приоритет 7, время стало 600нс. Но это все равно много!
ZEbr
Сегодня посмотрел в симуляторе, время входа в обработчик составляет 300нс. Не пойму куда съедаются еще 300нс которые я намеряю? sad.gif sad.gif sad.gif
skyv
Цитата(ZEbr @ May 13 2014, 14:47) *
Уменьшил время входа в прерывание поставив приоритет 7, время стало 600нс. Но это все равно много!


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

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


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

попробуйте написать тупую программу toggle-ножки покругу и посмотреть осциллом
volodya
В PIC32 действительно устанавливается частота переферийных модулей с делителем от частоты CPU проверьте настройки.
Дополнительно С компилятор предполагает сохранение некотрых регистров.
Посмотрите ассемблерный код обработчика.
theBMV
Вы можете изменить свой скрипт компоновщика таким образом, чтобы Ваше прерывание умещалось непосредственно в таблице векторов прерываний (exception mem).
Василий Иванов
Основное ускорение обработки прерывания происходит именно при установке приоритета 7. Если приоритет 7, то часть регистров сохраняется аппаратно, а не программно, это сильно укорачивает время до начала обработки вашего прерывания. Долго ковырялся в дизассемблере и разочаровало то, что в PIC32. в любом случае даже при использовании теневых регистров (приоритет7), все равно при входе в прерывание, начинают сохраняться некоторые регистры в стек. Какие только я директивы не использовал, все равно чуть больше десятка операций остается.
Ускорить работу еще можно путем повышения тактовой частоты периферии, там для этого есть отдельный делитель.
Ну и еще вариант- разогнать ядро. У меня разгонялся до 120 МГц, но некоторые экземпляры работали не стабильно. На частоте 110-115 работали нормально все.
ar__systems
Цитата(Василий Иванов @ Jun 3 2015, 00:50) *
Основное ускорение обработки прерывания происходит именно при установке приоритета 7. Если приоритет 7, то часть регистров сохраняется аппаратно, а не программно, это сильно укорачивает время до начала обработки вашего прерывания. Долго ковырялся в дизассемблере и разочаровало то, что в PIC32.


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

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

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

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


Ну так настройте, в чем проблема?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.