Exemplo n.º 1
0
//---------------------------------------------------------------------------
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();
}