RTEMS: bsps/arm/include/bsp/arm-gic-tm27.h Source File

| RTEMS 5.4-rc2

Loading...
Searching...
No Matches
arm-gic-tm27.h
Go to the documentation of this file.
1
9/*
10 * Copyright (c) 2013-2014 embedded brains GmbH. All rights reserved.
11 *
12 * embedded brains GmbH
13 * Dornierstr. 4
14 * 82178 Puchheim
15 * Germany
16 * <info@embedded-brains.de>
17 *
18 * The license and distribution terms for this file may be
19 * found in the file LICENSE in this distribution or at
20 * http://www.rtems.org/license/LICENSE.
21 */
22
23#ifndef _RTEMS_TMTEST27
24#error "This is an RTEMS internal file you must not include directly."
25#endif
26
27#ifndef LIBBSP_ARM_SHARED_ARM_GIC_TM27_H
28#define LIBBSP_ARM_SHARED_ARM_GIC_TM27_H
29
30#include <assert.h>
31
32#include <bsp.h>
33#include <bsp/irq.h>
34
35#define MUST_WAIT_FOR_INTERRUPT 1
36
37#define ARM_GIC_TM27_IRQ_LOW ARM_GIC_IRQ_SGI_12
38
39#define ARM_GIC_TM27_IRQ_HIGH ARM_GIC_IRQ_SGI_13
40
41#define ARM_GIC_TM27_PRIO_LOW 0x80
42
43#define ARM_GIC_TM27_PRIO_HIGH 0x00
44
45static inline void Install_tm27_vector(void (*handler)(rtems_vector_number))
46{
47 rtems_status_code sc = rtems_interrupt_handler_install(
48 ARM_GIC_TM27_IRQ_LOW,
49 "tm27 low",
50 RTEMS_INTERRUPT_UNIQUE,
51 (rtems_interrupt_handler) handler,
52 NULL
53 );
54 assert(sc == RTEMS_SUCCESSFUL);
55
56 sc = arm_gic_irq_set_priority(
57 ARM_GIC_TM27_IRQ_LOW,
58 ARM_GIC_TM27_PRIO_LOW
59 );
60 assert(sc == RTEMS_SUCCESSFUL);
61
62 sc = rtems_interrupt_handler_install(
63 ARM_GIC_TM27_IRQ_HIGH,
64 "tm27 high",
65 RTEMS_INTERRUPT_UNIQUE,
66 (rtems_interrupt_handler) handler,
67 NULL
68 );
69 assert(sc == RTEMS_SUCCESSFUL);
70
71 sc = arm_gic_irq_set_priority(
72 ARM_GIC_TM27_IRQ_HIGH,
73 ARM_GIC_TM27_PRIO_HIGH
74 );
75 assert(sc == RTEMS_SUCCESSFUL);
76}
77
78static inline void Cause_tm27_intr(void)
79{
80 rtems_status_code sc = arm_gic_irq_generate_software_irq(
81 ARM_GIC_TM27_IRQ_LOW,
82 ARM_GIC_IRQ_SOFTWARE_IRQ_TO_SELF,
83 0
84 );
85 assert(sc == RTEMS_SUCCESSFUL);
86}
87
88static inline void Clear_tm27_intr(void)
89{
90 /* Nothing to do */
91}
92
93static inline void Lower_tm27_intr(void)
94{
95 rtems_status_code sc = arm_gic_irq_generate_software_irq(
96 ARM_GIC_TM27_IRQ_HIGH,
97 ARM_GIC_IRQ_SOFTWARE_IRQ_TO_SELF,
98 0
99 );
100 assert(sc == RTEMS_SUCCESSFUL);
101}
102
103#endif /* LIBBSP_ARM_SHARED_ARM_GIC_TM27_H */
assert.h
Information for the Assert Handler.
NULL
#define NULL
Requests a GPIO pin group configuration.
Definition: bestcomm_api.h:77
rtems_vector_number
ISR_Vector_number rtems_vector_number
Control block type used to manage the vectors.
Definition: intr.h:47
rtems_status_code
rtems_status_code
Classic API Status.
Definition: status.h:43
RTEMS_SUCCESSFUL
@ RTEMS_SUCCESSFUL
Definition: status.h:47
rtems_interrupt_handler_install
rtems_status_code rtems_interrupt_handler_install(rtems_vector_number vector, const char *info, rtems_option options, rtems_interrupt_handler handler, void *arg)
Installs the interrupt handler routine handler for the interrupt vector with number vector.
Definition: irq.c:127
RTEMS_INTERRUPT_UNIQUE
#define RTEMS_INTERRUPT_UNIQUE
Makes the interrupt handler unique. Prevents other handler from using the same interrupt vector.
Definition: irq-extension.h:44
rtems_interrupt_handler
void(* rtems_interrupt_handler)(void *)
Interrupt handler routine type.
Definition: irq-extension.h:79