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

 
 
> AT91SAM9263 Interrupt Vectors TABLE?, Не могу въехать в таблицу векторов прерываний.
Amper25
сообщение Sep 5 2007, 12:40
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Здравствуйте товарищи !

У меня проблема - не могу въехать в принцип организации таблицы векторов прерываний данного процессора.
То что Reset по адрессу 0x0000 0000 - это понятно. Источников прерываний - 32. Так как команды 4-х байтные, то адреса должны идти с шагом 4.

Т.е. что нибудь наподобии:
0x0000 0000 - Reset
0x0000 0004 - INT1
0x0000 0008 - INT2
.....
0x0000 007C - INT31

Но вот вопрос, почему компилятор IAR выделяет под таблицу только 32 байта:

Disassembly of section .data:
...
0x00300000 ldr pc, [pc, #24] ; 0x00300020
0x00300004 andeq r0, r0, r0
0x00300008 ldr pc, [pc, #24] ; 0x00300028
...

Или я не правильно понял организацию таблици векторов прерываний, или это IAR глючит?
Вообще, если кто имел дело с этим процом, подскажите каким образом у него организована таблица векторов. В Datasheet на AT91SAM9263 её почемуто нет.

Или может есть только 8 векторов, в зависимости от приоритета прерывания. А обработчик должен сам искать источник прерывания?

Заранее спасибо.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 17)
DASM
сообщение Sep 5 2007, 12:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Неправильно поняли. У ARM7 "прерываний" только два FIQ и IRQ. Еще есть исключения (собственно прерывание - тоже исключения), есть SWI , но пока их оставим в покое. Пожтому при любом IRQ процессор исполняет команду по вектору IRQ , а уж там он может считать адрес процедуры источника - этим занимается AIC. Вобщем советую курить даташиты - там все расписано
0- вектор reset
0x4 - undefined instruction
0x8 - SWI
0xC prefetch abort
0x10 Data abort
0x14 reserved
0x18 IRQ
0x1C FIQ
вот по адресу 0x18 и прыгаем на дальнейший обработчик ВСЕХ IRQ в системе. А там уж выяснем кто виноват и что делать
Go to the top of the page
 
+Quote Post
Amper25
сообщение Sep 5 2007, 14:16
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Я вообще то имел ввиду SAM9 а не SAM7.

А по поводу прерывания - мне нужен TimerCounter0 Interrupt.
Он получается относится к SWI?
Go to the top of the page
 
+Quote Post
DASM
сообщение Sep 5 2007, 14:28
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Он относится к IRQ или FIQ . Без чтения док - извините, пусть другие разжевывают
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 5 2007, 14:36
Сообщение #5


Гуру
******

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



Цитата(Amper25 @ Sep 5 2007, 18:16) *
Я вообще то имел ввиду SAM9 а не SAM7.

Система прерываний у них одинаковая.

Цитата(Amper25 @ Sep 5 2007, 18:16) *
А по поводу прерывания - мне нужен TimerCounter0 Interrupt.
Он получается относится к SWI?

Он относится к блоку таймеров (Peripheral ID 19). Именно этот номер и нужно будет сообщить AIC'у.
SWI - программное прерывание, к AIC и прочему железу отношения не имеет никакого.
Go to the top of the page
 
+Quote Post
Amper25
сообщение Sep 5 2007, 17:31
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 215
Регистрация: 10-04-07
Пользователь №: 26 929



Спасибо, что просветили. Я просто предполагал, что тут таблица векторов организована как в AVR-е.
То есть на каждое прерывание свой вектор.
А оказалось все гораздо хуже.

Вообще я только недавно начал изучать ARM, поэтому и туплю. Или это Datasheet так коряво построен. С AVR все было гораздо проще.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 5 2007, 21:58
Сообщение #7


Гуру
******

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



Цитата(Amper25 @ Sep 5 2007, 21:31) *
Вообще я только недавно начал изучать ARM, поэтому и туплю. Или это Datasheet так коряво построен. С AVR все было гораздо проще.

Даташит нормально построен, просто Вы начали осваивать ARM с топового камня от Atmel. Сюрпризов будет еще много.
Go to the top of the page
 
+Quote Post
kizeev_e
сообщение Sep 11 2007, 09:27
Сообщение #8





Группа: Новичок
Сообщений: 3
Регистрация: 11-09-07
Пользователь №: 30 453



Цитата(DASM @ Sep 5 2007, 16:57) *
........
0x18 IRQ
0x1C FIQ
вот по адресу 0x18 и прыгаем на дальнейший обработчик ВСЕХ IRQ в системе. А там уж выяснем кто виноват и что делать



DASM, скажите пожалйста, ... из это следует ли что если установить начальный адре для компиляции не 0x100000 а 0x102000, то прерывание должны попрежнему срабатывать ? ( я так понимаю что адрес вызываемой фунции в обработчике буде в этом случаи X+0x2000....но у меня не работает sad.gif((....к примеру мигание сведодиодами работает а вот прирывание не срабатывают..просто "виснет" )
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 11 2007, 11:08
Сообщение #9


Гуру
******

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



Цитата(kizeev_e @ Sep 11 2007, 13:27) *
DASM, скажите пожалйста, ... из это следует ли что если установить начальный адре для компиляции не 0x100000 а 0x102000, то прерывание должны попрежнему срабатывать ? ( я так понимаю что адрес вызываемой фунции в обработчике буде в этом случаи X+0x2000....но у меня не работает sad.gif((....к примеру мигание сведодиодами работает а вот прирывание не срабатывают..просто "виснет" )

Процессор всегда вываливается в 0x18/0x1C. Куда он пойдет дальше всецело зависит от контроллера прерываний.
Граждане, читайте документацию.
Go to the top of the page
 
+Quote Post
kizeev_e
сообщение Sep 11 2007, 13:51
Сообщение #10





Группа: Новичок
Сообщений: 3
Регистрация: 11-09-07
Пользователь №: 30 453



Цитата(aaarrr @ Sep 11 2007, 15:08) *
Процессор всегда вываливается в 0x18/0x1C. Куда он пойдет дальше всецело зависит от контроллера прерываний.
Граждане, читайте документацию.

...пожалуйста, подскажите или поправте меня если что-то не усмотрел в документации....после возникновения прерывания процессор вываливается в 0x18(для nIRQ) - далее контроллер прерываний смотрит AIC_AVR что за прерывание и после этого загружает значение AIC_SVR - адрес программы обработки прерывания, а тут ему разве не все равно где этот обработчик прирывания, если в регистр AIC_AVR загружено значение этого опработчика?
..из примера....
AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_US0, 7, AT91C_AIC_SRCTYPE_INT_EDGE_TRIGGERED,
( void (*)())UART_int_handler );
так работает
-DROMSTART=00000000 /
из map файла
UART_int_handler 0x0010021c ARM Code 224 main.o(.text)

так Не работает
-DROMSTART=00002000 /
из map файла
UART_int_handler 0x0010221c ARM Code 224 main.o(.text)


Заранее благодарен за ответ
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 11 2007, 13:59
Сообщение #11


Гуру
******

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



Цитата(kizeev_e @ Sep 11 2007, 17:51) *
...ему разве не все равно где этот обработчик прирывания, если в регистр AIC_AVR загружено значение этого опработчика?

Ему совершенно все равно.

Цитата(kizeev_e @ Sep 11 2007, 17:51) *
так Не работает
-DROMSTART=00002000 /

А что в этом случае лежит по адресу 0x18?
Там должна быть инструкция чтения вектора прерывания, например ldr pc, [pc, #-0xf20].
Не "уехала" ли она при смене DROMSTART?
Go to the top of the page
 
+Quote Post
kizeev_e
сообщение Sep 11 2007, 14:17
Сообщение #12





Группа: Новичок
Сообщений: 3
Регистрация: 11-09-07
Пользователь №: 30 453



Цитата(aaarrr @ Sep 11 2007, 17:59) *
Ему совершенно все равно.
А что в этом случае лежит по адресу 0x18?
Там должна быть инструкция чтения вектора прерывания, например ldr pc, [pc, #-0xf20].
Не "уехала" ли она при смене DROMSTART?


......мде....действительно.... smile.gif а тамато нули или фыфы одни ( в зависимости от компилятора )
и все это сдвинуто... ровно на DROMSTART, вот и виснет.
Спасибо, буду дальше испытывать , надеюсь все получится .....
Go to the top of the page
 
+Quote Post
DASM
сообщение Sep 11 2007, 15:09
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



aaarrr "ldr pc, [pc, #-0xf20]."
Мое личное мнение - жутко не люблю эти трюки. Для профи может и сойдут, типа 10-15 тактов сэкономить, но зачем такие неочевидные вещи как сворачивание через адрессное пространство давать новичкам в примерах - не понимаю. Может по- человечески просто прочитать VicVectAdddr (в Атмеле он похоже как-то обозван)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 11 2007, 15:17
Сообщение #14


Гуру
******

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



Цитата(DASM @ Sep 11 2007, 19:09) *
aaarrr "ldr pc, [pc, #-0xf20]."
Мое личное мнение - жутко не люблю эти трюки. Для профи может и сойдут, типа 10-15 тактов сэкономить, но зачем такие неочевидные вещи как сворачивание через адрессное пространство давать новичкам в примерах - не понимаю. Может по- человечески просто прочитать VicVectAdddr (в Атмеле он похоже как-то обозван)

А по-моему, все очевидно и нормально. Даже трюком это обозвать язык не поворачивается. Можно добавить комментарий типа: "Читаем VicVectAddr/AIC_IVR", если это так смущает.
Go to the top of the page
 
+Quote Post
DASM
сообщение Sep 11 2007, 15:26
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



угу. читаем с минусом с перелетом на 4 Гб. А вот в новых ARM64 звиняйтте - код измениться. Это именно трюк, а никак иначе
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 11 2007, 15:54
Сообщение #16


Гуру
******

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



Если это трюк, то зачем производители упорно кладут VIC/AIC в последние 4 килобайта адресного пространства?
Go to the top of the page
 
+Quote Post
DASM
сообщение Sep 11 2007, 16:18
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Это их проблемы. Я не говорю Запрещенный трюк. Я говорю, что это прием, не приспособленный для тренингов студентов, и все. Мне самому этот трюк не нравится, хоть и не студент - он непереносимый. Ну да о чем спорим ? Нравится - пользуйте. Я не пользую, потому что часто атмель с филипсом меняю. Вообще еще раз спасибо Юрию - с TNkernel я вообще половину проблем забыл. Остались только личные.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 11 2007, 16:46
Сообщение #18


Гуру
******

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



Да я и не навязываю этот "трюк" никому. Просто метод общепринятый.

Цитата(DASM @ Sep 11 2007, 20:18) *
Я не пользую, потому что часто атмель с филипсом меняю.

Так часто, что одно значение поменять трудно? Не верю.
Go to the top of the page
 
+Quote Post

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

 


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


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