//*---------------------------------------------------------------------------- //* Function Name : timer_init //* Object : Init timer counter //* Input Parameters : none //* Output Parameters : TRUE //*---------------------------------------------------------------------------- void timer_init ( void ) //* Begin { //init the timer interrupt counter count_timer0_interrupt=0; count_timer1_interrupt=0; //* Open timer0 AT91F_TC_Open(AT91C_BASE_TC0,TC_CLKS_MCK1024,AT91C_ID_TC0); //* Open Timer 0 interrupt AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC0, TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, timer0_c_irq_handler); AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0); //* Open timer1 AT91F_TC_Open(AT91C_BASE_TC1,TC_CLKS_MCK128,AT91C_ID_TC1); //* Open Timer 1 interrupt AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC1, TIMER1_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, timer1_c_irq_handler); AT91C_BASE_TC1->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC1); //* Generate interrupt by software AT91F_AIC_Trig (AT91C_BASE_AIC,AT91C_ID_TC0) ; AT91F_AIC_Trig (AT91C_BASE_AIC,AT91C_ID_TC1) ; //* Start timer0 AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG ; //* Start timer1 AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG ; //* End }
//*---------------------------------------------------------------------------- //* Function Name : timer_init //* Object : Init timer counter //* Input Parameters : none //* Output Parameters : TRUE //*---------------------------------------------------------------------------- void timer_init (unsigned int time) { //* Open timer0 AT91F_TC_Open(AT91C_BASE_TC0,TC_CLKS_MCK8 | AT91C_TC_WAVESEL_UP_AUTO,AT91C_ID_TC0); //* Open Timer 0 interrupt AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC0, TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer0_c_irq_handler); AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0); AT91C_BASE_TC0->TC_RC = (unsigned int)(AT91C_MASTER_CLOCK / 8 * time / 1000); //* Start timer0 AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG ; }
// функция инициализации таймеров-счетчиков void timer_init ( void ) { // разрешение timer 0 // AT91F_TC_Open(AT91C_BASE_TC0,TC_CLKS_MCK1024,AT91C_ID_TC0); // разрешение прерываний от Timer 0 // AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC0, // TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer0_c_irq_handler); // AT91C_BASE_TC0->TC_IER = AT91C_TC_COVFS; // разрешение прерывания по переполнению // AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0); // разрешение timer 1 AT91F_TC_Open(AT91C_BASE_TC1,TC_CLKS_MCK2,AT91C_ID_TC1); // разрешение прерываний от Timer 1 AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC1, TIMER1_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer1_c_irq_handler); AT91C_BASE_TC1->TC_IER = AT91C_TC_CPCS; //разрешение прерывания при совпадении с RC AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC1); AT91C_BASE_TC1->TC_RC = 0x1000 ; // задание значения RC (определяет период прерываний) AT91C_BASE_TC1->TC_CMR = AT91C_TC_CPCTRG ; //задание триггера при совпадении с RC // сброс и запуск timer0 // AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG ; // сброс и запуск timer1 AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG ; }