|
real time timer - прерывание по переполнению |
|
|
|
May 25 2010, 15:42
|
Частый гость
 
Группа: Участник
Сообщений: 144
Регистрация: 27-12-09
Из: Пермь
Пользователь №: 54 501

|
Не нашёл как установить обработчик прерывания по переполнению для таймера реального времени. Нужно ведь как-то так: Код AT91F_AIC_ConfigureIt(AT91C_BASE_AIC, ???, m_interrupt_priority, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, (void(*)())interrupt_handler); А я не знаю какой у него ID..
|
|
|
|
|
 |
Ответов
|
Jun 26 2010, 08:41
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Nikitoc @ Jun 26 2010, 11:01)  Ну я так посмотрел - в регистры IVR и FVR заносятся те же значения, что с модификаторами _irq, что без них. Т.е. адреса перехода не меняются. И работает все так же. Нет, не так же. На входе в прерывание это действительно не скажется, зато на выходе - еще как. Цитата(Nikitoc @ Jun 26 2010, 11:01)  Почему то происходит именно быстрое прерывание, но не всегда, примерно в 90% случаев. А если не происходит быстрое то и обычное тоже не происходит. Посмотрел код. В стартапе IRQ и FIQ уже были включены: Код ; Enter User Mode and set its Stack Pointer MSR CPSR_c, #Mode_USR А вот и разгадка возникновения FIQ: Код pAIC->AIC_IECR = AT91C_ID_SYS; Должно быть 1 << AT91C_ID_SYS. Ну и до кучи: Код AT91C_BASE_PIOA -> PIO_CODR = AT91C_BASE_PIOA -> PIO_CODR | 0x80000000; CODR - это регистр только для записи, поэтому правильно так: Код AT91C_BASE_PIO->PIO_CODR = 0x80000000;
|
|
|
|
|
Jun 26 2010, 12:31
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
Цитата Нет, не так же. На входе в прерывание это действительно не скажется, зато на выходе - еще как. Ага понял. Наверное этот модификатор добавляет в п/п команды сохранения и восстановления контекста? Цитата В стартапе IRQ и FIQ уже были включены: Код ;Enter User Mode and set its Stack Pointer MSR CPSR_c, #Mode_USR Пожалуйста, объясните мне эту строчку. Не могу никак понять что за регистр такой CPSR_c (и как изменить его содержимое, чтобы запретить FIQ) и адрес #Mode_USR? Цитата А вот и разгадка возникновения FIQ: Код pAIC->AIC_IECR = AT91C_ID_SYS; Должно быть 1 << AT91C_ID_SYS. Да (звучат фанфары)!!! Скорее всего это оно! Такая мелочь, аж обидно. Вместо IRQ разрешаю FIQ. Цитата Ну и до кучи: Код AT91C_BASE_PIOA -> PIO_CODR = AT91C_BASE_PIOA -> PIO_CODR | 0x80000000; CODR - это регистр только для записи, поэтому правильно так: Код AT91C_BASE_PIO->PIO_CODR = 0x80000000; Ага. На эту ошибку Вы мне уже когда-то указывали. Все равно где-то опять проскакивает. В общем, огромное Вам спасибо, aaarrr, благодаря Вам пришлось достаточно глубоко вникать в прерывания  ну и программка скорее всего теперь будет работать как планировалось. Правда раньше понедельника я это не смогу узнать.
|
|
|
|
|
Jun 26 2010, 13:15
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Nikitoc @ Jun 26 2010, 16:31)  Ага понял. Наверное этот модификатор добавляет в п/п команды сохранения и восстановления контекста? И модифицирует адрес возврата. Цитата(Nikitoc @ Jun 26 2010, 16:31)  Пожалуйста, объясните мне эту строчку. Не могу никак понять что за регистр такой CPSR_c (и как изменить его содержимое, чтобы запретить FIQ) и адрес #Mode_USR? CPSR - регистр, _c - указатель модифицируемого поля (Control bits: I, F, T, M[4:0]). Mode_USR - это не адрес, а константа, задающая режим процессора.
|
|
|
|
|
Jun 26 2010, 17:02
|

Местный
  
Группа: Validating
Сообщений: 207
Регистрация: 14-01-09
Из: Днепропетровск
Пользователь №: 43 367

|
Цитата(aaarrr @ Jun 26 2010, 16:15)  CPSR - регистр, _c - указатель модифицируемого поля (Control bits: I, F, T, M[4:0]). Mode_USR - это не адрес, а константа, задающая режим процессора. Ну теперь вообще все ясно (так глядишь и ассемблер выучу  ) Кстати, Вы в этой теме раньше писали: Цитата Еще обратите внимание, что что флаги RTT сбрасываются через 2 периода SCLK (~61us) после чтения статусного регистра. Поэтому попасть в прерывание просто, а вот выйти из него - не очень sad.gif Как это обрабатывать? Разве флаги прерывания не сбрасываются (при наличии модификатора _irq) при выходе из п/п обработки?
|
|
|
|
Сообщений в этой теме
srm real time timer - прерывание по переполнению May 25 2010, 15:42 srm Забыл указать контроллер. at91sam7s256.
Можно ли в... May 25 2010, 17:12 injen-d Таймер RTT входит в системную периферию (идентифик... May 25 2010, 17:32 srm injen-d, спасибо. May 25 2010, 17:54 aaarrr Еще обратите внимание, что что флаги RTT сбрасываю... May 25 2010, 19:19 srm Столкнулся с такой проблемой. Я поставил делитель ... May 26 2010, 13:45 aaarrr Цитата(srm @ May 26 2010, 17:45) Если же... May 26 2010, 13:58 srm Локализовал проблему. Вот обработчик прерывания:
К... May 26 2010, 14:17 aaarrr Цитата(srm @ May 26 2010, 18:17) Почему-т... May 26 2010, 14:39 srm ЦитатаМожет, просто прерывание по CPA забыли разре... May 26 2010, 14:46 aaarrr Цитата(srm @ May 26 2010, 18:46) там стан... May 26 2010, 14:51 srm ЦитатаРаз так, то никаких __irq не нужно. Как и за... May 26 2010, 15:01 aaarrr Проверьте, что в прерывании действительно читается... May 26 2010, 15:19 srm aaarrr, да, вроде, всё правильно.. может что-нибуд... May 26 2010, 15:42 aaarrr Цитата(srm @ May 26 2010, 19:42) может чт... May 26 2010, 16:02 srm aaarrr, ок. спасибо за желание помочь.
CODEtempl... May 26 2010, 16:10 srm в симуляторе Keil всё пучком
максимально упрости... May 26 2010, 19:16 srm Вроде, немного разобрался. Если поставить значение... May 27 2010, 16:35 srm В реалтайме, вроде, всё норм. У меня 12 сервомехан... Jun 1 2010, 18:14 aaarrr Ну а get_time_us() что собой представляет?
Желани... Jun 1 2010, 18:58 srm aaarrr, я, вроде, по применению и использую. наско... Jun 1 2010, 19:14 aaarrr Цитата(srm @ Jun 1 2010, 23:14) aaarrr, я... Jun 1 2010, 19:20 srm мдя... робот будет ходить либо вдвое быстрее, либо... Jun 1 2010, 19:35 aaarrr Цитата(srm @ Jun 1 2010, 23:35) мдя... ро... Jun 1 2010, 19:54 Nikitoc Добрый день. Дабы не плодить похожих тем решил спр... Jun 25 2010, 07:47 aaarrr Цитата(Nikitoc @ Jun 25 2010, 11:47) КодA... Jun 25 2010, 08:46  Nikitoc Цитата(aaarrr @ Jun 25 2010, 11:46) Ну по... Jun 25 2010, 09:07   aaarrr Цитата(Nikitoc @ Jun 25 2010, 13:07) Изме... Jun 25 2010, 09:20    Nikitoc ЦитатаГлобально прерывания разрешены?
Ээээмммм....... Jun 25 2010, 10:07 aaarrr Разрешаются сбросом бита I регистра CPSR процессор... Jun 25 2010, 10:38 Nikitoc Цитата(aaarrr @ Jun 25 2010, 13:38) Разре... Jun 25 2010, 11:22  aaarrr Цитата(Nikitoc @ Jun 25 2010, 15:22) Сдел... Jun 25 2010, 11:41   Nikitoc Цитата(aaarrr @ Jun 25 2010, 14:41) Не ум... Jun 25 2010, 12:05 aaarrr Поздравляю, работают теперь прерывания. LDR PC... Jun 25 2010, 12:31 Nikitoc Цитата(aaarrr @ Jun 25 2010, 15:31) Поздр... Jun 25 2010, 13:23  aaarrr Цитата(Nikitoc @ Jun 25 2010, 17:23) я ра... Jun 25 2010, 13:32   Nikitoc Цитата(aaarrr @ Jun 25 2010, 16:32) Раско... Jun 25 2010, 13:41    aaarrr Цитата(Nikitoc @ Jun 25 2010, 17:41) Ну ч... Jun 25 2010, 13:53     Nikitoc Цитата(aaarrr @ Jun 25 2010, 16:53) Так в... Jun 25 2010, 14:57      aaarrr Цитата(Nikitoc @ Jun 25 2010, 18:57) Ээх.... Jun 25 2010, 15:01       Nikitoc ЦитатаДля RTT это совсем не изврат. Единственное р... Jun 25 2010, 15:15        aaarrr Цитата(Nikitoc @ Jun 25 2010, 19:15) P.S.... Jun 25 2010, 15:48         Nikitoc Цитата(aaarrr @ Jun 25 2010, 18:48) Нет, ... Jun 25 2010, 16:00      aaarrr Цитата(Nikitoc @ Jun 26 2010, 21:02) Как ... Jun 26 2010, 17:16 Nikitoc Ясно. Спасибо большое. Jun 26 2010, 17:57 srm В общем, глюк так и не удалось исправить. Периодич... Aug 1 2010, 08:07
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|