Пример #1
0
void motor_pwm_emergency(void)
{
	const irqstate_t irqstate = irq_primask_save();
	phase_reset_all_i();
	apply_phase_config();
	irq_primask_restore(irqstate);
}
Пример #2
0
void motor_rtctl_emergency(void)
{
    const irqstate_t irqstate = irq_primask_save();
    {
        motor_pwm_emergency();
        _state.flags = 0;
        motor_timer_cancel();
    }
    irq_primask_restore(irqstate);
}
Пример #3
0
static void start_timers(void)
{
	const irqstate_t irqstate = irq_primask_save();

	// Make sure the timers are not running
	assert_always(!(TIM1->CR1 & TIM_CR1_CEN));
	assert_always(!(TIM2->CR1 & TIM_CR1_CEN));

	// Start synchronously
	TIM1->CR2 |= TIM_CR2_MMS_0;                   // TIM1 is master
	TIM2->SMCR = TIM_SMCR_SMS_1 | TIM_SMCR_SMS_2; // TIM2 is slave

	TIM1->CR1 |= TIM_CR1_CEN;                     // Start all

	// Make sure the timers have started now
	assert_always(TIM1->CR1 & TIM_CR1_CEN);
	assert_always(TIM2->CR1 & TIM_CR1_CEN);

	// Configure the synchronous reset - TIM1 master, TIM2 slave
	TIM1->CR2 &= ~TIM_CR2_MMS;                    // Master, UG bit triggers TRGO
	TIM2->SMCR = TIM_SMCR_SMS_2;                  // Slave, TRGI triggers UG

	irq_primask_restore(irqstate);
}