timer_at91.c
Go to the documentation of this file.
00001 00038 #include "timer_at91.h" 00039 #include <io/arm.h> 00040 #include "sysirq_at91.h" 00041 00042 #include <cfg/macros.h> // BV() 00043 #include <cfg/module.h> 00044 #include <cpu/irq.h> 00045 #include <cpu/types.h> 00046 00047 00049 #if (CONFIG_TIMER == TIMER_ON_PIT) 00050 00051 ISR_PROTO_CONTEXT_SWITCH(timer_handler); 00052 00053 void timer_hw_init(void) 00054 { 00055 sysirq_init(); 00056 00057 cpu_flags_t flags; 00058 00059 MOD_CHECK(sysirq); 00060 00061 IRQ_SAVE_DISABLE(flags); 00062 00063 PIT_MR = TIMER_HW_CNT; 00064 /* Register system interrupt handler. */ 00065 sysirq_setHandler(SYSIRQ_PIT, timer_handler); 00066 00067 /* Enable interval timer and interval timer interrupts */ 00068 PIT_MR |= BV(PITEN); 00069 sysirq_setEnable(SYSIRQ_PIT, true); 00070 00071 /* Reset counters, this is needed to start timer and interrupt flags */ 00072 uint32_t dummy = PIVR; 00073 (void) dummy; 00074 00075 IRQ_RESTORE(flags); 00076 } 00077 00078 void timer_hw_cleanup(void) 00079 { 00080 PIT_MR &= ~BV(PITEN); 00081 sysirq_setEnable(SYSIRQ_PIT, false); 00082 } 00083 #else 00084 #error Unimplemented value for CONFIG_TIMER 00085 #endif /* CONFIG_TIMER */
![(please configure the [header_logo] section in trac.ini)](/chrome/site/bertos_logo.png)