|
@@ -13,6 +13,9 @@
|
|
|
|
|
|
#include <config.h>
|
|
|
|
|
|
+#define TIMER_BASE_CLK 1000000
|
|
|
+#define US_PER_TICK (1000000 / CONFIG_SYS_HZ)
|
|
|
+
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
|
|
/* reset CPU (jump to 0, without reset) */
|
|
@@ -90,7 +93,7 @@ void cpu_wait_ticks(unsigned long ticks)
|
|
|
while (get_timer(start) < ticks) ;
|
|
|
}
|
|
|
|
|
|
-/* initiate and setup timer0 interrupt to 1MHz
|
|
|
+/* initiate and setup timer0 interrupt to configured HZ. Base clock is 1MHz.
|
|
|
* Return irq number for timer int or a negative number for
|
|
|
* dealing with self
|
|
|
*/
|
|
@@ -98,28 +101,31 @@ int timer_interrupt_init_cpu(void)
|
|
|
{
|
|
|
LEON2_regs *leon2 = (LEON2_regs *) LEON2_PREGS;
|
|
|
|
|
|
- /* 1ms ticks */
|
|
|
+ /* SYS_HZ ticks per second */
|
|
|
leon2->Timer_Counter_1 = 0;
|
|
|
- leon2->Timer_Reload_1 = 999; /* (((1000000 / 100) - 1)) */
|
|
|
+ leon2->Timer_Reload_1 = (TIMER_BASE_CLK / CONFIG_SYS_HZ) - 1;
|
|
|
leon2->Timer_Control_1 =
|
|
|
(LEON2_TIMER_CTRL_EN | LEON2_TIMER_CTRL_RS | LEON2_TIMER_CTRL_LD);
|
|
|
|
|
|
return LEON2_TIMER1_IRQNO;
|
|
|
}
|
|
|
|
|
|
+ulong get_tbclk(void)
|
|
|
+{
|
|
|
+ return TIMER_BASE_CLK;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* This function is intended for SHORT delays only.
|
|
|
*/
|
|
|
unsigned long cpu_usec2ticks(unsigned long usec)
|
|
|
{
|
|
|
- /* timer set to 1kHz ==> 1 clk tick = 1 msec */
|
|
|
- if (usec < 1000)
|
|
|
+ if (usec < US_PER_TICK)
|
|
|
return 1;
|
|
|
- return (usec / 1000);
|
|
|
+ return usec / US_PER_TICK;
|
|
|
}
|
|
|
|
|
|
unsigned long cpu_ticks2usec(unsigned long ticks)
|
|
|
{
|
|
|
- /* 1tick = 1usec */
|
|
|
- return ticks * 1000;
|
|
|
+ return ticks * US_PER_TICK;
|
|
|
}
|