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

 
 
> real time timer - прерывание по переполнению
srm
сообщение May 25 2010, 15:42
Сообщение #1


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

Группа: Участник
Сообщений: 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..
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Jun 25 2010, 12:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Поздравляю, работают теперь прерывания. LDR PC,[PC,#-0xF20] - это переход по адресу, содержащемуся в AIC_IVR. Так как соответствующий вектор вы не прописали, то процессор переходит по адресу 0.
Добавьте строку:
Код
    AT91C_BASE_AIC->AIC_SVR[AT91C_ID_SYS] = (unsigned int)RTTC_Interrupt_Handler;

И будет счастье.

На будущее: выкладывайте сразу стартап целиком. Невозможно угадать, что в нем написано и закомментировано.
Пожалуй, надо FAQ написать про прерывания на ARM'ах разных моделей...
Go to the top of the page
 
+Quote Post
Nikitoc
сообщение Jun 25 2010, 13:23
Сообщение #3


Местный
***

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



Цитата(aaarrr @ Jun 25 2010, 15:31) *
Поздравляю, работают теперь прерывания. LDR PC,[PC,#-0xF20] - это переход по адресу, содержащемуся в AIC_IVR. Так как соответствующий вектор вы не прописали, то процессор переходит по адресу 0.
Добавьте строку:
Код
    AT91C_BASE_AIC->AIC_SVR[AT91C_ID_SYS] = (unsigned int)RTTC_Interrupt_Handler;

И будет счастье.

Мозг начинает разрываться на части. Ход Ваших мыслей мне ясен. Вместо строк
Код
LDR     PC,[PC,#-0xF20]
я раскомментировал
Код
LDR     PC,IRQ_Addr
и
Код
LDR     PC,FIQ_Addr
Вроде бы здесь все должно было заработать, однако, по каким-то необъяснимым причинам происходит FIQ прерывание через примерно секунду после старта программы (это при том что RTT запрограммирован на 5сек.). Запретить его нету никакой возможности (ни в стартапе через CPSR ни через AIC)! Крыша едет!

Сообщение отредактировал Nikitoc - Jun 25 2010, 13:25
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 25 2010, 13:32
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Nikitoc @ Jun 25 2010, 17:23) *
я раскомментировал

Раскомментировали, похоже, неаккуратно. И зачем это надо было делать вообще?
Go to the top of the page
 
+Quote Post
Nikitoc
сообщение Jun 25 2010, 13:41
Сообщение #5


Местный
***

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



Цитата(aaarrr @ Jun 25 2010, 16:32) *
Раскомментировали, похоже, неаккуратно.

Вот:
Код
Vectors         LDR     PC,Reset_Addr        
                LDR     PC,Undef_Addr
                LDR     PC,SWI_Addr
                LDR     PC,PAbt_Addr
                LDR     PC,DAbt_Addr
                NOP                           ; Reserved Vector
                LDR     PC,IRQ_Addr
               ;LDR     PC,[PC,#-0xF20]       ; Vector From AIC_IVR
                LDR     PC,FIQ_Addr
               ;LDR     PC,[PC,#-0xF20]       ; Vector From AIC_FVR

Reset_Addr      DCD     Reset_Handler
Undef_Addr      DCD     Undef_Handler
SWI_Addr        DCD     SWI_Handler
PAbt_Addr       DCD     PAbt_Handler
DAbt_Addr       DCD     DAbt_Handler
                DCD     0                     ; Reserved Address
IRQ_Addr        DCD     IRQ_Handler
FIQ_Addr        DCD     FIQ_Handler

Undef_Handler   B       Undef_Handler
SWI_Handler     B       SWI_Handler
PAbt_Handler    B       PAbt_Handler
DAbt_Handler    B       DAbt_Handler
                PRESERVE8
                IMPORT  RTTC_Interrupt_Handler
IRQ_Handler     B       RTTC_Interrupt_Handler
                
FIQ_Handler     B       FIQ_Handler


Цитата
И зачем это надо было делать вообще?


Ну чтобы не записывать адрес в IVR и FVR. Кстати, а почему в стартапе для обоих векторов адрес берется по одному и тому же адресу -
Код
LDR     PC,[PC,#-0xF20]
?
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 25 2010, 13:53
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Nikitoc @ Jun 25 2010, 17:41) *
Ну чтобы не записывать адрес в IVR и FVR.

Так все равно потом придется.

Цитата(Nikitoc @ Jun 25 2010, 17:41) *
Кстати, а почему в стартапе для обоих векторов адрес берется по одному и тому же адресу -
Код
LDR     PC,[PC,#-0xF20]
?

Адреса команд разные, следовательно одно и то же значение смещения относительно PC даст разные адреса в памяти.
Go to the top of the page
 
+Quote Post
Nikitoc
сообщение Jun 25 2010, 14:57
Сообщение #7


Местный
***

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



Цитата(aaarrr @ Jun 25 2010, 16:53) *
Так все равно потом придется.

Сделал и так (раскомментировал строки
Код
LDR     PC,[PC,#-0xF20]
) и записал адреса в SVR[0] для FIQ и SVR[1] для SYSIRQ. И все равно происходит почему-то FIQ и программа уходит именно на адрес записанный в SVR[0]! (и режим работы процессора меняется на Fast Interrupt) Почему? Может надо сбрасывать флаги?
Цитата
Адреса команд разные, следовательно одно и то же значение смещения относительно PC даст разные адреса в памяти.

Угу. Спасибо. Понял.



Ээх. Придется отказаться от использования прерываний. Как об стену горохом все попытки...
Буду периодически опрашивать флаги, но это,конечно, изврат.

Сообщение отредактировал Nikitoc - Jun 25 2010, 14:57
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 25 2010, 15:01
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Nikitoc @ Jun 25 2010, 18:57) *
Ээх. Придется отказаться от использования прерываний. Как об стену горохом все попытки...

Зачем же сдаваться? Проект выложите - посмотрим.

Цитата(Nikitoc @ Jun 25 2010, 18:57) *
Буду периодически опрашивать флаги, но это,конечно, изврат.

Для RTT это совсем не изврат. Единственное разумное применение его прерываний - периодически поднимать процессор из спячки, если нужно.
Go to the top of the page
 
+Quote Post
Nikitoc
сообщение Jun 25 2010, 15:15
Сообщение #9


Местный
***

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



Цитата
Для RTT это совсем не изврат. Единственное разумное применение его прерываний - периодически поднимать процессор из спячки, если нужно.

Да я для этого его и планировал использовать.
P.S. Не знаю правильно ли я выложил код?
Просьба не придираться к п/п PIO_INIT()

Сообщение отредактировал aaarrr - Jun 25 2010, 15:47
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 25 2010, 15:48
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Nikitoc @ Jun 25 2010, 19:15) *
P.S. Не знаю правильно ли я выложил код?

Нет, приложите в виде архива с проектом - зачем такие полотна плодить?
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - Nikitoc   Цитата(aaarrr @ Jun 25 2010, 18:48) Нет, ...   Jun 25 2010, 16:00
- - aaarrr   А зачем это вы упразднили модификаторы __irq? Они ...   Jun 25 2010, 16:02
|- - Nikitoc   Цитата(aaarrr @ Jun 25 2010, 19:02) А зач...   Jun 26 2010, 07:01
|- - aaarrr   Цитата(Nikitoc @ Jun 26 2010, 11:01) Ну я...   Jun 26 2010, 08:41
|- - Nikitoc   ЦитатаНет, не так же. На входе в прерывание это де...   Jun 26 2010, 12:31
|- - aaarrr   Цитата(Nikitoc @ Jun 26 2010, 16:31) Ага ...   Jun 26 2010, 13:15
|- - Nikitoc   Цитата(aaarrr @ Jun 26 2010, 16:15) CPSR ...   Jun 26 2010, 17:02
|- - aaarrr   Цитата(Nikitoc @ Jun 26 2010, 21:02) Как ...   Jun 26 2010, 17:16
- - Nikitoc   Ясно. Спасибо большое.   Jun 26 2010, 17:57
- - srm   В общем, глюк так и не удалось исправить. Периодич...   Aug 1 2010, 08:07


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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 02:23
Рейтинг@Mail.ru


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