Skip to content

Commit

Permalink
[rp] pio: fix formatting
Browse files Browse the repository at this point in the history
  • Loading branch information
andryblack committed Oct 26, 2024
1 parent 17aaf8d commit c8cc468
Showing 1 changed file with 55 additions and 57 deletions.
112 changes: 55 additions & 57 deletions src/modm/platform/pio/rp/pio_sm.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,9 @@ namespace modm::platform::pio::implementation
};
template <class Pin,bool isOut>
static inline void addPin() {
sm().pinctrl =
(1u << PIO_SM0_PINCTRL_SET_COUNT_LSB) |
(uint32_t(Pin::pin) << PIO_SM0_PINCTRL_SET_BASE_LSB);
exec(pio::Set.pindirs<isOut?1:0>.encode(Encoder()));
sm().pinctrl = (1u << PIO_SM0_PINCTRL_SET_COUNT_LSB) |
(uint32_t(Pin::pin) << PIO_SM0_PINCTRL_SET_BASE_LSB);
exec(pio::Set.pindirs<isOut?1:0>.encode(Encoder()));
}
static inline void exec(const pio::implementation::Instruction& instr) {
sm().instr = instr.value;
Expand Down Expand Up @@ -63,43 +62,43 @@ namespace modm::platform::pio::implementation
struct Config {
using settings = Setting;
uint32_t clkdiv{0};
uint32_t execctrl{0};
uint32_t shiftctrl{0};
uint32_t pinctrl{0};
template < uint16_t div_int, uint8_t div_frac >
constexpr Config& setClkDiv() {
uint32_t execctrl{0};
uint32_t shiftctrl{0};
uint32_t pinctrl{0};

template < uint16_t div_int, uint8_t div_frac >
constexpr Config& setClkDiv() {
clkdiv = (uint32_t(div_frac) << PIO_SM0_CLKDIV_FRAC_LSB) |
(uint32_t(div_int) << PIO_SM0_CLKDIV_INT_LSB);
return *this;
(uint32_t(div_int) << PIO_SM0_CLKDIV_INT_LSB);
return *this;
}
constexpr Config& setWrap(uint32_t wrap_target,uint32_t wrap) {
execctrl = (execctrl & ~(PIO_SM0_EXECCTRL_WRAP_TOP_BITS | PIO_SM0_EXECCTRL_WRAP_BOTTOM_BITS)) |
(wrap_target << PIO_SM0_EXECCTRL_WRAP_BOTTOM_LSB) |
(wrap << PIO_SM0_EXECCTRL_WRAP_TOP_LSB);
return *this;
execctrl = (execctrl & ~(PIO_SM0_EXECCTRL_WRAP_TOP_BITS | PIO_SM0_EXECCTRL_WRAP_BOTTOM_BITS)) |
(wrap_target << PIO_SM0_EXECCTRL_WRAP_BOTTOM_LSB) |
(wrap << PIO_SM0_EXECCTRL_WRAP_TOP_LSB);
return *this;
}
template <bool shiftRight,bool autoPush,size_t pushThreshold>
constexpr Config& setInShift() {
shiftctrl = (shiftctrl &
~(PIO_SM0_SHIFTCTRL_IN_SHIFTDIR_BITS |
PIO_SM0_SHIFTCTRL_AUTOPUSH_BITS |
PIO_SM0_SHIFTCTRL_PUSH_THRESH_BITS)) |
((shiftRight?1:0) << PIO_SM0_SHIFTCTRL_IN_SHIFTDIR_LSB) |
((autoPush?1:0) << PIO_SM0_SHIFTCTRL_AUTOPUSH_LSB) |
((pushThreshold & 0x1fu) << PIO_SM0_SHIFTCTRL_PUSH_THRESH_LSB);
return *this;
~(PIO_SM0_SHIFTCTRL_IN_SHIFTDIR_BITS |
PIO_SM0_SHIFTCTRL_AUTOPUSH_BITS |
PIO_SM0_SHIFTCTRL_PUSH_THRESH_BITS)) |
((shiftRight?1:0) << PIO_SM0_SHIFTCTRL_IN_SHIFTDIR_LSB) |
((autoPush?1:0) << PIO_SM0_SHIFTCTRL_AUTOPUSH_LSB) |
((pushThreshold & 0x1fu) << PIO_SM0_SHIFTCTRL_PUSH_THRESH_LSB);
return *this;
}
template <bool shiftRight,bool autoPull,size_t pullThreshold>
constexpr Config& setOutShift() {
shiftctrl = (shiftctrl &
~(PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_BITS |
PIO_SM0_SHIFTCTRL_AUTOPULL_BITS |
PIO_SM0_SHIFTCTRL_PULL_THRESH_BITS)) |
((shiftRight?1:0) << PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_LSB) |
((autoPull?1:0) << PIO_SM0_SHIFTCTRL_AUTOPULL_LSB) |
((pullThreshold & 0x1fu) << PIO_SM0_SHIFTCTRL_PULL_THRESH_LSB);
return *this;
~(PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_BITS |
PIO_SM0_SHIFTCTRL_AUTOPULL_BITS |
PIO_SM0_SHIFTCTRL_PULL_THRESH_BITS)) |
((shiftRight?1:0) << PIO_SM0_SHIFTCTRL_OUT_SHIFTDIR_LSB) |
((autoPull?1:0) << PIO_SM0_SHIFTCTRL_AUTOPULL_LSB) |
((pullThreshold & 0x1fu) << PIO_SM0_SHIFTCTRL_PULL_THRESH_LSB);
return *this;
}
constexpr Config& setSideset() {
constexpr auto bit_count = settings::sideset_count;
Expand All @@ -109,54 +108,53 @@ namespace modm::platform::pio::implementation
static_assert(!optional || bit_count >= 1,"invalid config");

pinctrl = (pinctrl & ~PIO_SM0_PINCTRL_SIDESET_COUNT_BITS) |
(bit_count << PIO_SM0_PINCTRL_SIDESET_COUNT_LSB);
(bit_count << PIO_SM0_PINCTRL_SIDESET_COUNT_LSB);
execctrl = (execctrl & ~(PIO_SM0_EXECCTRL_SIDE_EN_BITS | PIO_SM0_EXECCTRL_SIDE_PINDIR_BITS)) |
((optional?1:0) << PIO_SM0_EXECCTRL_SIDE_EN_LSB) |
((pindirs?1:0) << PIO_SM0_EXECCTRL_SIDE_PINDIR_LSB);
((optional?1:0) << PIO_SM0_EXECCTRL_SIDE_EN_LSB) |
((pindirs?1:0) << PIO_SM0_EXECCTRL_SIDE_PINDIR_LSB);
return *this;
}
template < class StartPin>
constexpr Config& setSidesetPins() {

pinctrl = (pinctrl & ~(PIO_SM0_PINCTRL_SIDESET_BASE_BITS)) |
(uint32_t(StartPin::pin) << PIO_SM0_PINCTRL_SIDESET_BASE_LSB);
return *this;
}
template < class StartPin , size_t count>
constexpr Config& setOutPins() {
pinctrl = (pinctrl & ~(PIO_SM0_PINCTRL_OUT_BASE_BITS | PIO_SM0_PINCTRL_OUT_COUNT_BITS)) |
(uint32_t(StartPin::pin) << PIO_SM0_PINCTRL_OUT_BASE_LSB) |
(count << PIO_SM0_PINCTRL_OUT_COUNT_LSB);
return *this;
(uint32_t(StartPin::pin) << PIO_SM0_PINCTRL_OUT_BASE_LSB) |
(count << PIO_SM0_PINCTRL_OUT_COUNT_LSB);
return *this;
}
template < class StartPin , size_t count>
constexpr Config& setSetPins() {
pinctrl = (pinctrl & ~(PIO_SM0_PINCTRL_SET_BASE_BITS | PIO_SM0_PINCTRL_SET_COUNT_BITS)) |
(uint32_t(StartPin::pin) << PIO_SM0_PINCTRL_SET_BASE_LSB) |
(count << PIO_SM0_PINCTRL_SET_COUNT_LSB);
return *this;
(uint32_t(StartPin::pin) << PIO_SM0_PINCTRL_SET_BASE_LSB) |
(count << PIO_SM0_PINCTRL_SET_COUNT_LSB);
return *this;
}
template < class StartPin>
constexpr Config& setInPins() {
pinctrl = (pinctrl & ~PIO_SM0_PINCTRL_IN_BASE_BITS) |
(uint32_t(StartPin::pin) << PIO_SM0_PINCTRL_IN_BASE_LSB);
return *this;
(uint32_t(StartPin::pin) << PIO_SM0_PINCTRL_IN_BASE_LSB);
return *this;
}
constexpr Config& setFifoJoinTx() {
shiftctrl = (shiftctrl & ~(PIO_SM0_SHIFTCTRL_FJOIN_TX_BITS | PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS)) |
PIO_SM0_SHIFTCTRL_FJOIN_TX_BITS;
return *this;
PIO_SM0_SHIFTCTRL_FJOIN_TX_BITS;
return *this;
}
constexpr Config& setFifoJoinRx() {
shiftctrl = (shiftctrl & ~(PIO_SM0_SHIFTCTRL_FJOIN_TX_BITS | PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS)) |
PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS;
return *this;
PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS;
return *this;
}
constexpr Config& setFifoJoinNone() {
shiftctrl = (shiftctrl & ~(PIO_SM0_SHIFTCTRL_FJOIN_TX_BITS | PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS));
return *this;
}

void init(uint16_t startPC) {
StateMachine::setEnabled(false);

Expand All @@ -167,15 +165,15 @@ namespace modm::platform::pio::implementation

StateMachine::clearFifos();
// Clear FIFO debug flags
constexpr uint32_t fdebug_sm_mask =
(1u << PIO_FDEBUG_TXOVER_LSB) |
(1u << PIO_FDEBUG_RXUNDER_LSB) |
(1u << PIO_FDEBUG_TXSTALL_LSB) |
(1u << PIO_FDEBUG_RXSTALL_LSB);
Pio::pio().fdebug = fdebug_sm_mask << SM;
StateMachine::restart();
StateMachine::clkDivRestart();
StateMachine::jump(startPC);
constexpr uint32_t fdebug_sm_mask =
(1u << PIO_FDEBUG_TXOVER_LSB) |
(1u << PIO_FDEBUG_RXUNDER_LSB) |
(1u << PIO_FDEBUG_TXSTALL_LSB) |
(1u << PIO_FDEBUG_RXSTALL_LSB);
Pio::pio().fdebug = fdebug_sm_mask << SM;
StateMachine::restart();
StateMachine::clkDivRestart();
StateMachine::jump(startPC);
}

template< class SystemClock, frequency_t freq, percent_t tolerance=pct(1) >
Expand All @@ -196,7 +194,7 @@ namespace modm::platform::pio::implementation
modm::PeripheralDriver::assertBaudrateInTolerance< res_freq, uint64_t(freq), tolerance >();

clkdiv = (uint32_t(prescaler & 0xff) << PIO_SM0_CLKDIV_FRAC_LSB) |
(uint32_t(prescaler>>8) << PIO_SM0_CLKDIV_INT_LSB);
(uint32_t(prescaler>>8) << PIO_SM0_CLKDIV_INT_LSB);

return *this;
}
Expand Down

0 comments on commit c8cc468

Please sign in to comment.