Перейти к содержанию
    

реализация прерываний

Доброго дня!!! Народ, помогите пожалуйста!!!! Несколько дней уже бьюсь с прерываниями - не могу реализовать- программа не переходит на обработчик .... Опишите, если можно , как для малолетнего идиота, пошагово алгоритм действий....

Опишу, что у делаю я. Есть контроллер LPC 2214. Есть источник прерывания ( стек W3150) . Есть IAR 4.40 . Источник висит на линии порта ввода/вывода P0.16. Линия сконфигурирована как вход внешнего прерывания EINT0 ( регистр IO0DIR = 0x000000, т.е нога P0.16 сконфигурирована как вход, регистр PINSEL1 = 0x01, т.е линия сконфигурирована как вход внешнего прерывания..) . Сигналом прерывания является низкий уровень на входе. Соответственно содержимое регистра EXMODE ( выбор типа прерывания - по фронту или по уровню , не менял - там нули..). startup файл добовляю в проект и прописываю следующее ( полную версию startup прилагаю) :

 

org 0x18

ldr pc, 0xFFFFF030 ; адрес регистра VicVectAddr

 

В xls файле по поводу стеков следующее ( полную версию прилагаю ) :

 

//*************************************************************************

// Stack and heap segments.

//*************************************************************************

 

-Z(DATA)CSTACK+2000=40000000-40003FFF

-Z(DATA)IRQ_STACK+100=40000000-40003FFF

-Z(DATA)HEAP+8000=40000000-40003FFF

-Z(DATA)FIQ_STACK+100=40000000-40003FFF

 

 

Функция обработки :

 

__arm __irq void irq_handler()

{

printf("socket is :");

IR_STATUS[0] = IINCHIP_READ(INT_REG);

IR_STATUS[0] = IINCHIP_READ(INT_STATUS(0));

 

EXTINT = 0x1;

VICVectAddr = 0; // Clear interrupt in VIC.

 

// iinchip_irq();

 

}

 

Определена до main.

 

Функция инициализации VIC :

 

void irq_init ()

 

{

IO0DIR = 0x00000000;

PINSEL1 = 0x00000001;

VICVectCntl0 = 0x2e;

VICVectAddr0 = (unsigned)&irq_handler;

VICIntSelect = 0x00000000;

VICIntEnable = 0x00004000 ;

 

}

 

Вызываю в main() до инициализации самого источника прерываний.

 

Что самое интересное - в регистрах EXTINT и VIQIRQStatus после возникновения прерываний еденицы, т.е контроллер прерывание ловит, но почему-то не переходит на его обработчик....

Обьясните пожалуйста пошагово, как это делать. Если можно, подкинте примеры startupa..

Пытался сделать прерывание fiq, как показывал уважаемый Andy Mozzhevilov тут

http://electronix.ru/forum/index.php?showtopic=31378

был тут

http://electronix.ru/forum/index.php?showt...mp;#entry190686

тут

http://electronix.ru/forum/index.php?showt...27621&st=15

 

но ничего не вышло. Пожалуйста помогите!!!!

 

cstartup.rar

testos_lnk1.rar

Изменено пользователем Sarez

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пробовал....уже когда из шкафа достал любимай бубен, даже так делал :

 

org 0x18

ldr pc, IRQ

 

org 0x38

IRQ: dc32 irq_handler

 

Что то вроде перехода по адресу обработчика прерывания.....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а __enable_interrupt стоит в main ?

 

Поподробне пожалуйста? Чтобы разрешить прерывания нужно еще что нибудь сделать , кроме записи едениц по требуемым каналам в регистр VICIntEnable ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поставить вот эту строчку в main()

 

__enable_interrupt();

 

И ещё в начале файла main поставить вот это

 

#include <inarm.h>

 

Хотя я предпочитаю вот это:

 

#define _disIRQ() __set_CPSR(__get_CPSR() | 0xc0)

#define _enaIRQ() __set_CPSR(__get_CPSR() & ~0xc0)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть!!! Обработал!!! Спасибо большое :a14:

Буду разбираться с этим файлом. БОЛЬШОЕ СПАСИБО!!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...