|
AT91SAM9263 Interrupt Vectors TABLE?, Не могу въехать в таблицу векторов прерываний. |
|
|
|
Sep 5 2007, 12:40
|
Местный
  
Группа: Свой
Сообщений: 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 векторов, в зависимости от приоритета прерывания. А обработчик должен сам искать источник прерывания?
Заранее спасибо.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 17)
|
Sep 5 2007, 14:36
|
Гуру
     
Группа: Свой
Сообщений: 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 и прочему железу отношения не имеет никакого.
|
|
|
|
|
Sep 11 2007, 09:27
|
Группа: Новичок
Сообщений: 3
Регистрация: 11-09-07
Пользователь №: 30 453

|
Цитата(DASM @ Sep 5 2007, 16:57)  ........ 0x18 IRQ 0x1C FIQ вот по адресу 0x18 и прыгаем на дальнейший обработчик ВСЕХ IRQ в системе. А там уж выяснем кто виноват и что делать DASM, скажите пожалйста, ... из это следует ли что если установить начальный адре для компиляции не 0x100000 а 0x102000, то прерывание должны попрежнему срабатывать ? ( я так понимаю что адрес вызываемой фунции в обработчике буде в этом случаи X+0x2000....но у меня не работает  ((....к примеру мигание сведодиодами работает а вот прирывание не срабатывают..просто "виснет" )
|
|
|
|
|
Sep 11 2007, 11:08
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(kizeev_e @ Sep 11 2007, 13:27)  DASM, скажите пожалйста, ... из это следует ли что если установить начальный адре для компиляции не 0x100000 а 0x102000, то прерывание должны попрежнему срабатывать ? ( я так понимаю что адрес вызываемой фунции в обработчике буде в этом случаи X+0x2000....но у меня не работает  ((....к примеру мигание сведодиодами работает а вот прирывание не срабатывают..просто "виснет" ) Процессор всегда вываливается в 0x18/0x1C. Куда он пойдет дальше всецело зависит от контроллера прерываний. Граждане, читайте документацию.
|
|
|
|
|
Sep 11 2007, 13:51
|
Группа: Новичок
Сообщений: 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) Заранее благодарен за ответ
|
|
|
|
|
Sep 11 2007, 13:59
|
Гуру
     
Группа: Свой
Сообщений: 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?
|
|
|
|
|
Sep 11 2007, 14:17
|
Группа: Новичок
Сообщений: 3
Регистрация: 11-09-07
Пользователь №: 30 453

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