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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> 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
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
jcxz
сообщение Aug 21 2013, 07:34
Сообщение #5


Гуру
******

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



Цитата(scifi @ Aug 20 2013, 15:40) *
Если такты так критичны, пишите обработчик на ассемблере. Тогда можно не трогать регистры r4-r11, и необходимость в их сохранении отпадёт.

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

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

В LR грузится не старый PC, а спец. значение (ссылка на вектор прерывания). Адрес возврата сохраняется на стеке как вам уже сказали.
Go to the top of the page
 
+Quote Post
IJAR
сообщение Aug 21 2013, 08:54
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 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
Golikov A.
сообщение Aug 21 2013, 10:49
Сообщение #7


Гуру
******

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



может легче уже ПЛИС поставить и получить хоть 50 уартов?
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 21 2013, 11:18
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 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
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 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
Golikov A.
сообщение Aug 21 2013, 12:41
Сообщение #10


Гуру
******

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



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


другими словами надо всего лишь поставить ПЛИС на входе...
Go to the top of the page
 
+Quote Post
IJAR
сообщение Aug 21 2013, 12:54
Сообщение #11


Местный
***

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



Цитата(Golikov A. @ Aug 21 2013, 16:41) *
другими словами надо всего лишь поставить ПЛИС на входе...

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


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


Гуру
******

Группа: Свой
Сообщений: 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
IJAR
сообщение Aug 22 2013, 05:50
Сообщение #13


Местный
***

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



Цитата(jcxz @ Aug 21 2013, 17:49) *
И на прием - никакой проблемы. У вас скорость - фиксированная и формат по UART - тоже, это упрощает задачу. Вопрос только - хватит-ли общего быстродействия проца? Заводите DMA с группы ног и спокойно потом разбираете в фоне пришедший блок. Оверсэмплинг можно поставить поменьше - 8 например.
Для работы быстрых прерываний в обработчике прерываний DMA разрешаете сразу же на входе прерывания (для быстрых прерываний надо поставить наивысший приоритет).
Если все напишите оптимально то по-моему хорошие шансы что хватит 1го процессора, возможно даже М3. А с 2-мя у вас меньше шансов уложиться по потреблению.
Непонятно только - зачем 200кбод при таком малом траффике. если у вас 2 байта в неск. мсек, то лучше снизьте скорость раз в 10-100 и будет легче и потребление меньше.

Сопроцессор будет почти все время спать - важно интегральное потребление по току, на частоте до 8 МГц потребление
будет достаточно малым
>Непонятно только - зачем 200кбод при таком малом траффике.
не напрягайтесь - так сделано во внешнем устройстве чужой разработки и "место встречи изменить нельзя"
>И на прием - никакой проблемы.
А вот здесь, если можно, поподробней и лучше в личку или port.e<пес>маил<тчк>ру


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post
Golikov A.
сообщение Aug 22 2013, 06:01
Сообщение #14


Гуру
******

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



Цитата(IJAR @ Aug 21 2013, 16:54) *
ПЛИС не "катит" из-за потребления - это уже проходили сейчас стоят 2 БМК Зеленоградские
но от них вынуждены отказаться


что-то вы странное проходили, ей богу...
как может процессор с кучей периферии и уартом жрать больше отдельного уарта?
прелесть ПЛИС что вы делаете именно машину уарта, и все остальное выкидываете

Это я так тыкнул на угад...
http://kazus.ru/lenta/view/0_6586_0.html
CPLD с потреблением энергии в режиме ожидания всего 5мкА.
Ток потребления микросхемы в рабочем режиме при частоте 20мГц составляет 1мА или даже меньше

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

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

П.С. А как БМК расшифровывается?
Go to the top of the page
 
+Quote Post
IJAR
сообщение Aug 22 2013, 07:02
Сообщение #15


Местный
***

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



Цитата(Golikov A. @ Aug 22 2013, 10:01) *
что-то вы странное проходили, ей богу...
как может процессор с кучей периферии и уартом жрать больше отдельного уарта?
прелесть ПЛИС что вы делаете именно машину уарта, и все остальное выкидываете

Это я так тыкнул на угад...
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


--------------------
Вяжешь - вой, а поедешь - песни пой.
Между "хочу" и "можно" всегда есть дистанция
Go to the top of the page
 
+Quote Post

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

 


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


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