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

|
Цитата(VadimNic_nt @ Apr 27 2015, 12:36)  У меня алгоритм работы устройства довольно простой - после возникновения прерывания FIQ максимально быстро перейти к функции регистрации данных с АЦП (записать данные в массив), затем записанный массив данных перезаписать в FLASH память Т.е. во флеш пишите из прерывания?? Знаете, сколь по длительности запись идет?? А прерывать запись флеши далеко не в каждом контроллере разрешается. Цитата(VadimNic_nt @ Apr 27 2015, 14:51)  Ждать выхода PLL на режим не нужно. Странно, почти везде требуется время...
|
|
|
|
|
Apr 27 2015, 17:00
|
Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 25-10-09
Из: Екатеринбург
Пользователь №: 53 194

|
Цитата(mantech @ Apr 27 2015, 16:02)  Т.е. во флеш пишите из прерывания?? Знаете, сколь по длительности запись идет?? А прерывать запись флеши далеко не в каждом контроллере разрешается.
Странно, почти везде требуется время... Нет, FLASH пишется уже не из прерывания, во время записи прерывания запрещены все. Вот такие контроллеры ADI делает, ждать выхода PLL на режим не нужно.  Цитата(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-памятью  Там что запись в ОЗУ, что во FRAM - никакой разницы. Не хватает ОЗУ - отрезал от памяти программ скока надо  АЦП должно регистрировать сигнал который вызвал срабатывание компаратора и прерывание FIQ. Фронт сигнала достаточно крутой, поэтому задержки начала регистрации сигнала приведут к потере информации о форме сигнала. При возникновении FIQ в регистре PLL аппаратно сбрасываются биты, задающие коэффициент умножения, так что при в входе в функцию-обработчик FIQ контроллер работает уже на максимальной частоте (впрочем эту возможность можно отключить в файле конфигурации МК), источник тактирования не меняется - всегда работает от собственного RC генератора 32768 Гц. PLL у МК ADUC какая-то хитрая - необходимости ждать выхода PLL на режим не нужно (в документации про это нет информации, да и соответствующих бит в регистрах тоже нет). Запись во FLASH осуществляется после окончания регистрации, при этом используется собственная FLASH память МК. Стирание FLASH заранее - при подготовке прибора к работе. Прибор очень миниатюрный - диаметр 11 мм, высота порядка 15 мм :-), поэтому схемотехнической мысли растекаться особенно некуда :-)?
|
|
|
|
Сообщений в этой теме
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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|