roboforum.ru

Технический форум по робототехнике.

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

Прерывания в 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


Откуда берутся эти адреса и как мне получить адрес моего обработчика чтоб вставить его туда?

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

avr123.nm.ru » 21 окт 2010, 13:36

Наверно в примерах надо позырить.

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

Сергей » 21 окт 2010, 13:59

А еще лучше в книжке "Микроконтроллеры ARM7 семейства LPC2000" Редькин П.П.

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

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

Там все устройство описано. А вот как это все программировать - непонятно. Что в стартап писать, как обработчики объявлять и к прерываниям привязывать - совершенно непонятно...

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

Сергей » 21 окт 2010, 15:09

А разобрать один из бесконечного числа примеров религия не позволяет?

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

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

Разбираю... Честно говоря мало что понятно. Неужели просто назвать функцию void EINT0_Handler (void) __irq - уже значит привязать ее к прерыванию? А как он понимает к какому? Что-то не верится. Попробую щас что-то свое в таком духе сгенерить...

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

galex1981 » 21 окт 2010, 15:43

Да, просто по названию идет привязка к определенному прерыванию. По моему в заголовочном файле идет опиание и привязка какого к чему

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

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

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

Привязывает вектор EINT0_INT к функции EINT0_Handler и дает высший приоритет.
Естественно в настройках источника прерывания (в данном случае внешнего входа) надо его разрешить.
Щас проверю как оно работает...

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

Сергей » 21 окт 2010, 15:50

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

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

Добавлено спустя 38 секунд:
Все это в даташите последовательно рассказано!

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

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

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

Добавлено спустя 10 минут 39 секунд:
Как обычно проблему создавала внешняя схема. Я уж какие только примеры туда не вставлял - ноль эффекта. Сигнал внешнего прерывания вообще до проца не доходил. Щас его ногу пинцетом подергал - прерывание случилось! :D

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

Сергей » 21 окт 2010, 16:41

Лучше всего проверять базовый функционал с помощью симулятора Keil, очень удобно. Да еще и скрипты писать можно.

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

Romikgy » 21 окт 2010, 21:15

поточнее насчет последнего

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

avr123.nm.ru » 21 окт 2010, 21:49

в примерах точно в хелпе коменты.

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

Romikgy » 22 окт 2010, 00:51

скрипты описаны в примерах?

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

avr123.nm.ru » 22 окт 2010, 09:00

ага.


Rambler\'s Top100 Mail.ru counter