|
Таблица прерываний у SAM7 |
|
|
|
Feb 21 2012, 08:02
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543

|
Добрый день. Вот появилось несколько вопросов, буду благодарен если кто-то ответит. Как я понимаю у SAM7 есть 32 источника прерываний и 8 уровней. Прерывание происходит таким образом, мы настраиваем регистры AIC_SVR1 to AIC_SVR31 - вписываем адреса обработчиков туда, потом, когда наступит прерывание ядро читает регистр AIC_IVR в котором находится адрес текущего прерывания, проц загружает адрес у регистр команд и выполняет прогру...с этом понятно. Не понятно о системных прервываниях, они вроде всегда подк. с источнику 1 из 32, а конкретнее по поводу reset. Его не нужно инициализировать, вроде? Я думал что адрес для reset обработчика забит постоянно у первом адресе пространства программы, например я компилю программу с картой памяти у которой указан начальный адрес 0x0020 2000 , то reset должен быть по адресу 0x0020 2000, по умолчанию, я думал, так как reset это точка входа в программу? Но я откомпилил и посмотрел карту памяти но нет, reset по другому адресу...Что будет находится в первых адресах, а именно в 0x0020 2000, если говорить о ОЗУ?
Вот кусок из карты памяти: Обработчик по адресу 0x002025f4, а сам resetVector по 0x00202000, что-то я запутался в что такое resetVector - это выходит регистр, в котором записан адрес 0x002025f4 ?
resetHandler 0x002025f4 Code Gb board_cstartup_iar.o [1] resetVector 0x00202000 Code Gb board_cstartup_iar.o [1]
Сообщение отредактировал Twen - Feb 21 2012, 08:10
|
|
|
|
|
 |
Ответов
|
Feb 21 2012, 08:53
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543

|
Смотрите , вот начало моего сsturtup-а:
/* Exception vectors */ SECTION .vectors:CODE:NOROOT(2)
PUBLIC resetVector PUBLIC irqHandler
EXTERN Undefined_Handler EXTERN SWI_Handler EXTERN Prefetch_Handler EXTERN Abort_Handler EXTERN FIQ_Handler
ARM
//------------------------------------------------------------------------ // Здесь я так понял мы указываем, что размещение будет по //первому адресу карты памяти //------------------------------------------------------------------------ __iar_init$$done: ; The interrupt vector is not needed ; until after copy initialization is done
//-------------------------------------------------------------------------------- // Вот здесь не понятно, здесь нету ветвления типо свича, //начнется первая команда, например мы попадем у //обработчик по ресету, а потом в случае //прерыванию системному по неизвестной команде, как мы попадем // у LDR pc, Undefined_Addr , нету же ветвления, всмыле // нету такого, типа: // switch (event) { //case (reset): LDR pc, =resetHandler ; //case (undef_adrr): LDR pc, Undefined_Addr ; Undefined instructions //case (swi): LDR pc, SWI_Addr ; Software interrupt (SWI/SYS) //} //---------------------------------------------------------------------------------- resetVector: ; All default exception handlers (except reset) are ; defined as weak symbol definitions. ; If a handler is defined by the application it will take precedence. LDR pc, =resetHandler ; Reset LDR pc, Undefined_Addr ; Undefined instructions LDR pc, SWI_Addr ; Software interrupt (SWI/SYS) LDR pc, Prefetch_Addr ; Prefetch abort LDR pc, Abort_Addr ; Data abort B . ; RESERVED LDR pc, =irqHandler ; IRQ LDR pc, FIQ_Addr ; FIQ
//-------------------------------------------------------------------------------------- // Вот здесь я так понял идет объявление адресов векторов самого проц. //по этой метке хранится адрес обработчика //Команда DCD загружает в память адрес обработчика //--------------------------------------------------------------------------------------- Undefined_Addr: DCD Undefined_Handler SWI_Addr: DCD SWI_Handler Prefetch_Addr: DCD Prefetch_Handler Abort_Addr: DCD Abort_Handler FIQ_Addr: DCD FIQ_Handler
|
|
|
|
Сообщений в этой теме
Twen Таблица прерываний у SAM7 Feb 21 2012, 08:02 aaarrr Нужно разделить две вещи:
1. Вектора собственно яд... Feb 21 2012, 08:25 aaarrr У ядра не один вектор, а 8 (используется 7). Поэто... Feb 21 2012, 09:00 Twen Спасибо, сейчас почитаю, ну уже стало светлее ) Feb 21 2012, 09:06 Alexey K Есть такой вопрос по прерываниям. У меня 2-а преры... Apr 10 2012, 06:09 Lotor Цитата(Alexey K @ Apr 10 2012, 10:09) Воп... Apr 10 2012, 06:17 Alexey K То есть если процессор отрабатывает одно прерывани... Apr 10 2012, 06:32 aaarrr Если вложенные прерывания не нужны, то никаких тел... Apr 10 2012, 06:42 Alexey K Спасибо за помощь. Проверил на железе - работает. Apr 10 2012, 08:41
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|