Доброго Всем дня! Помогите пожалуйста найти ошибку. Имеется стек Wiznet +LPC2214 . Стек INT -выводом висит на EINT0 ( P0.16 ) LPC. Пытаюсь реализовать fiq-прерывание . Для этого имеется следующая C-функция в main:

__fiq __arm void fiq_handler (void)
{
uint8 int_val;
IINCHIP_ISR_DISABLE();
int_val = IINCHIP_READ(INT_REG); // зачитываю int-регистр стека

if (int_val & INT_IPCONFLICT)
{
printf("IP conflict : %.2x\r\n", int_val);
}
IINCHIP_ISR_ENABLE();
//iinchip_irq();
EXTINT = 0x1;
}


В файле startup следующее ( среда IAR 4.40 ):

__program_start
ldr pc,[pc,#24] ; Absolute jump can reach 4 GByte
; b ?cstartup ; Relative branch allows remap, limited to 32 MByte
; Vectors can be enabled by removing the comments below or by
; using #pragma vector from C code.
org 0x04
; ldr pc,[pc,#24] ; Branch to undef_handler
org 0x08
; ldr pc,[pc,#24] ; Branch to swi_handler
org 0x0c
; ldr pc,[pc,#24] ; Branch to prefetch_handler
org 0x10
; ldr pc,[pc,#24] ; Branch to data_handler
org 0x18
; ldr pc,[pc,#24] ; Branch to irq_handler

org 0x1c
ldr pc, FIQ_Addr // закидываю в pc адрес обработчика

; Constant table entries (for ldr pc) will be placed at 0x20
; Exception vectors can be specified in C code by #pragma vector or by filling
; in the vectors below. The vector address is the ARM vector number + 0x20.
org 0x20
dc32 ?cstartup
org 0x24
; dc32 undef_handler
org 0x28
; dc32 swi_handler
org 0x2c
; dc32 prefetch_handler
org 0x30
; dc32 data_handler
org 0x38
; dc32 irq_handler

org 0x3c
FIQ_Addr: dc32 fiq_handler // получаю адрес обработчика

; LTORG
ENDMOD __program_start
; ENDMOD

Линия P0.16 настроена как вход, через PINSEL1 для этой ноги выбрана функция EINT0. Настройки контроллера прерываний следующие :

PINSEL1 = 0x01;
VICIntSelect = 0x4000; // выбираем fiq для EINT0
VICIntEnable = 0x4000; // разрешаем прерывание

В регистре IMR (Interrupt Mask Register) стека Wiznet записано значение 0x80 ( т.е разрешено прерывание только в случае IP-Conflict ). Хотя тут есть неястность - в даташите на стек написано, что если прерывание нужно разрешить - то в соответствующий бит писать 1. В Wizne-товском драйвере же написано следующее:

void setINTMask(uint8 mask)
{
IINCHIP_WRITE(INTMASK,mask); // must be setted 0x10.
}

Или же это указано для запрещения прерываний? Но опять же в даташите указано, что бит 4 этого регистра должен быть выставлен в 0, а здесь он в 1.

При отладке как только доходит до соединения по одному из каналов ( стек в режиме клиента пытается законнектится к хосту), то винда начинает верещать о конфликте IP-адресов ( т.к в качестве IP стека указан IP хоста ), но код из обработчика не выполняется, а стек, согласно программе переходит в режим listen... Не могу понять , что он хочет... Помогите пожалуйста!!