|
ADuC702x и обработчик прерывания FIQ |
|
|
|
 |
Ответов
|
Apr 27 2015, 07:18
|
Гуру
     
Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454

|
А как вы вернетесь то в точку где было прерывание, если вы из него улетите в вашу функцию... вам предется в функцию передавать точку возврата, делать там непонятный переход... а если опять будет прерывание?
Когда вы попадает в FIQ прерывание, у вас снимается флажок реакции на прерывания, по выходу из FIQ он ставиться снова. Никто вам не мешает, при переходе в вашу функцию из FIQ опять поставить этот флажок.
тогда если ваша функция отработает до конца, вы выйдите из FIQ в точку остановки программы. А если же у вас пока вы будите в функции возникнет прерывание, вы политите отработаете его и вернетесь в свою функцию, а когда ее закончите выйдите из FIQ в точку остановки программы.
Одна сложность вам надо сделать так чтобы повторно вы опять в FIQ не полетели, за этим просто надо следить.
|
|
|
|
|
Apr 27 2015, 09:36
|
Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194

|
Цитата(Golikov A. @ Apr 27 2015, 11:18)  А как вы вернетесь то в точку где было прерывание, если вы из него улетите в вашу функцию... вам предется в функцию передавать точку возврата, делать там непонятный переход... а если опять будет прерывание?
Когда вы попадает в FIQ прерывание, у вас снимается флажок реакции на прерывания, по выходу из FIQ он ставиться снова. Никто вам не мешает, при переходе в вашу функцию из FIQ опять поставить этот флажок.
тогда если ваша функция отработает до конца, вы выйдите из FIQ в точку остановки программы. А если же у вас пока вы будите в функции возникнет прерывание, вы политите отработаете его и вернетесь в свою функцию, а когда ее закончите выйдите из FIQ в точку остановки программы.
Одна сложность вам надо сделать так чтобы повторно вы опять в FIQ не полетели, за этим просто надо следить. У меня алгоритм работы устройства довольно простой - после возникновения прерывания FIQ максимально быстро перейти к функции регистрации данных с АЦП (записать данные в массив), затем записанный массив данных перезаписать в FLASH память и выключить прибор. Но в процессе регистрации возможна ситуации срабатывания монитора напряжения питания (из-за разряда батареи). В этом случае мне необходимо остановить процесс регистрации и завершит программу с установленным флагом в FLASH 'сбой напряжения питания'. В данный момент функцию регистрации я вызываю из FIQ, поэтому если происходит сбой по напряжению питания я теряю зарегистрированные данные и флаг с информацией о сбое напряжения питания тоже не устанавливается.
|
|
|
|
|
Apr 27 2015, 10:37
|
Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194

|
Цитата(jcxz @ Apr 27 2015, 14:31)  Зачем всё на FIQ повесили??? Прикладные ISR - расположите на IRQ, а монитор питания - на FIQ. Тогда он прервёт любой обработчик IRQ. Выбрал FIQ потому, что фоновая задача выполняется на низкой тактовой частоте ядра, а FIQ в ADUC702x обеспечивает аппаратное переключение на максимальную частоту тактирования ядра при возникновении прерывания FIQ. У прерывания IRQ такой возможности нет, а значит реакция на прерывание гораздо медленнее происходит.
|
|
|
|
|
Apr 27 2015, 14:14
|
Гуру
     
Группа: Свой
Сообщений: 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% так что можно и из прерывания это делать  они будут автоматом запрещены... без запрета проц вроде не просто флэш запорит, а вообще повиснуть может, нет? Заменить на MSP430 из серии с FRAM-памятью  Там что запись в ОЗУ, что во FRAM - никакой разницы. Не хватает ОЗУ - отрезал от памяти программ скока надо
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|