#include "board.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace Ion { namespace Device { namespace Board { using namespace Regs; Frequency sNormalFrequency = Frequency::High; void shutdown() { shutdownPeripherals(); shutdownClocks(); } void initFPU() { // http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/BABDBFBJ.html CORTEX.CPACR()->setAccess(10, CORTEX::CPACR::Access::Full); CORTEX.CPACR()->setAccess(11, CORTEX::CPACR::Access::Full); // FIXME: The pipeline should be flushed at this point } void initPeripherals() { Display::init(); Backlight::init(); Keyboard::init(); LED::init(); Battery::init(); USB::init(); Console::init(); SWD::init(); Timing::init(); ExternalFlash::init(); } void shutdownPeripherals(bool keepLEDAwake) { ExternalFlash::shutdown(); Timing::shutdown(); SWD::shutdown(); Console::shutdown(); USB::shutdown(); Battery::shutdown(); if (!keepLEDAwake) { LED::shutdown(); } Keyboard::shutdown(); Backlight::shutdown(); Display::shutdown(); } void setClockFrequency(Frequency f) { // TODO: Update TIM3 prescaler or ARR to avoid irregular LED blinking switch (f) { case Frequency::High: RCC.CFGR()->setHPRE(RCC::CFGR::AHBPrescaler::SysClk); return; default: assert(f == Frequency::Low); RCC.CFGR()->setHPRE(Clocks::Config::AHBLowFrequencyPrescalerReg); return; } } } } }