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

 
 
> ARM Cortex M4 TI Tiva, Время перехода на прерывание от GPIO
IJAR
сообщение Aug 19 2013, 08:31
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669



wacko.gif
В DS указано что время вызова обработчика прерывания детерминировано и равно 12-ти
тактам частоты процессора при автоматическое сохранение регистров.
При отладке программы , написанной на С/C++ Code Composer Studio, в обработчике прерывания от GPIO (видно в дизасемблерном коде ) компилятор вставляет команды push/pop (сохранения/восстановления регистров в стеке).
При этом регистр состояния процессора не сохраняется и не восстанавливается при возврате из обработчика
прерывания
Вопросы
1. На что уходят 12 тактов процессора при вызове обработчика прерывания
2 Если в эти 12 тактов не входит сохранение регистров процессора (контекста) то сколько времени
дополнительно занимает их сохранение
3. Как сохраняется/восстанавливается регистр состояния процессора


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

Сообщение отредактировал IJAR - Aug 19 2013, 10:25


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Aug 19 2013, 10:47
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



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

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

http://vestnikmag.ru/wp-content/uploads/20...electronics.pdf
здесь написано что кортекс м4Ф автоматически сохраняет регистры, а как и куда не сказано, но если найти более официальный документ по этому вопросу будет все понятно..
Go to the top of the page
 
+Quote Post
IJAR
сообщение Aug 20 2013, 08:24
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669



Цитата(Golikov A. @ Aug 19 2013, 14:47) *
такты идут на работы машины прерываний.
.....
кортекс м4Ф автоматически сохраняет регистры, а как и куда не сказано, но если найти более официальный документ по этому вопросу будет все понятно..

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


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
scifi
сообщение Aug 20 2013, 09:40
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 020
Регистрация: 7-02-07
Пользователь №: 25 136



Цитата(IJAR @ Aug 20 2013, 12:24) *
Н-да.... похоже весь контекст состоит из рег-ра состояния процессора и старого PC который грузится в LR а все остальное сохранять ручками и на все тратить такты, такты, такты ......и еще 12 штук тактов на возврат и + восстановление контекста

Описание процессора говорит, что за эти 12 тактов среди прочего он сохраняет в стеке следующие регистры:
  • Program Counter (PC)
  • Processor Status Register (xPSR)
  • r0-r3
  • r12
  • Link Register (LR)
Если обработчик прерывания использует регистры r4-r11, то их тоже надо сохранить.
Если такты так критичны, пишите обработчик на ассемблере. Тогда можно не трогать регистры r4-r11, и необходимость в их сохранении отпадёт.
Go to the top of the page
 
+Quote Post
IJAR
сообщение Aug 21 2013, 08:54
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669



Цитата(scifi @ Aug 20 2013, 13:40) *
Описание процессора говорит, что за эти 12 тактов среди прочего он сохраняет в стеке следующие регистры:
  • Program Counter (PC)
  • Processor Status Register (xPSR)
  • r0-r3
  • r12
  • Link Register (LR)
Если обработчик прерывания использует регистры r4-r11, то их тоже надо сохранить.
Если такты так критичны, пишите обработчик на ассемблере. Тогда можно не трогать регистры r4-r11, и необходимость в их сохранении отпадёт.

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

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


Цитата(jcxz @ Aug 21 2013, 11:34) *
...или возьмите процессор с ядром ARM7/9 - там есть переключение контекста (на один из теневых наборов регистров) и можно ничего не сохранять (особенно для FIQ) laugh.gif


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

В этом процессоре 8 UART чего в других, кроме Ренесанса и Атмела, нет, а мне вообще надо 16 UART.
Использую 2-й такой же процессор в качестве сопроцессора

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


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 21 2013, 11:18
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(IJAR @ Aug 21 2013, 14:54) *
В этом процессоре 8 UART чего в других, кроме Ренесанса и Атмела, нет, а мне вообще надо 16 UART.
Использую 2-й такой же процессор в качестве сопроцессора

Может вы просто неправильно выбрали процессор?
Ставить для этого 2 процессора - по-моему избыточно. Если процессор не загружен на 100%, то может проще сделать программную эмуляцию UARTов?
Если загружен - взять более мощный и сделать программную эмуляцию на нем. wink.gif
Go to the top of the page
 
+Quote Post
IJAR
сообщение Aug 21 2013, 12:11
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 232
Регистрация: 26-02-07
Из: г. Зеленоград
Пользователь №: 25 669



Цитата(jcxz @ Aug 21 2013, 15:18) *
Может вы просто неправильно выбрали процессор?
Ставить для этого 2 процессора - по-моему избыточно. Если процессор не загружен на 100%, то может проще сделать программную эмуляцию UARTов?
Если загружен - взять более мощный и сделать программную эмуляцию на нем. wink.gif

По выходу эмулировать 8 UART не проблема, но в том то и фишка что
надо Только принимать от 16-ти асинхронно работающих устройств и выдающих в ТТЛ UART 8N1
на скорости 200 000 б/с 2 байта без паузы, с периодичностью в несколько мл сек
причем в любое время может придти прерывание от ноги которое надо обслужить за 2 мк сек
в котором задействовано порядка 30-ти пинов проца
и которое может повторяться (сериями по max 32 шт) с интервалом 5 мк сек
интервал между сериями десятки мл сек
и до кучи потребление всей этой байды не должно превышаать 30 или на "крайняк" 40 мА

Сообщение отредактировал IJAR - Aug 21 2013, 12:18


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 21 2013, 13:49
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(IJAR @ Aug 21 2013, 18:11) *
По выходу эмулировать 8 UART не проблема, но в том то и фишка что
надо Только принимать от 16-ти асинхронно работающих устройств и выдающих в ТТЛ UART 8N1
на скорости 200 000 б/с 2 байта без паузы, с периодичностью в несколько мл сек
причем в любое время может придти прерывание от ноги которое надо обслужить за 2 мк сек

И на прием - никакой проблемы. У вас скорость - фиксированная и формат по UART - тоже, это упрощает задачу. Вопрос только - хватит-ли общего быстродействия проца? Заводите DMA с группы ног и спокойно потом разбираете в фоне пришедший блок. Оверсэмплинг можно поставить поменьше - 8 например.
Для работы быстрых прерываний в обработчике прерываний DMA разрешаете сразу же на входе прерывания (для быстрых прерываний надо поставить наивысший приоритет).
Если все напишите оптимально то по-моему хорошие шансы что хватит 1го процессора, возможно даже М3. А с 2-мя у вас меньше шансов уложиться по потреблению.
Непонятно только - зачем 200кбод при таком малом траффике. если у вас 2 байта в неск. мсек, то лучше снизьте скорость раз в 10-100 и будет легче и потребление меньше.
Go to the top of the page
 
+Quote Post



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

 


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


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