Прерывания в Keil

ARM7, ARM9, ARM11 etc.

Прерывания в Keil

Сообщение -= Александр =- » 21 окт 2010, 12:56

Дошел я наконец до прерываний...
Никак не могу понять откуда берется связь обработчика с самим прерыванием.
Вот написал я функцию
Код: Выделить всё
void SPI0Handler (void) __irq

И что теперь писать в lpc2400.s ?
Там я вижу такую запись:
Код: Выделить всё

Vectors         LDR     PC, Reset_Addr         
                LDR     PC, Undef_Addr
                LDR     PC, SWI_Addr
                LDR     PC, PAbt_Addr
                LDR     PC, DAbt_Addr
                NOP                            ; Reserved Vector
;               LDR     PC, IRQ_Addr
                LDR     PC, [PC, #-0x0120]     ; Vector from VicVectAddr
                LDR     PC, FIQ_Addr

Reset_Addr      DCD     Reset_Handler
Undef_Addr      DCD     Undef_Handler
SWI_Addr        DCD     SWI_Handler
PAbt_Addr       DCD     PAbt_Handler
DAbt_Addr       DCD     DAbt_Handler
                DCD     0                      ; Reserved Address
IRQ_Addr        DCD     IRQ_Handler
FIQ_Addr        DCD     FIQ_Handler

Undef_Handler   B       Undef_Handler
SWI_Handler     B       SWI_Handler
PAbt_Handler    B       PAbt_Handler
DAbt_Handler    B       DAbt_Handler
IRQ_Handler     B       IRQ_Handler
FIQ_Handler     B       FIQ_Handler


Откуда берутся эти адреса и как мне получить адрес моего обработчика чтоб вставить его туда?
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: Прерывания в Keil

Сообщение avr123.nm.ru » 21 окт 2010, 13:36

Наверно в примерах надо позырить.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Прерывания в Keil

Сообщение Сергей » 21 окт 2010, 13:59

А еще лучше в книжке "Микроконтроллеры ARM7 семейства LPC2000" Редькин П.П.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Re: Прерывания в Keil

Сообщение -= Александр =- » 21 окт 2010, 14:52

Там все устройство описано. А вот как это все программировать - непонятно. Что в стартап писать, как обработчики объявлять и к прерываниям привязывать - совершенно непонятно...
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: Прерывания в Keil

Сообщение Сергей » 21 окт 2010, 15:09

А разобрать один из бесконечного числа примеров религия не позволяет?
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Re: Прерывания в Keil

Сообщение -= Александр =- » 21 окт 2010, 15:34

Разбираю... Честно говоря мало что понятно. Неужели просто назвать функцию void EINT0_Handler (void) __irq - уже значит привязать ее к прерыванию? А как он понимает к какому? Что-то не верится. Попробую щас что-то свое в таком духе сгенерить...
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: Прерывания в Keil

Сообщение galex1981 » 21 окт 2010, 15:43

Да, просто по названию идет привязка к определенному прерыванию. По моему в заголовочном файле идет опиание и привязка какого к чему
if(!Operate) Read(pDatasheet);
Аватара пользователя
galex1981
 
Сообщения: 4363
Зарегистрирован: 04 дек 2008, 22:44
Откуда: Камышин
Skype: galk-aleksandr1
прог. языки: Kotlin, Java, C, C++, Assm, BasCom, VB, php
ФИО: Галкин Александр Владимирович

Re: Прерывания в Keil

Сообщение -= Александр =- » 21 окт 2010, 15:47

Оказалось что не в файле. Есть такой файлик irq.c - там есть функция привязки.
Например
Код: Выделить всё
install_irq(EINT0_INT,(void *)EINT0_Handler,HIGHEST_PRIORITY )

Привязывает вектор EINT0_INT к функции EINT0_Handler и дает высший приоритет.
Естественно в настройках источника прерывания (в данном случае внешнего входа) надо его разрешить.
Щас проверю как оно работает...
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: Прерывания в Keil

Сообщение Сергей » 21 окт 2010, 15:50

Саша, ну честно, не ожидал от тебя таких вопросов =)

Вектора прописываются в контроллере прерываний, там задается источник, приоритет и указатель на функцию обработчик. Они маскируемые потому-что. Если, к примеру, у тебя не маскируемые прерывания, то у каждой периферии свой обработчик с масками источника.

Добавлено спустя 38 секунд:
Все это в даташите последовательно рассказано!
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Re: Прерывания в Keil

Сообщение -= Александр =- » 21 окт 2010, 16:38

Это я понял... Прописал вроде все как надо. Теперь думаю почему ноль эффекта...

Добавлено спустя 10 минут 39 секунд:
Как обычно проблему создавала внешняя схема. Я уж какие только примеры туда не вставлял - ноль эффекта. Сигнал внешнего прерывания вообще до проца не доходил. Щас его ногу пинцетом подергал - прерывание случилось! :D
Ниндзя - круче всех. Они умеют ходить по воде, делить на ноль и угадывать шаффл в АйПоде.
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3678
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич

Re: Прерывания в Keil

Сообщение Сергей » 21 окт 2010, 16:41

Лучше всего проверять базовый функционал с помощью симулятора Keil, очень удобно. Да еще и скрипты писать можно.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Re: Прерывания в Keil

Сообщение Romikgy » 21 окт 2010, 21:15

поточнее насчет последнего
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: Прерывания в Keil

Сообщение avr123.nm.ru » 21 окт 2010, 21:49

в примерах точно в хелпе коменты.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва

Re: Прерывания в Keil

Сообщение Romikgy » 22 окт 2010, 00:51

скрипты описаны в примерах?
die Wahrheit ist irgendwo da draußen
Аватара пользователя
Romikgy
 
Сообщения: 750
Зарегистрирован: 15 ноя 2009, 13:37
Откуда: Porto Franco "Odessa"

Re: Прерывания в Keil

Сообщение avr123.nm.ru » 22 окт 2010, 09:00

ага.
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва


Вернуться в ARM

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5