ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
35617 Топик полностью
DASM (18.07.2005 20:12, просмотров: 1) ответил Master_005 на AT91SAM7S : Как пользоваться прерываниями "одновременно" от DBGU, RTT, PIT...
это все делается через AIC 
например заполняю слоты так
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_UDP] = (int) UsbIrqHandler;
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_TC0] = (int) Timer0IrqHandler;
В единственном в ARM обработчике IRQ типа  того 
extern "C" __arm __irq void IrqHandler()
{
	void (*pInterrupt)() = (void (*)())AT91C_BASE_SYS->AIC_IVR;
	pInterrupt();
}
Немного неоптимально, что вектор IRQ зовет с-шную функцию перед распределением прерывания, но честно говоря лень было на асме все
В асмовом файле просто - 


                B           InitReset           ; 0x00 Resethandler
undefvec:
                B           undefvec            ; 0x04 Undefined                    B           swivec              ; 0x08 Software 
pabtvec:
                B           pabtvec             ; 0x0C Prefetch 
dabtvec:
                B           dabtvec             ; 0x10 Data Abort
rsvdvec:
                B           rsvdvec             ; 0x14 reserved
irqvec:
	            LDR PC, irqAddr 
fiqvec:               				; 0x1c FIQ
              B           FIQ_Handler_Entry
irqAddr:
				DCD IrqHandler