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