-
Notifications
You must be signed in to change notification settings - Fork 152
Calculate STM32 clocks from the roots #1137
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: develop
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
#pragma once | ||
|
||
#include <modm/architecture/interface/clock.hpp> | ||
|
||
namespace modm::platform | ||
{ | ||
|
||
// @todo integrate with /platform/clock/stm32/rcc.hpp.in | ||
class RccProto | ||
{ | ||
public: | ||
template<Rcc::AhbPrescaler Prescaler> | ||
static consteval int | ||
prescalerToValue() | ||
{ | ||
switch (Prescaler) | ||
{ | ||
case Rcc::AhbPrescaler::Div1: return 1; | ||
case Rcc::AhbPrescaler::Div2: return 2; | ||
case Rcc::AhbPrescaler::Div4: return 4; | ||
case Rcc::AhbPrescaler::Div8: return 8; | ||
case Rcc::AhbPrescaler::Div16: return 16; | ||
case Rcc::AhbPrescaler::Div64: return 64; | ||
case Rcc::AhbPrescaler::Div128: return 128; | ||
case Rcc::AhbPrescaler::Div256: return 256; | ||
case Rcc::AhbPrescaler::Div512: return 512; | ||
}; | ||
} | ||
|
||
template<Rcc::Apb1Prescaler Prescaler> | ||
static consteval int | ||
prescalerToValue() | ||
{ | ||
switch (Prescaler) | ||
{ | ||
case Rcc::Apb1Prescaler::Div1: return 1; | ||
case Rcc::Apb1Prescaler::Div2: return 2; | ||
case Rcc::Apb1Prescaler::Div4: return 4; | ||
case Rcc::Apb1Prescaler::Div8: return 8; | ||
case Rcc::Apb1Prescaler::Div16: return 16; | ||
}; | ||
} | ||
|
||
template<Rcc::Apb2Prescaler Prescaler> | ||
static consteval int | ||
prescalerToValue() | ||
{ | ||
switch (Prescaler) | ||
{ | ||
case Rcc::Apb2Prescaler::Div1: return 1; | ||
case Rcc::Apb2Prescaler::Div2: return 2; | ||
case Rcc::Apb2Prescaler::Div4: return 4; | ||
case Rcc::Apb2Prescaler::Div8: return 8; | ||
case Rcc::Apb2Prescaler::Div16: return 16; | ||
} | ||
} | ||
|
||
template<Rcc::UsbPrescaler Prescaler> | ||
static consteval float | ||
prescalerToValue() | ||
{ | ||
switch (Prescaler) | ||
{ | ||
case Rcc::UsbPrescaler::Div1: return 1; | ||
case Rcc::UsbPrescaler::Div1_5: return 1.5; | ||
} | ||
} | ||
}; | ||
|
||
} // namespace modm::platform |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
#pragma once | ||
|
||
#include <modm/architecture/interface/clock.hpp> | ||
|
||
namespace modm::platform | ||
{ | ||
|
||
// @todo integrate with /platform/clock/stm32/rcc.hpp.in | ||
class RccProto | ||
{ | ||
public: | ||
template<Rcc::AhbPrescaler Prescaler> | ||
static consteval int | ||
prescalerToValue() | ||
{ | ||
switch (Prescaler) | ||
{ | ||
case Rcc::AhbPrescaler::Div1: return 1; | ||
case Rcc::AhbPrescaler::Div2: return 2; | ||
case Rcc::AhbPrescaler::Div4: return 4; | ||
case Rcc::AhbPrescaler::Div8: return 8; | ||
case Rcc::AhbPrescaler::Div16: return 16; | ||
case Rcc::AhbPrescaler::Div64: return 64; | ||
case Rcc::AhbPrescaler::Div128: return 128; | ||
case Rcc::AhbPrescaler::Div256: return 256; | ||
case Rcc::AhbPrescaler::Div512: return 512; | ||
}; | ||
} | ||
|
||
template<Rcc::Apb1Prescaler Prescaler> | ||
static consteval int | ||
prescalerToValue() | ||
{ | ||
switch (Prescaler) | ||
{ | ||
case Rcc::Apb1Prescaler::Div1: return 1; | ||
case Rcc::Apb1Prescaler::Div2: return 2; | ||
case Rcc::Apb1Prescaler::Div4: return 4; | ||
case Rcc::Apb1Prescaler::Div8: return 8; | ||
case Rcc::Apb1Prescaler::Div16: return 16; | ||
}; | ||
} | ||
Comment on lines
+30
to
+42
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. To associate prescaler values to their registers, i've borrowed this construct from There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Sure, but I'd rather use a normal constexpr function like There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. of course! |
||
|
||
template<Rcc::Apb2Prescaler Prescaler> | ||
static consteval int | ||
prescalerToValue() | ||
{ | ||
switch (Prescaler) | ||
{ | ||
case Rcc::Apb2Prescaler::Div1: return 1; | ||
case Rcc::Apb2Prescaler::Div2: return 2; | ||
case Rcc::Apb2Prescaler::Div4: return 4; | ||
case Rcc::Apb2Prescaler::Div8: return 8; | ||
case Rcc::Apb2Prescaler::Div16: return 16; | ||
} | ||
} | ||
}; | ||
} // namespace modm::platform |
Uh oh!
There was an error while loading. Please reload this page.