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

:wacko:

В DS указано что время вызова обработчика прерывания детерминировано и равно 12-ти

тактам частоты процессора при автоматическое сохранение регистров.

При отладке программы , написанной на С/C++ Code Composer Studio, в обработчике прерывания от GPIO (видно в дизасемблерном коде ) компилятор вставляет команды push/pop (сохранения/восстановления регистров в стеке).

При этом регистр состояния процессора не сохраняется и не восстанавливается при возврате из обработчика

прерывания

Вопросы

1. На что уходят 12 тактов процессора при вызове обработчика прерывания

2 Если в эти 12 тактов не входит сохранение регистров процессора (контекста) то сколько времени

дополнительно занимает их сохранение

3. Как сохраняется/восстанавливается регистр состояния процессора

 

 

Зарание спасибо за помощь

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

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


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

такты идут на работы машины прерываний.

 

потому что кроме прерывания есть еще арбитраж их приоритета, сохранение регистра счетчика команд и прочих из ядра.

Но регистры сохраняются не в стэк, вернее правильнее сказать не во всех архитектурах регистры сохраняются в стэк. Есть архитектуры с теневыми регистрами, это копия набора регистров процессора, и при возникновении прерывания процессор просто переходит на работу с этим набором регистров.

 

http://vestnikmag.ru/wp-content/uploads/20...electronics.pdf

здесь написано что кортекс м4Ф автоматически сохраняет регистры, а как и куда не сказано, но если найти более официальный документ по этому вопросу будет все понятно..

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


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

такты идут на работы машины прерываний.

.....

кортекс м4Ф автоматически сохраняет регистры, а как и куда не сказано, но если найти более официальный документ по этому вопросу будет все понятно..

Н-да.... похоже весь контекст состоит из рег-ра состояния процессора и старого PC который грузится в LR а все остальное сохранять ручками и на все тратить такты, такты, такты ......и еще 12 штук тактов на возврат и + восстановление

контекста

 

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


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

Н-да.... похоже весь контекст состоит из рег-ра состояния процессора и старого PC который грузится в LR а все остальное сохранять ручками и на все тратить такты, такты, такты ......и еще 12 штук тактов на возврат и + восстановление контекста

Описание процессора говорит, что за эти 12 тактов среди прочего он сохраняет в стеке следующие регистры:

  • Program Counter (PC)
  • Processor Status Register (xPSR)
  • r0-r3
  • r12
  • Link Register (LR)
Если обработчик прерывания использует регистры r4-r11, то их тоже надо сохранить.

Если такты так критичны, пишите обработчик на ассемблере. Тогда можно не трогать регистры r4-r11, и необходимость в их сохранении отпадёт.

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


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

Если такты так критичны, пишите обработчик на ассемблере. Тогда можно не трогать регистры r4-r11, и необходимость в их сохранении отпадёт.

...или возьмите процессор с ядром ARM7/9 - там есть переключение контекста (на один из теневых наборов регистров) и можно ничего не сохранять (особенно для FIQ) :laugh:

 

Н-да.... похоже весь контекст состоит из рег-ра состояния процессора и старого PC который грузится в LR

В LR грузится не старый PC, а спец. значение (ссылка на вектор прерывания). Адрес возврата сохраняется на стеке как вам уже сказали.

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


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

Описание процессора говорит, что за эти 12 тактов среди прочего он сохраняет в стеке следующие регистры:

  • Program Counter (PC)
  • Processor Status Register (xPSR)
  • r0-r3
  • r12
  • Link Register (LR)
Если обработчик прерывания использует регистры r4-r11, то их тоже надо сохранить.

Если такты так критичны, пишите обработчик на ассемблере. Тогда можно не трогать регистры r4-r11, и необходимость в их сохранении отпадёт.

Все таки сохраняет/восстанавливает часть - это уж что то

> Если такты так критичны, пишите обработчик на ассемблере. Тогда можно не трогать регистры r4-r11, и необходимость в >их сохранении отпадёт

 

Очень критичны, применение ас-ма в обработчике прерывания очевидно

Да-а-а-а - возврат из прерывания командой "бранч по содержимому регистр" - это кончно надо додуматься,

хотя экономия одного кода команды - это много.

Спасибо!

 

 

...или возьмите процессор с ядром ARM7/9 - там есть переключение контекста (на один из теневых наборов регистров) и можно ничего не сохранять (особенно для FIQ) :laugh:

 

 

В LR грузится не старый PC, а спец. значение (ссылка на вектор прерывания). Адрес возврата сохраняется на стеке как вам уже сказали.

В этом процессоре 8 UART чего в других, кроме Ренесанса и Атмела, нет, а мне вообще надо 16 UART.

Использую 2-й такой же процессор в качестве сопроцессора

 

По поводу LR - я ошибся

Спасибо!

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


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

В этом процессоре 8 UART чего в других, кроме Ренесанса и Атмела, нет, а мне вообще надо 16 UART.

Использую 2-й такой же процессор в качестве сопроцессора

Может вы просто неправильно выбрали процессор?

Ставить для этого 2 процессора - по-моему избыточно. Если процессор не загружен на 100%, то может проще сделать программную эмуляцию UARTов?

Если загружен - взять более мощный и сделать программную эмуляцию на нем. ;)

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


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

Может вы просто неправильно выбрали процессор?

Ставить для этого 2 процессора - по-моему избыточно. Если процессор не загружен на 100%, то может проще сделать программную эмуляцию UARTов?

Если загружен - взять более мощный и сделать программную эмуляцию на нем. ;)

По выходу эмулировать 8 UART не проблема, но в том то и фишка что

надо Только принимать от 16-ти асинхронно работающих устройств и выдающих в ТТЛ UART 8N1

на скорости 200 000 б/с 2 байта без паузы, с периодичностью в несколько мл сек

причем в любое время может придти прерывание от ноги которое надо обслужить за 2 мк сек

в котором задействовано порядка 30-ти пинов проца

и которое может повторяться (сериями по max 32 шт) с интервалом 5 мк сек

интервал между сериями десятки мл сек

и до кучи потребление всей этой байды не должно превышаать 30 или на "крайняк" 40 мА

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

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


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

По выходу эмулировать 8 UART не проблема, но в том то и фишка что

надо Только принимать от 16-ти асинхронно работающих устройств и выдающих в ТТЛ UART 8N1

на скорости 200 000 б/с 2 байта без паузы, с периодичностью в несколько мл сек

причем в любое время может придти прерывание от ноги которое надо обслужить за 2 мк сек

в котором задействовано порядка 30-ти пинов проца

и которое может повторяться (сериями по max 32 шт) с интервалом 5 мк сек

интервал между сериями десятки мл сек

и до кучи потребление всей этой байды не должно превышаать 30 или на "крайняк" 40 мА

 

другими словами надо всего лишь поставить ПЛИС на входе...

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


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

другими словами надо всего лишь поставить ПЛИС на входе...

ПЛИС не "катит" из-за потребления - это уже проходили сейчас стоят 2 БМК Зеленоградские

но от них вынуждены отказаться

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


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

По выходу эмулировать 8 UART не проблема, но в том то и фишка что

надо Только принимать от 16-ти асинхронно работающих устройств и выдающих в ТТЛ UART 8N1

на скорости 200 000 б/с 2 байта без паузы, с периодичностью в несколько мл сек

причем в любое время может придти прерывание от ноги которое надо обслужить за 2 мк сек

И на прием - никакой проблемы. У вас скорость - фиксированная и формат по UART - тоже, это упрощает задачу. Вопрос только - хватит-ли общего быстродействия проца? Заводите DMA с группы ног и спокойно потом разбираете в фоне пришедший блок. Оверсэмплинг можно поставить поменьше - 8 например.

Для работы быстрых прерываний в обработчике прерываний DMA разрешаете сразу же на входе прерывания (для быстрых прерываний надо поставить наивысший приоритет).

Если все напишите оптимально то по-моему хорошие шансы что хватит 1го процессора, возможно даже М3. А с 2-мя у вас меньше шансов уложиться по потреблению.

Непонятно только - зачем 200кбод при таком малом траффике. если у вас 2 байта в неск. мсек, то лучше снизьте скорость раз в 10-100 и будет легче и потребление меньше.

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


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

И на прием - никакой проблемы. У вас скорость - фиксированная и формат по UART - тоже, это упрощает задачу. Вопрос только - хватит-ли общего быстродействия проца? Заводите DMA с группы ног и спокойно потом разбираете в фоне пришедший блок. Оверсэмплинг можно поставить поменьше - 8 например.

Для работы быстрых прерываний в обработчике прерываний DMA разрешаете сразу же на входе прерывания (для быстрых прерываний надо поставить наивысший приоритет).

Если все напишите оптимально то по-моему хорошие шансы что хватит 1го процессора, возможно даже М3. А с 2-мя у вас меньше шансов уложиться по потреблению.

Непонятно только - зачем 200кбод при таком малом траффике. если у вас 2 байта в неск. мсек, то лучше снизьте скорость раз в 10-100 и будет легче и потребление меньше.

Сопроцессор будет почти все время спать - важно интегральное потребление по току, на частоте до 8 МГц потребление

будет достаточно малым

>Непонятно только - зачем 200кбод при таком малом траффике.

не напрягайтесь - так сделано во внешнем устройстве чужой разработки и "место встречи изменить нельзя"

>И на прием - никакой проблемы.

А вот здесь, если можно, поподробней и лучше в личку или port.e<пес>маил<тчк>ру

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


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

ПЛИС не "катит" из-за потребления - это уже проходили сейчас стоят 2 БМК Зеленоградские

но от них вынуждены отказаться

 

что-то вы странное проходили, ей богу...

как может процессор с кучей периферии и уартом жрать больше отдельного уарта?

прелесть ПЛИС что вы делаете именно машину уарта, и все остальное выкидываете

 

Это я так тыкнул на угад...

http://kazus.ru/lenta/view/0_6586_0.html

CPLD с потреблением энергии в режиме ожидания всего 5мкА.

Ток потребления микросхемы в рабочем режиме при частоте 20мГц составляет 1мА или даже меньше

 

А вам 20 МГц нафиг не сдалось, на 1 все будет работать... И что у вас ПЛИС просыпаясь для работы на 2 байта раз в миллисекунду выйдет из ваших 2 миллиампер?

ЦПЛД + какой то крохотный микроконтроллер полюбому будет есть меньше 2 АРМов

 

Или я чего то не знаю?

 

П.С. А как БМК расшифровывается?

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


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

что-то вы странное проходили, ей богу...

как может процессор с кучей периферии и уартом жрать больше отдельного уарта?

прелесть ПЛИС что вы делаете именно машину уарта, и все остальное выкидываете

 

Это я так тыкнул на угад...

http://kazus.ru/lenta/view/0_6586_0.html

CPLD с потреблением энергии в режиме ожидания всего 5мкА.

Ток потребления микросхемы в рабочем режиме при частоте 20мГц составляет 1мА или даже меньше

 

А вам 20 МГц нафиг не сдалось, на 1 все будет работать... И что у вас ПЛИС просыпаясь для работы на 2 байта раз в миллисекунду выйдет из ваших 2 миллиампер?

ЦПЛД + какой то крохотный микроконтроллер полюбому будет есть меньше 2 АРМов

 

Или я чего то не знаю?

 

П.С. А как БМК расшифровывается?

>Или я чего то не знаю?

Конечно, я не могу тут расписывать всю работу девайса, там есть фильтрация с использованием Float64 и прочее...

Нам предлагали разработать 2 ПЛИС под часть этой задачи pin-to-pin с применяемыми БМК- стоимость пол-лимона .

 

БМК - базовый матричный кристалл БИС http://ru.wikipedia.org/wiki/%D0%91%D0%B0%...%B0%D0%BB%D0%BB

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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