Skip to content

Commit e8a9141

Browse files
fix: active_PSC is now set when PSC is set
1 parent de82133 commit e8a9141

2 files changed

Lines changed: 19 additions & 3 deletions

File tree

Inc/MockedDrivers/Register.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ class RegisterBase {
109109
operator uint32_t() const {
110110
return reg;
111111
}
112-
private:
112+
113+
protected:
113114
void set(uint32_t val) {
114115
RegisterTraits<EnumType, Reg>::write(this->reg, val);
115116
}

Inc/MockedDrivers/mocked_ll_tim.hpp

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,29 @@ class TimerRegister : public RegisterBase<TimReg, Reg> {
2323
using RegisterBase<TimReg, Reg>::operator=;
2424
};
2525

26+
2627
static_assert(sizeof(TimerRegister<Reg_CR1>) == sizeof(uint32_t) );
2728

2829

2930
class TIM_TypeDef{
3031
public:
3132
TIM_TypeDef(void(* irq_handler)(void),IRQn_Type irq_n):
32-
callback{irq_handler},irq_n{irq_n}
33+
// PSC(*this), callback{irq_handler}, irq_n{irq_n}
34+
callback{irq_handler}, irq_n{irq_n}
3335
{}
36+
37+
// NOTE: This ruins the address offsets but I couldn't get it to work any other way
38+
template<TimReg Reg>
39+
struct PrescalerRegister : public RegisterBase<TimReg, Reg> {
40+
PrescalerRegister& operator=(uint32_t val) {
41+
this->set(val);
42+
// esto es lo más feo que he hecho en mucho tiempo pero no he conseguido otra cosa
43+
TIM_TypeDef *parent = (TIM_TypeDef*)((uint8_t*)&this->reg - offsetof(TIM_TypeDef, PSC));
44+
parent->active_PSC = val;
45+
return *this;
46+
}
47+
};
48+
3449
void generate_update();
3550
TimerRegister<Reg_CR1> CR1; /*!< TIM control register 1, Address offset: 0x00 */
3651
TimerRegister<Reg_CR2> CR2; /*!< TIM control register 2, Address offset: 0x04 */
@@ -42,7 +57,7 @@ class TIM_TypeDef{
4257
TimerRegister<Reg_CCMR2> CCMR2; /*!< TIM capture/compare mode register 2, Address offset: 0x1C */
4358
TimerRegister<Reg_CCER> CCER; /*!< TIM capture/compare enable register, Address offset: 0x20 */
4459
TimerRegister<Reg_CNT> CNT; /*!< TIM counter register, Address offset: 0x24 */
45-
TimerRegister<Reg_PSC> PSC; /*!< TIM prescaler, Address offset: 0x28 */
60+
PrescalerRegister<Reg_PSC> PSC; /*!< TIM prescaler, Address offset: 0x28 */
4661
TimerRegister<Reg_ARR> ARR; /*!< TIM auto-reload register, Address offset: 0x2C */
4762
TimerRegister<Reg_RCR> RCR; /*!< TIM repetition counter register, Address offset: 0x30 */
4863
TimerRegister<Reg_CCR1> CCR1; /*!< TIM capture/compare register 1, Address offset: 0x34 */

0 commit comments

Comments
 (0)