LEON3: use interrupt layer in clock driver

Manupilating the interrupt control registers directly instead
of going through the interrupt layer can be deceiving.
This commit is contained in:
Daniel Hellstrom
2014-06-13 10:18:01 +02:00
parent 6aacf085b8
commit a387e944f8
2 changed files with 21 additions and 3 deletions

View File

@@ -51,6 +51,7 @@ typedef enum {
/* LEON3 fatal codes */ /* LEON3 fatal codes */
LEON3_FATAL_NO_IRQMP_CONTROLLER = BSP_FATAL_CODE_BLOCK(2), LEON3_FATAL_NO_IRQMP_CONTROLLER = BSP_FATAL_CODE_BLOCK(2),
LEON3_FATAL_CONSOLE_REGISTER_DEV, LEON3_FATAL_CONSOLE_REGISTER_DEV,
LEON3_FATAL_CLOCK_INITIALIZATION,
/* LPC24XX fatal codes */ /* LPC24XX fatal codes */
LPC24XX_FATAL_PL111_SET_UP = BSP_FATAL_CODE_BLOCK(3), LPC24XX_FATAL_PL111_SET_UP = BSP_FATAL_CODE_BLOCK(3),

View File

@@ -20,6 +20,8 @@
#include <bsp.h> #include <bsp.h>
#include <bspopts.h> #include <bspopts.h>
#include <bsp/fatal.h>
#include <rtems/rtems/intr.h>
#include <ambapp.h> #include <ambapp.h>
#include <rtems/score/profiling.h> #include <rtems/score/profiling.h>
@@ -34,8 +36,6 @@
volatile struct gptimer_regs *LEON3_Timer_Regs = 0; volatile struct gptimer_regs *LEON3_Timer_Regs = 0;
static int clkirq; static int clkirq;
#define CLOCK_VECTOR LEON_TRAP_TYPE( clkirq )
static void leon3_clock_profiling_interrupt_delay(void) static void leon3_clock_profiling_interrupt_delay(void)
{ {
#ifdef RTEMS_PROFILING #ifdef RTEMS_PROFILING
@@ -104,9 +104,26 @@ static void leon3_clock_profiling_interrupt_delay(void)
#define Clock_driver_support_install_isr( _new, _old ) \ #define Clock_driver_support_install_isr( _new, _old ) \
do { \ do { \
_old = set_vector( _new, CLOCK_VECTOR, 1 ); \ (_old) = NULL; \
bsp_clock_handler_install(_new); \
} while(0) } while(0)
static void bsp_clock_handler_install(rtems_isr *new)
{
rtems_status_code sc;
sc = rtems_interrupt_handler_install(
clkirq,
"Clock",
RTEMS_INTERRUPT_UNIQUE,
new,
NULL
);
if (sc != RTEMS_SUCCESSFUL) {
rtems_fatal(RTEMS_FATAL_SOURCE_BSP, LEON3_FATAL_CLOCK_INITIALIZATION);
}
}
#define Clock_driver_support_initialize_hardware() \ #define Clock_driver_support_initialize_hardware() \
do { \ do { \
LEON3_Timer_Regs->timer[LEON3_CLOCK_INDEX].reload = \ LEON3_Timer_Regs->timer[LEON3_CLOCK_INDEX].reload = \