forked from Imagelibrary/rtems
2006-07-11 Joel Sherrill <joel@OARcorp.com>
* clock/ckinit.c, timer/timer.c: Make sure LEON3_Timer_Regs is initialized for the timer driver.
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
2006-07-11 Joel Sherrill <joel@OARcorp.com>
|
||||||
|
|
||||||
|
* clock/ckinit.c, timer/timer.c: Make sure LEON3_Timer_Regs is
|
||||||
|
initialized for the timer driver.
|
||||||
|
|
||||||
2006-07-11 Jerry Needell <jerry.needell@unh.edu>
|
2006-07-11 Jerry Needell <jerry.needell@unh.edu>
|
||||||
|
|
||||||
* ChangeLog, Makefile.am, clock/ckinit.c, include/amba.h,
|
* ChangeLog, Makefile.am, clock/ckinit.c, include/amba.h,
|
||||||
|
|||||||
@@ -60,6 +60,38 @@ void Clock_exit( void );
|
|||||||
rtems_device_major_number rtems_clock_major = ~0;
|
rtems_device_major_number rtems_clock_major = ~0;
|
||||||
rtems_device_minor_number rtems_clock_minor;
|
rtems_device_minor_number rtems_clock_minor;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* LEON3_Find_timer
|
||||||
|
*
|
||||||
|
* This method searches for the timer on the AMBA bus.
|
||||||
|
*
|
||||||
|
* Input parameters: NONE
|
||||||
|
*
|
||||||
|
* Output parameters: NONE
|
||||||
|
*
|
||||||
|
* Return values: NONE
|
||||||
|
*/
|
||||||
|
|
||||||
|
void LEON3_Find_timer(void)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
unsigned int iobar, conf;
|
||||||
|
|
||||||
|
while (i < amba_conf.apbslv.devnr)
|
||||||
|
{
|
||||||
|
conf = amba_get_confword(amba_conf.apbslv, i, 0);
|
||||||
|
if ((amba_vendor(conf) == VENDOR_GAISLER) &&
|
||||||
|
(amba_device(conf) == GAISLER_GPTIMER)) {
|
||||||
|
iobar = amba_apb_get_membar(amba_conf.apbslv, i);
|
||||||
|
LEON3_Timer_Regs = (volatile LEON3_Timer_Regs_Map *)
|
||||||
|
amba_iobar_start(amba_conf.apbmst, iobar);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clock_isr
|
* Clock_isr
|
||||||
*
|
*
|
||||||
@@ -123,35 +155,18 @@ void Install_clock(
|
|||||||
rtems_isr_entry clock_isr
|
rtems_isr_entry clock_isr
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
unsigned int iobar, conf;
|
|
||||||
|
|
||||||
Clock_driver_ticks = 0;
|
Clock_driver_ticks = 0;
|
||||||
|
|
||||||
/* Find GP Timer */
|
|
||||||
|
|
||||||
i = 0;
|
|
||||||
while (i < amba_conf.apbslv.devnr)
|
|
||||||
{
|
|
||||||
conf = amba_get_confword(amba_conf.apbslv, i, 0);
|
|
||||||
if ((amba_vendor(conf) == VENDOR_GAISLER) &&
|
|
||||||
(amba_device(conf) == GAISLER_GPTIMER)) {
|
|
||||||
iobar = amba_apb_get_membar(amba_conf.apbslv, i);
|
|
||||||
LEON3_Timer_Regs = (volatile LEON3_Timer_Regs_Map *)
|
|
||||||
amba_iobar_start(amba_conf.apbmst, iobar);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
clkirq = (LEON3_Timer_Regs->status & 0xfc) >> 3;
|
clkirq = (LEON3_Timer_Regs->status & 0xfc) >> 3;
|
||||||
|
|
||||||
if ( BSP_Configuration.ticks_per_timeslice ) {
|
if ( BSP_Configuration.ticks_per_timeslice ) {
|
||||||
Old_ticker = (rtems_isr_entry) set_vector( clock_isr, LEON_TRAP_TYPE(clkirq), 1 );
|
Old_ticker = (rtems_isr_entry)
|
||||||
|
set_vector( clock_isr, LEON_TRAP_TYPE(clkirq), 1 );
|
||||||
|
|
||||||
LEON3_Timer_Regs->reload_t0 = CPU_SPARC_CLICKS_PER_TICK - 1;
|
LEON3_Timer_Regs->reload_t0 = CPU_SPARC_CLICKS_PER_TICK - 1;
|
||||||
|
|
||||||
LEON3_Timer_Regs->conf_t0 = LEON3_GPTIMER_EN | LEON3_GPTIMER_RL | LEON3_GPTIMER_LD | LEON3_GPTIMER_IRQEN;
|
LEON3_Timer_Regs->conf_t0 = LEON3_GPTIMER_EN | LEON3_GPTIMER_RL |
|
||||||
|
LEON3_GPTIMER_LD | LEON3_GPTIMER_IRQEN;
|
||||||
|
|
||||||
atexit( Clock_exit );
|
atexit( Clock_exit );
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,9 +27,13 @@ rtems_boolean Timer_driver_Find_average_overhead;
|
|||||||
rtems_boolean Timer_driver_Is_initialized = FALSE;
|
rtems_boolean Timer_driver_Is_initialized = FALSE;
|
||||||
|
|
||||||
extern volatile LEON3_Timer_Regs_Map *LEON3_Timer_Regs;
|
extern volatile LEON3_Timer_Regs_Map *LEON3_Timer_Regs;
|
||||||
|
extern void LEON3_Find_timer(void);
|
||||||
|
|
||||||
|
|
||||||
void Timer_initialize()
|
void Timer_initialize()
|
||||||
{
|
{
|
||||||
|
LEON3_Find_timer();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Timer runs long and accurate enough not to require an interrupt.
|
* Timer runs long and accurate enough not to require an interrupt.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user