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

 
 
> 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
mantech
сообщение Apr 27 2015, 12:02
Сообщение #4


Гуру
******

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



Цитата(VadimNic_nt @ Apr 27 2015, 12:36) *
У меня алгоритм работы устройства довольно простой - после возникновения прерывания FIQ максимально быстро перейти к функции регистрации данных с АЦП (записать данные в массив), затем записанный массив данных перезаписать в FLASH память


Т.е. во флеш пишите из прерывания?? Знаете, сколь по длительности запись идет?? А прерывать запись флеши далеко не в каждом контроллере разрешается.

Цитата(VadimNic_nt @ Apr 27 2015, 14:51) *
Ждать выхода PLL на режим не нужно.

Странно, почти везде требуется время...
Go to the top of the page
 
+Quote Post
VadimNic_nt
сообщение Apr 27 2015, 17:00
Сообщение #5


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

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



Цитата(mantech @ Apr 27 2015, 16:02) *
Т.е. во флеш пишите из прерывания?? Знаете, сколь по длительности запись идет?? А прерывать запись флеши далеко не в каждом контроллере разрешается.


Странно, почти везде требуется время...


Нет, FLASH пишется уже не из прерывания, во время записи прерывания запрещены все. Вот такие контроллеры ADI делает, ждать выхода PLL на режим не нужно. biggrin.gif

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

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


Заменить на MSP430 из серии с FRAM-памятью wink.gif
Там что запись в ОЗУ, что во FRAM - никакой разницы. Не хватает ОЗУ - отрезал от памяти программ скока надо wink.gif


АЦП должно регистрировать сигнал который вызвал срабатывание компаратора и прерывание FIQ. Фронт сигнала достаточно крутой, поэтому задержки начала регистрации сигнала приведут к потере информации о форме сигнала. При возникновении FIQ в регистре PLL аппаратно сбрасываются биты, задающие коэффициент умножения, так что при в входе в функцию-обработчик FIQ контроллер работает уже на максимальной частоте (впрочем эту возможность можно отключить в файле конфигурации МК), источник тактирования не меняется - всегда работает от собственного RC генератора 32768 Гц. PLL у МК ADUC какая-то хитрая - необходимости ждать выхода PLL на режим не нужно (в документации про это нет информации, да и соответствующих бит в регистрах тоже нет). Запись во FLASH осуществляется после окончания регистрации, при этом используется собственная FLASH память МК. Стирание FLASH заранее - при подготовке прибора к работе. Прибор очень миниатюрный - диаметр 11 мм, высота порядка 15 мм :-), поэтому схемотехнической мысли растекаться особенно некуда :-)?
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   Цитата(VadimNic_nt @ Apr 27 2015, 15:36) ...   Apr 27 2015, 10:31
||- - VadimNic_nt   Цитата(jcxz @ Apr 27 2015, 14:31) Зачем в...   Apr 27 2015, 10:37
||- - jcxz   Цитата(VadimNic_nt @ Apr 27 2015, 16:37) ...   Apr 27 2015, 14:14
||- - mantech   Цитата(jcxz @ Apr 27 2015, 17:14) Заменит...   Apr 28 2015, 06:45
||- - jcxz   Цитата(mantech @ Apr 28 2015, 12:45) Дак ...   Apr 28 2015, 07:05
|- - 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 Текстовая версия Сейчас: 24th July 2025 - 13:02
Рейтинг@Mail.ru


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