summaryrefslogtreecommitdiff
path: root/frontends/calculator/CEdev/include/intce.h
blob: dd27a3140bab9f4c0cd7587e41ad8b4bc7f1b5e2 (plain)
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
91
92
93
/**
 * @file
 * @authors Matt "MateoConLechuga" Waltz
 * @authors Jacob "jacobly" Young
 * @brief Interrupt configuring and setting
 */

#ifndef INTCE_H
#define INTCE_H

#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

/**
 * @brief Enable global interrupts
 */
#define int_Enable() \
asm("ei")

/**
 * @brief Diasble global interrupts
 */
#define int_Disable() \
asm("di")

/**
 * @brief Blocking wait for an interrupt to trigger
 */
#define int_Wait() \
asm("halt")

#ifdef FORCE_INTERRUPTS
#warning TI has removed custom interrupt support on CE models with hardware revision >= I. Please check that this is acceptable.

/**
 * Initizalize to use custom interrupts
 * @note Saves status of current interrupt state
 * @warning TI has removed custom interrupt support on CE models with hardware revision >= I.
 */
void int_Initialize(void);

/**
 * Resets interrupts back to the OS expected values
 * @warning Must have called int_Initialize before using
 * @warning TI has removed custom interrupt support on CE models with hardware revision >= I.
 */
void int_Reset(void);

/**
 * Sets up an interrupt vector given an ISR
 * @param ivect Interrupt vector to set
 * @param handler Handler to interrupt service routine
 * @warning TI has removed custom interrupt support on CE models with hardware revision >= I.
 */
void int_SetVector(uint8_t ivect, void (*handler)(void));

#endif

#define ON_IVECT        0  /**< [on] key interrupt source        */
#define TIMER1_IVECT    1  /**< Timer 1 interrupt source         */
#define TIMER2_IVECT    2  /**< Timer 2 interrupt source         */
#define TIMER3_IVECT    3  /**< Timer 3 interrupt source         */
#define TIMEROS_IVECT   4  /**< Timer OS interrupt source        */
#define KEYBOARD_IVECT  10 /**< Keyboard interrupt source        */
#define LCD_IVECT       11 /**< LCD interrupt source             */
#define RTC_IVECT       12 /**< Real Time Clock interrupt source */
#define USB_IVECT       13 /**< USB interrupt source             */

#define INT_ON          1<<ON_IVECT        /**< [on] key interrupt source mask        */
#define INT_TIMER1      1<<TIMER1_IVECT    /**< Timer 1 interrupt source mask         */
#define INT_TIMER2      1<<TIMER2_IVECT    /**< Timer 2 interrupt source mask         */
#define INT_TIMER3      1<<TIMER3_IVECT    /**< Timer 3 interrupt source mask         */
#define INT_TIMEROS     1<<TIMEROS_IVECT   /**< Timer OS interrupt source mask        */
#define INT_KEYBOARD	1<<KEYBOARD_IVECT  /**< Keyboard interrupt source mask        */
#define INT_LCD         1<<LCD_IVECT       /**< LCD interrupt source mask             */
#define INT_RTC         1<<RTC_IVECT       /**< Real Time Clock interrupt source mask */
#define INT_USB         1<<USB_IVECT       /**< USB interrupt source mask             */

#define int_RawStatus       (*(volatile uint24_t*)0x0F00000) /**< State of interrupt signals        */
#define int_MaskedStatus    (*(volatile uint24_t*)0x0F00014) /**< Masked state of interrupt signals */
#define int_EnableConfig    (*(uint24_t*)0x0F00004)          /**< Enabled interrupt signals         */
#define int_LatchConfig     (*(uint24_t*)0x0F0000C)          /**< Latchable interrupt signals       */
#define int_InvertConfig    (*(uint24_t*)0x0F00010)          /**< Invertable interrupt signals      */
#define int_Acknowledge     (*(uint24_t*)0x0F00008)          /**< Acknowledge interrupt signals     */

#ifdef __cplusplus
}
#endif

#endif