/* * ======== Hwi_Module_startup ======== */ Int Hwi_Module_startup (Int phase) { int i; Hwi_Object *hwi; /* must wait for these modules to initialize first */ if (!Startup_rtsDone()) { return Startup_NOTDONE; } /* okay to proceed with initialization */ #ifndef ti_sysbios_hal_Hwi_DISABLE_ALL_HOOKS for (i = 0; i < Hwi_hooks.length; i++) { if (Hwi_hooks.elem[i].registerFxn != NULL) { Hwi_hooks.elem[i].registerFxn(i); } } #endif Hwi_init(); // sets up FIQ/IRQ stackpointers, etc /* * Initialize the pointer to the isrStack. * * The dispatcher's SP is decremented to accomodate its local variables * BEFORE switching to the ISR stack. Consequently, the intial value of * the ISR stack SP must leave room for these variables. * * Leave room for up to 32 32 bit local variables. */ Hwi_module->isrStack = (Char *) (((UInt32) (Hwi_module->isrStackBase) & 0xfffffff8) + (UInt32) Hwi_module->isrStackSize - 32 * sizeof(Int)); Hwi_module->taskSP = (Char *)-1;/* signal that we're executing on the */ /* ISR stack */ Hwi_enableIER(Hwi_module->ierMask); /* IER per static Hwi settings */ Hwi_l1Intc.ITR = 0; Hwi_l2Intc.ITR1 = 0; Hwi_l2Intc.ITR2 = 0; for (i = 0; i < Hwi_NUM_INTERRUPTS; i++) { hwi = Hwi_module->dispatchTable[i]; if (hwi != NULL) { postInit(hwi, NULL); } } return (Startup_DONE); }
/* * ======== Hwi_enableInterrupt ======== */ UInt Hwi_enableInterrupt(UInt intNum) { return (Hwi_enableIER(1 << intNum)); }
/* * ======== Hwi_Module_startup ======== */ Int Hwi_Module_startup(Int phase) { Int i; Hwi_Object *hwi; #ifdef ti_sysbios_BIOS_useSK__D UInt32* fxnPtr = &ti_sysbios_family_c64p_Hwi_int2; #endif /* Task and Swi APIs used not called until BIOS_start() */ /* okay to proceed with initialization */ #ifndef ti_sysbios_hal_Hwi_DISABLE_ALL_HOOKS for (i = 0; i < Hwi_hooks.length; i++) { if (Hwi_hooks.elem[i].registerFxn != NULL) { Hwi_hooks.elem[i].registerFxn(i); } } #endif #ifdef ti_sysbios_BIOS_useSK__D /* register interrupts 2-15 with SK */ for (i = 2; i < 16; i++) { SK_registerOSIntr(i, fxnPtr); fxnPtr = fxnPtr + 8; } /* NMI vector */ fxnPtr = &ti_sysbios_family_c64p_Hwi_int1; /* Register NMI vector with SK for exceptions */ SK_registerOSHWE(fxnPtr); /* Register NMI vector with SK for SWE processing */ SK_registerOSSWE(fxnPtr); #else /* Initialize the vector table pointer, ISTP */ ISTP = (UInt) Hwi_module->vectorTableBase; #endif /* * Initialize the pointer to the isrStack. These symbols are part of the * Hwi_module (instead of floating) in order to support ROM. * Leave room for one 32-bit value pushed by xdc_runtime_Startup_reset() * (for cases where intentionally reset as resume from power down), * and maintain double word alignment. */ Hwi_module->isrStack = Hwi_getIsrStackAddress() - 8; Hwi_module->taskSP = (Char *)-1;/* signal that we're executing on the */ /* ISR stack */ /* initialize INTMUX */ for (i = 4; i < Hwi_NUM_INTERRUPTS; i++) { if (Hwi_module->intEvents[i] != -1) { Hwi_eventMap(i, Hwi_module->intEvents[i]); } else { /* keep intEvents[] current for ROV */ Hwi_module->intEvents[i] = Hwi_getEventId(i); } } /* start with a clean slate after initializing INTMUX */ ICR = 0xffff; Hwi_enableIER(Hwi_module->ierMask); /* IER per static Hwi settings */ for (i = 0; i < Hwi_NUM_INTERRUPTS; i++) { hwi = Hwi_module->dispatchTable[i]; if (hwi != NULL) { Hwi_postInit(hwi, NULL); } } return (Startup_DONE); }