diff --git a/docs/src/guide/cookbook.md b/docs/src/guide/cookbook.md index 2c4f400b60..67ca86d238 100644 --- a/docs/src/guide/cookbook.md +++ b/docs/src/guide/cookbook.md @@ -35,7 +35,7 @@ using Uart = Uart0; // connect both pins with a pullup on the Rx Uart::connect(Gpio::InputType::PullUp); // initialize to 115.2kBaud from the BSP clock configuration -Uart::initialize(); +Uart::initialize(); Uart::write('H'); // Ohai there Uart::write('i'); @@ -59,7 +59,7 @@ modm::IODeviceWrapper device; modm::IOStream stream(device); Uart::connect(); -Uart::initialize(); +Uart::initialize(); // similar to std::ostream but without formatting features stream << 42 << " is a nice number!" << modm::endl; diff --git a/docs/src/how-modm-works.md b/docs/src/how-modm-works.md index fa22cc7884..35a00d361c 100644 --- a/docs/src/how-modm-works.md +++ b/docs/src/how-modm-works.md @@ -259,8 +259,8 @@ for keeping code size in check on very resource constrained targets, like the AV ```cpp Uart4::connect(Gpio::InputType::PullUp); // pull-up in RX pin -Uart4::initialize(); // Within 1% default tolerance -Uart4::initialize(); +Uart4::initialize(); // Within 1% default tolerance +Uart4::initialize Tolerance::Exact>(); // error: The closest available baudrate exceeds the tolerance of the requested baudrate! ``` @@ -320,7 +320,7 @@ using GpioExpander = modm::Mcp23x17< Transport >; GpioExpander expander; // Connect and initialize the peripherals SpiMaster1::connect(); -SpiMaster1::initialize(); +SpiMaster1::initialize(); expander.initialize(); // Bind the expander pins to a simpler name using Pin0 = GpioExpander::P0< expander >; diff --git a/examples/arduino_uno/basic/analog_read_serial/main.cpp b/examples/arduino_uno/basic/analog_read_serial/main.cpp index cc7de73387..fb469919d6 100644 --- a/examples/arduino_uno/basic/analog_read_serial/main.cpp +++ b/examples/arduino_uno/basic/analog_read_serial/main.cpp @@ -14,6 +14,7 @@ // Inspired by: http://arduino.cc/en/Tutorial/AnalogReadSerial #include +using namespace modm::literals; int main() @@ -23,7 +24,7 @@ main() // Initialize the analog to digital converter // With the AVR running at 16Mhz and a prescaler of 128 the // ADC is running at 125kHz. - Adc::initialize(); + Adc::initialize(); Adc::setReference(Adc::Reference::InternalVcc); while (1) diff --git a/examples/arduino_uno/basic/read_analog_voltage/main.cpp b/examples/arduino_uno/basic/read_analog_voltage/main.cpp index 43f4fdadaf..abf720ca3a 100644 --- a/examples/arduino_uno/basic/read_analog_voltage/main.cpp +++ b/examples/arduino_uno/basic/read_analog_voltage/main.cpp @@ -14,6 +14,7 @@ // Inspired by: http://arduino.cc/en/Tutorial/ReadAnalogVoltage #include +using namespace modm::literals; int main() @@ -23,7 +24,7 @@ main() // Initialize the analog to digital converter // With the AVR running at 16Mhz and a prescaler of 128 the // ADC is running at 125kHz. - Adc::initialize(); + Adc::initialize(); Adc::setReference(Adc::Reference::InternalVcc); while (1) diff --git a/examples/avr/1-wire/ds18b20/main.cpp b/examples/avr/1-wire/ds18b20/main.cpp index 127e1481c0..1149eef94a 100644 --- a/examples/avr/1-wire/ds18b20/main.cpp +++ b/examples/avr/1-wire/ds18b20/main.cpp @@ -16,6 +16,7 @@ #include using namespace modm::platform; +using namespace modm::literals; using OneWirePin = GpioC2; using OneWireMaster = BitBangOneWireMaster; @@ -23,9 +24,8 @@ using OneWireMaster = BitBangOneWireMaster; int main() { - using systemClock = SystemClock; Uart0::connect(); - Uart0::initialize(); + Uart0::initialize(); // Enable interrupts, this is needed for every buffered UART enableInterrupts(); diff --git a/examples/avr/adc/basic/main.cpp b/examples/avr/adc/basic/main.cpp index a8d1edf662..436182da5f 100644 --- a/examples/avr/adc/basic/main.cpp +++ b/examples/avr/adc/basic/main.cpp @@ -15,14 +15,14 @@ #include using namespace modm::platform; -using systemClock = SystemClock; +using namespace modm::literals; int main() { // Create a new UART object and configure it to a baudrate of 115200 Uart0::connect(); - Uart0::initialize(); + Uart0::initialize(); // Enable interrupts, this is needed for every buffered UART enableInterrupts(); @@ -36,7 +36,7 @@ main() // Initialize the analog to digital converter // With the AVR running at 14.7456Mhz and a prescaler of 128 the // ADC is running at 115kHz. - Adc::initialize(); + Adc::initialize(); Adc::setReference(Adc::Reference::InternalVcc); // read the value of channel 0 (=> ADC0 => PA0) and wait until diff --git a/examples/avr/adc/oversample/main.cpp b/examples/avr/adc/oversample/main.cpp index 099caabf41..d45b9f0ad2 100644 --- a/examples/avr/adc/oversample/main.cpp +++ b/examples/avr/adc/oversample/main.cpp @@ -14,9 +14,9 @@ #include using namespace modm::platform; +using namespace modm::literals; // Create a new UART object -using systemClock = SystemClock; #include // Create a IOStream for complex formatting tasks @@ -38,12 +38,12 @@ int main() { Uart0::connect(); - Uart0::initialize(); + Uart0::initialize(); // Initialize the analog to digital converter // With the AVR running at 14.7456Mhz and a prescaler of 128 the // ADC is running at 115kHz. - Adc::initialize(); + Adc::initialize(); Adc::setReference(Adc::Reference::InternalVcc); Adc::enableInterrupt(); diff --git a/examples/avr/can/mcp2515/main.cpp b/examples/avr/can/mcp2515/main.cpp index f4616de2a1..bb6e865db0 100644 --- a/examples/avr/can/mcp2515/main.cpp +++ b/examples/avr/can/mcp2515/main.cpp @@ -15,7 +15,7 @@ #include using namespace modm::platform; -using systemClock = SystemClock; +using namespace modm::literals; typedef GpioOutputB4 Cs; typedef GpioInputB2 Int; @@ -50,12 +50,12 @@ main() // Initialize SPI interface and the other pins // needed by the MCP2515 SPI::connect(); - SPI::initialize(); + SPI::initialize(); Cs::setOutput(); Int::setInput(Gpio::InputType::PullUp); // Configure MCP2515 and set the filters - mcp2515.initialize(); + mcp2515.initialize<8_MHz, modm::Can::Bitrate::kBps125>(); mcp2515.setFilter(modm::accessor::asFlash(canFilter)); // Create a new message diff --git a/examples/avr/can/mcp2515_uart/main.cpp b/examples/avr/can/mcp2515_uart/main.cpp index 126d4c4eae..12b5e659c5 100644 --- a/examples/avr/can/mcp2515_uart/main.cpp +++ b/examples/avr/can/mcp2515_uart/main.cpp @@ -18,7 +18,7 @@ #include using namespace modm::platform; -using systemClock = SystemClock; +using namespace modm::literals; typedef GpioOutputB0 LedGreen; typedef GpioOutputB1 LedRed; @@ -69,7 +69,7 @@ main() OCR2A = 230; Uart0::connect(); - Uart0::initialize(); + Uart0::initialize(); // Create a IOStream for complex formatting tasks modm::IODeviceWrapper< Uart0, modm::IOBuffer::BlockIfFull > device; @@ -83,12 +83,12 @@ main() // Initialize SPI interface and the other pins // needed by the MCP2515 SPI::connect(); - SPI::initialize(); + SPI::initialize(); Cs::setOutput(); Int::setInput(Gpio::InputType::PullUp); // Configure MCP2515 and set the filters - mcp2515.initialize(); + mcp2515.initialize<8_MHz, modm::Can::Bitrate::kBps125>(); mcp2515.setFilter(modm::accessor::asFlash(canFilter)); // Create a new message diff --git a/examples/avr/display/dogm128/benchmark/main.cpp b/examples/avr/display/dogm128/benchmark/main.cpp index c6e15933c9..2eebec28ff 100644 --- a/examples/avr/display/dogm128/benchmark/main.cpp +++ b/examples/avr/display/dogm128/benchmark/main.cpp @@ -19,8 +19,8 @@ #include "images/rca_logo_128x64.hpp" using namespace modm::platform; +using namespace modm::literals; -using systemClock = SystemClock; namespace led { @@ -64,7 +64,7 @@ setup() led::B::setOutput(); lcd::SPI::connect(); - lcd::SPI::initialize(); + lcd::SPI::initialize(); // timer initialization // compare-match-interrupt every 1 ms at 14.7456 MHz diff --git a/examples/avr/display/dogm128/caged_ball/main.cpp b/examples/avr/display/dogm128/caged_ball/main.cpp index 2348b2b895..bffd133db2 100644 --- a/examples/avr/display/dogm128/caged_ball/main.cpp +++ b/examples/avr/display/dogm128/caged_ball/main.cpp @@ -16,8 +16,8 @@ #include using namespace modm::platform; +using namespace modm::literals; -using systemClock = SystemClock; namespace led { @@ -55,7 +55,7 @@ main() led::B::setOutput(); lcd::SPI::connect(); - lcd::SPI::initialize(); + lcd::SPI::initialize(); display.initialize(); diff --git a/examples/avr/display/dogm128/draw/main.cpp b/examples/avr/display/dogm128/draw/main.cpp index 30100d6384..9962ad292c 100644 --- a/examples/avr/display/dogm128/draw/main.cpp +++ b/examples/avr/display/dogm128/draw/main.cpp @@ -16,8 +16,8 @@ #include using namespace modm::platform; +using namespace modm::literals; -using systemClock = SystemClock; namespace led { @@ -55,7 +55,7 @@ main() led::B::setOutput(); lcd::SPI::connect(); - lcd::SPI::initialize(); + lcd::SPI::initialize(); display.initialize(); diff --git a/examples/avr/display/dogm128/image/main.cpp b/examples/avr/display/dogm128/image/main.cpp index c704c0cd02..d5dd5202fb 100644 --- a/examples/avr/display/dogm128/image/main.cpp +++ b/examples/avr/display/dogm128/image/main.cpp @@ -27,8 +27,8 @@ #include "images/image_64x64_9.hpp" using namespace modm::platform; +using namespace modm::literals; -using systemClock = SystemClock; namespace led { @@ -211,7 +211,7 @@ main() led::B::setOutput(); lcd::SPI::connect(); - lcd::SPI::initialize(); + lcd::SPI::initialize(); display.initialize(); diff --git a/examples/avr/display/dogm128/text/main.cpp b/examples/avr/display/dogm128/text/main.cpp index 7e809568ce..d4c4a4a741 100644 --- a/examples/avr/display/dogm128/text/main.cpp +++ b/examples/avr/display/dogm128/text/main.cpp @@ -17,8 +17,8 @@ #include using namespace modm::platform; +using namespace modm::literals; -using systemClock = SystemClock; // LCD Backlight namespace led @@ -57,7 +57,7 @@ main() led::B::setOutput(); SPI::connect< lcd::Scl::BitBang, lcd::Mosi::BitBang, lcd::Miso::BitBang >(); - SPI::initialize(); + SPI::initialize(); display.initialize(); diff --git a/examples/avr/display/dogm128/touch/main.cpp b/examples/avr/display/dogm128/touch/main.cpp index 04de2e2304..31d28e2c62 100644 --- a/examples/avr/display/dogm128/touch/main.cpp +++ b/examples/avr/display/dogm128/touch/main.cpp @@ -17,7 +17,7 @@ #include using namespace modm::platform; -using systemClock = SystemClock; +using namespace modm::literals; namespace touch { @@ -63,7 +63,7 @@ int main() { Uart0::connect(); - Uart0::initialize(); + Uart0::initialize(); // Enable interrupts, this is needed for every buffered UART enableInterrupts(); @@ -83,7 +83,7 @@ main() led::B::setOutput(); lcd::SPI::connect(); - lcd::SPI::initialize(); + lcd::SPI::initialize(); display.initialize(); @@ -96,7 +96,7 @@ main() display.update(); - Adc::initialize(); + Adc::initialize(); Adc::setReference(Adc::Reference::Internal2V56); touch::Bottom::setInput(); diff --git a/examples/avr/display/dogm132/main.cpp b/examples/avr/display/dogm132/main.cpp index b27620f209..8de0d79804 100644 --- a/examples/avr/display/dogm132/main.cpp +++ b/examples/avr/display/dogm132/main.cpp @@ -16,7 +16,7 @@ #include using namespace modm::platform; -using systemClock = SystemClock; +using namespace modm::literals; typedef GpioOutputD2 Cs; typedef GpioOutputB6 Mosi; @@ -40,7 +40,7 @@ main() Backlight::set(); SPI::connect(); - SPI::initialize(); + SPI::initialize(); display.initialize(); display.setFont(modm::font::Assertion); diff --git a/examples/avr/display/dogm163/main.cpp b/examples/avr/display/dogm163/main.cpp index a8a41dbd13..7526b10e6d 100644 --- a/examples/avr/display/dogm163/main.cpp +++ b/examples/avr/display/dogm163/main.cpp @@ -16,7 +16,7 @@ #include using namespace modm::platform; -using systemClock = SystemClock; +using namespace modm::literals; // Graphic LCD namespace lcd @@ -37,7 +37,7 @@ int main() { SPI::connect(); - SPI::initialize(); + SPI::initialize(); lcd::Cs::setOutput(); lcd::Rs::setOutput(); diff --git a/examples/avr/display/siemens_s65/main.cpp b/examples/avr/display/siemens_s65/main.cpp index da90fda545..f6ccc97053 100644 --- a/examples/avr/display/siemens_s65/main.cpp +++ b/examples/avr/display/siemens_s65/main.cpp @@ -16,8 +16,8 @@ #include using namespace modm::platform; +using namespace modm::literals; -using systemClock = SystemClock; typedef GpioOutputA0 Mosi; typedef GpioOutputA1 Sck; @@ -34,7 +34,7 @@ int main() { SPI::connect(); - SPI::initialize(); + SPI::initialize(); Backlight::setOutput(); Backlight::set(); diff --git a/examples/avr/logger/main.cpp b/examples/avr/logger/main.cpp index 5a162048fb..d4241ab746 100644 --- a/examples/avr/logger/main.cpp +++ b/examples/avr/logger/main.cpp @@ -15,7 +15,7 @@ #include using namespace modm::platform; -using systemClock = SystemClock; +using namespace modm::literals; // Create a new UART object and configure it to a baudrate of 115200 modm::IODeviceWrapper< Uart0, modm::IOBuffer::BlockIfFull > loggerDevice; @@ -34,7 +34,7 @@ int main() { Uart0::connect(); - Uart0::initialize(); + Uart0::initialize(); // Enable interrupts, this is needed for every buffered UART enableInterrupts(); diff --git a/examples/avr/pwm/pca9685/main.cpp b/examples/avr/pwm/pca9685/main.cpp index 8a8838191f..8a4a1e1e95 100644 --- a/examples/avr/pwm/pca9685/main.cpp +++ b/examples/avr/pwm/pca9685/main.cpp @@ -14,13 +14,13 @@ #include using namespace modm::platform; -using systemClock = SystemClock; +using namespace modm::literals; int main() { // Set-up the I2C device as master and configure it to a baudrate of 100.000 - I2cMaster::initialize(); + I2cMaster::initialize(); // Enable interrupts enableInterrupts(); diff --git a/examples/avr/sab/slave/main.cpp b/examples/avr/sab/slave/main.cpp index d3082cc534..f710ebc2d4 100644 --- a/examples/avr/sab/slave/main.cpp +++ b/examples/avr/sab/slave/main.cpp @@ -21,7 +21,7 @@ #include using namespace modm::platform; -using systemClock = SystemClock; +using namespace modm::literals; // ---------------------------------------------------------------------------- // wrapper class for the A/D converter @@ -31,7 +31,7 @@ class AnalogDigital : public modm::sab::Callable AnalogDigital() { // initialize the analog to digital converter - Adc::initialize(); + Adc::initialize(); Adc::setReference(Adc::Reference::InternalVcc); } diff --git a/examples/avr/uart/basic/main.cpp b/examples/avr/uart/basic/main.cpp index bf780ebb3d..ea2c6305aa 100644 --- a/examples/avr/uart/basic/main.cpp +++ b/examples/avr/uart/basic/main.cpp @@ -13,14 +13,14 @@ #include +using namespace modm::literals; using namespace modm::platform; -using systemClock = SystemClock; int main() { Uart0::connect(); - Uart0::initialize(); + Uart0::initialize(); // Enable interrupts, this is needed for every buffered UART enableInterrupts(); diff --git a/examples/avr/uart/extended/main.cpp b/examples/avr/uart/extended/main.cpp index 0d59d146a4..7d16feb708 100644 --- a/examples/avr/uart/extended/main.cpp +++ b/examples/avr/uart/extended/main.cpp @@ -13,15 +13,15 @@ #include #include +using namespace modm::literals; using namespace modm::platform; -using systemClock = SystemClock; int main() { Uart0::connect(); - Uart0::initialize(); + Uart0::initialize(); // Enable interrupts, this is needed for every buffered UART enableInterrupts(); diff --git a/examples/avr/xpcc/receiver/main.cpp b/examples/avr/xpcc/receiver/main.cpp index a114af9c7b..509e4312b3 100644 --- a/examples/avr/xpcc/receiver/main.cpp +++ b/examples/avr/xpcc/receiver/main.cpp @@ -19,7 +19,7 @@ #include using namespace modm::platform; -using systemClock = SystemClock; +using namespace modm::literals; // set new log level #undef MODM_LOG_LEVEL @@ -86,17 +86,17 @@ int main() { Uart0::connect(); - Uart0::initialize(); + Uart0::initialize(); // Initialize SPI interface and the other pins // needed by the MCP2515 SPI::connect(); - SPI::initialize(); + SPI::initialize(); Cs::setOutput(); Int::setInput(Gpio::InputType::PullUp); // Configure MCP2515 and set the filters - device.initialize(); + device.initialize<8_MHz, modm::Can::Bitrate::kBps125>(); device.setFilter(modm::accessor::asFlash(canFilter)); // Enable Interrupts diff --git a/examples/avr/xpcc/sender/main.cpp b/examples/avr/xpcc/sender/main.cpp index 97aa09c7a3..3bdb0f4951 100644 --- a/examples/avr/xpcc/sender/main.cpp +++ b/examples/avr/xpcc/sender/main.cpp @@ -19,7 +19,7 @@ #include using namespace modm::platform; -using systemClock = SystemClock; +using namespace modm::literals; // set new log level #undef MODM_LOG_LEVEL @@ -86,17 +86,17 @@ int main() { Uart0::connect(); - Uart0::initialize(); + Uart0::initialize(); // Initialize SPI interface and the other pins // needed by the MCP2515 SPI::connect(); - SPI::initialize(); + SPI::initialize(); Cs::setOutput(); Int::setInput(Gpio::InputType::PullUp); // Configure MCP2515 and set the filters - device.initialize(); + device.initialize<8_MHz, modm::Can::Bitrate::kBps125>(); device.setFilter(modm::accessor::asFlash(canFilter)); // Enable Interrupts diff --git a/examples/generic/i2c_multiplex/i2c_multiplex.cpp b/examples/generic/i2c_multiplex/i2c_multiplex.cpp index 631dd9e42f..f1368326f4 100644 --- a/examples/generic/i2c_multiplex/i2c_multiplex.cpp +++ b/examples/generic/i2c_multiplex/i2c_multiplex.cpp @@ -13,6 +13,7 @@ #include #include #include +using namespace modm::literals; using MyI2cMaster = modm::platform::I2cMaster1; using Mpx = modm::Pca9548a; @@ -108,11 +109,11 @@ main() #ifndef MODM_BOARD_HAS_LOGGER LoggerUsart::connect(); - LoggerUsart::initialize(12); + LoggerUsart::initialize(12); #endif modm::platform::I2cMaster1::connect(); - modm::platform::I2cMaster1::initialize(); + modm::platform::I2cMaster1::initialize(); constexpr uint32_t rate = 1; // Hz constexpr float interval = 1000.0 / rate; // msec diff --git a/examples/generic/ros/can_bridge/main.cpp b/examples/generic/ros/can_bridge/main.cpp index cae6444e9d..2ec41ee605 100644 --- a/examples/generic/ros/can_bridge/main.cpp +++ b/examples/generic/ros/can_bridge/main.cpp @@ -14,6 +14,7 @@ #include #include #include +using namespace modm::literals; namespace modm { namespace can { @@ -95,7 +96,7 @@ main() // Reinit onboard UART to 1 Mbps // Do not use it for logging because this will destroy ROS serial messages. - RosSerialUart::initialize(12); + RosSerialUart::initialize(12); CanFilter::setStartFilterBankForCan2(14); @@ -105,7 +106,7 @@ main() } else { Can::connect(Gpio::InputType::PullUp); } - Can::initialize(9); + Can::initialize(9); // Receive every message CanFilter::setFilter(0, CanFilter::FIFO0, diff --git a/examples/generic/ros/environment/main.cpp b/examples/generic/ros/environment/main.cpp index d8ed992757..56d21ab8a0 100644 --- a/examples/generic/ros/environment/main.cpp +++ b/examples/generic/ros/environment/main.cpp @@ -30,6 +30,7 @@ #include #include +using namespace modm::literals; #undef MODM_LOG_LEVEL #define MODM_LOG_LEVEL modm::log::DISABLED @@ -62,10 +63,10 @@ main() // Reinit onboard UART to 1 Mbps // Do not use it for logging because this will destroy ROS serial messages. - Board::stlink::Uart::initialize(12); + Board::stlink::Uart::initialize(12); MyI2cMaster::connect(); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); Board::LedGreen::set(); diff --git a/examples/generic/ros/sub_pub/main.cpp b/examples/generic/ros/sub_pub/main.cpp index 8026b58d26..c908e41128 100644 --- a/examples/generic/ros/sub_pub/main.cpp +++ b/examples/generic/ros/sub_pub/main.cpp @@ -23,6 +23,7 @@ #include #include +using namespace modm::literals; #undef MODM_LOG_LEVEL #define MODM_LOG_LEVEL modm::log::DISABLED @@ -74,7 +75,7 @@ main() // Reinit onboard UART to 1 Mbps // Do not use it for logging because this will destroy ROS serial messages. - Board::stlink::Uart::initialize(12); + Board::stlink::Uart::initialize(12); Board::LedGreen::set(); diff --git a/examples/generic/rtc_ds1302/rtc_ds1302.cpp b/examples/generic/rtc_ds1302/rtc_ds1302.cpp index 9eeafef8f6..0cc5cf7cd7 100644 --- a/examples/generic/rtc_ds1302/rtc_ds1302.cpp +++ b/examples/generic/rtc_ds1302/rtc_ds1302.cpp @@ -84,7 +84,7 @@ main() // Periodically report progress modm::PeriodicTimer blinkTimer(250); - MODM_LOG_DEBUG.printf("CPU frequency is %ld Hz\n", Board::systemClock::Frequency); + MODM_LOG_DEBUG.printf("CPU frequency is %ld Hz\n", Board::SystemClock::Frequency); uint8_t cc[] = "|/-\\"; uint8_t cycle(0); diff --git a/examples/nucleo_f401re/distance_vl53l0/main.cpp b/examples/nucleo_f401re/distance_vl53l0/main.cpp index 334970f998..a2afb56451 100644 --- a/examples/nucleo_f401re/distance_vl53l0/main.cpp +++ b/examples/nucleo_f401re/distance_vl53l0/main.cpp @@ -12,6 +12,7 @@ // ---------------------------------------------------------------------------- #include +using namespace modm::literals; #include #include @@ -159,7 +160,7 @@ main() LedD13::setOutput(); MyI2cMaster::connect(); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); MODM_LOG_INFO << "\n\nWelcome to VL53L0X demo!\n\n"; diff --git a/examples/nucleo_f429zi/pat9125el/main.cpp b/examples/nucleo_f429zi/pat9125el/main.cpp index 7d13ee244a..72be5a7e45 100644 --- a/examples/nucleo_f429zi/pat9125el/main.cpp +++ b/examples/nucleo_f429zi/pat9125el/main.cpp @@ -10,6 +10,7 @@ // ---------------------------------------------------------------------------- #include +using namespace modm::literals; #include #include @@ -85,7 +86,7 @@ main() MODM_LOG_INFO << "\n\nPAT9125EL I2C example\n\n"; I2c::connect(); - I2c::initialize(); + I2c::initialize(); while (1) { thread.update(); diff --git a/examples/nucleo_f429zi/spi_flash/main.cpp b/examples/nucleo_f429zi/spi_flash/main.cpp index ab7f4a94a5..2237ae4500 100644 --- a/examples/nucleo_f429zi/spi_flash/main.cpp +++ b/examples/nucleo_f429zi/spi_flash/main.cpp @@ -9,6 +9,7 @@ */ #include +using namespace modm::literals; #include @@ -101,7 +102,7 @@ main() // initialize board and SPI Board::initialize(); SpiMaster::connect(); - SpiMaster::initialize(); + SpiMaster::initialize(); std::memset(bufferA, 0xAA, BlockSize); std::memset(bufferB, 0x55, BlockSize); diff --git a/examples/nucleo_l432kc/gyroscope/main.cpp b/examples/nucleo_l432kc/gyroscope/main.cpp index 846b3f8610..d4f7792a9f 100644 --- a/examples/nucleo_l432kc/gyroscope/main.cpp +++ b/examples/nucleo_l432kc/gyroscope/main.cpp @@ -16,6 +16,7 @@ #include #include #include +using namespace modm::literals; // Example for L3gd20 gyroscope connected to SPI USART interface @@ -95,7 +96,7 @@ main() Board::initialize(); UartSpi::Master::connect(); - UartSpi::Master::initialize(); + UartSpi::Master::initialize(); while (1) { reader.update(); diff --git a/examples/nucleo_l432kc/uart_spi/main.cpp b/examples/nucleo_l432kc/uart_spi/main.cpp index d4ca064ebb..681bfdb3c0 100644 --- a/examples/nucleo_l432kc/uart_spi/main.cpp +++ b/examples/nucleo_l432kc/uart_spi/main.cpp @@ -12,6 +12,7 @@ // ---------------------------------------------------------------------------- #include +using namespace modm::literals; int @@ -21,7 +22,7 @@ main() // Enable Uart SPI 1 UartSpiMaster1::connect(); - UartSpiMaster1::initialize(); + UartSpiMaster1::initialize(); while (1) { diff --git a/examples/nucleo_l476rg/adc/main.cpp b/examples/nucleo_l476rg/adc/main.cpp index 0c3cd2416a..7ab9842751 100644 --- a/examples/nucleo_l476rg/adc/main.cpp +++ b/examples/nucleo_l476rg/adc/main.cpp @@ -21,9 +21,9 @@ main() // Output MSI Clock at MCO // 48 MHz / 16 = 3 MHz expected at PA8 - ClockControl::enableClockOutput( - ClockControl::ClockOutputSource::MultiSpeedInternalClock, - ClockControl::ClockOutputPrescaler::Div16); + Rcc::enableClockOutput( + Rcc::ClockOutputSource::MultiSpeedInternalClock, + Rcc::ClockOutputPrescaler::Div16); GpioConnector::connect(); diff --git a/examples/nucleo_l476rg/blink/main.cpp b/examples/nucleo_l476rg/blink/main.cpp index c79688c851..6f916f0f47 100644 --- a/examples/nucleo_l476rg/blink/main.cpp +++ b/examples/nucleo_l476rg/blink/main.cpp @@ -21,9 +21,9 @@ main() // Output MSI Clock at MCO // 48 MHz / 16 = 3 MHz expected at PA8 - ClockControl::enableClockOutput( - ClockControl::ClockOutputSource::MultiSpeedInternalClock, - ClockControl::ClockOutputPrescaler::Div16); + Rcc::enableClockOutput( + Rcc::ClockOutputSource::MultiSpeedInternalClock, + Rcc::ClockOutputPrescaler::Div16); GpioConnector::connect(); diff --git a/examples/nucleo_l476rg/i2c_test/main.cpp b/examples/nucleo_l476rg/i2c_test/main.cpp index 2912f36888..af784bd27f 100644 --- a/examples/nucleo_l476rg/i2c_test/main.cpp +++ b/examples/nucleo_l476rg/i2c_test/main.cpp @@ -134,7 +134,7 @@ main() Board::initialize(); MyI2cMaster::connect(); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); LedGreen::set(); diff --git a/examples/stm32f072_discovery/can/main.cpp b/examples/stm32f072_discovery/can/main.cpp index 8833b976f1..6f176cafc2 100644 --- a/examples/stm32f072_discovery/can/main.cpp +++ b/examples/stm32f072_discovery/can/main.cpp @@ -14,6 +14,7 @@ #include #include #include +using namespace modm::literals; /** * Example of CAN Hardware on STM32 F0 Discovery Board. @@ -75,14 +76,14 @@ main() // Initialize Usart Usart1::connect(); - Usart1::initialize(); + Usart1::initialize(); MODM_LOG_INFO << "CAN Test Program" << modm::endl; MODM_LOG_INFO << "Initializing Can ..." << modm::endl; // Initialize Can Can::connect(Gpio::InputType::PullUp); - Can::initialize(9); + Can::initialize(9); MODM_LOG_INFO << "Setting up Filter for Can ..." << modm::endl; // Receive every message diff --git a/examples/stm32f072_discovery/hard_fault/main.cpp b/examples/stm32f072_discovery/hard_fault/main.cpp index 99ee409b0b..0f12e41ce8 100644 --- a/examples/stm32f072_discovery/hard_fault/main.cpp +++ b/examples/stm32f072_discovery/hard_fault/main.cpp @@ -11,6 +11,7 @@ #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -34,7 +35,7 @@ main() // initialize Uart for MODM_LOG Usart1::connect(); - Usart1::initialize(); + Usart1::initialize(); MODM_LOG_INFO << "Causing a Hardfault now!" << modm::endl; diff --git a/examples/stm32f072_discovery/tmp102/main.cpp b/examples/stm32f072_discovery/tmp102/main.cpp index 4902101842..1aa72d18d6 100644 --- a/examples/stm32f072_discovery/tmp102/main.cpp +++ b/examples/stm32f072_discovery/tmp102/main.cpp @@ -11,6 +11,7 @@ // ---------------------------------------------------------------------------- #include +using namespace modm::literals; #include #include @@ -108,10 +109,10 @@ main() Board::initialize(); Usart1::connect(); - Usart1::initialize(); + Usart1::initialize(); MyI2cMaster::connect(); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); stream << "\n\nRESTART\n\n"; diff --git a/examples/stm32f072_discovery/uart/main.cpp b/examples/stm32f072_discovery/uart/main.cpp index c2ec8045ce..131353ae8f 100644 --- a/examples/stm32f072_discovery/uart/main.cpp +++ b/examples/stm32f072_discovery/uart/main.cpp @@ -14,6 +14,7 @@ // ---------------------------------------------------------------------------- #include +using namespace modm::literals; // ---------------------------------------------------------------------------- /** @@ -30,7 +31,7 @@ main() // Enable USART 1 Usart1::connect(); - Usart1::initialize(); + Usart1::initialize(); while (1) { diff --git a/examples/stm32f0_discovery/logger/main.cpp b/examples/stm32f0_discovery/logger/main.cpp index e7f294e23a..683e0a0d74 100644 --- a/examples/stm32f0_discovery/logger/main.cpp +++ b/examples/stm32f0_discovery/logger/main.cpp @@ -11,6 +11,7 @@ #include #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -33,7 +34,7 @@ main() // initialize Uart1 for MODM_LOG_* Usart1::connect(); - Usart1::initialize(12); + Usart1::initialize(12); // Use the logging streams to print some messages. // Change MODM_LOG_LEVEL above to enable or disable these messages diff --git a/examples/stm32f0_discovery/logger/project.xml b/examples/stm32f0_discovery/logger/project.xml index 0e9468c3ab..e7d965d5c0 100644 --- a/examples/stm32f0_discovery/logger/project.xml +++ b/examples/stm32f0_discovery/logger/project.xml @@ -1,5 +1,5 @@ - modm:disco-f100rb + modm:disco-f051r8 diff --git a/examples/stm32f103c8t6_blue_pill/adns_9800/main.cpp b/examples/stm32f103c8t6_blue_pill/adns_9800/main.cpp index e514ea174a..49b729d18e 100644 --- a/examples/stm32f103c8t6_blue_pill/adns_9800/main.cpp +++ b/examples/stm32f103c8t6_blue_pill/adns_9800/main.cpp @@ -20,6 +20,7 @@ #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -88,7 +89,7 @@ class Adns9800Thread : public modm::pt::Protothread Cs::setOutput(modm::Gpio::High); SpiMaster1::connect(); - SpiMaster1::initialize(); + SpiMaster1::initialize(); SpiMaster1::setDataMode(SpiMaster1::DataMode::Mode3); adns9800::initialise(); @@ -134,7 +135,7 @@ main() // initialize Uart2 for MODM_LOG_* Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // Use the logging streams to print some messages. // Change MODM_LOG_LEVEL above to enable or disable these messages diff --git a/examples/stm32f103c8t6_blue_pill/can/main.cpp b/examples/stm32f103c8t6_blue_pill/can/main.cpp index db3b278c02..54baaae333 100644 --- a/examples/stm32f103c8t6_blue_pill/can/main.cpp +++ b/examples/stm32f103c8t6_blue_pill/can/main.cpp @@ -11,7 +11,7 @@ #include #include -#include +using namespace modm::literals; modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > loggerDevice; modm::log::Logger modm::log::info(loggerDevice); @@ -58,7 +58,7 @@ main() // Initialize Usart Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MODM_LOG_INFO << "CAN Test Program" << modm::endl; @@ -73,7 +73,7 @@ main() } else { Can::connect(Gpio::InputType::PullUp); } - Can::initialize(9); + Can::initialize(9); MODM_LOG_INFO << "Setting up Filter for Can1..." << modm::endl; // Receive every message diff --git a/examples/stm32f103c8t6_blue_pill/environment/main.cpp b/examples/stm32f103c8t6_blue_pill/environment/main.cpp index 59591cf500..8a1ce91017 100644 --- a/examples/stm32f103c8t6_blue_pill/environment/main.cpp +++ b/examples/stm32f103c8t6_blue_pill/environment/main.cpp @@ -15,6 +15,7 @@ #include #include +using namespace modm::literals; #include "hardware.hpp" @@ -52,15 +53,15 @@ main() // ------------------------------------------------------------------------ // I2C for sensors SensorsAI2cMaster::connect(); - SensorsAI2cMaster::initialize(); + SensorsAI2cMaster::initialize(); SensorsBI2cMaster::connect(); - SensorsBI2cMaster::initialize(); + SensorsBI2cMaster::initialize(); // ------------------------------------------------------------------------ // initialize Uart2 for MODM_LOG_* Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MODM_LOG_DEBUG << "Welcome to Environment Sensor Test" << modm::endl; diff --git a/examples/stm32f103c8t6_blue_pill/logger/main.cpp b/examples/stm32f103c8t6_blue_pill/logger/main.cpp index 5dc53a94e9..6103a38daf 100644 --- a/examples/stm32f103c8t6_blue_pill/logger/main.cpp +++ b/examples/stm32f103c8t6_blue_pill/logger/main.cpp @@ -16,6 +16,7 @@ #include #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -79,7 +80,7 @@ main() // initialize Uart2 for MODM_LOG_* Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // Use the logging streams to print some messages. // Change MODM_LOG_LEVEL above to enable or disable these messages diff --git a/examples/stm32f1_discovery/logger/main.cpp b/examples/stm32f1_discovery/logger/main.cpp index f1dc8f0388..25964b947c 100644 --- a/examples/stm32f1_discovery/logger/main.cpp +++ b/examples/stm32f1_discovery/logger/main.cpp @@ -15,6 +15,7 @@ #include #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -38,7 +39,7 @@ main() // initialize Uart2 for MODM_LOG_* Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // Use the logging streams to print some messages. // Change MODM_LOG_LEVEL above to enable or disable these messages diff --git a/examples/stm32f3_discovery/adc/continous/main.cpp b/examples/stm32f3_discovery/adc/continous/main.cpp index 828665bb4c..2423e5295e 100644 --- a/examples/stm32f3_discovery/adc/continous/main.cpp +++ b/examples/stm32f3_discovery/adc/continous/main.cpp @@ -13,6 +13,7 @@ #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -62,7 +63,7 @@ main() // initialize Uart2 for MODM_LOG_INFO Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // initialize Adc Adc1::initialize(Adc1::ClockMode::Asynchronous, Adc1::Prescaler::Div128, diff --git a/examples/stm32f3_discovery/adc/interrupt/main.cpp b/examples/stm32f3_discovery/adc/interrupt/main.cpp index e0dcc19c8f..3d3130cadd 100644 --- a/examples/stm32f3_discovery/adc/interrupt/main.cpp +++ b/examples/stm32f3_discovery/adc/interrupt/main.cpp @@ -13,6 +13,7 @@ #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -44,7 +45,7 @@ main() // initialize Uart2 for MODM_LOG_INFO Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // initialize Adc4 Adc4::initialize(Adc4::ClockMode::Asynchronous, Adc4::Prescaler::Div256, diff --git a/examples/stm32f3_discovery/adc/simple/main.cpp b/examples/stm32f3_discovery/adc/simple/main.cpp index bc3a95bd03..f478878176 100644 --- a/examples/stm32f3_discovery/adc/simple/main.cpp +++ b/examples/stm32f3_discovery/adc/simple/main.cpp @@ -13,6 +13,7 @@ #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -32,7 +33,7 @@ main() // initialize Uart2 for MODM_LOG_INFO Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // initialize Adc4 Adc4::initialize(Adc4::ClockMode::Asynchronous, Adc4::Prescaler::Div256, diff --git a/examples/stm32f3_discovery/can/main.cpp b/examples/stm32f3_discovery/can/main.cpp index 486c9d9249..cb4f23e5e2 100644 --- a/examples/stm32f3_discovery/can/main.cpp +++ b/examples/stm32f3_discovery/can/main.cpp @@ -14,6 +14,7 @@ #include #include #include +using namespace modm::literals; /** * Example of CAN Hardware on STM32 F3 Discovery Board. @@ -76,14 +77,14 @@ main() // Initialize Usart Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MODM_LOG_INFO << "CAN Test Program" << modm::endl; MODM_LOG_INFO << "Initializing Can ..." << modm::endl; // Initialize Can Can::connect(Gpio::InputType::PullUp); - Can::initialize(9); + Can::initialize(9); MODM_LOG_INFO << "Setting up Filter for Can ..." << modm::endl; // Receive every message diff --git a/examples/stm32f3_discovery/comp/main.cpp b/examples/stm32f3_discovery/comp/main.cpp index d62e2f5f5e..7f000f806a 100644 --- a/examples/stm32f3_discovery/comp/main.cpp +++ b/examples/stm32f3_discovery/comp/main.cpp @@ -11,6 +11,7 @@ #include #include +using namespace modm::literals; #include @@ -35,7 +36,7 @@ main() // initialize Uart2 for MODM_LOG_ Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // Use the logging streams to print some messages. // Change MODM_LOG_LEVEL above to enable or disable these messages diff --git a/examples/stm32f3_discovery/hard_fault/main.cpp b/examples/stm32f3_discovery/hard_fault/main.cpp index 24600cb233..ce09e2da9c 100644 --- a/examples/stm32f3_discovery/hard_fault/main.cpp +++ b/examples/stm32f3_discovery/hard_fault/main.cpp @@ -14,6 +14,7 @@ #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -37,7 +38,7 @@ main() // initialize Uart2 for MODM_LOG_ Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MODM_LOG_INFO << "Causing a Hardfault now!" << modm::endl; diff --git a/examples/stm32f3_discovery/uart/hal/main.cpp b/examples/stm32f3_discovery/uart/hal/main.cpp index 30407ed995..847e5ab40a 100644 --- a/examples/stm32f3_discovery/uart/hal/main.cpp +++ b/examples/stm32f3_discovery/uart/hal/main.cpp @@ -12,6 +12,7 @@ // ---------------------------------------------------------------------------- #include +using namespace modm::literals; int main() @@ -21,7 +22,7 @@ main() // Initialize Usart Hal GpioInputA3::configure(Gpio::InputType::PullUp); GpioConnector::connect(); -// UsartHal2::initialize(UsartHal2::Parity::Odd); +// UsartHal2::initialize(UsartHal2::Parity::Odd); UsartHal2::enableInterruptVector(true, 14); UsartHal2::enableInterrupt(UsartHal2::Interrupt::TxEmpty); UsartHal2::setTransmitterEnable(true); diff --git a/examples/stm32f3_discovery/uart/logger/main.cpp b/examples/stm32f3_discovery/uart/logger/main.cpp index 76b8d64574..64b2cddb83 100644 --- a/examples/stm32f3_discovery/uart/logger/main.cpp +++ b/examples/stm32f3_discovery/uart/logger/main.cpp @@ -14,6 +14,7 @@ #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -37,7 +38,7 @@ main() // initialize Uart2 for MODM_LOG_ Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // Use the logging streams to print some messages. // Change MODM_LOG_LEVEL above to enable or disable these messages diff --git a/examples/stm32f429_discovery/logger/main.cpp b/examples/stm32f429_discovery/logger/main.cpp index 05b9c24f4c..70c172cfbe 100644 --- a/examples/stm32f429_discovery/logger/main.cpp +++ b/examples/stm32f429_discovery/logger/main.cpp @@ -14,6 +14,7 @@ #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -37,7 +38,7 @@ main() // initialize Uart2 for MODM_LOG_ Usart1::connect(); - Usart1::initialize(); + Usart1::initialize(); // Use the logging streams to print some messages. // Change MODM_LOG_LEVEL above to enable or disable these messages diff --git a/examples/stm32f469_discovery/can/main.cpp b/examples/stm32f469_discovery/can/main.cpp index dde4f3c716..ae74e9b832 100644 --- a/examples/stm32f469_discovery/can/main.cpp +++ b/examples/stm32f469_discovery/can/main.cpp @@ -75,7 +75,7 @@ main() MODM_LOG_INFO << "Initializing Can ..." << modm::endl; // Initialize Can Can2::connect(Gpio::InputType::PullUp); - Can2::initialize(9); + Can2::initialize(9); MODM_LOG_INFO << "Setting up Filter for Can ..." << modm::endl; // Receive every message diff --git a/examples/stm32f4_discovery/accelerometer/main.cpp b/examples/stm32f4_discovery/accelerometer/main.cpp index 8b73859efd..b30a6406d1 100644 --- a/examples/stm32f4_discovery/accelerometer/main.cpp +++ b/examples/stm32f4_discovery/accelerometer/main.cpp @@ -15,6 +15,7 @@ #include #include #include +using namespace modm::literals; // ST changed the accelerometer in the C revision (MB997C) @@ -117,7 +118,7 @@ main() Board::lis3::Mosi::setOutput(modm::Gpio::High); lis::I2cMaster::connect(lis::I2cMaster::PullUps::Internal); - lis::I2cMaster::initialize(); + lis::I2cMaster::initialize(); #else Board::initializeLis3(); #endif diff --git a/examples/stm32f4_discovery/adc/interrupt/main.cpp b/examples/stm32f4_discovery/adc/interrupt/main.cpp index ab9a0992dc..b4fe4f72b0 100644 --- a/examples/stm32f4_discovery/adc/interrupt/main.cpp +++ b/examples/stm32f4_discovery/adc/interrupt/main.cpp @@ -13,6 +13,7 @@ #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -46,10 +47,10 @@ main() // initialize Uart2 for MODM_LOG_INFO Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // initialize Adc2 - Adc2::initialize(); + Adc2::initialize(); Adc2::connect(); Adc2::setPinChannel(); diff --git a/examples/stm32f4_discovery/adc/oversample/main.cpp b/examples/stm32f4_discovery/adc/oversample/main.cpp index f3fff13cb4..0e7aa8964d 100644 --- a/examples/stm32f4_discovery/adc/oversample/main.cpp +++ b/examples/stm32f4_discovery/adc/oversample/main.cpp @@ -13,6 +13,7 @@ #include #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -46,11 +47,11 @@ main() // initialize Uart2 for MODM_LOG_INFO Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // initialize Adc2 Adc2::connect(); - Adc2::initialize(); + Adc2::initialize(); Adc2::enableInterruptVector(5); Adc2::enableInterrupt(Adc2::Interrupt::EndOfRegularConversion); diff --git a/examples/stm32f4_discovery/adc/simple/main.cpp b/examples/stm32f4_discovery/adc/simple/main.cpp index 7b9489b31b..bc4837500c 100644 --- a/examples/stm32f4_discovery/adc/simple/main.cpp +++ b/examples/stm32f4_discovery/adc/simple/main.cpp @@ -13,6 +13,7 @@ #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // Set the log level @@ -32,11 +33,11 @@ main() // initialize Uart2 for MODM_LOG_INFO Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // initialize Adc2 Adc2::connect(); - Adc2::initialize(); + Adc2::initialize(); Adc2::setPinChannel(); while (1) diff --git a/examples/stm32f4_discovery/app_uart_sniffer/main.cpp b/examples/stm32f4_discovery/app_uart_sniffer/main.cpp index ba16572fff..a06192653a 100644 --- a/examples/stm32f4_discovery/app_uart_sniffer/main.cpp +++ b/examples/stm32f4_discovery/app_uart_sniffer/main.cpp @@ -15,6 +15,7 @@ #include #include #include +using namespace modm::literals; modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > loggerDevice; @@ -86,15 +87,15 @@ main() // Enable USART 2: To / from PC Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // Enable USART 1 Host To Node Usart1::connect(); - Usart1::initialize(); + Usart1::initialize(); // Enable USART 3 Node to Host Usart3::connect(); - Usart3::initialize(); + Usart3::initialize(); MODM_LOG_INFO.printf("\e[H\e[J\e[39m"); MODM_LOG_INFO.printf("Welcome to MODM Bidirectional UART Sniffer.\n\n"); diff --git a/examples/stm32f4_discovery/barometer_bmp085_bmp180/main.cpp b/examples/stm32f4_discovery/barometer_bmp085_bmp180/main.cpp index da51dee471..6a02094083 100644 --- a/examples/stm32f4_discovery/barometer_bmp085_bmp180/main.cpp +++ b/examples/stm32f4_discovery/barometer_bmp085_bmp180/main.cpp @@ -16,6 +16,7 @@ #include #include #include +using namespace modm::literals; modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > device; modm::IOStream stream(device); @@ -127,10 +128,10 @@ main() Board::initialize(); Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MyI2cMaster::connect(); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); stream << "\n\nWelcome to BMP085 demo!\n\n"; diff --git a/examples/stm32f4_discovery/can/main.cpp b/examples/stm32f4_discovery/can/main.cpp index a222a8a1dd..3f0db96df6 100644 --- a/examples/stm32f4_discovery/can/main.cpp +++ b/examples/stm32f4_discovery/can/main.cpp @@ -14,6 +14,7 @@ #include #include #include +using namespace modm::literals; modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > loggerDevice; modm::log::Logger modm::log::info(loggerDevice); @@ -60,7 +61,7 @@ main() // Initialize Usart Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MODM_LOG_INFO << "CAN Test Program" << modm::endl; @@ -70,7 +71,7 @@ main() MODM_LOG_INFO << "Initializing Can1..." << modm::endl; // Initialize Can1 Can1::connect(Gpio::InputType::PullUp); - Can1::initialize(9); + Can1::initialize(9); MODM_LOG_INFO << "Setting up Filter for Can1..." << modm::endl; // Receive every message @@ -81,7 +82,7 @@ main() MODM_LOG_INFO << "Initializing Can2..." << modm::endl; // Initialize Can2 Can2::connect(Gpio::InputType::PullUp); - Can2::initialize(12); + Can2::initialize(12); MODM_LOG_INFO << "Setting up Filter for Can2..." << modm::endl; // Receive every message diff --git a/examples/stm32f4_discovery/can2/main.cpp b/examples/stm32f4_discovery/can2/main.cpp index a864da3e05..826409971a 100644 --- a/examples/stm32f4_discovery/can2/main.cpp +++ b/examples/stm32f4_discovery/can2/main.cpp @@ -15,6 +15,7 @@ #include #include #include +using namespace modm::literals; /** * Example of CAN Hardware on STM32 F3/F4 Discovery Board. @@ -77,14 +78,14 @@ main() // Initialize Usart Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MODM_LOG_INFO << "CAN Test Program" << modm::endl; MODM_LOG_INFO << "Initializing Can ..." << modm::endl; // Initialize Can Can1::connect(Gpio::InputType::PullUp); - Can1::initialize(9); + Can1::initialize(9); MODM_LOG_INFO << "Setting up Filter for Can ..." << modm::endl; // Receive every message diff --git a/examples/stm32f4_discovery/colour_tcs3414/main.cpp b/examples/stm32f4_discovery/colour_tcs3414/main.cpp index a7de2ee8ec..068bf9cf32 100644 --- a/examples/stm32f4_discovery/colour_tcs3414/main.cpp +++ b/examples/stm32f4_discovery/colour_tcs3414/main.cpp @@ -18,6 +18,7 @@ #include #include +using namespace modm::literals; modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > device; modm::IOStream stream(device); @@ -125,10 +126,10 @@ main() Board::initialize(); Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MyI2cMaster::connect(); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); stream << "\n\nWelcome to TCS3414 demo!\n\n"; diff --git a/examples/stm32f4_discovery/display/hd44780/main.cpp b/examples/stm32f4_discovery/display/hd44780/main.cpp index e8aceebb71..59f348f581 100644 --- a/examples/stm32f4_discovery/display/hd44780/main.cpp +++ b/examples/stm32f4_discovery/display/hd44780/main.cpp @@ -30,6 +30,7 @@ #include #include +using namespace modm::literals; modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > device; modm::IOStream stream(device); @@ -191,12 +192,12 @@ main() Board::initialize(); Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MODM_LOG_INFO << "\n\nWelcome to HD44780 I2C demo!\n\n"; MyI2cMaster::connect(MyI2cMaster::PullUps::Internal); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); modm::ShortPeriodicTimer tmr(500); diff --git a/examples/stm32f4_discovery/display/nokia_5110/main.cpp b/examples/stm32f4_discovery/display/nokia_5110/main.cpp index 858c7e717d..0e2142fb5a 100644 --- a/examples/stm32f4_discovery/display/nokia_5110/main.cpp +++ b/examples/stm32f4_discovery/display/nokia_5110/main.cpp @@ -25,6 +25,7 @@ #include #include +using namespace modm::literals; modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > device; modm::IOStream stream(device); @@ -114,7 +115,7 @@ main() Board::initialize(); Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MODM_LOG_INFO << "\n\nWelcome to Nokia 5110 display demo!\n\n"; @@ -124,7 +125,7 @@ main() // Hardware SPI Master SpiMaster2::connect(); - mySpiMaster::initialize(); + mySpiMaster::initialize(); modm::ShortPeriodicTimer tmr(500); diff --git a/examples/stm32f4_discovery/display/ssd1306/main.cpp b/examples/stm32f4_discovery/display/ssd1306/main.cpp index 04aa51bc92..49a1899532 100644 --- a/examples/stm32f4_discovery/display/ssd1306/main.cpp +++ b/examples/stm32f4_discovery/display/ssd1306/main.cpp @@ -11,6 +11,7 @@ #include #include +using namespace modm::literals; /** * Example to demonstrate a MODM graphics display SSD1306. @@ -33,7 +34,7 @@ main() Board::initialize(); MyI2cMaster::connect(); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); display.initializeBlocking(); display.setFont(modm::font::Assertion); diff --git a/examples/stm32f4_discovery/distance_vl6180/main.cpp b/examples/stm32f4_discovery/distance_vl6180/main.cpp index 95a453cec1..c33514ec85 100644 --- a/examples/stm32f4_discovery/distance_vl6180/main.cpp +++ b/examples/stm32f4_discovery/distance_vl6180/main.cpp @@ -16,6 +16,7 @@ #include #include #include +using namespace modm::literals; modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > device; @@ -146,10 +147,10 @@ main() Board::initialize(); Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MyI2cMaster::connect(); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); MODM_LOG_INFO << "\n\nWelcome to VL6180X demo!\n\n"; diff --git a/examples/stm32f4_discovery/hard_fault/main.cpp b/examples/stm32f4_discovery/hard_fault/main.cpp index a3d46e98a3..b6867f67b0 100644 --- a/examples/stm32f4_discovery/hard_fault/main.cpp +++ b/examples/stm32f4_discovery/hard_fault/main.cpp @@ -11,6 +11,7 @@ #include #include +using namespace modm::literals; /* This example showcases the hard fault handler LED blinking and UART logging. * You can trigger the hard fault by pressing the blue button, which will execute an undefined instruction. @@ -54,7 +55,7 @@ main() // initialize Uart2 for MODM_LOG_ Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MODM_LOG_INFO << "Press Button to cause a Hardfault!" << modm::endl; diff --git a/examples/stm32f4_discovery/led_matrix_display/main.cpp b/examples/stm32f4_discovery/led_matrix_display/main.cpp index 5e8490c440..0d061dfd2b 100644 --- a/examples/stm32f4_discovery/led_matrix_display/main.cpp +++ b/examples/stm32f4_discovery/led_matrix_display/main.cpp @@ -13,6 +13,7 @@ #include #include #include +using namespace modm::literals; /** * Example to demonstrate a MODM graphics display made @@ -57,7 +58,7 @@ main() Clk::setOutput(); Spi::connect(); - Spi::initialize< Board::systemClock, 10000000 >(); + Spi::initialize< Board::SystemClock, 10_MHz>(); ledMatrixDisplay.initialize(); diff --git a/examples/stm32f4_discovery/open407v-d/gui/main.cpp b/examples/stm32f4_discovery/open407v-d/gui/main.cpp index f8e4416101..e1043fe629 100644 --- a/examples/stm32f4_discovery/open407v-d/gui/main.cpp +++ b/examples/stm32f4_discovery/open407v-d/gui/main.cpp @@ -28,6 +28,7 @@ #include "touchscreen_calibrator.hpp" #include "images/bluetooth_12x16.hpp" +using namespace modm::literals; // ---------------------------------------------------------------------------- /* @@ -52,7 +53,7 @@ void initLogger() { Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); } // ---------------------------------------------------------------------------- @@ -165,7 +166,7 @@ initTouchscreen() IntTouchscreen::setInput(Gpio::InputType::PullUp); SpiMaster2::connect(); - SpiMaster2::initialize(); + SpiMaster2::initialize(); SpiMaster2::setDataMode(SpiMaster2::DataMode::Mode0); } diff --git a/examples/stm32f4_discovery/open407v-d/touchscreen/main.cpp b/examples/stm32f4_discovery/open407v-d/touchscreen/main.cpp index c938d0850b..76c78bd86d 100644 --- a/examples/stm32f4_discovery/open407v-d/touchscreen/main.cpp +++ b/examples/stm32f4_discovery/open407v-d/touchscreen/main.cpp @@ -123,7 +123,7 @@ initTouchscreen() IntTouchscreen::setInput(Gpio::InputType::PullUp); SpiMaster2::connect(); - SpiMaster2::initialize(); + SpiMaster2::initialize(); SpiMaster2::setDataMode(SpiMaster2::DataMode::Mode0); } diff --git a/examples/stm32f4_discovery/pressure_ams5915/main.cpp b/examples/stm32f4_discovery/pressure_ams5915/main.cpp index 92607925b4..79f7404411 100644 --- a/examples/stm32f4_discovery/pressure_ams5915/main.cpp +++ b/examples/stm32f4_discovery/pressure_ams5915/main.cpp @@ -16,6 +16,7 @@ #include #include #include +using namespace modm::literals; modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > device; @@ -100,10 +101,10 @@ main() Board::initialize(); Usart2::connect(); - Usart2::initialize(10); + Usart2::initialize(10); MyI2cMaster::connect(); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); MODM_LOG_INFO << "\n\nWelcome to AMSYS 5915 pressure sensor demo!\n\n"; diff --git a/examples/stm32f4_discovery/protothreads/main.cpp b/examples/stm32f4_discovery/protothreads/main.cpp index cd56946c84..2a46550c1f 100644 --- a/examples/stm32f4_discovery/protothreads/main.cpp +++ b/examples/stm32f4_discovery/protothreads/main.cpp @@ -17,6 +17,7 @@ #include #include +using namespace modm::literals; modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > device; modm::IOStream stream(device); @@ -108,10 +109,10 @@ main() Board::initialize(); Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MyI2cMaster::connect(MyI2cMaster::PullUps::Internal); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); stream << "\n\nRESTART\n\n"; diff --git a/examples/stm32f4_discovery/radio/nrf24-basic-comm/main.cpp b/examples/stm32f4_discovery/radio/nrf24-basic-comm/main.cpp index 8607662431..6a7059fc03 100644 --- a/examples/stm32f4_discovery/radio/nrf24-basic-comm/main.cpp +++ b/examples/stm32f4_discovery/radio/nrf24-basic-comm/main.cpp @@ -17,6 +17,7 @@ #include #include +using namespace modm::literals; using modm::Nrf24Register; using modm::Nrf24Phy; @@ -101,15 +102,15 @@ main() // Enable SPI 1 SpiMaster1::connect(); - SpiMaster1::initialize(); + SpiMaster1::initialize(); // Enable SPI 2 SpiMaster2::connect(); - SpiMaster2::initialize(); + SpiMaster2::initialize(); // Enable UART 2 Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); /* Configuration values for nRF24 */ diff --git a/examples/stm32f4_discovery/radio/nrf24-data/rx/main.cpp b/examples/stm32f4_discovery/radio/nrf24-data/rx/main.cpp index b2d05c598c..0dd602ae23 100644 --- a/examples/stm32f4_discovery/radio/nrf24-data/rx/main.cpp +++ b/examples/stm32f4_discovery/radio/nrf24-data/rx/main.cpp @@ -19,6 +19,7 @@ #include #include +using namespace modm::literals; /* * This example showcases a simple usage of the data layer implementation for @@ -75,11 +76,11 @@ main() // Enable SPI 2 Spi::connect(); - Spi::initialize(); + Spi::initialize(); // Enable UART 2 Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MODM_LOG_INFO << "Hello from nrf24-data-rx example" << modm::endl; diff --git a/examples/stm32f4_discovery/radio/nrf24-data/tx/main.cpp b/examples/stm32f4_discovery/radio/nrf24-data/tx/main.cpp index fc3bbc79f1..72c3cfa897 100644 --- a/examples/stm32f4_discovery/radio/nrf24-data/tx/main.cpp +++ b/examples/stm32f4_discovery/radio/nrf24-data/tx/main.cpp @@ -19,6 +19,7 @@ #include #include +using namespace modm::literals; /* * This example showcases a simple usage of the data layer implementation for @@ -75,11 +76,11 @@ main() // Enable SPI 2 Spi::connect(); - Spi::initialize(); + Spi::initialize(); // Enable UART 2 Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); MODM_LOG_INFO << "Hello from nrf24-data-tx example" << modm::endl; diff --git a/examples/stm32f4_discovery/radio/nrf24-phy-test/main.cpp b/examples/stm32f4_discovery/radio/nrf24-phy-test/main.cpp index 7638a5a66e..088cb1a375 100644 --- a/examples/stm32f4_discovery/radio/nrf24-phy-test/main.cpp +++ b/examples/stm32f4_discovery/radio/nrf24-phy-test/main.cpp @@ -15,6 +15,7 @@ #include #include #include +using namespace modm::literals; /* * Test SPI communication by writing and reading out registers on the @@ -64,11 +65,11 @@ main() // Enable SPI 2 SpiMaster2::connect(); - SpiMaster2::initialize(); + SpiMaster2::initialize(); // Enable UART 2 Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // Initialize nRF24-Phy diff --git a/examples/stm32f4_discovery/radio/nrf24-scanner/main.cpp b/examples/stm32f4_discovery/radio/nrf24-scanner/main.cpp index 09e0d94fbf..56869db0af 100644 --- a/examples/stm32f4_discovery/radio/nrf24-scanner/main.cpp +++ b/examples/stm32f4_discovery/radio/nrf24-scanner/main.cpp @@ -16,6 +16,7 @@ #include #include #include +using namespace modm::literals; /* * A simple 2.4GHz "spectrum analyzer". Please use a terminal @@ -68,11 +69,11 @@ main() // Enable SPI 2 SpiMaster2::connect(); - SpiMaster2::initialize(); + SpiMaster2::initialize(); // Enable UART 2 Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); // Initialize nRF24-HAL diff --git a/examples/stm32f4_discovery/rtos/float_check/main.cpp b/examples/stm32f4_discovery/rtos/float_check/main.cpp index 387c53b425..a9ac1b2b4e 100644 --- a/examples/stm32f4_discovery/rtos/float_check/main.cpp +++ b/examples/stm32f4_discovery/rtos/float_check/main.cpp @@ -15,7 +15,6 @@ #include using namespace modm::platform; -using namespace modm::cortex; /** * Check FPU support in FreeRTOS for STM32F4. @@ -99,7 +98,7 @@ main() Board::initialize(); Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); while (1) { diff --git a/examples/stm32f4_discovery/sab2/main.cpp b/examples/stm32f4_discovery/sab2/main.cpp index 4b52f4639e..8b8ecb0ba6 100644 --- a/examples/stm32f4_discovery/sab2/main.cpp +++ b/examples/stm32f4_discovery/sab2/main.cpp @@ -12,6 +12,7 @@ #include #include #include +using namespace modm::literals; // ---------------------------------------------------------------------------- // @@ -27,10 +28,10 @@ main() Board::initialize(); Usart1::connect(); - Usart1::initialize(); + Usart1::initialize(); Uart4::connect(); - Uart4::initialize(); + Uart4::initialize(); while (1) { diff --git a/examples/stm32f4_discovery/spi/main.cpp b/examples/stm32f4_discovery/spi/main.cpp index 191d2f92e8..d3776016ff 100644 --- a/examples/stm32f4_discovery/spi/main.cpp +++ b/examples/stm32f4_discovery/spi/main.cpp @@ -12,6 +12,7 @@ // ---------------------------------------------------------------------------- #include +using namespace modm::literals; // If you use a different SPI instance, you may have to also choose different // GPIOs to connect to. @@ -30,7 +31,7 @@ main() // Connect the GPIOs to the SPIs alternate function SpiMaster::connect(); // Initialize the SPI with a 20MHz clock - SpiMaster::initialize(); + SpiMaster::initialize(); uint8_t data = 0; while (1) diff --git a/examples/stm32f4_discovery/temperature_ltc2984/main.cpp b/examples/stm32f4_discovery/temperature_ltc2984/main.cpp index 35800bb9c2..d39680280b 100644 --- a/examples/stm32f4_discovery/temperature_ltc2984/main.cpp +++ b/examples/stm32f4_discovery/temperature_ltc2984/main.cpp @@ -16,6 +16,7 @@ #include #include #include +using namespace modm::literals; modm::IODeviceWrapper< Usart2, modm::IOBuffer::BlockIfFull > device; modm::IOStream logger(device); @@ -145,12 +146,12 @@ main() Board::initialize(); Usart2::connect(); - Usart2::initialize(10); + Usart2::initialize(10); // Connect the GPIOs to the SPIs alternate function SpiMaster::connect(); // Initialize the SPI with a 1.3MHz clock - SpiMaster::initialize(); + SpiMaster::initialize(); logger << "\n\nWelcome to LTC2983/LTC2984 demo!\n\n"; diff --git a/examples/stm32f4_discovery/timer_test/main.cpp b/examples/stm32f4_discovery/timer_test/main.cpp index 23cfce8f56..ace18d76e9 100644 --- a/examples/stm32f4_discovery/timer_test/main.cpp +++ b/examples/stm32f4_discovery/timer_test/main.cpp @@ -39,7 +39,7 @@ testTimerAdvancedStart() TIMER::enable(); TIMER::setMode(TIMER::Mode::UpCounter); - TIMER::template setPeriod(250000); + TIMER::template setPeriod(250000); TIMER::enableInterruptVector(TIMER::Interrupt::Update, true, 10); TIMER::enableInterrupt(TIMER::Interrupt::Update); @@ -54,7 +54,7 @@ testTimerStart() TIMER::enable(); TIMER::setMode(TIMER::Mode::UpCounter); - TIMER::template setPeriod(250000); + TIMER::template setPeriod(250000); TIMER::enableInterruptVector(true, 10); TIMER::enableInterrupt(TIMER::Interrupt::Update); diff --git a/examples/stm32f4_discovery/uart/main.cpp b/examples/stm32f4_discovery/uart/main.cpp index f842b5cbc7..7647d6fa96 100644 --- a/examples/stm32f4_discovery/uart/main.cpp +++ b/examples/stm32f4_discovery/uart/main.cpp @@ -14,6 +14,7 @@ // ---------------------------------------------------------------------------- #include +using namespace modm::literals; // ---------------------------------------------------------------------------- /** @@ -30,7 +31,7 @@ main() // Enable USART 2 Usart2::connect(); - Usart2::initialize(); + Usart2::initialize(); while (1) { diff --git a/examples/stm32f4_discovery/uart_spi/main.cpp b/examples/stm32f4_discovery/uart_spi/main.cpp index a3390096d3..9437ce6be0 100644 --- a/examples/stm32f4_discovery/uart_spi/main.cpp +++ b/examples/stm32f4_discovery/uart_spi/main.cpp @@ -11,6 +11,7 @@ // ---------------------------------------------------------------------------- #include +using namespace modm::literals; int @@ -20,7 +21,7 @@ main() // Enable Uart SPI 2 UartSpiMaster2::connect(); - UartSpiMaster2::initialize(); + UartSpiMaster2::initialize(); while (1) { diff --git a/examples/stm32f746g_discovery/adc_ad7928/main.cpp b/examples/stm32f746g_discovery/adc_ad7928/main.cpp index 949a1038ad..228ef13e37 100644 --- a/examples/stm32f746g_discovery/adc_ad7928/main.cpp +++ b/examples/stm32f746g_discovery/adc_ad7928/main.cpp @@ -108,7 +108,7 @@ main() SpiMaster::connect(); // Initialize the SPI with a 13.5MHz clock (core frequency / 16) - SpiMaster::initialize(); + SpiMaster::initialize(); MODM_LOG_INFO << "AD7928/AD7918/AD7908 Example" << modm::endl; diff --git a/examples/stm32f746g_discovery/tmp102/main.cpp b/examples/stm32f746g_discovery/tmp102/main.cpp index a78c0996ed..cab82fd752 100644 --- a/examples/stm32f746g_discovery/tmp102/main.cpp +++ b/examples/stm32f746g_discovery/tmp102/main.cpp @@ -11,6 +11,7 @@ // ---------------------------------------------------------------------------- #include +using namespace modm::literals; #include #include @@ -104,7 +105,7 @@ main() Board::LedD13::setOutput(modm::Gpio::Low); MyI2cMaster::connect(); - MyI2cMaster::initialize(); + MyI2cMaster::initialize(); MODM_LOG_INFO << "\n\nRESTART\n\n"; diff --git a/examples/zmq/1_stm32/main.cpp b/examples/zmq/1_stm32/main.cpp index db25b48d64..c4ad518a87 100644 --- a/examples/zmq/1_stm32/main.cpp +++ b/examples/zmq/1_stm32/main.cpp @@ -95,7 +95,7 @@ main() // Initialize Can1 Can1::connect(Gpio::InputType::PullUp); - Can1::initialize(10); + Can1::initialize(10); CanFilter::setFilter(0, CanFilter::FIFO0, CanFilter::ExtendedIdentifier(0), CanFilter::ExtendedFilterMask(0)); diff --git a/ext/freertos/portable/port.cpp b/ext/freertos/portable/port.cpp index 306275d9c6..7dad0a035e 100644 --- a/ext/freertos/portable/port.cpp +++ b/ext/freertos/portable/port.cpp @@ -146,7 +146,7 @@ portBASE_TYPE xPortStartScheduler( void ) *(portNVIC_SYSPRI2) |= portNVIC_PENDSV_PRI; *(portNVIC_SYSPRI2) |= portNVIC_SYSTICK_PRI; - modm::cortex::SysTickTimer::attachInterruptHandler(vPortSysTickHandler); + modm::platform::SysTickTimer::attachInterruptHandler(vPortSysTickHandler); /* Initialize the critical nesting count ready for the first task. */ uxCriticalNesting = 0; diff --git a/ext/modm-devices b/ext/modm-devices index 1e3347b0bb..726d6a744e 160000 --- a/ext/modm-devices +++ b/ext/modm-devices @@ -1 +1 @@ -Subproject commit 1e3347b0bbae5fc322f48d67a3c7788c6b1203aa +Subproject commit 726d6a744e4109ff0df2c9d908a3845e41599866 diff --git a/src/modm/architecture/interface/clock.hpp b/src/modm/architecture/interface/clock.hpp index 7ad6b12528..bfd8d77b9b 100644 --- a/src/modm/architecture/interface/clock.hpp +++ b/src/modm/architecture/interface/clock.hpp @@ -64,84 +64,21 @@ class Clock static Type time; }; -namespace clock -{ -/** - * Frequencies enum to make code more readable for common - * frequencies (in kHz). - * @ingroup modm_architecture_clock - */ -enum Frequency +using frequency_t = uint32_t; +namespace literals { - HzDontCare = -1, - Hz1 = static_cast(1), - kHz1 = 1000 * Hz1, - kHz10 = 10 * kHz1, - kHz20 = 20 * kHz1, - kHz32 = 32 * kHz1, - kHz40 = 40 * kHz1, - kHz50 = 50 * kHz1, - kHz100 = 100 * kHz1, - kHz125 = 125 * kHz1, - kHz250 = 250 * kHz1, - kHz500 = 500 * kHz1, - MHz1 = 1000 * kHz1, - MHz2 = 2 * MHz1, - MHz4 = 4 * MHz1, - MHz8 = 8 * MHz1, - MHz10 = 10 * MHz1, - MHz12 = 12 * MHz1, - MHz16 = 16 * MHz1, - MHz17 = 17 * MHz1, - MHz18 = 18 * MHz1, - MHz20 = 20 * MHz1, - MHz24 = 24 * MHz1, - MHz25 = 25 * MHz1, - MHz26 = 26 * MHz1, - MHz30 = 30 * MHz1, - MHz32 = 32 * MHz1, - MHz36 = 36 * MHz1, - MHz40 = 40 * MHz1, - MHz42 = 42 * MHz1, - MHz48 = 48 * MHz1, - MHz50 = 50 * MHz1, - MHz80 = 80 * MHz1, - MHz64 = 64 * MHz1, - MHz72 = 72 * MHz1, - MHz84 = 84 * MHz1, - MHz100 = 100 * MHz1, - MHz120 = 120 * MHz1, - MHz168 = 168 * MHz1, - MHz180 = 180 * MHz1, - MHz192 = 192 * MHz1, - MHz200 = 200 * MHz1, - MHz216 = 216 * MHz1, - MHz432 = 432 * MHz1, -}; - -/// @ingroup modm_architecture_clock -/// @{ -static constexpr int -MHz(int f) { return (f == HzDontCare)? HzDontCare : (f / MHz1); } - -modm_unused -static constexpr uint32_t -u32MHz(int f) { return static_cast(MHz(f)); } - -static constexpr int -kHz(int f) { return (f == HzDontCare)? HzDontCare : (f / kHz1); } - -modm_unused -static constexpr uint32_t -u32kHz(int f) { return static_cast(kHz(f)); } - -modm_unused -static constexpr int -Hz(int f) { return (f == HzDontCare)? HzDontCare : (f / Hz1); } -/// @} - -} // namespace clock + constexpr frequency_t operator "" _Hz(unsigned long long int frequency) + { return frequency; } + constexpr frequency_t operator "" _kHz(unsigned long long int frequency) + { return frequency * 1'000; } + constexpr frequency_t operator "" _kHz(long double frequency) + { return frequency * 1'000; } + constexpr frequency_t operator "" _MHz(unsigned long long int frequency) + { return frequency * 1'000'000; } + constexpr frequency_t operator "" _MHz(long double frequency) + { return frequency * 1'000'000; } +} } // namespace modm diff --git a/src/modm/architecture/interface/delay.hpp b/src/modm/architecture/interface/delay.hpp index b60d9269b9..5994194fcb 100644 --- a/src/modm/architecture/interface/delay.hpp +++ b/src/modm/architecture/interface/delay.hpp @@ -43,7 +43,7 @@ delayMilliseconds(uint16_t ms); // These functions may be implemented as header files, so we cannot rely on // there being a link-able function and delegate this choice to the platform. -#include +#include #endif diff --git a/src/modm/architecture/interface/peripheral.hpp b/src/modm/architecture/interface/peripheral.hpp index a2656763bc..cf7741bb39 100644 --- a/src/modm/architecture/interface/peripheral.hpp +++ b/src/modm/architecture/interface/peripheral.hpp @@ -21,6 +21,34 @@ namespace modm { +using baudrate_t = uint32_t; +using bitrate_t = uint32_t; + +namespace literals +{ + constexpr baudrate_t operator "" _Bd(unsigned long long int baudrate) + { return baudrate; } + constexpr baudrate_t operator "" _kBd(unsigned long long int baudrate) + { return baudrate * 1'000; } + constexpr baudrate_t operator "" _kBd(long double baudrate) + { return baudrate * 1'000; } + constexpr baudrate_t operator "" _MBd(unsigned long long int baudrate) + { return baudrate * 1'000'000; } + constexpr baudrate_t operator "" _MBd(long double baudrate) + { return baudrate * 1'000'000; } + + constexpr baudrate_t operator "" _bps(unsigned long long int baudrate) + { return baudrate; } + constexpr baudrate_t operator "" _kbps(unsigned long long int baudrate) + { return baudrate * 1'000; } + constexpr baudrate_t operator "" _kbps(long double baudrate) + { return baudrate * 1'000; } + constexpr baudrate_t operator "" _Mbps(unsigned long long int baudrate) + { return baudrate * 1'000'000; } + constexpr baudrate_t operator "" _Mbps(long double baudrate) + { return baudrate * 1'000'000; } +} + /** * Peripheral class * @@ -82,7 +110,7 @@ class PeripheralDriver * This method checks if the user requested baudrate is within error * tolerance of the system achievable baudrate. */ - template< uint32_t available, uint32_t requested, uint16_t tolerance > + template< baudrate_t available, baudrate_t requested, uint16_t tolerance > static void assertBaudrateInTolerance() { diff --git a/src/modm/board/al_avreb_can/board.hpp b/src/modm/board/al_avreb_can/board.hpp index f70b962f1e..20e9122498 100644 --- a/src/modm/board/al_avreb_can/board.hpp +++ b/src/modm/board/al_avreb_can/board.hpp @@ -25,8 +25,8 @@ using namespace modm::platform; /// @ingroup modm_board_al_avreb_can namespace Board { - -using systemClock = modm::platform::SystemClock; +using namespace modm::literals; +using SystemClock = modm::platform::SystemClock; using Led0 = GpioInverted; using Led1 = GpioInverted; @@ -41,10 +41,10 @@ using LoggerDevice = modm::IODeviceWrapper< Uart1, modm::IOBuffer::BlockIfFull > inline void initialize() { - systemClock::enable(); + SystemClock::enable(); Uart1::connect(); - Uart1::initialize(); + Uart1::initialize(); // modm::Clock initialization // Clear Timer on Compare Match Mode diff --git a/src/modm/board/arduino_uno/board.hpp b/src/modm/board/arduino_uno/board.hpp index 1d9026a1eb..1ba7f1d607 100644 --- a/src/modm/board/arduino_uno/board.hpp +++ b/src/modm/board/arduino_uno/board.hpp @@ -23,8 +23,8 @@ using namespace modm::platform; /// @ingroup modm_board_arduino_uno namespace Board { - -using systemClock = modm::platform::SystemClock; +using namespace modm::literals; +using SystemClock = modm::platform::SystemClock; // Arduino Footprint using A0 = GpioC0; @@ -59,11 +59,11 @@ using LoggerDevice = modm::IODeviceWrapper< Uart0, modm::IOBuffer::BlockIfFull > inline void initialize() { - systemClock::enable(); + SystemClock::enable(); // Uart0 is connected to onboard USB bridge Uart0::connect(); - Uart0::initialize(); + Uart0::initialize(); // modm::Clock initialization // Clear Timer on Compare Match Mode diff --git a/src/modm/board/black_pill/board.hpp b/src/modm/board/black_pill/board.hpp index 9225689476..a676f24a92 100644 --- a/src/modm/board/black_pill/board.hpp +++ b/src/modm/board/black_pill/board.hpp @@ -21,11 +21,12 @@ using namespace modm::platform; /// @ingroup modm_board_black_pill namespace Board { + using namespace modm::literals; /// STM32F103 running at 72MHz generated from the external 8MHz crystal // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = MHz72; +struct SystemClock { + static constexpr uint32_t Frequency = 72_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency / 2; static constexpr uint32_t Apb2 = Frequency; @@ -59,33 +60,28 @@ struct systemClock { static bool inline enable() { - ClockControl::enableExternalCrystal(); + Rcc::enableExternalCrystal(); // external clock * 9 = 72MHz, => 72/1.5 = 48 => good for USB - ClockControl::enablePll(ClockControl::PllSource::ExternalCrystal, 9); + Rcc::enablePll(Rcc::PllSource::ExternalCrystal, 9); // set flash latency for 72MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); // AHB has max 72MHz - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 36MHz - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div2); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div2); // APB2 has max. 72MHz - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); - // update frequencies for busy-wait delay functions - + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -100,8 +96,8 @@ using Button = GpioUnused; inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); LedGreen::setOutput(modm::Gpio::Low); } diff --git a/src/modm/board/blue_pill/board.hpp b/src/modm/board/blue_pill/board.hpp index 8d9c2659d5..e9c5511f5f 100644 --- a/src/modm/board/blue_pill/board.hpp +++ b/src/modm/board/blue_pill/board.hpp @@ -22,11 +22,12 @@ using namespace modm::platform; /// @ingroup modm_board_blue_pill namespace Board { + using namespace modm::literals; /// STM32F103 running at 72MHz generated from the external 8MHz crystal // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = MHz72; +struct SystemClock { + static constexpr uint32_t Frequency = 72_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency / 2; static constexpr uint32_t Apb2 = Frequency; @@ -60,33 +61,28 @@ struct systemClock { static bool inline enable() { - ClockControl::enableExternalCrystal(); + Rcc::enableExternalCrystal(); // external clock * 9 = 72MHz, => 72/1.5 = 48 => good for USB - ClockControl::enablePll(ClockControl::PllSource::ExternalCrystal, 9); + Rcc::enablePll(Rcc::PllSource::ExternalCrystal, 9); // set flash latency for 72MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); // AHB has max 72MHz - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 36MHz - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div2); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div2); // APB2 has max. 72MHz - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); - // update frequencies for busy-wait delay functions - + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -101,8 +97,8 @@ using Button = GpioUnused; inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); LedGreen::setOutput(modm::Gpio::Low); } diff --git a/src/modm/board/board.hpp b/src/modm/board/board.hpp index 9cc0375e12..7a72c31f51 100644 --- a/src/modm/board/board.hpp +++ b/src/modm/board/board.hpp @@ -10,3 +10,7 @@ // ---------------------------------------------------------------------------- #include "board/board.hpp" + +namespace Board { + using systemClock [[deprecated("Use `Board::SystemClock` instead!")]] = SystemClock; +} diff --git a/src/modm/board/disco_f051r8/board.hpp b/src/modm/board/disco_f051r8/board.hpp index c520155432..6ffffdeac6 100644 --- a/src/modm/board/disco_f051r8/board.hpp +++ b/src/modm/board/disco_f051r8/board.hpp @@ -22,11 +22,12 @@ using namespace modm::platform; /// @ingroup modm_board_disco_f051r8 namespace Board { + using namespace modm::literals; /// STM32F0 running at 48MHz generated from the internal 8MHz with PLL. -struct systemClock +struct SystemClock { - static constexpr int Frequency = MHz48; + static constexpr int Frequency = 48_MHz; static constexpr int Usart1 = Frequency; static constexpr int Usart2 = Frequency; static constexpr int Spi2 = Frequency; @@ -35,20 +36,17 @@ struct systemClock enable() { // enable internal 8 MHz HSI RC clock - ClockControl::enableInternalClock(); + Rcc::enableInternalClock(); // (internal clock / 2) * 12 = 48MHz - ClockControl::enablePll(ClockControl::PllSource::InternalClock, 12, 1); + Rcc::enablePll(Rcc::PllSource::InternalClock, 12, 1); // set flash latency for 48MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); - ClockControl::setApbPrescaler(ClockControl::ApbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); + Rcc::setApbPrescaler(Rcc::ApbPrescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(4000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -66,8 +64,8 @@ using Leds = SoftwareGpioPort< LedGreen, LedBlue >; inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); LedGreen::setOutput(modm::Gpio::Low); LedBlue::setOutput(modm::Gpio::Low); diff --git a/src/modm/board/disco_f072rb/board.hpp b/src/modm/board/disco_f072rb/board.hpp index c50d399999..d893a30afd 100644 --- a/src/modm/board/disco_f072rb/board.hpp +++ b/src/modm/board/disco_f072rb/board.hpp @@ -24,14 +24,15 @@ using namespace modm::platform; /// @ingroup modm_board_disco_f072rb namespace Board { + using namespace modm::literals; /// STM32F072 running at 48MHz generated from the internal 48MHz clock // TODO: enable once clock driver is implemented -//using systemClock = SystemClock, MHz48>; +//using SystemClock = SystemClock, 48_MHz>; -struct systemClock +struct SystemClock { - static constexpr int Frequency = MHz48; + static constexpr int Frequency = 48_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb = Frequency; @@ -63,16 +64,13 @@ struct systemClock enable() { // Enable the interal 48MHz clock - ClockControl::enableInternalClockMHz48(); + Rcc::enableInternalClockMHz48(); // set flash latency for 48MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // Switch to the 48MHz clock - ClockControl::enableSystemClock(ClockControl::SystemClockSource::InternalClockMHz48); + Rcc::enableSystemClock(Rcc::SystemClockSource::InternalClockMHz48); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(4000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -108,8 +106,8 @@ using Gyroscope = modm::L3gd20< Transport >; inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); LedUp::setOutput(modm::Gpio::Low); LedDown::setOutput(modm::Gpio::Low); @@ -139,7 +137,7 @@ initializeL3g() l3g::Cs::setOutput(modm::Gpio::High); l3g::SpiMaster::connect(); - l3g::SpiMaster::initialize(); + l3g::SpiMaster::initialize(); l3g::SpiMaster::setDataMode(l3g::SpiMaster::DataMode::Mode3); } diff --git a/src/modm/board/disco_f100rb/board.hpp b/src/modm/board/disco_f100rb/board.hpp index c41d8dd32a..ee337186a5 100644 --- a/src/modm/board/disco_f100rb/board.hpp +++ b/src/modm/board/disco_f100rb/board.hpp @@ -22,11 +22,12 @@ using namespace modm::platform; /// @ingroup modm_board_disco_f100rb namespace Board { + using namespace modm::literals; /// STM32F100 running at 24MHz generated from the external 8MHz crystal /// supplied by the on-board st-link -struct systemClock { - static constexpr uint32_t Frequency = 24 * MHz1; +struct SystemClock { + static constexpr uint32_t Frequency = 24_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency; static constexpr uint32_t Apb2 = Frequency; @@ -69,25 +70,22 @@ struct systemClock { static bool inline enable() { - ClockControl::enableExternalCrystal(); // 8MHz - ClockControl::enablePll( - ClockControl::PllSource::ExternalCrystal, + Rcc::enableExternalCrystal(); // 8MHz + Rcc::enablePll( + Rcc::PllSource::ExternalCrystal, 3, 1 ); // set flash latency for 24MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 24MHz - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div1); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div1); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -105,8 +103,8 @@ using Leds = SoftwareGpioPort< LedBlue, LedGreen >; inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); LedGreen::setOutput(modm::Gpio::Low); LedBlue::setOutput(modm::Gpio::Low); diff --git a/src/modm/board/disco_f303vc/board.hpp b/src/modm/board/disco_f303vc/board.hpp index 93b95a3691..9b04b3b488 100644 --- a/src/modm/board/disco_f303vc/board.hpp +++ b/src/modm/board/disco_f303vc/board.hpp @@ -24,11 +24,12 @@ using namespace modm::platform; /// @ingroup modm_board_disco_f303vc namespace Board { + using namespace modm::literals; /// STM32F303 running at 72MHz generated from the external 8MHz clock /// supplied by the on-board st-link -struct systemClock { - static constexpr uint32_t Frequency = 72 * MHz1; +struct SystemClock { + static constexpr uint32_t Frequency = 72_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency / 2; static constexpr uint32_t Apb2 = Frequency; @@ -83,25 +84,22 @@ struct systemClock { static bool inline enable() { - ClockControl::enableExternalClock(); // 8MHz - ClockControl::enablePll( - ClockControl::PllSource::ExternalClock, + Rcc::enableExternalClock(); // 8MHz + Rcc::enablePll( + Rcc::PllSource::ExternalClock, 9, 1 ); // set flash latency for 72MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 36MHz - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div2); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div2); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -164,8 +162,8 @@ using Dp = GpioA12; // DP: USB_DP inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); LedNorth::setOutput(modm::Gpio::Low); LedNorthEast::setOutput(modm::Gpio::Low); @@ -199,7 +197,7 @@ initializeL3g() l3g::Cs::setOutput(modm::Gpio::High); l3g::SpiMaster::connect(); - l3g::SpiMaster::initialize(); + l3g::SpiMaster::initialize(); l3g::SpiMaster::setDataMode(l3g::SpiMaster::DataMode::Mode3); } @@ -223,7 +221,7 @@ initializeLsm3() // lsm3::Drdy::enableExternalInterruptVector(12); lsm3::I2cMaster::connect(); - lsm3::I2cMaster::initialize(); + lsm3::I2cMaster::initialize(); } diff --git a/src/modm/board/disco_f407vg/board.hpp b/src/modm/board/disco_f407vg/board.hpp index df53a306e1..0c76a75a1d 100644 --- a/src/modm/board/disco_f407vg/board.hpp +++ b/src/modm/board/disco_f407vg/board.hpp @@ -24,10 +24,11 @@ using namespace modm::platform; /// @ingroup modm_board_disco_f407vg namespace Board { + using namespace modm::literals; /// STM32F407 running at 168MHz generated from the external 8MHz crystal -struct systemClock { - static constexpr uint32_t Frequency = 168 * MHz1; +struct SystemClock { + static constexpr uint32_t Frequency = 168_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency / 4; static constexpr uint32_t Apb2 = Frequency / 2; @@ -77,27 +78,24 @@ struct systemClock { static bool inline enable() { - ClockControl::enableExternalCrystal(); // 8MHz - ClockControl::enablePll( - ClockControl::PllSource::ExternalCrystal, + Rcc::enableExternalCrystal(); // 8MHz + Rcc::enablePll( + Rcc::PllSource::ExternalCrystal, 4, // 8MHz / N=2 -> 2MHz 168, // 2MHz * M=168 -> 336MHz 2 // 336MHz / P=2 -> 168MHz = F_cpu ); // set flash latency for 168MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 42MHz // APB2 has max. 84MHz - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div4); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div2); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div4); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div2); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -170,8 +168,8 @@ using VBus = GpioInputA9; // VBUS_FS: USB_OTG_HS_VBUS inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); LedOrange::setOutput(modm::Gpio::Low); LedGreen::setOutput(modm::Gpio::Low); @@ -195,7 +193,7 @@ initializeLis3() lis3::Cs::setOutput(modm::Gpio::High); lis3::SpiMaster::connect(); - lis3::SpiMaster::initialize(); + lis3::SpiMaster::initialize(); lis3::SpiMaster::setDataMode(lis3::SpiMaster::DataMode::Mode3); } @@ -211,7 +209,7 @@ initializeCs43() cs43::Reset::setOutput(modm::Gpio::High); cs43::I2cMaster::connect(); - cs43::I2cMaster::initialize(); + cs43::I2cMaster::initialize(); } /// not supported yet, due to missing I2S driver diff --git a/src/modm/board/disco_f429zi/board.hpp b/src/modm/board/disco_f429zi/board.hpp index f159b9e914..eaad20da81 100644 --- a/src/modm/board/disco_f429zi/board.hpp +++ b/src/modm/board/disco_f429zi/board.hpp @@ -22,11 +22,12 @@ using namespace modm::platform; /// @ingroup modm_board_disco_f429zi namespace Board { + using namespace modm::literals; /// STM32F429 running at 180MHz from the external 8MHz crystal -struct systemClock +struct SystemClock { - static constexpr uint32_t Frequency = MHz180; + static constexpr uint32_t Frequency = 180_MHz; static constexpr uint32_t Apb1 = Frequency / 4; static constexpr uint32_t Apb2 = Frequency / 2; @@ -75,24 +76,20 @@ struct systemClock static bool inline enable() { - ClockControl::enableExternalCrystal(); // 8 MHz - ClockControl::enablePll( - ClockControl::PllSource::ExternalCrystal, + Rcc::enableExternalCrystal(); // 8 MHz + Rcc::enablePll( + Rcc::PllSource::ExternalCrystal, 4, // 8MHz / N=4 -> 2MHz 180, // 2MHz * M=180 -> 360MHz 2 // 360MHz / P=2 -> 180MHz = F_cpu ); PWR->CR |= PWR_CR_ODEN; // Enable overdrive mode while (not (PWR->CSR & PWR_CSR_ODRDY)) ; - ClockControl::setFlashLatency(Frequency); - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div4); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div2); - // update clock frequencies - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::setFlashLatency(); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div4); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div2); + Rcc::updateCoreFrequency(); return true; } @@ -224,8 +221,8 @@ using VBus = GpioB13; // VBUS_FS: USB_OTG_HS_VBUS inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); LedGreen::setOutput(modm::Gpio::Low); LedRed::setOutput(modm::Gpio::Low); @@ -253,7 +250,7 @@ initializeL3g() l3g::Cs::setOutput(modm::Gpio::High); l3g::SpiMaster::connect(); - l3g::SpiMaster::initialize(); + l3g::SpiMaster::initialize(); l3g::SpiMaster::setDataMode(l3g::SpiMaster::DataMode::Mode3); } diff --git a/src/modm/board/disco_f469ni/board.hpp b/src/modm/board/disco_f469ni/board.hpp index 1e5e5f6ab1..5787f78015 100644 --- a/src/modm/board/disco_f469ni/board.hpp +++ b/src/modm/board/disco_f469ni/board.hpp @@ -28,11 +28,12 @@ using namespace modm::platform; /// @ingroup modm_board_disco_f469ni namespace Board { + using namespace modm::literals; /// STM32F469 running at 180MHz from the external 8MHz crystal -struct systemClock +struct SystemClock { - static constexpr uint32_t Frequency = MHz180; + static constexpr uint32_t Frequency = 180_MHz; static constexpr uint32_t Apb1 = Frequency / 4; static constexpr uint32_t Apb2 = Frequency / 2; @@ -81,24 +82,20 @@ struct systemClock static bool inline enable() { - ClockControl::enableExternalCrystal(); // 8 MHz - ClockControl::enablePll( - ClockControl::PllSource::ExternalCrystal, + Rcc::enableExternalCrystal(); // 8 MHz + Rcc::enablePll( + Rcc::PllSource::ExternalCrystal, 8, // 8MHz / N=8 -> 1MHz !!! Must be 1 MHz for PLLSAI !!! 360, // 1MHz * M=360 -> 360MHz 2 // 360MHz / P=2 -> 180MHz = F_cpu ); PWR->CR |= PWR_CR_ODEN; // Enable overdrive mode while (not (PWR->CSR & PWR_CSR_ODRDY)) ; - ClockControl::setFlashLatency(Frequency); - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div4); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div2); - // update clock frequencies - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::setFlashLatency(); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div4); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div2); + Rcc::updateCoreFrequency(); return true; } @@ -169,7 +166,7 @@ initializeTouchscreen() // ft6::Int::enableExternalInterruptVector(12); ft6::I2cMaster::connect(); - ft6::I2cMaster::initialize(); + ft6::I2cMaster::initialize(); } void @@ -188,11 +185,11 @@ inline void initialize() { // initialized in `modm_board_init()` - // systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + // SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(); - stlink::Uart::initialize(); + stlink::Uart::initialize(); LedGreen::setOutput(modm::Gpio::Low); LedRed::setOutput(modm::Gpio::Low); diff --git a/src/modm/board/disco_f469ni/board_init.cpp b/src/modm/board/disco_f469ni/board_init.cpp index dad51b0972..d59389e426 100644 --- a/src/modm/board/disco_f469ni/board_init.cpp +++ b/src/modm/board/disco_f469ni/board_init.cpp @@ -24,7 +24,7 @@ modm_board_init(void) modm::delayMilliseconds(10); // initialize system clock and external SDRAM before accessing external memories - Board::systemClock::enable(); + Board::SystemClock::enable(); board_initialize_sdram(); } diff --git a/src/modm/board/disco_f746ng/board.hpp b/src/modm/board/disco_f746ng/board.hpp index 9527b8e07e..e133adaf84 100644 --- a/src/modm/board/disco_f746ng/board.hpp +++ b/src/modm/board/disco_f746ng/board.hpp @@ -27,11 +27,12 @@ using namespace modm::platform; /// @ingroup modm_board_disco_f746ng namespace Board { + using namespace modm::literals; /// STM32F7 running at 216MHz from the external 25MHz clock -struct systemClock +struct SystemClock { - static constexpr uint32_t Frequency = MHz216; + static constexpr uint32_t Frequency = 216_MHz; static constexpr uint32_t Apb1 = Frequency / 8; static constexpr uint32_t Apb2 = Frequency / 4; @@ -80,26 +81,22 @@ struct systemClock static bool inline enable() { - ClockControl::enableExternalClock(); // 25 MHz - ClockControl::enablePll( - ClockControl::PllSource::ExternalClock, + Rcc::enableExternalClock(); // 25 MHz + Rcc::enablePll( + Rcc::PllSource::ExternalClock, 25, // 25MHz / N=25 -> 1MHz 432, // 1MHz * M=432 -> 432MHz 2 // 432MHz / P=2 -> 216MHz = F_cpu ); PWR->CR1 |= PWR_CR1_ODEN; // Enable overdrive mode while (not (PWR->CSR1 & PWR_CSR1_ODRDY)) ; - ClockControl::setFlashLatency(Frequency); - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); + Rcc::setFlashLatency(); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); // APB1 is running only at 27MHz, since AHB / 4 = 54MHz > 45MHz limit! - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div8); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div8); // APB2 is running only at 54MHz, since AHB / 2 = 108MHz > 90MHz limit! - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div4); - // update clock frequencies - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(1000.f / (Frequency / 1000000)); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div4); + Rcc::updateCoreFrequency(); return true; } @@ -150,11 +147,11 @@ using LoggerDevice = modm::IODeviceWrapper< stlink::Uart, modm::IOBuffer::BlockI inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(); - stlink::Uart::initialize(); + stlink::Uart::initialize(); Button::setInput(); Button::setInputTrigger(Gpio::InputTrigger::RisingEdge); diff --git a/src/modm/board/disco_f769ni/board.hpp b/src/modm/board/disco_f769ni/board.hpp index 18ba552a8e..5450fa351f 100644 --- a/src/modm/board/disco_f769ni/board.hpp +++ b/src/modm/board/disco_f769ni/board.hpp @@ -27,11 +27,12 @@ using namespace modm::platform; /// @ingroup modm_board_disco_f769ni namespace Board { + using namespace modm::literals; /// STM32F7 running at 216MHz from the external 25MHz clock -struct systemClock +struct SystemClock { - static constexpr uint32_t Frequency = MHz216; + static constexpr uint32_t Frequency = 216_MHz; static constexpr uint32_t Apb1 = Frequency / 8; static constexpr uint32_t Apb2 = Frequency / 4; @@ -80,26 +81,22 @@ struct systemClock static bool inline enable() { - ClockControl::enableExternalClock(); // 25 MHz - ClockControl::enablePll( - ClockControl::PllSource::ExternalClock, + Rcc::enableExternalClock(); // 25 MHz + Rcc::enablePll( + Rcc::PllSource::ExternalClock, 25, // 25MHz / N=25 -> 1MHz 432, // 1MHz * M=432 -> 432MHz 2 // 432MHz / P=2 -> 216MHz = F_cpu ); PWR->CR1 |= PWR_CR1_ODEN; // Enable overdrive mode while (not (PWR->CSR1 & PWR_CSR1_ODRDY)) ; - ClockControl::setFlashLatency(Frequency); - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); + Rcc::setFlashLatency(); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); // APB1 is running only at 27MHz, since AHB / 4 = 54MHz > 45MHz limit! - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div8); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div8); // APB2 is running only at 54MHz, since AHB / 2 = 108MHz > 90MHz limit! - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div4); - // update clock frequencies - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(1000.f / (Frequency / 1000000)); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div4); + Rcc::updateCoreFrequency(); return true; } @@ -153,11 +150,11 @@ using Miso = sdio::D0; inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(); - stlink::Uart::initialize(); + stlink::Uart::initialize(); Button::setInput(); Button::setInputTrigger(Gpio::InputTrigger::RisingEdge); diff --git a/src/modm/board/disco_l476vg/board.hpp b/src/modm/board/disco_l476vg/board.hpp index 9705ceba91..4b879b86ee 100644 --- a/src/modm/board/disco_l476vg/board.hpp +++ b/src/modm/board/disco_l476vg/board.hpp @@ -24,13 +24,14 @@ using namespace modm::platform; /// @ingroup modm_board_disco_l476vg namespace Board { + using namespace modm::literals; /// STM32L4 running at 48MHz generated from the /// internal Multispeed oscillator // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = 48 * MHz1; +struct SystemClock { + static constexpr uint32_t Frequency = 48_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency; static constexpr uint32_t Apb2 = Frequency; @@ -46,28 +47,25 @@ struct systemClock { enable() { // set flash latency first because system already runs from MSI - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); - ClockControl::enableMultiSpeedInternalClock(ClockControl::MsiFrequency::MHz48); + Rcc::enableMultiSpeedInternalClock(Rcc::MsiFrequency::MHz48); - // ClockControl::enablePll( - // ClockControl::PllSource::MultiSpeedInternalClock, + // Rcc::enablePll( + // Rcc::PllSource::MultiSpeedInternalClock, // 1, // 4MHz / N=1 -> 4MHz // 16, // 4MHz * M=16 -> 64MHz <= 344MHz = PLL VCO output max, >= 64 MHz = PLL VCO out min // 1, // 64MHz / P=1 -> 64MHz = F_cpu // 2 // 64MHz / Q=2 -> 32MHz = F_usb // ); // switch system clock to PLL output - // ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - // ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + // Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + // Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 50MHz - // ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div2); - // ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); + // Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div2); + // Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -92,8 +90,8 @@ using Leds = SoftwareGpioPort< LedRed, LedGreen >; inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); LedGreen::setOutput(modm::Gpio::Low); LedRed::setOutput(modm::Gpio::Low); diff --git a/src/modm/board/nucleo_f031k6/board.hpp b/src/modm/board/nucleo_f031k6/board.hpp index 4c74fcc838..2af90d853d 100644 --- a/src/modm/board/nucleo_f031k6/board.hpp +++ b/src/modm/board/nucleo_f031k6/board.hpp @@ -20,15 +20,17 @@ #define MODM_BOARD_HAS_LOGGER using namespace modm::platform; +using namespace modm::literals; /// @ingroup modm_board_nucleo_f031k6 namespace Board { + using namespace modm::literals; /// STM32F031K6 running at 48MHz generated from the internal 8MHz crystal // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = MHz48; +struct SystemClock { + static constexpr uint32_t Frequency = 48_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb = Frequency; @@ -50,20 +52,17 @@ struct systemClock { static bool inline enable() { - ClockControl::enableInternalClock(); // 8MHz + Rcc::enableInternalClock(); // 8MHz // (internal clock / 2) * 12 = 48MHz - ClockControl::enablePll(ClockControl::PllSource::InternalClock, 12, 1); + Rcc::enablePll(Rcc::PllSource::InternalClock, 12, 1); // set flash latency for 48MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); - ClockControl::setApbPrescaler(ClockControl::ApbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); + Rcc::setApbPrescaler(Rcc::ApbPrescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(4000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -91,11 +90,11 @@ using LoggerDevice = modm::IODeviceWrapper< stlink::Uart, modm::IOBuffer::BlockI inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(); - stlink::Uart::initialize(); + stlink::Uart::initialize(); } } diff --git a/src/modm/board/nucleo_f042k6/board.hpp b/src/modm/board/nucleo_f042k6/board.hpp index 19de80e40a..c410fcad4a 100644 --- a/src/modm/board/nucleo_f042k6/board.hpp +++ b/src/modm/board/nucleo_f042k6/board.hpp @@ -25,11 +25,12 @@ using namespace modm::platform; /// @ingroup modm_board_nucleo_f042k6 namespace Board { + using namespace modm::literals; /// STM32F042K6 running at 48MHz generated from the internal 8MHz crystal // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = MHz48; +struct SystemClock { + static constexpr uint32_t Frequency = 48_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb = Frequency; @@ -52,20 +53,17 @@ struct systemClock { static bool inline enable() { - ClockControl::enableInternalClock(); // 8MHz + Rcc::enableInternalClock(); // 8MHz // (internal clock / 2) * 12 = 48MHz - ClockControl::enablePll(ClockControl::PllSource::InternalClock, 12, 2, 1); + Rcc::enablePll(Rcc::PllSource::InternalClock, 12, 2, 1); // set flash latency for 48MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); - ClockControl::setApbPrescaler(ClockControl::ApbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); + Rcc::setApbPrescaler(Rcc::ApbPrescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(4000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -94,11 +92,11 @@ using LoggerDevice = modm::IODeviceWrapper< stlink::Uart, modm::IOBuffer::BlockI inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(); - stlink::Uart::initialize(); + stlink::Uart::initialize(); } } diff --git a/src/modm/board/nucleo_f103rb/board.hpp b/src/modm/board/nucleo_f103rb/board.hpp index 52d9aa1e91..37164a7d27 100644 --- a/src/modm/board/nucleo_f103rb/board.hpp +++ b/src/modm/board/nucleo_f103rb/board.hpp @@ -24,11 +24,12 @@ using namespace modm::platform; /// @ingroup modm_board_nucleo_f103rb namespace Board { + using namespace modm::literals; /// STM32F103RB running at 64MHz generated from the internal 8MHz crystal // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = MHz64; +struct SystemClock { + static constexpr uint32_t Frequency = 64_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency / 2; static constexpr uint32_t Apb2 = Frequency; @@ -66,22 +67,19 @@ struct systemClock { static bool inline enable() { - ClockControl::enableInternalClock(); // 8MHz + Rcc::enableInternalClock(); // 8MHz // internal clock / 2 * 16 = 64MHz, => 64/1.5 = 42.6 => bad for USB - ClockControl::enablePll(ClockControl::PllSource::InternalClock, 16); + Rcc::enablePll(Rcc::PllSource::InternalClock, 16); // set flash latency for 64MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 36MHz - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div2); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div2); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -109,11 +107,11 @@ using LoggerDevice = modm::IODeviceWrapper< stlink::Uart, modm::IOBuffer::BlockI inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(); - stlink::Uart::initialize(); + stlink::Uart::initialize(); Button::setInput(); Button::setInputTrigger(Gpio::InputTrigger::RisingEdge); diff --git a/src/modm/board/nucleo_f303k8/board.hpp b/src/modm/board/nucleo_f303k8/board.hpp index 9ebbea5dcb..4b918b8c25 100644 --- a/src/modm/board/nucleo_f303k8/board.hpp +++ b/src/modm/board/nucleo_f303k8/board.hpp @@ -24,11 +24,12 @@ using namespace modm::platform; /// @ingroup modm_board_nucleo_f303k8 namespace Board { + using namespace modm::literals; /// STM32F303K8 running at 64MHz generated from the internal 8MHz clock // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = 64 * MHz1; +struct SystemClock { + static constexpr uint32_t Frequency = 64_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency / 2; static constexpr uint32_t Apb2 = Frequency; @@ -60,22 +61,19 @@ struct systemClock { static bool inline enable() { - ClockControl::enableInternalClock(); // 8MHz + Rcc::enableInternalClock(); // 8MHz // 4MHz * 16 = 64MHz - ClockControl::enablePll(ClockControl::PllSource::InternalClock, 16, 2); + Rcc::enablePll(Rcc::PllSource::InternalClock, 16, 2); // set flash latency for 64MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 36MHz - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div2); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div2); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -103,11 +101,11 @@ using LoggerDevice = modm::IODeviceWrapper< stlink::Uart, modm::IOBuffer::BlockI inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(); - stlink::Uart::initialize(); + stlink::Uart::initialize(); } } diff --git a/src/modm/board/nucleo_f401re/board.hpp b/src/modm/board/nucleo_f401re/board.hpp index 1331aa5f6c..bd0a1d01f0 100644 --- a/src/modm/board/nucleo_f401re/board.hpp +++ b/src/modm/board/nucleo_f401re/board.hpp @@ -24,11 +24,12 @@ using namespace modm::platform; /// @ingroup modm_board_nucleo_f401re namespace Board { + using namespace modm::literals; /// STM32F401RE running at 84MHz generated from the internal 16MHz crystal // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = 84 * MHz1; +struct SystemClock { + static constexpr uint32_t Frequency = 84_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency / 2; static constexpr uint32_t Apb2 = Frequency; @@ -62,26 +63,23 @@ struct systemClock { static bool inline enable() { - ClockControl::enableInternalClock(); // 16MHz - ClockControl::enablePll( - ClockControl::PllSource::InternalClock, + Rcc::enableInternalClock(); // 16MHz + Rcc::enablePll( + Rcc::PllSource::InternalClock, 4, // 16MHz / N= 4 -> 4MHz 84, // 4MHz * M=84 -> 336MHz 4 // 336MHz / P= 4 -> 84MHz = F_cpu ); // set flash latency for 96MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 50MHz - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div2); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div2); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -109,11 +107,11 @@ using LoggerDevice = modm::IODeviceWrapper< stlink::Uart, modm::IOBuffer::BlockI inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(); - stlink::Uart::initialize(); + stlink::Uart::initialize(); Button::setInput(); Button::setInputTrigger(Gpio::InputTrigger::RisingEdge); diff --git a/src/modm/board/nucleo_f411re/board.hpp b/src/modm/board/nucleo_f411re/board.hpp index ec08dcbfd7..17e6f1b694 100644 --- a/src/modm/board/nucleo_f411re/board.hpp +++ b/src/modm/board/nucleo_f411re/board.hpp @@ -25,11 +25,12 @@ using namespace modm::platform; /// @ingroup modm_board_nucleo_f411re namespace Board { + using namespace modm::literals; /// STM32F411RE running at 96MHz generated from the internal 16MHz crystal // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = 96 * MHz1; +struct SystemClock { + static constexpr uint32_t Frequency = 96_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency / 2; static constexpr uint32_t Apb2 = Frequency; @@ -64,26 +65,23 @@ struct systemClock { static bool inline enable() { - ClockControl::enableInternalClock(); // 16MHz - ClockControl::enablePll( - ClockControl::PllSource::InternalClock, + Rcc::enableInternalClock(); // 16MHz + Rcc::enablePll( + Rcc::PllSource::InternalClock, 4, // 16MHz / N=4 -> 4MHz 96, // 4MHz * M=96 -> 384MHz 4 // 384MHz / P=4 -> 96MHz = F_cpu ); // set flash latency for 96MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 50MHz - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div2); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div2); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -111,11 +109,11 @@ using LoggerDevice = modm::IODeviceWrapper< stlink::Uart, modm::IOBuffer::BlockI inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(); - stlink::Uart::initialize(); + stlink::Uart::initialize(); Button::setInput(); Button::setInputTrigger(Gpio::InputTrigger::RisingEdge); diff --git a/src/modm/board/nucleo_f429zi/board.hpp b/src/modm/board/nucleo_f429zi/board.hpp index 5002bfa40d..228b620215 100644 --- a/src/modm/board/nucleo_f429zi/board.hpp +++ b/src/modm/board/nucleo_f429zi/board.hpp @@ -24,11 +24,12 @@ using namespace modm::platform; /// @ingroup modm_board_nucleo_f429zi namespace Board { + using namespace modm::literals; /// STM32F429 running at 180MHz from the external 8MHz STLink clock -struct systemClock +struct SystemClock { - static constexpr uint32_t Frequency = MHz180; + static constexpr uint32_t Frequency = 180_MHz; static constexpr uint32_t Apb1 = Frequency / 4; static constexpr uint32_t Apb2 = Frequency / 2; @@ -77,24 +78,21 @@ struct systemClock static bool inline enable() { - ClockControl::enableExternalClock(); // 8 MHz - ClockControl::enablePll( - ClockControl::PllSource::ExternalClock, + Rcc::enableExternalClock(); // 8 MHz + Rcc::enablePll( + Rcc::PllSource::ExternalClock, 4, // 8MHz / N=4 -> 2MHz 180, // 2MHz * M=180 -> 360MHz 2 // 360MHz / P=2 -> 180MHz = F_cpu ); PWR->CR |= PWR_CR_ODEN; // Enable overdrive mode while (not (PWR->CSR & PWR_CSR_ODRDY)) ; - ClockControl::setFlashLatency(Frequency); - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div4); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div2); + Rcc::setFlashLatency(); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div4); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div2); // update clock frequencies - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -123,11 +121,11 @@ using LoggerDevice = modm::IODeviceWrapper< stlink::Uart, modm::IOBuffer::BlockI inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(); - stlink::Uart::initialize(); + stlink::Uart::initialize(); LedGreen::setOutput(modm::Gpio::Low); LedBlue::setOutput(modm::Gpio::Low); diff --git a/src/modm/board/nucleo_l432kc/board.hpp b/src/modm/board/nucleo_l432kc/board.hpp index 7bb5108bd4..bedbb70a13 100644 --- a/src/modm/board/nucleo_l432kc/board.hpp +++ b/src/modm/board/nucleo_l432kc/board.hpp @@ -23,11 +23,12 @@ using namespace modm::platform; /// @ingroup modm_board_nucleo_l432kc namespace Board { + using namespace modm::literals; /// STM32L4 running at 80MHz generated with the PLL from 4MHz MSI clock -struct systemClock { - static constexpr uint32_t Frequency = 80 * MHz1; +struct SystemClock { + static constexpr uint32_t Frequency = 80_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency; static constexpr uint32_t Apb2 = Frequency; @@ -42,25 +43,22 @@ struct systemClock { static bool inline enable() { - ClockControl::enablePll( - ClockControl::PllSource::MultiSpeedInternalClock, + Rcc::enablePll( + Rcc::PllSource::MultiSpeedInternalClock, 1, // 4MHz / M=1 -> 4MHz 40, // 4MHz * N=40 -> 160MHz <= 344MHz = PLL VCO output max, >= 64 MHz = PLL VCO out min 2 // 160MHz / P=2 -> 80MHz = F_cpu ); - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 80MHz - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div1); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div1); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -111,11 +109,11 @@ using LoggerDevice = modm::IODeviceWrapper< stlink::Uart, modm::IOBuffer::BlockI inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(Gpio::InputType::PullUp); - stlink::Uart::initialize(); + stlink::Uart::initialize(); } } diff --git a/src/modm/board/nucleo_l476rg/board.hpp b/src/modm/board/nucleo_l476rg/board.hpp index 4be6772aaa..d2db261375 100644 --- a/src/modm/board/nucleo_l476rg/board.hpp +++ b/src/modm/board/nucleo_l476rg/board.hpp @@ -25,13 +25,14 @@ using namespace modm::platform; /// @ingroup modm_board_nucleo_l476rg namespace Board { + using namespace modm::literals; /// STM32L4 running at 48MHz generated from the /// internal Multispeed oscillator // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = 48 * MHz1; +struct SystemClock { + static constexpr uint32_t Frequency = 48_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency; static constexpr uint32_t Apb2 = Frequency; @@ -58,14 +59,9 @@ struct systemClock { enable() { // set flash latency first because system already runs from MSI - ClockControl::setFlashLatency(Frequency); - - ClockControl::enableMultiSpeedInternalClock(ClockControl::MsiFrequency::MHz48); - - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::setFlashLatency(); + Rcc::enableMultiSpeedInternalClock(Rcc::MsiFrequency::MHz48); + Rcc::updateCoreFrequency(); return true; } @@ -94,11 +90,11 @@ using LoggerDevice = modm::IODeviceWrapper< stlink::Uart, modm::IOBuffer::BlockI inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); stlink::Uart::connect(); - stlink::Uart::initialize(); + stlink::Uart::initialize(); LedGreen::setOutput(modm::Gpio::Low); diff --git a/src/modm/board/olimexino_stm32/board.hpp b/src/modm/board/olimexino_stm32/board.hpp index 15bc48caad..ac236914be 100644 --- a/src/modm/board/olimexino_stm32/board.hpp +++ b/src/modm/board/olimexino_stm32/board.hpp @@ -22,11 +22,12 @@ using namespace modm::platform; /// @ingroup modm_board_olimexino_stm32 namespace Board { + using namespace modm::literals; /// STM32F103RB running at 64MHz generated from the internal 8MHz crystal // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = MHz64; +struct SystemClock { + static constexpr uint32_t Frequency = 64_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb1 = Frequency / 2; static constexpr uint32_t Apb2 = Frequency; @@ -64,22 +65,19 @@ struct systemClock { static bool inline enable() { - ClockControl::enableInternalClock(); // 8MHz + Rcc::enableInternalClock(); // 8MHz // internal clock / 2 * 16 = 64MHz, => 64/1.5 = 42.6 => bad for USB - ClockControl::enablePll(ClockControl::PllSource::InternalClock, 16); + Rcc::enablePll(Rcc::PllSource::InternalClock, 16); // set flash latency for 64MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 36MHz - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div2); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div2); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -140,11 +138,11 @@ using LoggerDevice = modm::IODeviceWrapper< uext::Uart, modm::IOBuffer::BlockIfF inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); uext::Uart::connect(); - uext::Uart::initialize(12); + uext::Uart::initialize(12); } diff --git a/src/modm/board/stm32f030f4p6_demo/board.hpp b/src/modm/board/stm32f030f4p6_demo/board.hpp index 26544424d5..44f35d9a3c 100644 --- a/src/modm/board/stm32f030f4p6_demo/board.hpp +++ b/src/modm/board/stm32f030f4p6_demo/board.hpp @@ -22,16 +22,17 @@ using namespace modm::platform; /// @ingroup modm_board_stm32f030_demo namespace Board { + using namespace modm::literals; /// STM32F030 running at 48MHz generated from the external 8MHz crystal // Dummy clock for devices -struct systemClock { - static constexpr uint32_t Frequency = MHz48; +struct SystemClock { + static constexpr uint32_t Frequency = 48_MHz; static constexpr uint32_t Ahb = Frequency; static constexpr uint32_t Apb = Frequency; - static constexpr uint32_t Hsi = MHz8; - static constexpr uint32_t Hsi14 = 14 * MHz1; + static constexpr uint32_t Hsi = 8_MHz; + static constexpr uint32_t Hsi14 = 14_MHz; static constexpr uint32_t Adc1 = Hsi14; @@ -50,29 +51,25 @@ struct systemClock { static bool inline enable() { - ClockControl::enableExternalCrystal(); + Rcc::enableExternalCrystal(); // external clock / 1 * 6 = 48MHz - ClockControl::enablePll(ClockControl::PllSource::ExternalCrystal, 6, 1); + Rcc::enablePll(Rcc::PllSource::ExternalCrystal, 6, 1); // set flash latency for 48MHz - ClockControl::setFlashLatency(Frequency); + Rcc::setFlashLatency(); // switch system clock to PLL output - ClockControl::enableSystemClock(ClockControl::SystemClockSource::Pll); + Rcc::enableSystemClock(Rcc::SystemClockSource::Pll); // AHB has max 48MHz - ClockControl::setAhbPrescaler(ClockControl::AhbPrescaler::Div1); + Rcc::setAhbPrescaler(Rcc::AhbPrescaler::Div1); // APB1 has max. 48MHz - ClockControl::setApbPrescaler(ClockControl::ApbPrescaler::Div1); - + Rcc::setApbPrescaler(Rcc::ApbPrescaler::Div1); // update frequencies for busy-wait delay functions - modm::clock::fcpu = Frequency; - modm::clock::fcpu_kHz = Frequency / 1000; - modm::clock::fcpu_MHz = Frequency / 1000000; - modm::clock::ns_per_loop = ::round(3000.f / (Frequency / 1000000)); + Rcc::updateCoreFrequency(); return true; } @@ -87,8 +84,8 @@ using Button = GpioUnused; inline void initialize() { - systemClock::enable(); - modm::cortex::SysTickTimer::initialize(); + SystemClock::enable(); + SysTickTimer::initialize(); LedOrange::setOutput(modm::Gpio::Low); } diff --git a/src/modm/driver/can/mcp2515_bit_timings.hpp b/src/modm/driver/can/mcp2515_bit_timings.hpp index 0d7cdbf87b..0441cbd32b 100644 --- a/src/modm/driver/can/mcp2515_bit_timings.hpp +++ b/src/modm/driver/can/mcp2515_bit_timings.hpp @@ -33,27 +33,31 @@ class CanBitTimingMcp2515 }; static constexpr uint8_t calcSJW() { - return (Clk == modm::clock::MHz8)? 1 : - (Clk == modm::clock::MHz16)? 1 : - (Clk == modm::clock::MHz20)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 1 : 3 ) : 0; + using namespace modm::literals; + return (Clk == 8_MHz)? 1 : + (Clk == 16_MHz)? 1 : + (Clk == 20_MHz)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 1 : 3 ) : 0; } static constexpr uint8_t calcProp() { - return (Clk == modm::clock::MHz8)? 1 : - (Clk == modm::clock::MHz16)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 1 : 3 ) : - (Clk == modm::clock::MHz20)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 3 : 5 ) : 0; + using namespace modm::literals; + return (Clk == 8_MHz)? 1 : + (Clk == 16_MHz)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 1 : 3 ) : + (Clk == 20_MHz)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 3 : 5 ) : 0; } static constexpr uint8_t calcPS1() { - return (Clk == modm::clock::MHz8)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 1 : 4 ) : - (Clk == modm::clock::MHz16)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 4 : 8 ) : - (Clk == modm::clock::MHz20)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 4 : 8 ) : 0; + using namespace modm::literals; + return (Clk == 8_MHz)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 1 : 4 ) : + (Clk == 16_MHz)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 4 : 8 ) : + (Clk == 20_MHz)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 4 : 8 ) : 0; } static constexpr uint8_t calcPS2() { - return (Clk == modm::clock::MHz8)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 1 : 2) : - (Clk == modm::clock::MHz16)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 2 : 4 ) : - (Clk == modm::clock::MHz20)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 2 : 4 ) : 0; + using namespace modm::literals; + return (Clk == 8_MHz)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 1 : 2) : + (Clk == 16_MHz)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 2 : 4 ) : + (Clk == 20_MHz)? ( (Bitrate == modm::Can::Bitrate::MBps1) ? 2 : 4 ) : 0; } static constexpr uint8_t calcPrescaler(uint8_t sjw, uint8_t prop, uint8_t ps1, uint8_t ps2) { diff --git a/src/modm/math/tolerance.hpp b/src/modm/math/tolerance.hpp index 8384eabb33..cd05b785a1 100644 --- a/src/modm/math/tolerance.hpp +++ b/src/modm/math/tolerance.hpp @@ -17,6 +17,12 @@ namespace modm { +namespace literals +{ + constexpr uint16_t operator "" _percent(long double percent) + { return percent * 10; } +} + /** * This class checks if values are within a certain tolerance. * diff --git a/src/modm/platform/can/stm32/can.hpp.in b/src/modm/platform/can/stm32/can.hpp.in index 39c7337e01..82a9ea5e79 100644 --- a/src/modm/platform/can/stm32/can.hpp.in +++ b/src/modm/platform/can/stm32/can.hpp.in @@ -24,7 +24,6 @@ #include "error_code.hpp" #include "can_filter.hpp" -using namespace modm::clock; // for MHzxx namespace modm { diff --git a/src/modm/platform/clock/avr/module.lb b/src/modm/platform/clock/avr/module.lb deleted file mode 100644 index fb87f909d1..0000000000 --- a/src/modm/platform/clock/avr/module.lb +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2016-2018, Niklas Hauser -# Copyright (c) 2017, Fabian Greif -# -# This file is part of the modm project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# ----------------------------------------------------------------------------- - -def init(module): - module.name = "clock" - module.parent = "platform" - module.description = "System Clock" - -def prepare(module, options): - if not options[":target"].has_driver("clock:avr"): - return False - - module.depends( - ":architecture:atomic", - ":architecture:clock") - - module.add_option( - NumericOption( - name="f_cpu", - description="CPU clock frequency", - minimum=1, - maximum=32000000)) - return True - -def build(env): - device = env[":target"] - driver = device.get_driver("clock") - env.collect(":build:cppdefines", "F_CPU={}".format(env["f_cpu"])) - - properties = device.properties - properties["target"] = target = device.identifier - properties["driver"] = driver - - env.substitutions = properties - env.outbasepath = "modm/src/modm/platform/clock" - - env.copy("static.hpp") - env.copy("delay.hpp") - env.copy("../common/common_clock.hpp", "common_clock.hpp") - if not env.has_module(":test:architecture"): - env.copy("clock.cpp") diff --git a/src/modm/platform/clock/common/common.hpp b/src/modm/platform/clock/common/common.hpp new file mode 100644 index 0000000000..49d4b37694 --- /dev/null +++ b/src/modm/platform/clock/common/common.hpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2018, Niklas Hauser + * + * This file is part of the modm project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +// ---------------------------------------------------------------------------- + +#ifndef MODM_COMMON_CLOCK_HPP +#define MODM_COMMON_CLOCK_HPP + +#include +#include +#include + +namespace modm::clock +{ + +/// @cond +extern uint32_t fcpu; +extern uint32_t fcpu_kHz; +extern uint16_t fcpu_MHz; +extern uint16_t ns_per_loop; +/// @endcond + +} + + +#endif // MODM_COMMON_CLOCK_HPP diff --git a/src/modm/platform/clock/common/common_clock.hpp b/src/modm/platform/clock/common/common_clock.hpp deleted file mode 100644 index 275abca939..0000000000 --- a/src/modm/platform/clock/common/common_clock.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (c) 2018, Niklas Hauser - * - * This file is part of the modm project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -// ---------------------------------------------------------------------------- - -#ifndef MODM_COMMON_CLOCK_HPP -#define MODM_COMMON_CLOCK_HPP - -#include -#include - -namespace modm -{ - -namespace clock -{ - -/** - * Errors that might prevent using a certain clock configuration - * @ingroup modm_platform_clock - */ -enum class -StartupError : uint8_t -{ - None = 0, - InternalClock, - ExternalClock, - ExternalCrystal, - LowSpeedInternalClock, - LowSpeedExternalClock, - LowSpeedExternalCrystal, - Pll, - SystemClock, - ClockOutput, - RealTimeClock, - WatchdogClock -}; - -/// @cond -extern uint32_t modm_fastdata fcpu; -extern uint32_t modm_fastdata fcpu_kHz; -extern uint16_t modm_fastdata fcpu_MHz; -extern uint16_t modm_fastdata ns_per_loop; -/// @endcond - -} // namespace clock - -} // namespace modm - -#endif // MODM_COMMON_CLOCK_HPP diff --git a/src/modm/platform/clock/common/module.lb b/src/modm/platform/clock/common/module.lb new file mode 100644 index 0000000000..bdbb2a76c5 --- /dev/null +++ b/src/modm/platform/clock/common/module.lb @@ -0,0 +1,39 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# +# Copyright (c) 2016-2018, Niklas Hauser +# Copyright (c) 2017, Fabian Greif +# +# This file is part of the modm project. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# ----------------------------------------------------------------------------- + +def init(module): + module.name = "clock" + module.parent = "platform" + module.description = "System Clock" + +def prepare(module, options): + if options[":target"].has_driver("clock:avr"): + module.depends( + ":architecture:atomic", + ":architecture:clock") + + module.add_option( + NumericOption( + name="f_cpu", + description="CPU clock frequency", + minimum=1, + maximum=32000000)) + return True + +def build(env): + env.outbasepath = "modm/src/modm/platform/clock" + env.copy("common.hpp") + + if env[":target"].has_driver("clock:avr"): + env.collect(":build:cppdefines", "F_CPU={}".format(env["f_cpu"])) + env.copy("static.hpp") diff --git a/src/modm/platform/clock/avr/static.hpp b/src/modm/platform/clock/common/static.hpp similarity index 91% rename from src/modm/platform/clock/avr/static.hpp rename to src/modm/platform/clock/common/static.hpp index e2c0608b2b..11765f94fb 100644 --- a/src/modm/platform/clock/avr/static.hpp +++ b/src/modm/platform/clock/common/static.hpp @@ -13,9 +13,8 @@ #define MODM_AVR_CLOCK_HPP #include -#include "common_clock.hpp" +#include "common.hpp" -using namespace modm::clock; namespace modm { @@ -47,11 +46,11 @@ SystemClock static constexpr uint32_t Adc = Frequency; - static StartupError + static bool enable() { // do nothing - return StartupError::None; + return true; } }; diff --git a/src/modm/platform/clock/lpc/clock.cpp.in b/src/modm/platform/clock/lpc/clock.cpp.in index cb270d5b55..97383f0320 100644 --- a/src/modm/platform/clock/lpc/clock.cpp.in +++ b/src/modm/platform/clock/lpc/clock.cpp.in @@ -41,13 +41,13 @@ // ---------------------------------------------------------------------------- bool -modm::platform::ClockControl::enableInternalClock(uint32_t, uint32_t) +modm::platform::Rcc::enableInternalClock(uint32_t, uint32_t) { return true; } bool -modm::platform::ClockControl::enableExternalClock(uint32_t, uint32_t) +modm::platform::Rcc::enableExternalClock(uint32_t, uint32_t) { LPC_SYSCON->PDRUNCFG &= ~PDRUNCFG_SYSOSC_PD; // powerup LPC_SYSCON->SYSOSCCTRL |= SYSOSCCTRL_BYPASS; // enable bypass @@ -55,14 +55,14 @@ modm::platform::ClockControl::enableExternalClock(uint32_t, uint32_t) } bool -modm::platform::ClockControl::enableExternalCrystal(uint32_t f_kHz, uint32_t) +modm::platform::Rcc::enableExternalCrystal(uint32_t f_kHz, uint32_t) { LPC_SYSCON->PDRUNCFG &= ~PDRUNCFG_SYSOSC_PD; // powerup LPC_SYSCON->SYSOSCCTRL &= ~SYSOSCCTRL_BYPASS; // do not bypass - if(f_kHz >= u32kHz(MHz1) && f_kHz <= u32kHz(MHz17)) { + if(f_kHz >= u32kHz(1_MHz) && f_kHz <= u32kHz(17_MHz)) { LPC_SYSCON->SYSOSCCTRL &= ~SYSOSCCTRL_FREQRANGE; // 1-20MHz } - else if (f_kHz >= u32kHz(MHz17) && f_kHz <= u32kHz(MHz25)) { + else if (f_kHz >= u32kHz(17_MHz) && f_kHz <= u32kHz(25_MHz)) { LPC_SYSCON->SYSOSCCTRL |= SYSOSCCTRL_FREQRANGE; // 15-25MHz } else return false; // should not get here @@ -71,7 +71,7 @@ modm::platform::ClockControl::enableExternalCrystal(uint32_t f_kHz, uint32_t) // ---------------------------------------------------------------------------- bool -modm::platform::ClockControl::enablePll(PllSource source, uint8_t pllM, uint8_t pllP) +modm::platform::Rcc::enablePll(PllSource source, uint8_t pllM, uint8_t pllP) { // SYSPLLCLKSEL LPC_SYSCON->SYSPLLCLKSEL = (LPC_SYSCON->SYSPLLCLKSEL & 0b11) @@ -88,7 +88,7 @@ modm::platform::ClockControl::enablePll(PllSource source, uint8_t pllM, uint8_t // ---------------------------------------------------------------------------- bool -modm::platform::ClockControl::enableSystemClock(SystemClockSource src, uint32_t /*waitCycles*/) +modm::platform::Rcc::enableSystemClock(SystemClockSource src, uint32_t /*waitCycles*/) { LPC_SYSCON->MAINCLKSEL = static_cast(src); LPC_SYSCON->MAINCLKUEN = 0x01; // toggle update enable register diff --git a/src/modm/platform/clock/lpc/clock.hpp.in b/src/modm/platform/clock/lpc/clock.hpp.in index af47eb16a3..fea038c525 100644 --- a/src/modm/platform/clock/lpc/clock.hpp.in +++ b/src/modm/platform/clock/lpc/clock.hpp.in @@ -19,7 +19,6 @@ #include // #include "static.hpp" -using namespace modm::clock; namespace modm { @@ -119,16 +118,16 @@ namespace modm static inline uint32_t setFlashLatency(const uint32_t CPU_Frequency, const uint16_t /*mV*/ = 3300) { - if (CPU_Frequency <= MHz20) { + if (CPU_Frequency <= 20_MHz) { LPC_FLASHCTRL->FLASHCFG = 0; } - else if (CPU_Frequency <= MHz40) { + else if (CPU_Frequency <= 40_MHz) { LPC_FLASHCTRL->FLASHCFG = 1; } else { LPC_FLASHCTRL->FLASHCFG = 2; } - return MHz50; + return 50_MHz; } static inline uint32_t diff --git a/src/modm/platform/clock/lpc/common_clock.cpp b/src/modm/platform/clock/lpc/common_clock.cpp index 85b4749948..ec73dc6c54 100644 --- a/src/modm/platform/clock/lpc/common_clock.cpp +++ b/src/modm/platform/clock/lpc/common_clock.cpp @@ -21,7 +21,7 @@ namespace modm namespace clock { -uint32_t modm_fastdata fcpu(MHz12); +uint32_t modm_fastdata fcpu(12_MHz); uint32_t modm_fastdata fcpu_kHz(12000); uint16_t modm_fastdata fcpu_MHz(12); uint16_t modm_fastdata ns_per_loop(4000/12); diff --git a/src/modm/platform/clock/lpc/pll_calculator.hpp b/src/modm/platform/clock/lpc/pll_calculator.hpp index fddba0bd05..e1b81df921 100644 --- a/src/modm/platform/clock/lpc/pll_calculator.hpp +++ b/src/modm/platform/clock/lpc/pll_calculator.hpp @@ -15,7 +15,6 @@ #include "../generic/common_clock.hpp" -using namespace modm::clock; namespace modm { @@ -27,8 +26,8 @@ namespace modm Lpc11PllSettings { private: - static constexpr int64_t InputMin = MHz10; - static constexpr int64_t InputMax = MHz25; + static constexpr int64_t InputMin = 10_MHz; + static constexpr int64_t InputMax = 25_MHz; // Pll Constant Range static constexpr int64_t Mmin = 1; static constexpr int64_t Mmax = 32; diff --git a/src/modm/platform/clock/lpc/static.hpp.in b/src/modm/platform/clock/lpc/static.hpp.in index 4b11f37855..2da88c8af1 100644 --- a/src/modm/platform/clock/lpc/static.hpp.in +++ b/src/modm/platform/clock/lpc/static.hpp.in @@ -23,7 +23,6 @@ #include "pll_calculator.hpp" #include "clock.hpp" -using namespace modm::clock; namespace modm { @@ -32,7 +31,7 @@ namespace modm /* * Used to setup pll with constants */ - template + template class PllSetup { private: @@ -41,7 +40,7 @@ namespace modm static StartupError enable() { - ClockControl::enablePll(Source, p::PllM, p::PllP); + Rcc::enablePll(Source, p::PllM, p::PllP); modm::clock::fcpu = OutputFrequency; modm::clock::fcpu_kHz = OutputFrequency / 1000; modm::clock::fcpu_MHz = OutputFrequency / 1000000; @@ -62,7 +61,7 @@ namespace modm 'setup': "PllSetup", 'sources': [internalClock, externalClock, externalCrystal] } -%% set systemClock = {'name': "SystemClock", +%% set SystemClock = {'name': "SystemClock", 'minFrequency': "MHz1", 'maxFrequency': "MHz48", 'sources': [ internalClock, externalClock, @@ -71,7 +70,7 @@ namespace modm %% set clockOut = {'name': "ClockOutput", 'divisions': range(1,255), 'sources': [externalClock, - externalCrystal, systemClock] } + externalCrystal, SystemClock] } // Static Clocks/Plls/Osciallators {{ static.source(internalClock, "modm::platform") }} @@ -82,7 +81,7 @@ namespace modm {{ static.pll(pll, "modm::platform") }} -{{ static.sink(systemClock, "modm::platform")}} +{{ static.sink(SystemClock, "modm::platform")}} {{ static.output(clockOut, "modm::platform")}} diff --git a/src/modm/platform/clock/lpc/static.macros b/src/modm/platform/clock/lpc/static.macros index e38d9e98e3..dd38f4fbd3 100644 --- a/src/modm/platform/clock/lpc/static.macros +++ b/src/modm/platform/clock/lpc/static.macros @@ -46,25 +46,25 @@ public: { %% if target["family"] == "lpc" %% if s.fixedFrequency|length > 0 - if (!ClockControl::enable{{ s.name }}({{ s.fixedFrequency }}/1000, waitCycles)) + if (!Rcc::enable{{ s.name }}({{ s.fixedFrequency }}/1000, waitCycles)) %% else - if (!ClockControl::enable{{ s.name }}(InputFrequency/1000, waitCycles)) + if (!Rcc::enable{{ s.name }}(InputFrequency/1000, waitCycles)) %% endif %% else - if (!ClockControl::enable{{ s.name }}(waitCycles)) + if (!Rcc::enable{{ s.name }}(waitCycles)) %% endif return StartupError::{{ s.name }}; %% if target["platform"] == "stm32" and target["family"] in ["f2", "f4"] - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div4); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div2); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div4); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div2); %% elif partname.startswith("stm32f100") - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div1); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div1); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); %% elif target["platform"] == "stm32" and target["family"] in ["f1", "f3"] - ClockControl::setApb1Prescaler(ClockControl::Apb1Prescaler::Div2); - ClockControl::setApb2Prescaler(ClockControl::Apb2Prescaler::Div1); + Rcc::setApb1Prescaler(Rcc::Apb1Prescaler::Div2); + Rcc::setApb2Prescaler(Rcc::Apb2Prescaler::Div1); %% endif return StartupError::None; @@ -105,7 +105,7 @@ public: if (err != StartupError::None) return err; return PllSetup::enable(); + Rcc::PllSource::{{ src.name }}>::enable(); } static constexpr int outputFrequency = OutputFrequency; @@ -170,9 +170,9 @@ public: { StartupError err = {{ src.name }}<{{ template }}>::enable(waitCycles); if (err != StartupError::None) return err; - ClockControl::setFlashLatency(OutputFrequency); - if(ClockControl::enable{{ s.name }}( - ClockControl::{{ s.name }}Source::{{ src.name }}, waitCycles)) + Rcc::setFlashLatency(OutputFrequency); + if(Rcc::enable{{ s.name }}( + Rcc::{{ s.name }}Source::{{ src.name }}, waitCycles)) return StartupError::None; return StartupError::{{ src.name }}; } @@ -195,7 +195,7 @@ public: static xpcc_always_inline void setDivision(Division) { - //ClockControl::enable{{ o.name }}(static_cast(d)); + //Rcc::enable{{ o.name }}(static_cast(d)); } %% endif }; diff --git a/src/modm/platform/clock/stm32-rcc/module.lb b/src/modm/platform/clock/stm32-rcc/module.lb deleted file mode 100644 index 2c74842e87..0000000000 --- a/src/modm/platform/clock/stm32-rcc/module.lb +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -# -# Copyright (c) 2016-2018, Niklas Hauser -# Copyright (c) 2017, Fabian Greif -# -# This file is part of the modm project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# ----------------------------------------------------------------------------- - -def init(module): - module.name = "rcc" - module.parent = "platform" - module.description = "Reset and Clock Control (RCC)" - -def prepare(module, options): - if not options[":target"].has_driver("rcc:stm32*"): - return False - - module.depends(":cmsis:device") - # FIXME: Generate peripherals.hpp from :platform:core module - module.depends(":platform:gpio") - return True - -def build(env): - device = env[":target"] - - all_peripherals = [] - all_drivers = [d for d in device._properties["driver"] if d["name"] not in ["gpio", "core"]] - translate = lambda s: "".join(p.capitalize() for p in s.split("_")) - for d in all_drivers: - dname = translate(d["name"]) - if "instance" in d: - all_peripherals.extend([dname + translate(i) for i in d["instance"]]) - else: - all_peripherals.append(dname) - all_peripherals = sorted(list(set(all_peripherals))) - - rcc_map = env.query(":cmsis:device:rcc-map") - rcc_map = {per:v for per,v in rcc_map.items() if per.capitalize() in all_peripherals} - - env.substitutions = { - "peripherals": rcc_map.keys(), - "rcc_map": rcc_map, - } - env.outbasepath = "modm/src/modm/platform/clock" - env.template("rcc.hpp.in") diff --git a/src/modm/platform/clock/stm32-rcc/rcc.hpp.in b/src/modm/platform/clock/stm32-rcc/rcc.hpp.in deleted file mode 100644 index c277784f7c..0000000000 --- a/src/modm/platform/clock/stm32-rcc/rcc.hpp.in +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright (c) 2019, Niklas Hauser - * - * This file is part of the modm project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -// ---------------------------------------------------------------------------- - -#ifndef MODM_STM32_RCC_HPP -#define MODM_STM32_RCC_HPP - -#include -#include "../device.hpp" -#include - -namespace modm -{ - -namespace platform -{ - -/** - * Reset and Clock Control for STM32 devices. - * - * @author Niklas Hauser - * @ingroup modm_platform_clock - */ -class Rcc -{ -public: - template< Peripheral peripheral > - static void - enable(); - - template< Peripheral peripheral > - static void - disable(); - - template< Peripheral peripheral > - static void - reset(); -}; - -template< Peripheral peripheral > -inline void -Rcc::enable() -{ - __DSB(); - %% for peripheral in peripherals | sort if "EN" in rcc_map[peripheral] - %% set register = rcc_map[peripheral]["EN"] - if constexpr (peripheral == Peripheral::{{ peripheral | capitalize }}) - { RCC->{{register}} |= RCC_{{register}}_{{peripheral}}EN; } - %% endfor - __DSB(); -} - -template< Peripheral peripheral > -inline void -Rcc::disable() -{ - __DSB(); - %% for peripheral in peripherals | sort if "EN" in rcc_map[peripheral] - %% set register = rcc_map[peripheral]["EN"] - if constexpr (peripheral == Peripheral::{{ peripheral | capitalize }}) - { RCC->{{register}} &= ~RCC_{{register}}_{{peripheral}}EN; } - %% endfor - __DSB(); -} - -template< Peripheral peripheral > -inline void -Rcc::reset() -{ - __DSB(); - %% for peripheral in peripherals | sort if "RST" in rcc_map[peripheral] - %% set register = rcc_map[peripheral]["RST"] - if constexpr (peripheral == Peripheral::{{ peripheral | capitalize }}) - { - RCC->{{register}} |= RCC_{{register}}_{{peripheral}}RST; __DSB(); - RCC->{{register}} &= ~RCC_{{register}}_{{peripheral}}RST; - } - %% endfor - __DSB(); -} - -} // namespace platform - -} // namespace modm - -#endif // MODM_STM32_RCC_HPP diff --git a/src/modm/platform/clock/stm32/latency.cpp.in b/src/modm/platform/clock/stm32/latency.cpp.in deleted file mode 100644 index a1530553ac..0000000000 --- a/src/modm/platform/clock/stm32/latency.cpp.in +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2016, Sascha Schade - * Copyright (c) 2016-2018, Niklas Hauser - * Copyright (c) 2017, Fabian Greif - * - * This file is part of the modm project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - */ -// ---------------------------------------------------------------------------- - -#include "clock.hpp" - -%% if target["family"] == "f1" and target["name"] == "00" -#include -%% endif - -%% for mV, table_MHz in table.items() | sort -static const uint32_t -flash_latency_{{ mV }}[] = -{ - %% for mhz in table_MHz - {{ mhz * 1000000 }}, - %% endfor -}; -%% endfor - -uint32_t -modm::platform::ClockControl::setFlashLatency(const uint32_t CPU_Frequency, const uint16_t mV) -{ -%% if target["family"] == "f1" and target["name"] == "00" - (void) CPU_Frequency; - (void) mV; - uint32_t max_freq(MHz24); -%% else - const uint32_t *lut(flash_latency_{{ (table|sort)[-1] }}); - uint8_t lut_size(sizeof(flash_latency_{{ (table|sort)[-1] }}) / sizeof(uint32_t)); - %% if table|length > 1 - // find the right table for the voltage - %% for mV in (table|sort)[:-1] - {% if not loop.first %}else {% endif %}if (mV < {{ mV }}) { - lut = flash_latency_{{ mV }}; - lut_size = sizeof(flash_latency_{{ mV }}) / sizeof(uint32_t); - } - %% endfor - %% else - (void) mV; - %% endif - // find the next highest frequency in the table - uint8_t latency(0); - uint32_t max_freq(0); - while (latency < lut_size) - { - if (CPU_Frequency <= (max_freq = lut[latency])) - break; - latency++; - } - - if (CPU_Frequency <= max_freq) - { - uint32_t acr = FLASH->ACR & ~FLASH_ACR_LATENCY; - // set flash latency - acr |= latency; - %% if target["family"] in ["f2", "f4", "l4"] - // enable flash prefetch and data and instruction cache - acr |= FLASH_ACR_PRFTEN | FLASH_ACR_DCEN | FLASH_ACR_ICEN; - %% elif target["family"] == "f7" - // enable flash prefetch and flash accelerator - acr |= FLASH_ACR_PRFTEN | FLASH_ACR_ARTEN; - %% else - // enable flash prefetch - acr |= FLASH_ACR_PRFTBE; - %% endif - FLASH->ACR = acr; - } -%% endif - - return max_freq; -} diff --git a/src/modm/platform/clock/stm32/module.lb b/src/modm/platform/clock/stm32/module.lb index 31476e714a..9ee8ed9565 100644 --- a/src/modm/platform/clock/stm32/module.lb +++ b/src/modm/platform/clock/stm32/module.lb @@ -1,7 +1,7 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- # -# Copyright (c) 2016-2018, Niklas Hauser +# Copyright (c) 2016-2019, Niklas Hauser # Copyright (c) 2017, Fabian Greif # # This file is part of the modm project. @@ -13,17 +13,17 @@ def init(module): - module.name = "clock" - module.parent = "platform" + module.parent = ":platform" + module.name = "rcc" module.description = "Reset and Clock Control (RCC)" def prepare(module, options): if not options[":target"].has_driver("rcc:stm32*"): return False - module.depends(":cmsis:device", ":utils", ":platform:clock.cortex", ":platform:rcc") - if "stm32f100" in options[":target"].partname: - module.depends(":architecture:clock") + module.depends(":cmsis:device", ":utils", ":platform:clock") + # FIXME: Move Peripherals enum somewhere better + module.depends(":platform:gpio") return True def build(env): @@ -33,7 +33,7 @@ def build(env): properties = {} properties["target"] = target = device.identifier properties["partname"] = device.partname - properties["core"] = device.get_driver("core")["type"] + properties["core"] = core = device.get_driver("core")["type"] if target["family"] in ["f1", "f3", "f4"]: properties["hsi_frequency"] = 8 @@ -42,6 +42,14 @@ def build(env): properties["hsi_frequency"] = 16 properties["lsi_frequency"] = 32 + if core == "cortex-m0": + loops = 4 + elif core.startswith("cortex-m7"): + loops = 1 + else: + loops = 3 + properties["loops"] = loops + # TODO: Move this data into the device files properties["usbprescaler"] = ( (target["family"] == "f0" and target["name"] in ["42", "48", "70", "72", "78"]) or @@ -55,66 +63,33 @@ def build(env): target["family"] == "f0" and target["name"] in ["42", "48", "71", "72", "78", "91", "98"] properties["pll_p"] = target["family"] == "l4" and target["name"] not in ["12", "22"] - if target["family"] in ["f0"]: - flash_latencies = {3600: [24, 48]} - elif target["family"] in ["f1", "f3"]: - if target["family"] in ["f1"] and target["name"] in ["00"]: - flash_latencies = {3600: [24]} - else: - flash_latencies = {3600: [24, 48, 72]} - elif target["family"] in ["f2"]: - flash_latencies = { - 3600: [30, 60, 90, 120], - 2700: [24, 48, 72, 96, 120], - 2400: [18, 36, 54, 72, 90, 108, 120], - 2100: [16, 32, 48, 64, 80, 96, 112, 120] - } - elif target["family"] in ["f4"]: - if target["name"] in ["10", "11", "12", "13", "23"]: - flash_latencies = { - 3600: [30, 60, 90, 100], - 2700: [24, 48, 72, 96, 100], - 2400: [18, 36, 54, 72, 90, 100], - 2100: [16, 32, 48, 64, 80, 96, 100] - } - elif target["name"] in ["01"]: - flash_latencies = { - 3600: [30, 60, 84], - 2700: [24, 48, 72, 84], - 2400: [18, 36, 54, 72, 84], - 2100: [16, 32, 48, 64, 80, 84] - } - elif target["name"] in ["05", "07", "15", "17"]: - flash_latencies = { - 3600: [30, 60, 90, 120, 150, 168], - 2700: [24, 48, 72, 96, 120, 144, 168], - 2400: [22, 44, 66, 88, 110, 132, 154, 168], - 2100: [20, 40, 60, 80, 100, 120, 140, 160] - } - elif target["name"] in ["27", "29", "37", "39", "46", "69", "79"]: - flash_latencies = { - 3600: [30, 60, 90, 120, 150, 180], - 2700: [24, 48, 72, 96, 120, 144, 168, 180], - 2400: [22, 44, 66, 88, 110, 132, 154, 176, 180], - 2100: [20, 40, 60, 80, 100, 120, 140, 160, 168] - } - elif target["family"] in ["f7"]: - flash_latencies = { - 3600: [30, 60, 90, 120, 150, 180, 216], - 2700: [24, 48, 72, 96, 120, 144, 168, 192, 216], - 2400: [22, 44, 66, 88, 110, 132, 154, 176, 198, 216], - 2100: [20, 40, 60, 80, 100, 120, 140, 160, 180] - } - elif target["family"] in ["l4"]: - flash_latencies = { - 1200: [16, 32, 48, 64, 80], - 1000: [6, 12, 18, 26] - } + flash_latencies = {} + for vcore in device.get_driver("flash")["latency"]: + flash_latencies[int(vcore["vcore-min"])] = sorted([int(f["hclk-max"]) for f in vcore["wait-state"]]) properties["table"] = flash_latencies env.substitutions = properties env.outbasepath = "modm/src/modm/platform/clock" - env.template("latency.cpp.in") - env.template("clock.cpp.in") - env.template("clock.hpp.in") + env.template("rcc.cpp.in") + env.template("rcc.hpp.in") + + all_peripherals = [] + all_drivers = [d for d in device._properties["driver"] if d["name"] not in ["gpio", "core"]] + translate = lambda s: "".join(p.capitalize() for p in s.split("_")) + for d in all_drivers: + dname = translate(d["name"]) + if "instance" in d: + all_peripherals.extend([dname + translate(i) for i in d["instance"]]) + else: + all_peripherals.append(dname) + all_peripherals = sorted(list(set(all_peripherals))) + + rcc_map = env.query(":cmsis:device:rcc-map") + rcc_map = {per:v for per,v in rcc_map.items() if per.capitalize() in all_peripherals} + + env.substitutions.update({ + "peripherals": rcc_map.keys(), + "rcc_map": rcc_map, + }) + env.template("rcc_impl.hpp.in") diff --git a/src/modm/platform/clock/stm32/clock.cpp.in b/src/modm/platform/clock/stm32/rcc.cpp.in similarity index 83% rename from src/modm/platform/clock/stm32/clock.cpp.in rename to src/modm/platform/clock/stm32/rcc.cpp.in index 10a035f627..e3eeb009ce 100644 --- a/src/modm/platform/clock/stm32/clock.cpp.in +++ b/src/modm/platform/clock/stm32/rcc.cpp.in @@ -3,7 +3,7 @@ * Copyright (c) 2009-2012, Fabian Greif * Copyright (c) 2011, Georgi Grinshpun * Copyright (c) 2012, 2016, Sascha Schade - * Copyright (c) 2012, 2014-2017, Niklas Hauser + * Copyright (c) 2012, 2014-2019, Niklas Hauser * Copyright (c) 2013-2014, Kevin Läufer * Copyright (c) 2018, Christopher Durand * @@ -15,32 +15,21 @@ */ // ---------------------------------------------------------------------------- -#include "clock.hpp" +#include "rcc.hpp" +#include "common.hpp" -namespace modm +namespace modm::clock { -namespace clock -{ - uint32_t modm_fastdata fcpu({{ hsi_frequency|int * 1000000 }}); uint32_t modm_fastdata fcpu_kHz({{ hsi_frequency|int * 1000 }}); uint16_t modm_fastdata fcpu_MHz({{ hsi_frequency }}); -%% if core.startswith("cortex-m0") - %% set loops = 4000.0 -%% elif core.startswith("cortex-m7") - %% set loops = 1000.0 -%% else - %% set loops = 3000.0 -%% endif -uint16_t modm_fastdata ns_per_loop({{ loops / hsi_frequency|int}}); - -} +uint16_t modm_fastdata ns_per_loop({{ loops * 1000.0 / hsi_frequency|int}}); } // ---------------------------------------------------------------------------- %% if target["family"] == "f0" bool -modm::platform::ClockControl::enableInternalClockMHz14(uint32_t waitCycles) +modm::platform::Rcc::enableInternalClockMHz14(uint32_t waitCycles) { bool retval; RCC->CR2 |= RCC_CR2_HSI14ON; @@ -52,7 +41,7 @@ modm::platform::ClockControl::enableInternalClockMHz14(uint32_t waitCycles) %% if hsi48 bool -modm::platform::ClockControl::enableInternalClockMHz48(uint32_t waitCycles) +modm::platform::Rcc::enableInternalClockMHz48(uint32_t waitCycles) { bool retval; RCC->CR2 |= RCC_CR2_HSI48ON; @@ -63,7 +52,7 @@ modm::platform::ClockControl::enableInternalClockMHz48(uint32_t waitCycles) %% endif bool -modm::platform::ClockControl::enableInternalClock(uint32_t waitCycles) +modm::platform::Rcc::enableInternalClock(uint32_t waitCycles) { bool retval; RCC->CR |= RCC_CR_HSION; @@ -74,7 +63,7 @@ modm::platform::ClockControl::enableInternalClock(uint32_t waitCycles) %% if target["family"] in ["l4"] bool -modm::platform::ClockControl::enableMultiSpeedInternalClock(MsiFrequency msi_frequency, uint32_t waitCycles) +modm::platform::Rcc::enableMultiSpeedInternalClock(MsiFrequency msi_frequency, uint32_t waitCycles) { bool retval; RCC->CR = (RCC->CR & ~RCC_CR_MSIRANGE) | static_cast(msi_frequency) | RCC_CR_MSIRGSEL | RCC_CR_MSION; @@ -85,7 +74,7 @@ modm::platform::ClockControl::enableMultiSpeedInternalClock(MsiFrequency msi_fre %% endif bool -modm::platform::ClockControl::enableExternalClock(uint32_t waitCycles) +modm::platform::Rcc::enableExternalClock(uint32_t waitCycles) { bool retval; RCC->CR |= RCC_CR_HSEBYP | RCC_CR_HSEON; @@ -95,7 +84,7 @@ modm::platform::ClockControl::enableExternalClock(uint32_t waitCycles) } bool -modm::platform::ClockControl::enableExternalCrystal(uint32_t waitCycles) +modm::platform::Rcc::enableExternalCrystal(uint32_t waitCycles) { bool retval; RCC->CR = (RCC->CR & ~RCC_CR_HSEBYP) | RCC_CR_HSEON; @@ -105,7 +94,7 @@ modm::platform::ClockControl::enableExternalCrystal(uint32_t waitCycles) } bool -modm::platform::ClockControl::enableLowSpeedInternalClock(uint32_t waitCycles) +modm::platform::Rcc::enableLowSpeedInternalClock(uint32_t waitCycles) { bool retval; RCC->CSR |= RCC_CSR_LSION; @@ -115,7 +104,7 @@ modm::platform::ClockControl::enableLowSpeedInternalClock(uint32_t waitCycles) } bool -modm::platform::ClockControl::enableLowSpeedExternalClock(uint32_t waitCycles) +modm::platform::Rcc::enableLowSpeedExternalClock(uint32_t waitCycles) { bool retval; RCC->BDCR |= RCC_BDCR_LSEBYP | RCC_BDCR_LSEON; @@ -125,7 +114,7 @@ modm::platform::ClockControl::enableLowSpeedExternalClock(uint32_t waitCycles) } bool -modm::platform::ClockControl::enableLowSpeedExternalCrystal(uint32_t waitCycles) +modm::platform::Rcc::enableLowSpeedExternalCrystal(uint32_t waitCycles) { bool retval; RCC->BDCR = (RCC->BDCR & ~RCC_BDCR_LSEBYP) | RCC_BDCR_LSEON; @@ -137,7 +126,7 @@ modm::platform::ClockControl::enableLowSpeedExternalCrystal(uint32_t waitCycles) %% if target["family"] in ["f2", "f4", "f7"] // ---------------------------------------------------------------------------- bool -modm::platform::ClockControl::enablePll(PllSource source, uint8_t pllM, uint16_t pllN, uint8_t pllP, uint32_t waitCycles) +modm::platform::Rcc::enablePll(PllSource source, uint8_t pllM, uint16_t pllN, uint8_t pllP, uint32_t waitCycles) { // Read reserved values and clear all other values uint32_t tmp = RCC->PLLCFGR & ~(RCC_PLLCFGR_PLLSRC | RCC_PLLCFGR_PLLM @@ -171,7 +160,7 @@ modm::platform::ClockControl::enablePll(PllSource source, uint8_t pllM, uint16_t %% elif target["family"] in ["l4"] // ---------------------------------------------------------------------------- bool -modm::platform::ClockControl::enablePll(PllSource source, +modm::platform::Rcc::enablePll(PllSource source, uint8_t pllM, uint16_t pllN, uint8_t pllR, uint32_t waitCycles) { // Read reserved values and clear all other values @@ -215,7 +204,7 @@ modm::platform::ClockControl::enablePll(PllSource source, %% else // ---------------------------------------------------------------------------- bool -modm::platform::ClockControl::enablePll(PllSource source, +modm::platform::Rcc::enablePll(PllSource source, %% if pllprediv2 uint8_t pllMul, uint8_t pllPrediv, uint8_t pllPrediv2, uint32_t waitCycles) %% elif pllprediv @@ -266,7 +255,7 @@ modm::platform::ClockControl::enablePll(PllSource source, // ---------------------------------------------------------------------------- bool -modm::platform::ClockControl::enableSystemClock(SystemClockSource src, uint32_t waitCycles) +modm::platform::Rcc::enableSystemClock(SystemClockSource src, uint32_t waitCycles) { RCC->CFGR = (RCC->CFGR & ~RCC_CFGR_SW) | uint32_t(src); diff --git a/src/modm/platform/clock/stm32/clock.hpp.in b/src/modm/platform/clock/stm32/rcc.hpp.in similarity index 92% rename from src/modm/platform/clock/stm32/clock.hpp.in rename to src/modm/platform/clock/stm32/rcc.hpp.in index fee2a8d74b..78671769ea 100644 --- a/src/modm/platform/clock/stm32/clock.hpp.in +++ b/src/modm/platform/clock/stm32/rcc.hpp.in @@ -13,23 +13,18 @@ */ // ---------------------------------------------------------------------------- -#ifndef MODM_STM32_CLOCK_HPP -#define MODM_STM32_CLOCK_HPP +#ifndef MODM_STM32_RCC_HPP +#define MODM_STM32_RCC_HPP #include #include "../device.hpp" -#include "common_clock.hpp" +#include -using namespace modm::clock; - -namespace modm -{ - -namespace platform +namespace modm::platform { /** - * Clock Control for STM32 devices. + * Reset and Clock Control for STM32 devices. * * This class abstracts access to clock settings on the STM32. * You need to use this class to enable internal and external clock @@ -37,9 +32,9 @@ namespace platform * Don't forget to set the flash latencies. * * @author Niklas Hauser - * @ingroup modm_platform_clock + * @ingroup modm_platform_rcc */ -class ClockControl +class Rcc { public: enum class @@ -425,31 +420,43 @@ public: * @retval <=CPU_Frequency flash latency has been set correctly. * @retval >CPU_Frequency requested frequency too high for voltage. */ + template< uint32_t Core_Hz, uint16_t Core_mV = 3300> static uint32_t - setFlashLatency(const uint32_t CPU_Frequency, const uint16_t mV = 3300); + setFlashLatency(); + + template< uint32_t Core_Hz > + static void + updateCoreFrequency(); public: - static inline uint32_t - getCpuFrequency() - { - return modm::clock::fcpu; - } + template< Peripheral peripheral > + static void + enable(); - static inline uint32_t - getCpuFrequencykHz() - { - return modm::clock::fcpu_kHz; - } + template< Peripheral peripheral > + static void + disable(); + + template< Peripheral peripheral > + static void + reset(); - static inline uint32_t - getCpuFrequencyMHz() +private: + struct flash_latency { - return modm::clock::fcpu_MHz; - } + uint32_t latency; + uint32_t max_frequency; + }; + + static constexpr flash_latency + computeFlashLatency(uint32_t Core_Hz, uint16_t Core_mV); }; -} // namespace platform +using ClockControl [[deprecated("Please use `modm::platform:Rcc` instead")]] = Rcc; + +} // namespace modm::platform + -} // namespace modm +#include "rcc_impl.hpp" -#endif // MODM_STM32_CLOCK_HPP +#endif // MODM_STM32_RCC_HPP diff --git a/src/modm/platform/clock/stm32/rcc_impl.hpp.in b/src/modm/platform/clock/stm32/rcc_impl.hpp.in new file mode 100644 index 0000000000..cef0c42ebf --- /dev/null +++ b/src/modm/platform/clock/stm32/rcc_impl.hpp.in @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2019, Niklas Hauser + * + * This file is part of the modm project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ +// ---------------------------------------------------------------------------- + +#include "common.hpp" + +namespace modm::platform +{ + +constexpr Rcc::flash_latency +Rcc::computeFlashLatency(uint32_t Core_Hz, uint16_t Core_mV) +{ + %% for mV, table_Hz in table.items() | sort + constexpr uint32_t flash_latency_{{ mV }}[] = + { + %% for hz in table_Hz + {{ hz }}, + %% endfor + }; + %% endfor + + const uint32_t *lut(flash_latency_{{ (table|sort)[0] }}); + uint8_t lut_size(sizeof(flash_latency_{{ (table|sort)[0] }}) / sizeof(uint32_t)); + %% if table|length > 1 + // find the right table for the voltage + %% for mV in (table|sort)[1:]|reverse + {% if not loop.first %}else {% endif %}if ({{ mV }} <= Core_mV) { + lut = flash_latency_{{ mV }}; + lut_size = sizeof(flash_latency_{{ mV }}) / sizeof(uint32_t); + } + %% endfor + %% else + (void) Core_mV; + %% endif + // find the next highest frequency in the table + uint8_t latency(0); + uint32_t max_freq(0); + while (latency < lut_size) + { + if (Core_Hz <= (max_freq = lut[latency])) + break; + latency++; + } + return {latency, max_freq}; +} + +template< uint32_t Core_Hz, uint16_t Core_mV = 3300> +uint32_t +Rcc::setFlashLatency() +{ + constexpr flash_latency fl = computeFlashLatency(Core_Hz, Core_mV); + static_assert(Core_Hz <= fl.max_frequency, "CPU Frequency is too high for this core voltage!"); + +%% if not target.string.startswith("stm32f100") + uint32_t acr = FLASH->ACR & ~FLASH_ACR_LATENCY; + // set flash latency + acr |= fl.latency; +%% if target["family"] in ["f2", "f4", "l4"] + // enable flash prefetch and data and instruction cache + acr |= FLASH_ACR_PRFTEN | FLASH_ACR_DCEN | FLASH_ACR_ICEN; +%% elif target["family"] == "f7" + // enable flash prefetch and flash accelerator + acr |= FLASH_ACR_PRFTEN | FLASH_ACR_ARTEN; +%% else + // enable flash prefetch + acr |= FLASH_ACR_PRFTBE; +%% endif + FLASH->ACR = acr; +%% endif + + return fl.max_frequency; +} + +template< uint32_t Core_Hz > +void +Rcc::updateCoreFrequency() +{ + modm::clock::fcpu = Core_Hz; + modm::clock::fcpu_kHz = Core_Hz / 1'000; + modm::clock::fcpu_MHz = Core_Hz / 1'000'000; + modm::clock::ns_per_loop = ::round({{loops}}000.f / (Core_Hz / 1'000'000)); +} + +template< Peripheral peripheral > +inline void +Rcc::enable() +{ + __DSB(); + %% for peripheral in peripherals | sort if "EN" in rcc_map[peripheral] + %% set register = rcc_map[peripheral]["EN"] + if constexpr (peripheral == Peripheral::{{ peripheral | capitalize }}) + { RCC->{{register}} |= RCC_{{register}}_{{peripheral}}EN; } + %% endfor + __DSB(); +} + +template< Peripheral peripheral > +inline void +Rcc::disable() +{ + __DSB(); + %% for peripheral in peripherals | sort if "EN" in rcc_map[peripheral] + %% set register = rcc_map[peripheral]["EN"] + if constexpr (peripheral == Peripheral::{{ peripheral | capitalize }}) + { RCC->{{register}} &= ~RCC_{{register}}_{{peripheral}}EN; } + %% endfor + __DSB(); +} + +template< Peripheral peripheral > +inline void +Rcc::reset() +{ + __DSB(); + %% for peripheral in peripherals | sort if "RST" in rcc_map[peripheral] + %% set register = rcc_map[peripheral]["RST"] + if constexpr (peripheral == Peripheral::{{ peripheral | capitalize }}) + { + RCC->{{register}} |= RCC_{{register}}_{{peripheral}}RST; __DSB(); + RCC->{{register}} &= ~RCC_{{register}}_{{peripheral}}RST; + } + %% endfor + __DSB(); +} + +} // namespace modm::platform + diff --git a/src/modm/platform/clock/cortex/module.lb b/src/modm/platform/clock/systick/module.lb similarity index 71% rename from src/modm/platform/clock/cortex/module.lb rename to src/modm/platform/clock/systick/module.lb index e0e71ec899..8ce6e0b92a 100644 --- a/src/modm/platform/clock/cortex/module.lb +++ b/src/modm/platform/clock/systick/module.lb @@ -15,7 +15,7 @@ import os def init(module): module.parent = "platform" - module.name = "clock.cortex" + module.name = "systick" module.description = "ARM Cortex-M SysTick" def prepare(module, options): @@ -24,11 +24,14 @@ def prepare(module, options): module.depends( ":architecture:clock", - ":architecture:delay", ":cmsis:device") return True +def validate(env): + if (env.get(":freertos:frequency", 1000) % 1000 != 0): + raise ValidateException("SysTick frequency must be a multiple of 1000Hz!") + def build(env): device = env[":target"] driver = device.get_driver("core") @@ -37,20 +40,11 @@ def build(env): properties["target"] = target = device.identifier properties["driver"] = driver properties["core"] = driver["type"] - properties["systick_frequency"] = int(env.get(":freertos:frequency", 1000)) - if (properties["systick_frequency"] % 1000 != 0): - raise BuildException("SysTick frequency must be a multiple of 1000Hz!") + properties["systick_frequency"] = env.get(":freertos:frequency", 1000) env.substitutions = properties env.outbasepath = "modm/src/modm/platform/clock" - env.template("delay.cpp.in") - env.copy("delay.hpp") - - if not env.has_module(":test:architecture"): - env.copy("modm_clock.cpp") - # Systick Timer env.template("systick_timer.hpp.in") env.template("systick_timer.cpp.in") - env.copy("../common/common_clock.hpp", "common_clock.hpp") diff --git a/src/modm/platform/clock/cortex/systick_timer.cpp.in b/src/modm/platform/clock/systick/systick_timer.cpp.in similarity index 83% rename from src/modm/platform/clock/cortex/systick_timer.cpp.in rename to src/modm/platform/clock/systick/systick_timer.cpp.in index 20b59cc0b1..67de889ba0 100644 --- a/src/modm/platform/clock/cortex/systick_timer.cpp.in +++ b/src/modm/platform/clock/systick/systick_timer.cpp.in @@ -13,12 +13,11 @@ #include #include -#include #include #include "systick_timer.hpp" -static modm::cortex::InterruptHandler sysTickHandler(nullptr); +static modm::platform::InterruptHandler sysTickHandler(nullptr); %% if systick_frequency > 1000 static uint8_t counter; %% endif @@ -40,7 +39,7 @@ SysTick_Handler(void) // ---------------------------------------------------------------------------- void -modm::cortex::SysTickTimer::enable(uint32_t reload) +modm::platform::SysTickTimer::enable(uint32_t reload) { %% if systick_frequency > 1000 counter = {{ systick_frequency // 1000 }}; @@ -58,21 +57,21 @@ modm::cortex::SysTickTimer::enable(uint32_t reload) } void -modm::cortex::SysTickTimer::disable() +modm::platform::SysTickTimer::disable() { SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk; } // ---------------------------------------------------------------------------- void -modm::cortex::SysTickTimer::attachInterruptHandler(InterruptHandler handler) +modm::platform::SysTickTimer::attachInterruptHandler(InterruptHandler handler) { atomic::Lock lock; sysTickHandler = handler; } void -modm::cortex::SysTickTimer::detachInterruptHandler() +modm::platform::SysTickTimer::detachInterruptHandler() { atomic::Lock lock; sysTickHandler = nullptr; diff --git a/src/modm/platform/clock/cortex/systick_timer.hpp.in b/src/modm/platform/clock/systick/systick_timer.hpp.in similarity index 94% rename from src/modm/platform/clock/cortex/systick_timer.hpp.in rename to src/modm/platform/clock/systick/systick_timer.hpp.in index b4de782d17..2fac39d977 100644 --- a/src/modm/platform/clock/cortex/systick_timer.hpp.in +++ b/src/modm/platform/clock/systick/systick_timer.hpp.in @@ -17,10 +17,7 @@ #include #include -namespace modm -{ - -namespace cortex +namespace modm::platform { typedef void (*InterruptHandler)(void); @@ -105,6 +102,9 @@ private: } +namespace modm::cortex { + using SysTickTimer [[deprecated("Please use `modm::platform:SysTickTimer` instead")]] = + ::modm::platform::SysTickTimer; } #endif // MODM_STM32_CORTEX_TIMER_HPP diff --git a/src/modm/platform/clock/avr/clock.cpp b/src/modm/platform/core/avr/clock.cpp similarity index 100% rename from src/modm/platform/clock/avr/clock.cpp rename to src/modm/platform/core/avr/clock.cpp diff --git a/src/modm/platform/clock/avr/delay.hpp b/src/modm/platform/core/avr/delay.hpp similarity index 100% rename from src/modm/platform/clock/avr/delay.hpp rename to src/modm/platform/core/avr/delay.hpp diff --git a/src/modm/platform/core/avr/module.lb b/src/modm/platform/core/avr/module.lb index 98adbb62f3..20bbd25c68 100644 --- a/src/modm/platform/core/avr/module.lb +++ b/src/modm/platform/core/avr/module.lb @@ -70,6 +70,11 @@ def build(env): env.copy("atomic_lock.hpp") env.copy("unaligned.hpp") env.copy("flash_reader.hpp") + env.copy("delay.hpp") + + # modm-test implements the clock methods itself + if not env.has_module(":test:architecture"): + env.copy("clock.cpp") env.template("ram.cpp.in") env.template("interrupts.hpp.in") diff --git a/src/modm/platform/clock/cortex/modm_clock.cpp b/src/modm/platform/core/cortex/clock.cpp similarity index 100% rename from src/modm/platform/clock/cortex/modm_clock.cpp rename to src/modm/platform/core/cortex/clock.cpp diff --git a/src/modm/platform/clock/cortex/delay.cpp.in b/src/modm/platform/core/cortex/delay.cpp.in similarity index 95% rename from src/modm/platform/clock/cortex/delay.cpp.in rename to src/modm/platform/core/cortex/delay.cpp.in index b018457eae..01f30c17d7 100644 --- a/src/modm/platform/clock/cortex/delay.cpp.in +++ b/src/modm/platform/core/cortex/delay.cpp.in @@ -10,9 +10,9 @@ // ---------------------------------------------------------------------------- #include "../device.hpp" -#include "common_clock.hpp" +#include -%% if core.startswith("cortex-m0"): +%% if core == "cortex-m0": %% set loop = 4 %% elif core.startswith("cortex-m7"): %# Cortex-M7 is superscalar with dual issue ALU and a 6-stage pipeline @@ -24,9 +24,9 @@ %# TODO: These numbers were measured from a few example applications. %# A statistical analysis of the average overhead cycles is required! -%% if target["platform"] == "stm32" and target["family"] == "f4" +%% if partname.startswith("stm32f4") %% set overhead = 25 -%% elif target["platform"] == "stm32" and target["family"] == "f1" +%% elif partname.startswith("stm32f1") %% set overhead = 12 %% else %% set overhead = 30 diff --git a/src/modm/platform/clock/cortex/delay.hpp b/src/modm/platform/core/cortex/delay.hpp similarity index 100% rename from src/modm/platform/clock/cortex/delay.hpp rename to src/modm/platform/core/cortex/delay.hpp diff --git a/src/modm/platform/core/cortex/module.lb b/src/modm/platform/core/cortex/module.lb index b4c9ecaf82..f0ee49d221 100644 --- a/src/modm/platform/core/cortex/module.lb +++ b/src/modm/platform/core/cortex/module.lb @@ -157,8 +157,8 @@ def prepare(module, options): ":architecture:interrupt", ":architecture:memory", ":architecture:unaligned", - ":cmsis:device", - ":platform:clock.cortex") + ":platform:clock", + ":cmsis:device") module.add_option( BooleanOption( @@ -260,6 +260,7 @@ def validate(env): def build(env): env.substitutions = env.query("vector_table") + env.substitutions["partname"] = env[":target"].partname env.outbasepath = "modm/src/modm/platform/core" # dealing with runtime assertions @@ -273,6 +274,14 @@ def build(env): env.template("vectors.c.in") env.copy("default_handler.sx") + # busy-waiting delays + env.template("delay.cpp.in") + env.copy("delay.hpp") + + # modm-test implements the clock methods itself + if not env.has_module(":test:architecture"): + env.copy("clock.cpp") + # everything to do with dynamic memory env.copy("heap_table.c") if env["allocator"] == "newlib": diff --git a/src/modm/platform/core/hosted/module.lb b/src/modm/platform/core/hosted/module.lb index 94620f4fc5..45ac06bd50 100644 --- a/src/modm/platform/core/hosted/module.lb +++ b/src/modm/platform/core/hosted/module.lb @@ -49,7 +49,6 @@ def build(env): env.copy("../avr/unaligned.hpp", "unaligned.hpp") env.copy("../cortex/flash_reader.hpp", "flash_reader.hpp") - env.outbasepath = "modm/src/modm/platform/clock" if not env.has_module(":test"): env.template("clock.cpp.in") env.template("delay.hpp.in") diff --git a/src/modm/platform/core/stm32/module.lb b/src/modm/platform/core/stm32/module.lb index 8cdbf314d1..ac057270df 100644 --- a/src/modm/platform/core/stm32/module.lb +++ b/src/modm/platform/core/stm32/module.lb @@ -23,7 +23,7 @@ def prepare(module, options): if options[":target"].identifier.platform != "stm32": return False - module.depends(":platform:cortex-m") + module.depends(":platform:cortex-m", ":platform:systick") return True diff --git a/src/modm/platform/fault/cortex/hard_fault_handler.cpp.in b/src/modm/platform/fault/cortex/hard_fault_handler.cpp.in index 03618fc2be..69b3ec4675 100644 --- a/src/modm/platform/fault/cortex/hard_fault_handler.cpp.in +++ b/src/modm/platform/fault/cortex/hard_fault_handler.cpp.in @@ -16,9 +16,6 @@ #include -#include "../device.hpp" -#include "../clock/common_clock.hpp" - #include "../gpio/gpio_{{ options.led }}.hpp" extern "C" void _initHardFaultHandlerLed() __attribute__((optimize("Os"))); diff --git a/src/modm/platform/fault/cortex/module.lb b/src/modm/platform/fault/cortex/module.lb index 20358f7d3b..a4c2116dd1 100644 --- a/src/modm/platform/fault/cortex/module.lb +++ b/src/modm/platform/fault/cortex/module.lb @@ -31,7 +31,7 @@ def prepare(module, options): module.depends( ":architecture:clock", - ":platform:clock", + ":platform:rcc", ":platform:gpio", ":cmsis:device") diff --git a/src/modm/platform/gpio/stm32/module.lb b/src/modm/platform/gpio/stm32/module.lb index 09cd2c0c02..b3b474a561 100644 --- a/src/modm/platform/gpio/stm32/module.lb +++ b/src/modm/platform/gpio/stm32/module.lb @@ -150,7 +150,8 @@ def prepare(module, options): ":architecture:gpio", ":cmsis:device", ":math:utils", - ":platform:gpio.common") + ":platform:gpio.common", + ":platform:rcc") return True def validate(env): diff --git a/src/modm/platform/uart/lpc/uart.cpp.in b/src/modm/platform/uart/lpc/uart.cpp.in index 6044a19d3b..ef1456269e 100644 --- a/src/modm/platform/uart/lpc/uart.cpp.in +++ b/src/modm/platform/uart/lpc/uart.cpp.in @@ -62,7 +62,7 @@ modm::platform::Uart1::initialize(uint32_t baudrate) LPC_UART->LCR = LCR_DLAB; uint32_t regVal = LPC_SYSCON->UARTCLKDIV; - uint32_t Fdiv = (((modm::platform::ClockControl::getCpuFrequency() * LPC_SYSCON->SYSAHBCLKDIV)/regVal)/16)/baudrate ; //390; + uint32_t Fdiv = (((modm::platform::Rcc::getCpuFrequency() * LPC_SYSCON->SYSAHBCLKDIV)/regVal)/16)/baudrate ; //390; LPC_UART->DLM = Fdiv >> 8; LPC_UART->DLL = Fdiv & 0xff; //LPC_UART->DLM = 0; diff --git a/test/modm/driver/can/mcp2515_can_bit_timings_test.cpp b/test/modm/driver/can/mcp2515_can_bit_timings_test.cpp index 2a633d91d2..ef06763991 100644 --- a/test/modm/driver/can/mcp2515_can_bit_timings_test.cpp +++ b/test/modm/driver/can/mcp2515_can_bit_timings_test.cpp @@ -17,7 +17,7 @@ #include using namespace modm; -using namespace modm::clock; +using namespace modm::literals; #define TEST_TIMING(clk, bitrate, sjw, prop, ps1, ps2, prescaler) \ TEST_ASSERT_EQUALS((modm::CanBitTimingMcp2515::getSJW()), sjw); \ @@ -30,27 +30,27 @@ void Mcp2515CanBitTimingsTest::testPrecalculatedValues() { // Clock Baud SJW Prop PS1 PS2 Prescaler - TEST_TIMING(MHz8, kBps10, 1, 1, 4, 2, 100); - TEST_TIMING(MHz8, kBps20, 1, 1, 4, 2, 50); - TEST_TIMING(MHz8, kBps125, 1, 1, 4, 2, 8); - TEST_TIMING(MHz8, kBps250, 1, 1, 4, 2, 4); - TEST_TIMING(MHz8, kBps500, 1, 1, 4, 2, 2); - TEST_TIMING(MHz8, MBps1, 1, 1, 1, 1, 2); + TEST_TIMING(8_MHz, kBps10, 1, 1, 4, 2, 100); + TEST_TIMING(8_MHz, kBps20, 1, 1, 4, 2, 50); + TEST_TIMING(8_MHz, kBps125, 1, 1, 4, 2, 8); + TEST_TIMING(8_MHz, kBps250, 1, 1, 4, 2, 4); + TEST_TIMING(8_MHz, kBps500, 1, 1, 4, 2, 2); + TEST_TIMING(8_MHz, MBps1, 1, 1, 1, 1, 2); // Clock Baud SJW Prop PS1 PS2 Prescaler - TEST_TIMING(MHz16, kBps10, 1, 3, 8, 4, 100); - TEST_TIMING(MHz16, kBps20, 1, 3, 8, 4, 50); - TEST_TIMING(MHz16, kBps125, 1, 3, 8, 4, 8); - TEST_TIMING(MHz16, kBps250, 1, 3, 8, 4, 4); - TEST_TIMING(MHz16, kBps500, 1, 3, 8, 4, 2); - TEST_TIMING(MHz16, MBps1, 1, 1, 4, 2, 2); + TEST_TIMING(16_MHz, kBps10, 1, 3, 8, 4, 100); + TEST_TIMING(16_MHz, kBps20, 1, 3, 8, 4, 50); + TEST_TIMING(16_MHz, kBps125, 1, 3, 8, 4, 8); + TEST_TIMING(16_MHz, kBps250, 1, 3, 8, 4, 4); + TEST_TIMING(16_MHz, kBps500, 1, 3, 8, 4, 2); + TEST_TIMING(16_MHz, MBps1, 1, 1, 4, 2, 2); // Clock Baud SJW Prop PS1 PS2 Prescaler - TEST_TIMING(MHz20, kBps10, 3, 5, 8, 4, 100); - TEST_TIMING(MHz20, kBps20, 3, 5, 8, 4, 50); - TEST_TIMING(MHz20, kBps125, 3, 5, 8, 4, 8); - TEST_TIMING(MHz20, kBps250, 3, 5, 8, 4, 4); - TEST_TIMING(MHz20, kBps500, 3, 5, 8, 4, 2); - TEST_TIMING(MHz20, MBps1, 1, 3, 4, 2, 2); + TEST_TIMING(20_MHz, kBps10, 3, 5, 8, 4, 100); + TEST_TIMING(20_MHz, kBps20, 3, 5, 8, 4, 50); + TEST_TIMING(20_MHz, kBps125, 3, 5, 8, 4, 8); + TEST_TIMING(20_MHz, kBps250, 3, 5, 8, 4, 4); + TEST_TIMING(20_MHz, kBps500, 3, 5, 8, 4, 2); + TEST_TIMING(20_MHz, MBps1, 1, 3, 4, 2, 2); } diff --git a/test/modm/platform/can_bit_timings_test.cpp b/test/modm/platform/can_bit_timings_test.cpp index 7018695a66..e85098702f 100644 --- a/test/modm/platform/can_bit_timings_test.cpp +++ b/test/modm/platform/can_bit_timings_test.cpp @@ -19,7 +19,7 @@ #include using namespace modm; -using namespace modm::clock; +using namespace modm::literals; #define TEST_TIMING(clk, bitrate, bs1, bs2, prescaler) \ TEST_ASSERT_EQUALS((modm::CanBitTiming::getBS1()), bs1); \ @@ -34,56 +34,56 @@ CanBitTimingsTest::testPrecalculatedValues() // // This is the old code: // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - // constexpr uint8_t bs1 = (SystemClock::Can{{ id }} == MHz8)? 11 : - // (SystemClock::Can{{ id }} == MHz48)? 11 : - // (SystemClock::Can{{ id }} == MHz30)? 10 : - // (SystemClock::Can{{ id }} == MHz36)? 12 : - // (SystemClock::Can{{ id }} == MHz42)? 14 : 0; - // constexpr uint8_t bs2 = (SystemClock::Can{{ id }} == MHz8)? 4 : - // (SystemClock::Can{{ id }} == MHz48)? 4 : - // (SystemClock::Can{{ id }} == MHz30)? 4 : - // (SystemClock::Can{{ id }} == MHz36)? 5 : - // (SystemClock::Can{{ id }} == MHz42)? 6 : 0; + // constexpr uint8_t bs1 = (SystemClock::Can{{ id }} == 8_MHz)? 11 : + // (SystemClock::Can{{ id }} == 48_MHz)? 11 : + // (SystemClock::Can{{ id }} == 30_MHz)? 10 : + // (SystemClock::Can{{ id }} == 36_MHz)? 12 : + // (SystemClock::Can{{ id }} == 42_MHz)? 14 : 0; + // constexpr uint8_t bs2 = (SystemClock::Can{{ id }} == 8_MHz)? 4 : + // (SystemClock::Can{{ id }} == 48_MHz)? 4 : + // (SystemClock::Can{{ id }} == 30_MHz)? 4 : + // (SystemClock::Can{{ id }} == 36_MHz)? 5 : + // (SystemClock::Can{{ id }} == 42_MHz)? 6 : 0; // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - TEST_TIMING(MHz8, kBps125, 11, 4, 4); - TEST_TIMING(MHz8, kBps250, 11, 4, 2); - TEST_TIMING(MHz8, kBps500, 11, 4, 1); + TEST_TIMING(8_MHz, kBps125, 11, 4, 4); + TEST_TIMING(8_MHz, kBps250, 11, 4, 2); + TEST_TIMING(8_MHz, kBps500, 11, 4, 1); // @ 8MHZ MBps1 was not supported (resulted in prescaler = 0) - TEST_TIMING(MHz48, kBps125, 11, 4, 24); - TEST_TIMING(MHz48, kBps250, 11, 4, 12); - TEST_TIMING(MHz48, kBps500, 11, 4, 6); - TEST_TIMING(MHz48, MBps1, 11, 4, 3); + TEST_TIMING(48_MHz, kBps125, 11, 4, 24); + TEST_TIMING(48_MHz, kBps250, 11, 4, 12); + TEST_TIMING(48_MHz, kBps500, 11, 4, 6); + TEST_TIMING(48_MHz, MBps1, 11, 4, 3); - TEST_TIMING(MHz30, kBps125, 14, 5, 12); - TEST_TIMING(MHz30, kBps250, 14, 5, 6); - TEST_TIMING(MHz30, kBps500, 14, 5, 3); - TEST_TIMING(MHz30, MBps1, 10, 4, 2); + TEST_TIMING(30_MHz, kBps125, 14, 5, 12); + TEST_TIMING(30_MHz, kBps250, 14, 5, 6); + TEST_TIMING(30_MHz, kBps500, 14, 5, 3); + TEST_TIMING(30_MHz, MBps1, 10, 4, 2); - TEST_TIMING(MHz36, kBps125, 12, 5, 16); - TEST_TIMING(MHz36, kBps250, 12, 5, 8); - TEST_TIMING(MHz36, kBps500, 12, 5, 4); - TEST_TIMING(MHz36, MBps1, 12, 5, 2); + TEST_TIMING(36_MHz, kBps125, 12, 5, 16); + TEST_TIMING(36_MHz, kBps250, 12, 5, 8); + TEST_TIMING(36_MHz, kBps500, 12, 5, 4); + TEST_TIMING(36_MHz, MBps1, 12, 5, 2); - TEST_TIMING(MHz42, kBps125, 14, 6, 16); - TEST_TIMING(MHz42, kBps250, 14, 6, 8); - TEST_TIMING(MHz42, kBps500, 14, 6, 4); - TEST_TIMING(MHz42, MBps1, 14, 6, 2); + TEST_TIMING(42_MHz, kBps125, 14, 6, 16); + TEST_TIMING(42_MHz, kBps250, 14, 6, 8); + TEST_TIMING(42_MHz, kBps500, 14, 6, 4); + TEST_TIMING(42_MHz, MBps1, 14, 6, 2); - TEST_TIMING(MHz32, kBps125, 11, 4, 16); - TEST_TIMING(MHz32, kBps250, 11, 4, 8); - TEST_TIMING(MHz32, kBps500, 11, 4, 4); - TEST_TIMING(MHz32, MBps1, 11, 4, 2); + TEST_TIMING(32_MHz, kBps125, 11, 4, 16); + TEST_TIMING(32_MHz, kBps250, 11, 4, 8); + TEST_TIMING(32_MHz, kBps500, 11, 4, 4); + TEST_TIMING(32_MHz, MBps1, 11, 4, 2); - TEST_TIMING(MHz80, kBps125, 14, 5, 32); - TEST_TIMING(MHz80, kBps250, 14, 5, 16); - TEST_TIMING(MHz80, kBps500, 14, 5, 8); - TEST_TIMING(MHz80, MBps1, 14, 5, 4); + TEST_TIMING(80_MHz, kBps125, 14, 5, 32); + TEST_TIMING(80_MHz, kBps250, 14, 5, 16); + TEST_TIMING(80_MHz, kBps500, 14, 5, 8); + TEST_TIMING(80_MHz, MBps1, 14, 5, 4); - TEST_TIMING(MHz180, kBps125, 14, 5, 72); - TEST_TIMING(MHz180, kBps250, 14, 5, 36); - TEST_TIMING(MHz180, kBps500, 14, 5, 18); - TEST_TIMING(MHz180, MBps1, 14, 5, 9); + TEST_TIMING(180_MHz, kBps125, 14, 5, 72); + TEST_TIMING(180_MHz, kBps250, 14, 5, 36); + TEST_TIMING(180_MHz, kBps500, 14, 5, 18); + TEST_TIMING(180_MHz, MBps1, 14, 5, 9); }