pwm: do not use HAL_TIM_PeriodElapsedCallback

Reduces RAM usage when using pinMode, but not using analogWrite
This commit is contained in:
Daniel Fekete 2017-05-26 19:21:33 +02:00
parent 53eed0c2a5
commit 6d95fbcbe5
1 changed files with 25 additions and 25 deletions

View File

@ -124,41 +124,41 @@ void stm32_pwm_disable(GPIO_TypeDef *port, uint32_t pin_mask) {
}
void pwm_callback() {
counter += period;
period = 256;
if(__HAL_TIM_GET_FLAG(handle, TIM_FLAG_UPDATE) != RESET) {
if(__HAL_TIM_GET_IT_SOURCE(handle, TIM_IT_UPDATE) !=RESET) {
__HAL_TIM_CLEAR_IT(handle, TIM_IT_UPDATE);
for(size_t i=0; i<sizeof(pwm_config); i++) {
if (pwm_config[i].port != NULL) {
if (pwm_config[i].duty_cycle > counter % pwm_config[i].frequency) {
pwm_config[i].port->BSRR = pwm_config[i].pin_mask;
period = min(period, pwm_config[i].duty_cycle - (counter % pwm_config[i].frequency));
} else {
pwm_config[i].port->BSRR = pwm_config[i].pin_mask << 16;
period = min(period, 256 - counter % pwm_config[i].frequency);
counter += period;
period = 256;
for(size_t i=0; i<sizeof(pwm_config); i++) {
if (pwm_config[i].port != NULL) {
if (pwm_config[i].duty_cycle > counter % pwm_config[i].frequency) {
pwm_config[i].port->BSRR = pwm_config[i].pin_mask;
period = min(period, pwm_config[i].duty_cycle - (counter % pwm_config[i].frequency));
} else {
pwm_config[i].port->BSRR = pwm_config[i].pin_mask << 16;
period = min(period, 256 - counter % pwm_config[i].frequency);
}
} else {
break;
}
}
} else {
break;
if (!period) {
period = 256;
}
__HAL_TIM_SET_AUTORELOAD(handle, period);
}
}
if (!period) {
period = 256;
}
__HAL_TIM_SET_AUTORELOAD(handle, period);
}
#ifdef TIM2
extern void TIM2_IRQHandler(void) {
HAL_TIM_IRQHandler(handle);
}
extern void TIM2_IRQHandler(void) {
#else
extern void TIM2_IRQHandler(void) {
HAL_TIM_IRQHandler(handle);
}
extern void TIM3_IRQHandler(void) {
#endif
extern void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) {
if (pwm_callback_func != NULL) {
(*pwm_callback_func)();
}