Skip to content

Commit 57107fe

Browse files
committed
Tone: code factorization
Signed-off-by: Frederic.Pillon <[email protected]>
1 parent a4ebdce commit 57107fe

File tree

1 file changed

+11
-24
lines changed

1 file changed

+11
-24
lines changed

cores/arduino/stm32/timer.c

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -857,32 +857,16 @@ void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
857857
*/
858858
void HAL_TIMx_PeriodElapsedCallback(stimer_t *obj)
859859
{
860+
GPIO_TypeDef* port = get_GPIO_Port(STM_PORT(obj->pin));
860861

861-
if(get_GPIO_Port(STM_PORT(obj->pin)) != NULL) {
862-
if(obj->pinInfo.count > 0){
863-
obj->pinInfo.count--;
864-
865-
if(obj->pinInfo.state == 0) {
866-
obj->pinInfo.state = 1;
867-
digital_io_write(get_GPIO_Port(STM_PORT(obj->pin)), STM_GPIO_PIN(obj->pin), 1);
868-
}
869-
else {
870-
obj->pinInfo.state = 0;
871-
digital_io_write(get_GPIO_Port(STM_PORT(obj->pin)), STM_GPIO_PIN(obj->pin), 0);
872-
}
873-
}
874-
else if(obj->pinInfo.count == -1) {
875-
if(obj->pinInfo.state == 0) {
876-
obj->pinInfo.state = 1;
877-
digital_io_write(get_GPIO_Port(STM_PORT(obj->pin)), STM_GPIO_PIN(obj->pin), 1);
878-
}
879-
else {
880-
obj->pinInfo.state = 0;
881-
digital_io_write(get_GPIO_Port(STM_PORT(obj->pin)), STM_GPIO_PIN(obj->pin), 0);
882-
}
862+
if(port != NULL) {
863+
if(obj->pinInfo.count != 0){
864+
if (obj->pinInfo.count > 0) obj->pinInfo.count--;
865+
obj->pinInfo.state = (obj->pinInfo.state == 0)? 1 : 0;
866+
digital_io_write(port, STM_GPIO_PIN(obj->pin), obj->pinInfo.state);
883867
}
884868
else {
885-
digital_io_write(get_GPIO_Port(STM_PORT(obj->pin)), STM_GPIO_PIN(obj->pin), 0);
869+
digital_io_write(port, STM_GPIO_PIN(obj->pin), 0);
886870
}
887871
}
888872
}
@@ -918,6 +902,7 @@ void TimerPinInit(stimer_t *obj, uint32_t frequency, uint32_t duration)
918902
uint32_t timFreq = 2*frequency;
919903
uint32_t prescaler = 1;
920904
uint32_t period = 0;
905+
uint32_t scale = 0;
921906

922907
if(frequency > MAX_FREQ)
923908
return;
@@ -941,8 +926,10 @@ void TimerPinInit(stimer_t *obj, uint32_t frequency, uint32_t duration)
941926
digital_io_init(obj->pin, GPIO_MODE_OUTPUT_PP, GPIO_NOPULL);
942927
timClkFreq = getTimerClkFreq(obj->timer);
943928

929+
// Do this once
930+
scale = timClkFreq / timFreq;
944931
while(end == 0) {
945-
period = ((uint32_t)( timClkFreq / timFreq / prescaler)) - 1;
932+
period = ((uint32_t)( scale / prescaler)) - 1;
946933

947934
if((period >= 0xFFFF) && (prescaler < 0xFFFF))
948935
prescaler++; //prescaler *= 2;

0 commit comments

Comments
 (0)