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

 
 
> ADuC702x и обработчик прерывания FIQ
VadimNic_nt
сообщение Apr 26 2015, 10:07
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194



Здравствуйте форумчане!

Посоветуйте способ выхода из прерывания FIQ в микроконтроллере ADuC702x (ядро ARM7TDMI) на адрес нужной функции.
Из прерывания FIQ вызывать эту функцию не хочу, так как она по времени выполнения занимает порядка 30 мс, к тому же в процессе ее выполнения
может произойти прерывание от монитора напряжения питания в случае возникновения которого необходимо корректное остановка работы микроконтроллера.
Если у кого-то есть такой опыт, прошу поделиться примером кода. Использую в проекте Keil.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Golikov A.
сообщение Apr 27 2015, 07:18
Сообщение #2


Гуру
******

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



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

Когда вы попадает в FIQ прерывание, у вас снимается флажок реакции на прерывания, по выходу из FIQ он ставиться снова. Никто вам не мешает, при переходе в вашу функцию из FIQ опять поставить этот флажок.

тогда если ваша функция отработает до конца, вы выйдите из FIQ в точку остановки программы.
А если же у вас пока вы будите в функции возникнет прерывание, вы политите отработаете его и вернетесь в свою функцию, а когда ее закончите выйдите из FIQ в точку остановки программы.

Одна сложность вам надо сделать так чтобы повторно вы опять в FIQ не полетели, за этим просто надо следить.
Go to the top of the page
 
+Quote Post
VadimNic_nt
сообщение Apr 27 2015, 09:36
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194



Цитата(Golikov A. @ Apr 27 2015, 11:18) *
А как вы вернетесь то в точку где было прерывание, если вы из него улетите в вашу функцию...
вам предется в функцию передавать точку возврата, делать там непонятный переход... а если опять будет прерывание?

Когда вы попадает в FIQ прерывание, у вас снимается флажок реакции на прерывания, по выходу из FIQ он ставиться снова. Никто вам не мешает, при переходе в вашу функцию из FIQ опять поставить этот флажок.

тогда если ваша функция отработает до конца, вы выйдите из FIQ в точку остановки программы.
А если же у вас пока вы будите в функции возникнет прерывание, вы политите отработаете его и вернетесь в свою функцию, а когда ее закончите выйдите из FIQ в точку остановки программы.

Одна сложность вам надо сделать так чтобы повторно вы опять в FIQ не полетели, за этим просто надо следить.

У меня алгоритм работы устройства довольно простой - после возникновения прерывания FIQ максимально быстро перейти к функции регистрации данных с АЦП (записать данные в массив), затем записанный массив данных перезаписать в FLASH память и выключить прибор. Но в процессе регистрации возможна ситуации срабатывания монитора напряжения питания (из-за разряда батареи). В этом случае мне необходимо остановить процесс регистрации и завершит программу с установленным флагом в FLASH 'сбой напряжения питания'. В данный момент функцию регистрации я вызываю из FIQ, поэтому если происходит сбой по напряжению питания я теряю зарегистрированные данные и флаг с информацией о сбое напряжения питания тоже не устанавливается.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 27 2015, 10:31
Сообщение #4


Гуру
******

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



Цитата(VadimNic_nt @ Apr 27 2015, 15:36) *
В данный момент функцию регистрации я вызываю из FIQ, поэтому если происходит сбой по напряжению питания я теряю зарегистрированные данные и флаг с информацией о сбое напряжения питания тоже не устанавливается.

Зачем всё на FIQ повесили??? Прикладные ISR - расположите на IRQ, а монитор питания - на FIQ. Тогда он прервёт любой обработчик IRQ.
Go to the top of the page
 
+Quote Post
VadimNic_nt
сообщение Apr 27 2015, 10:37
Сообщение #5


Частый гость
**

Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194



Цитата(jcxz @ Apr 27 2015, 14:31) *
Зачем всё на FIQ повесили??? Прикладные ISR - расположите на IRQ, а монитор питания - на FIQ. Тогда он прервёт любой обработчик IRQ.

Выбрал FIQ потому, что фоновая задача выполняется на низкой тактовой частоте ядра, а FIQ в ADUC702x обеспечивает аппаратное переключение на максимальную частоту тактирования ядра при возникновении прерывания FIQ. У прерывания IRQ такой возможности нет, а значит реакция на прерывание гораздо медленнее происходит.
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 27 2015, 14:14
Сообщение #6


Гуру
******

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



Цитата(VadimNic_nt @ Apr 27 2015, 16:37) *
Выбрал FIQ потому, что фоновая задача выполняется на низкой тактовой частоте ядра, а FIQ в ADUC702x обеспечивает аппаратное переключение на максимальную частоту тактирования ядра при возникновении прерывания FIQ. У прерывания IRQ такой возможности нет, а значит реакция на прерывание гораздо медленнее происходит.

Что мешает в обработчике IRQ сделать то же самое программно?
И что именно там делается с частотой аппаратно?: включается и разгоняется PLL или меняется источник тактирования (PLL/внутренний RC) или просто меняется делитель тактовой перед CPU?
Если первое - то время стабилизации PLL довольно велико и много больше времени входа в любой ISR.
Если второе или третье - то программно переключить источник (при условии, что он уже работает и готов) или изменить делитель тактовой CPU дело одной-двух записей в регистры на входе в обработчик IRQ.
Если Вы не вынесете монитор питания в FIQ, а прочие прерывания - в IRQ, а всё повесите на FIQ, то новый FIQ монитора у Вас не вызовется никак до окончания обработки текущего ISR
(у Вас наверное и другие ISR в системе есть?). Ну если только не предпринять каких-то хитрых манипуляций с режимами работы CPU.

Да и вообще - говорить о скорости реакции на прерывание, учитывая какую Вам работу на сделать по его обслуживанию (работа с ADC, запись флешь) смешно.
Она будет несравнима мала по сравнению со временем доступа к флешь.
Флешь у Вас кстати какая? SPI или ...?
А учитываете, что если сработал монитор, а у вас уже идёт, не дай бог, операция стирания, сколько придётся ждать?
Может всё-таки Вам лучше для записи событий монитора поставить батарейное ОЗУ или FRAM?

Цитата(Golikov A. @ Apr 27 2015, 19:50) *
Запись во внутреннюю флэш это вещь такая... но с другой стороны для нее все равно надо прерывания запрещать в 90% так что можно и из прерывания это делатьsm.gif они будут автоматом запрещены... без запрета проц вроде не просто флэш запорит, а вообще повиснуть может, нет?

Заменить на MSP430 из серии с FRAM-памятью wink.gif
Там что запись в ОЗУ, что во FRAM - никакой разницы. Не хватает ОЗУ - отрезал от памяти программ скока надо wink.gif
Go to the top of the page
 
+Quote Post
mantech
сообщение Apr 28 2015, 06:45
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(jcxz @ Apr 27 2015, 17:14) *
Заменить на MSP430 из серии с FRAM-памятью
Там что запись в ОЗУ, что во FRAM - никакой разницы. Не хватает ОЗУ - отрезал от памяти программ скока надо


Дак уж лучше на стм, там есть оч. хорошая штука, как подпитываемая часовой или другой батарейкой, память. Причем это обычное озу, со всеми характеристиками статической памяти, но питается из другого домена, размер до 4килобайт. Во многих случаях с батарейным питанием выручала...
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- VadimNic_nt   ADuC702x и обработчик прерывания FIQ   Apr 26 2015, 10:07
- - mantech   Цитата(VadimNic_nt @ Apr 26 2015, 13:07) ...   Apr 26 2015, 10:49
|- - VadimNic_nt   Цитата(mantech @ Apr 26 2015, 13:49) А чт...   Apr 27 2015, 07:05
|- - jcxz   Цитата(VadimNic_nt @ Apr 27 2015, 13:05) ...   Apr 27 2015, 09:14
|- - mantech   Цитата(Golikov A. @ Apr 27 2015, 10:18) О...   Apr 27 2015, 08:34
||- - jcxz   Цитата(mantech @ Apr 28 2015, 12:45) Дак ...   Apr 28 2015, 07:05
|- - mantech   Цитата(VadimNic_nt @ Apr 27 2015, 12:36) ...   Apr 27 2015, 12:02
|- - VadimNic_nt   Цитата(mantech @ Apr 27 2015, 16:02) Т.е....   Apr 27 2015, 17:00
|- - jcxz   Цитата(VadimNic_nt @ Apr 27 2015, 23:00) ...   Apr 28 2015, 04:51
|- - VadimNic_nt   Цитата(jcxz @ Apr 28 2015, 07:51) Как уже...   Apr 28 2015, 08:48
|- - jcxz   Цитата(VadimNic_nt @ Apr 28 2015, 14:48) ...   Apr 29 2015, 03:59
- - Golikov A.   мне помниться что для FIQ был свой флаг, нет? То е...   Apr 27 2015, 08:46
- - Golikov A.   А если в фик поставить флаг новые данные, а данные...   Apr 27 2015, 11:27
|- - VadimNic_nt   Цитата(Golikov A. @ Apr 27 2015, 15:27) А...   Apr 27 2015, 11:51
- - Golikov A.   Там может быть стоит переход с PLL клока на внутре...   Apr 27 2015, 13:50
- - Golikov A.   ну так кто вам мешает руками этот делитель перебро...   Apr 27 2015, 18:00
- - Golikov A.   Что-то мне говорит что ADuC - это фигня со встроен...   Apr 28 2015, 05:07
- - Golikov A.   ну учитывая габариты не думаю что там много место ...   Apr 28 2015, 07:53
|- - mantech   Цитата(Golikov A. @ Apr 28 2015, 10:53) F...   Apr 28 2015, 09:41
|- - VadimNic_nt   Цитата(mantech @ Apr 28 2015, 13:41) Я та...   Apr 28 2015, 10:05
- - Golikov A.   ЦитатаЯ так понимаю, что эта FRAM - разновидность ...   Apr 28 2015, 10:57
|- - mantech   Цитата(Golikov A. @ Apr 28 2015, 13:57) д...   Apr 28 2015, 16:36
- - Golikov A.   FM23MLD16 (8 Мбит) 10^14 циклов перезаписи, малюсе...   Apr 28 2015, 17:15
- - Golikov A.   ЦитатаА "чем больше тем лучше" - это рад...   Apr 29 2015, 06:02
|- - jcxz   Цитата(Golikov A. @ Apr 29 2015, 12:02) к...   Apr 29 2015, 07:40
- - Golikov A.   Да верно, это я чего-то напутал. MSP430F149 прост...   Apr 29 2015, 16:37


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 11:55
Рейтинг@Mail.ru


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