Перейти к содержанию
    

Ускорение входа в прерывание

Есть прграмма написанная на PIC32.

Есть преравание по изменению уровня на ножке проца.

Время входа в прерывание 880 нс.

Вопрос такой. Как уменьшить время входа в прерывание?

Заранее спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какова тактовая частота процессора?

Что вы подразумеваете под "временем входа в прерывание"?

Как вы измеряете это время?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А какое время входа в обработчик Вам необходимо иметь и почему?

У dsPIC33, к примеру, это время порядка 5-ти тактов CPU.

Входной фильтр вывода там не дает случайно задержку?

Изменено пользователем skyv

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

SCLK = 80MHz.

Под временем понимаю Время входа в обработчик.

Измеряю осциллографом, на ножке которая изменяет свое состояние по прерыванию.

Ножка на которую заведено прерывание подается меандр, по изменению уровня срабатывает прерывание и вкл. или выкл. измеряемая ножка.

 

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

Изменено пользователем ZEbr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем ZEbr

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

В Вашей тестовой задаче должен быть только один единственный обработчик.

Для этого случая приоритет не должен влиять на время входа в обработчик или

его влияние должно быть незначительным.

Data Sheet что рассказывает по данному вопросу?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Дополнительно С компилятор предполагает сохранение некотрых регистров.

Посмотрите ассемблерный код обработчика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы можете изменить свой скрипт компоновщика таким образом, чтобы Ваше прерывание умещалось непосредственно в таблице векторов прерываний (exception mem).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Основное ускорение обработки прерывания происходит именно при установке приоритета 7. Если приоритет 7, то часть регистров сохраняется аппаратно, а не программно, это сильно укорачивает время до начала обработки вашего прерывания. Долго ковырялся в дизассемблере и разочаровало то, что в PIC32. в любом случае даже при использовании теневых регистров (приоритет7), все равно при входе в прерывание, начинают сохраняться некоторые регистры в стек. Какие только я директивы не использовал, все равно чуть больше десятка операций остается.

Ускорить работу еще можно путем повышения тактовой частоты периферии, там для этого есть отдельный делитель.

Ну и еще вариант- разогнать ядро. У меня разгонялся до 120 МГц, но некоторые экземпляры работали не стабильно. На частоте 110-115 работали нормально все.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Основное ускорение обработки прерывания происходит именно при установке приоритета 7. Если приоритет 7, то часть регистров сохраняется аппаратно, а не программно, это сильно укорачивает время до начала обработки вашего прерывания. Долго ковырялся в дизассемблере и разочаровало то, что в PIC32.

 

Оставьте в покое С32 и напишите свой обработчик на ассемблере.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Оставьте в покое С32 и напишите свой обработчик на ассемблере.

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Ну так настройте, в чем проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...