source: rtems/c/src/lib/libbsp/arm/lpc24xx/irq/irq.c @ 5aeed17

4.104.115
Last change on this file since 5aeed17 was 5aeed17, checked in by Thomas Doerfler <Thomas.Doerfler@…>, on 09/22/08 at 11:30:09

lpc24xx: new BSP

  • Property mode set to 100644
File size: 1.9 KB
Line 
1/**
2 * @file
3 *
4 * @ingroup bsp_interrupt
5 *
6 * @brief LPC24XX interrupt support.
7 */
8
9/*
10 * Copyright (c) 2008
11 * Embedded Brains GmbH
12 * Obere Lagerstr. 30
13 * D-82178 Puchheim
14 * Germany
15 * rtems@embedded-brains.de
16 *
17 * The license and distribution terms for this file may be found in the file
18 * LICENSE in this distribution or at http://www.rtems.com/license/LICENSE.
19 */
20
21#include <bsp.h>
22#include <bsp/irq.h>
23#include <bsp/irq-generic.h>
24#include <bsp/lpc24xx.h>
25
26void ExecuteITHandler( void)
27{
28  /* Read current vector number */
29  rtems_vector_number vector = VICVectAddr;
30
31  /* Acknowledge interrupt */
32  VICVectAddr = 0;
33
34  /* Dispatch interrupt handlers */
35  bsp_interrupt_handler_dispatch( vector);
36}
37
38rtems_status_code bsp_interrupt_vector_enable( rtems_vector_number vector)
39{
40  VICIntEnable = 1U << vector;
41
42  return RTEMS_SUCCESSFUL;
43}
44
45rtems_status_code bsp_interrupt_vector_disable( rtems_vector_number vector)
46{
47  VICIntEnClear = 1U << vector;
48
49  return RTEMS_SUCCESSFUL;
50}
51
52rtems_status_code bsp_interrupt_facility_initialize( void)
53{
54  volatile uint32_t *addr = VICVectAddrBase;
55  volatile uint32_t *prio = VICVectPriorityBase;
56  rtems_vector_number i = 0;
57
58  /* Disable all interrupts */
59  VICIntEnClear = 0xffffffff;
60
61  /* Clear all software interrupts */
62  VICSoftIntClear = 0xffffffff;
63
64  /* Use IRQ category */
65  VICIntSelect = 0;
66
67  for (i = BSP_INTERRUPT_VECTOR_MIN; i <= BSP_INTERRUPT_VECTOR_MAX; ++i) {
68    /* Use the vector address register to store the vector number */
69    addr [i] = i;
70
71    /* Give vector lowest priority */
72    prio [i] = 15;
73  }
74
75  /* Reset priority mask register */
76  VICSWPrioMask = 0xffff;
77
78  /* Acknowledge interrupt */
79  VICVectAddr = 0;
80
81  /* Install the IRQ exception handler */
82  _CPU_ISR_install_vector( ARM_EXCEPTION_IRQ, _ISR_Handler, NULL);
83
84  return RTEMS_SUCCESSFUL;
85}
86
87void bsp_interrupt_handler_default( rtems_vector_number vector)
88{
89  printk( "Spurious interrupt: %u\n", vector);
90}
Note: See TracBrowser for help on using the repository browser.