diff --git a/include/libopencm3/swm050/timer.h b/include/libopencm3/swm050/timer.h index 8748b3a1..f3535748 100644 --- a/include/libopencm3/swm050/timer.h +++ b/include/libopencm3/swm050/timer.h @@ -93,12 +93,6 @@ enum timer_pwm_period { /** Timer Clock Divider Mask */ #define TIMER_DIV_MASK (0x3F << 16) -/** Timer Operation Mode Mask */ -#define TIMER_OPER_MODE_MASK (0x3 << 4) - -/** Timer Output Mode Mask */ -#define TIMER_OUTP_MODE_MASK (0x3 << 12) - /** @defgroup timer_registers Timer Registers @{*/ /** Timer control register */ @@ -135,6 +129,12 @@ enum timer_pwm_period { #define TIMER_CTRL_TMOD (1 << 16) /** Loop mode selection */ #define TIMER_CTRL_LMOD (1 << 28) +/** Timer Output Mode Mask */ +#define TIMER_CTRL_OUTMOD_MASK 0x3 +#define TIMER_CTRL_OUTMOD_SHIFT 12 +/** Timer Operation Mode Mask */ +#define TIMER_CTRL_WMOD_MASK 0x3 +#define TIMER_CTRL_WMOD_SHIFT 4 /** Interrupt mask */ #define TIMER_INTCTL_INTMSK (1 << 1) /** Interrupt enable */ diff --git a/lib/swm050/timer.c b/lib/swm050/timer.c index 8ae53a19..7c178558 100644 --- a/lib/swm050/timer.c +++ b/lib/swm050/timer.c @@ -233,8 +233,8 @@ void timer_clock_enable(uint32_t timer, bool en) */ void timer_operation_mode(uint32_t timer, enum timer_operation_modes mode) { - mode = (mode << 4); - TIMER_CTRL(timer) = (~TIMER_OPER_MODE_MASK & TIMER_CTRL(timer)) | mode; + uint32_t reg = TIMER_CTRL(timer) & ~(TIMER_CTRL_OUTMOD_MASK << TIMER_CTRL_OUTMOD_SHIFT); + TIMER_CTRL(timer) = reg | (mode << TIMER_CTRL_OUTMOD_SHIFT); } /** @@ -251,8 +251,8 @@ void timer_operation_mode(uint32_t timer, enum timer_operation_modes mode) */ void timer_output_mode(uint32_t timer, enum timer_output_modes mode) { - mode = (mode << 12); - TIMER_CTRL(timer) = (~TIMER_OUTP_MODE_MASK & TIMER_CTRL(timer)) | mode; + uint32_t reg = TIMER_CTRL(timer) & ~(TIMER_CTRL_WMOD_MASK << TIMER_CTRL_WMOD_SHIFT); + TIMER_CTRL(timer) = reg | (mode << TIMER_CTRL_WMOD_SHIFT); } /**