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

 
 
> AM1707. Не удается настроить ни FIQ, ни IRQ, Идей больше нет.
kovigor
сообщение Feb 26 2011, 17:53
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Добрый день !
Вот проект (IAR):

http://zalil.ru/30575306

Бьюсь четвертый день с DevKit'ом от Spectrum Digital. Ничего не выходит. Идея такая: при возникновении фронта или спада на линии GPIO, Bank0, Pin11 должно генерироваться прерывание FIQ. Однако обработчик прерывания управления не получает, а вместо этого программа виснет при возникновении прерывания. Сил и идей у меня больше нет. Примеров с прерываниями для этого МК нет тоже, причем нигде. Посмотрите, пожалуйста, где я накосячил, или поделитесь рабочим примером (сразу скажу, что Linux меня не интересует).

Краткие пояснения:

Прерывания настраиваются в файле "evmam170x_dip.c" в функции "DIP_init".
Обработчик прерывания находится в файле "main.c".
Начальная инициализация, как всегда, описана в файле "am17xx_cstartup.s"

Заранее спасибо ...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
aaarrr
сообщение Feb 26 2011, 21:56
Сообщение #2


Гуру
******

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



"Верхние" вектора в CP15 включить не забыли часом?
Go to the top of the page
 
+Quote Post
kovigor
сообщение Feb 27 2011, 11:29
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(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
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 27 2011, 21:18
Сообщение #4


Гуру
******

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



Цитата(kovigor @ Feb 27 2011, 14:29) *
За-ра-бо-та-ло !!! Надо же еще было эту самую таблицу векторов скопировать по адресу 0xFFFF0000

Только лучше все же это сделать средствами линкера, а не вручную.
Go to the top of the page
 
+Quote Post



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

 


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


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