forked from Imagelibrary/rtems
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:
@@ -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),
|
||||||
|
|||||||
@@ -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 = \
|
||||||
|
|||||||
Reference in New Issue
Block a user