|
ARM Cortex M4 TI Tiva, Время перехода на прерывание от GPIO |
|
|
|
Aug 19 2013, 08:31
|

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

|
 В DS указано что время вызова обработчика прерывания детерминировано и равно 12-ти тактам частоты процессора при автоматическое сохранение регистров. При отладке программы , написанной на С/C++ Code Composer Studio, в обработчике прерывания от GPIO (видно в дизасемблерном коде ) компилятор вставляет команды push/pop (сохранения/восстановления регистров в стеке). При этом регистр состояния процессора не сохраняется и не восстанавливается при возврате из обработчика прерывания Вопросы 1. На что уходят 12 тактов процессора при вызове обработчика прерывания 2 Если в эти 12 тактов не входит сохранение регистров процессора (контекста) то сколько времени дополнительно занимает их сохранение 3. Как сохраняется/восстанавливается регистр состояния процессора Зарание спасибо за помощь
Сообщение отредактировал IJAR - Aug 19 2013, 10:25
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Aug 20 2013, 08:24
|

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

|
Цитата(Golikov A. @ Aug 19 2013, 14:47)  такты идут на работы машины прерываний. ..... кортекс м4Ф автоматически сохраняет регистры, а как и куда не сказано, но если найти более официальный документ по этому вопросу будет все понятно.. Н-да.... похоже весь контекст состоит из рег-ра состояния процессора и старого PC который грузится в LR а все остальное сохранять ручками и на все тратить такты, такты, такты ......и еще 12 штук тактов на возврат и + восстановление контекста
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Aug 21 2013, 08:54
|

Местный
  
Группа: Свой
Сообщений: 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)  В LR грузится не старый PC, а спец. значение (ссылка на вектор прерывания). Адрес возврата сохраняется на стеке как вам уже сказали. В этом процессоре 8 UART чего в других, кроме Ренесанса и Атмела, нет, а мне вообще надо 16 UART. Использую 2-й такой же процессор в качестве сопроцессора По поводу LR - я ошибся Спасибо!
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Aug 21 2013, 12:11
|

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

|
Цитата(jcxz @ Aug 21 2013, 15:18)  Может вы просто неправильно выбрали процессор? Ставить для этого 2 процессора - по-моему избыточно. Если процессор не загружен на 100%, то может проще сделать программную эмуляцию UARTов? Если загружен - взять более мощный и сделать программную эмуляцию на нем.  По выходу эмулировать 8 UART не проблема, но в том то и фишка что надо Только принимать от 16-ти асинхронно работающих устройств и выдающих в ТТЛ UART 8N1 на скорости 200 000 б/с 2 байта без паузы, с периодичностью в несколько мл сек причем в любое время может придти прерывание от ноги которое надо обслужить за 2 мк сек в котором задействовано порядка 30-ти пинов проца и которое может повторяться (сериями по max 32 шт) с интервалом 5 мк сек интервал между сериями десятки мл сек и до кучи потребление всей этой байды не должно превышаать 30 или на "крайняк" 40 мА
Сообщение отредактировал IJAR - Aug 21 2013, 12:18
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Aug 21 2013, 12:54
|

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

|
Цитата(Golikov A. @ Aug 21 2013, 16:41)  другими словами надо всего лишь поставить ПЛИС на входе... ПЛИС не "катит" из-за потребления - это уже проходили сейчас стоят 2 БМК Зеленоградские но от них вынуждены отказаться
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Aug 21 2013, 13:49
|
Гуру
     
Группа: Свой
Сообщений: 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 и будет легче и потребление меньше.
|
|
|
|
|
Aug 22 2013, 05:50
|

Местный
  
Группа: Свой
Сообщений: 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<пес>маил<тчк>ру
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
|
Aug 22 2013, 06:01
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
Цитата(IJAR @ Aug 21 2013, 16:54)  ПЛИС не "катит" из-за потребления - это уже проходили сейчас стоят 2 БМК Зеленоградские но от них вынуждены отказаться что-то вы странное проходили, ей богу... как может процессор с кучей периферии и уартом жрать больше отдельного уарта? прелесть ПЛИС что вы делаете именно машину уарта, и все остальное выкидываете Это я так тыкнул на угад... http://kazus.ru/lenta/view/0_6586_0.htmlCPLD с потреблением энергии в режиме ожидания всего 5мкА. Ток потребления микросхемы в рабочем режиме при частоте 20мГц составляет 1мА или даже меньше А вам 20 МГц нафиг не сдалось, на 1 все будет работать... И что у вас ПЛИС просыпаясь для работы на 2 байта раз в миллисекунду выйдет из ваших 2 миллиампер? ЦПЛД + какой то крохотный микроконтроллер полюбому будет есть меньше 2 АРМов Или я чего то не знаю? П.С. А как БМК расшифровывается?
|
|
|
|
|
Aug 22 2013, 07:02
|

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

|
Цитата(Golikov A. @ Aug 22 2013, 10:01)  что-то вы странное проходили, ей богу... как может процессор с кучей периферии и уартом жрать больше отдельного уарта? прелесть ПЛИС что вы делаете именно машину уарта, и все остальное выкидываете Это я так тыкнул на угад... http://kazus.ru/lenta/view/0_6586_0.htmlCPLD с потреблением энергии в режиме ожидания всего 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
--------------------
Вяжешь - вой, а поедешь - песни пой. Между "хочу" и "можно" всегда есть дистанция
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|