//--------------------------------------------------------------------------- int main() { CLK->CKDIVR = 0; // Setup user timer interrupt // 1001 periods per second (per 1000 OS timer ticks) for better scope view TIM3->PSCR = 0; // clk/1 TIM3->ARRH = (F_MASTER / 1001) >> 8; TIM3->ARRL = (uint8_t)(F_MASTER / 1001); TIM3->CR1 = TIM3_CR1_CEN; TIM3->EGR = 0; TIM3->IER = TIM3_IER_UIE; // GPIO setup -- push-pull outputs #if 0 IDLE_HOOK.Mode(GPIO_MODE_OUT_PP_LOW_FAST); PROC1.Mode(GPIO_MODE_OUT_PP_LOW_FAST); PROC2.Mode(GPIO_MODE_OUT_PP_LOW_FAST); PROC3.Mode(GPIO_MODE_OUT_PP_LOW_FAST); TIMER_HOOK.Mode(GPIO_MODE_OUT_PP_LOW_FAST); TIMER3_ISR.Mode(GPIO_MODE_OUT_PP_LOW_FAST); TIMER3_TO_PROC1.Mode(GPIO_MODE_OUT_PP_LOW_FAST); #else // Direct setup for all pins -> for correct code size comparsion with // AVR samples GPIOB->CR1 = 0xFF; GPIOB->CR2 = 0xFF; GPIOB->DDR = 0xFF; #endif // Start System Timer // TODO: Set lowest priority for system timer ISR TIM4->PSCR = tim4_prescaler_power; TIM4->ARR = (F_MASTER + tim4_divider/2) / tim4_divider - 1; TIM4->CR1 = TIM4_CR1_CEN; TIM4->EGR = 0; TIM4->IER = TIM4_IER_UIE; OS::run(); }