We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hi I use an LPC2378 and try to timer1 to generate an interrupt, but it not happen.
VIC begin:
static void initVIC(void) { uint32 *vect_addr, *vect_prio; int i = 0; VICIntEnClr = 0xFFFFFFFF; VICProtection = 0x0; VICSoftIntClear = 0xFFFFFFFF; VICIntSelect = 0x0; VICSWPriorityMask = 0xFFFF; for(i = 0; i < 32; i++) { vect_addr = (uint32 *)(LPC2378_VIC_BASE + VECT_ADDR_INDEX + (i*4)); *vect_addr = 0x0; } for(i = 0; i < 32; i++) { vect_prio = (uint32 *)(LPC2378_VIC_BASE + VECT_PRIO_INDEX + (i*4)); *vect_prio = 0xF; } return; }
set ISR:
void installIntr(pISR intSR, eIF IRQorFIQ, uint32 prio, uint32 vectorNum) { if( IRQorFIQ == bIRQ ) { VICIntSelect = 0x0; } else if( IRQorFIQ == bFIQ ) { VICIntSelect |= 0x20; } VICIntEnable |= 0x20; uint32* VectBasePrio; VectBasePrio = (uint32*)&(VICVectPriority0); pISR* VectBaseAddr; VectBaseAddr = (pISR*)&(VICVectAddr0); VectBaseAddr= (pISR*)((&(VICVectAddr0)) + (vectorNum*4)); *VectBaseAddr= intSR; VectBasePrio = (uint32*)((&(VICVectPriority0)) + (vectorNum*4)); *VectBasePrio = prio; return; }
disable ISR with:
MRS R0, SPSR ORR R0, R0, #0xC0 MSR SPSR_c, R0 MOVS PC, LR
... and enable with the same but ORR -> BIC.
Also IRQ int set to: ldr pc, [pc, #-0x120]
Any help much grateful :)