int main(void) { DisableGlobalInterrupts(); { SystemClockInit(); PMICInit(); LCDInit(); USBModuleInit(); } EnableGlobalInterrupts(); for ( ; ; ) { // keep looping forever (we are interrupt driven) } return 0; }
boolean CDWHCIDevice::Initialize (void) { DataMemBarrier (); assert (m_pInterruptSystem != 0); assert (m_pTimer != 0); CDWHCIRegister VendorId (DWHCI_CORE_VENDOR_ID); if (VendorId.Read () != 0x4F54280A) { CLogger::Get ()->Write (FromDWHCI, LogError, "Unknown vendor 0x%0X", VendorId.Get ()); return FALSE; } if (!PowerOn ()) { CLogger::Get ()->Write (FromDWHCI, LogError, "Cannot power on"); return FALSE; } // Disable all interrupts CDWHCIRegister AHBConfig (DWHCI_CORE_AHB_CFG); AHBConfig.Read (); AHBConfig.And (~DWHCI_CORE_AHB_CFG_GLOBALINT_MASK); AHBConfig.Write (); assert (m_pInterruptSystem != 0); m_pInterruptSystem->ConnectIRQ (ARM_IRQ_USB, InterruptStub, this); if (!InitCore ()) { CLogger::Get ()->Write (FromDWHCI, LogError, "Cannot initialize core"); return FALSE; } EnableGlobalInterrupts (); if (!InitHost ()) { CLogger::Get ()->Write (FromDWHCI, LogError, "Cannot initialize host"); return FALSE; } // The following calls will fail if there is no device or no supported device connected // to root port. This is not an error because the system may run without an USB device. if (!EnableRootPort ()) { CLogger::Get ()->Write (FromDWHCI, LogWarning, "No device connected to root port"); return TRUE; } if (!m_RootPort.Initialize ()) { CLogger::Get ()->Write (FromDWHCI, LogWarning, "Cannot initialize root port"); return TRUE; } DataMemBarrier (); return TRUE; }