ARMKernel::ARMKernel(ARMInterrupt *intr, CoreInfo *info) : Kernel(info) { NOTICE(""); // Setup interrupt callbacks m_intControl = intr; intr->install(ARMInterrupt::UndefinedInstruction, undefinedInstruction); intr->install(ARMInterrupt::SoftwareInterrupt, trap); intr->install(ARMInterrupt::PrefetchAbort, prefetchAbort); intr->install(ARMInterrupt::DataAbort, dataAbort); intr->install(ARMInterrupt::Reserved, reserved); intr->install(ARMInterrupt::IRQ, interrupt); intr->install(ARMInterrupt::FIQ, interrupt); // Enable clocks and irqs m_timer = &m_bcmTimer; m_bcmTimer.setFrequency( 250 ); /* trigger timer interrupts at 250Hz (clock runs at 1Mhz) */ m_intControl->enable(BCM_IRQ_SYSTIMERM1); // Set ARMCore modes ARMControl ctrl; ctrl.unset(ARMControl::AlignmentCorrect); ctrl.set(ARMControl::AlignmentFaults); ctrl.unset(ARMControl::BigEndian); }
ARMKernel::ARMKernel(Memory::Range kernel, Memory::Range memory, ARMInterrupt *intr, Address tags) : Kernel(kernel, memory), m_tags(tags) { NOTICE(""); m_intControl = intr; intr->install(ARMInterrupt::UndefinedInstruction, undefinedInstruction); intr->install(ARMInterrupt::SoftwareInterrupt, trap); intr->install(ARMInterrupt::PrefetchAbort, prefetchAbort); intr->install(ARMInterrupt::DataAbort, dataAbort); intr->install(ARMInterrupt::Reserved, reserved); intr->install(ARMInterrupt::IRQ, interrupt); intr->install(ARMInterrupt::FIQ, interrupt); // Enable clocks and irqs m_timer.setInterval( 250 ); /* trigger timer interrupts at 250Hz (clock runs at 1Mhz) */ m_intControl->enable(BCM_IRQ_SYSTIMERM1); // Set ARMCore modes ARMControl ctrl; ctrl.unset(ARMControl::AlignmentCorrect); ctrl.set(ARMControl::AlignmentFaults); ctrl.unset(ARMControl::BigEndian); }