Цитата(aaarrr @ Feb 27 2011, 01:56)

"Верхние" вектора в CP15 включить не забыли часом?
А что это за вектора такие ? AT91SAM9XE512 - это тоже ARM926EJ-S, но там ничего подобного нет. Сейчас буду выяснять. Спасибо ...
P.S.
Да, забыл сказать. MMU и MPU выключены и не используются, проект простейший, учебный ...
P.P.S
Я, кажется, понял, о чем вы. вы имеете в виду то, что таблицу векторов нужно отобразить по адресу 0xFFFF0000, а для этого нужно установить бит №13 в "Control Register c1". Что я и сделал только что, добавив строчку в startup - файле "am17xx_cstartup.s":
Код
// Disable Addr translation, D cache and enable I cache
//"0xFFFFEFFA": Bit12: I-cache En/Dis, Bit2: D-cache En/Dis, Bit0: MMU En/Dis
MRC p15,0,R1,C1,C0,0;Read Control Register (C1)
LDR R0,=CP_DIS_MASK;0xFFFFEFFA
AND R1,R1,R0;I-cache, D-cache and MMU Disabling
ORR R1,R1,#(1<<12);Bit12 <- 1: I-cache Enabling
ORR R1,R1,#(1<<13);Bit13 <- 1: VINTH (or VINITHI) <- 1
;(High exception vectors selected, address
;range = 0xFFFF 0000 to 0xFFFF 001C.)
MCR p15,0,R1,C1,C0,0;Write Control Register (C1)
Но пока это не помогло. Разбираюсь дальше ...
P.P.P.S
За-ра-бо-та-ло !!! Надо же еще было эту самую таблицу векторов скопировать по адресу 0xFFFF0000:
Код
/** private data **/
#pragma segment=".intvec"
/** private functions **/
void Copy_Vectors(void)
{
unsigned int i;
unsigned char * Src = __section_begin(".intvec");
for (i = 0; i < 64; i++){
*((unsigned char *)(0xffff0000 + i)) = * Src++;
}
}
Так что большое спасибо за помощь ...
Сообщение отредактировал kovigor - Feb 27 2011, 14:32