Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ARM Cortex M4 TI Tiva
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
IJAR
wacko.gif
В DS указано что время вызова обработчика прерывания детерминировано и равно 12-ти
тактам частоты процессора при автоматическое сохранение регистров.
При отладке программы , написанной на С/C++ Code Composer Studio, в обработчике прерывания от GPIO (видно в дизасемблерном коде ) компилятор вставляет команды push/pop (сохранения/восстановления регистров в стеке).
При этом регистр состояния процессора не сохраняется и не восстанавливается при возврате из обработчика
прерывания
Вопросы
1. На что уходят 12 тактов процессора при вызове обработчика прерывания
2 Если в эти 12 тактов не входит сохранение регистров процессора (контекста) то сколько времени
дополнительно занимает их сохранение
3. Как сохраняется/восстанавливается регистр состояния процессора


Зарание спасибо за помощь
Golikov A.
такты идут на работы машины прерываний.

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

http://vestnikmag.ru/wp-content/uploads/20...electronics.pdf
здесь написано что кортекс м4Ф автоматически сохраняет регистры, а как и куда не сказано, но если найти более официальный документ по этому вопросу будет все понятно..
IJAR
Цитата(Golikov A. @ Aug 19 2013, 14:47) *
такты идут на работы машины прерываний.
.....
кортекс м4Ф автоматически сохраняет регистры, а как и куда не сказано, но если найти более официальный документ по этому вопросу будет все понятно..

Н-да.... похоже весь контекст состоит из рег-ра состояния процессора и старого PC который грузится в LR а все остальное сохранять ручками и на все тратить такты, такты, такты ......и еще 12 штук тактов на возврат и + восстановление
контекста
scifi
Цитата(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, и необходимость в их сохранении отпадёт.
jcxz
Цитата(scifi @ Aug 20 2013, 15:40) *
Если такты так критичны, пишите обработчик на ассемблере. Тогда можно не трогать регистры r4-r11, и необходимость в их сохранении отпадёт.

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

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

В LR грузится не старый PC, а спец. значение (ссылка на вектор прерывания). Адрес возврата сохраняется на стеке как вам уже сказали.
IJAR
Цитата(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 - я ошибся
Спасибо!
Golikov A.
может легче уже ПЛИС поставить и получить хоть 50 уартов?
jcxz
Цитата(IJAR @ Aug 21 2013, 14:54) *
В этом процессоре 8 UART чего в других, кроме Ренесанса и Атмела, нет, а мне вообще надо 16 UART.
Использую 2-й такой же процессор в качестве сопроцессора

Может вы просто неправильно выбрали процессор?
Ставить для этого 2 процессора - по-моему избыточно. Если процессор не загружен на 100%, то может проще сделать программную эмуляцию UARTов?
Если загружен - взять более мощный и сделать программную эмуляцию на нем. wink.gif
IJAR
Цитата(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 мА
Golikov A.
Цитата(IJAR @ Aug 21 2013, 16:11) *
По выходу эмулировать 8 UART не проблема, но в том то и фишка что
надо Только принимать от 16-ти асинхронно работающих устройств и выдающих в ТТЛ UART 8N1
на скорости 200 000 б/с 2 байта без паузы, с периодичностью в несколько мл сек
причем в любое время может придти прерывание от ноги которое надо обслужить за 2 мк сек
в котором задействовано порядка 30-ти пинов проца
и которое может повторяться (сериями по max 32 шт) с интервалом 5 мк сек
интервал между сериями десятки мл сек
и до кучи потребление всей этой байды не должно превышаать 30 или на "крайняк" 40 мА


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

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

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

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

П.С. А как БМК расшифровывается?
IJAR
Цитата(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
jcxz
Цитата(IJAR @ Aug 22 2013, 11:50) *
А вот здесь, если можно, поподробней и лучше в личку или port.e<пес>маил<тчк>ру

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