Refactor the Makefile into pieces. This commit inspired by AncientGeek, my hatred...
[freeems-vanilla.git] / src / main / inc / interrupts.h
blob933521999e5b87a03076110345ca038adf2bd374
1 /* FreeEMS - the open source engine management system
3 * Copyright 2008-2013 Fred Cooke
5 * This file is part of the FreeEMS project.
7 * FreeEMS software is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
12 * FreeEMS software is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with any FreeEMS software. If not, see http://www.gnu.org/licenses/
20 * We ask that if you make any changes to this file you email them upstream to
21 * us at admin(at)diyefi(dot)org or, even better, fork the code on github.com!
23 * Thank you for choosing FreeEMS to run your engine!
27 /** @file
29 * @ingroup allHeaders
30 * @ingroup globalHeaders
32 * @brief All interrupt handler declarations
34 * All of the declarations for ISR functions are done here because they are all
35 * used in one place and it doesn't make sense to spread them out over N files
36 * for N functions. ISR headers only exist where there is a requirement for
37 * local variables and constants etc.
41 /* Header file multiple inclusion protection courtesy eclipse Header Template */
42 /* and http://gcc.gnu.org/onlinedocs/gcc-3.1.1/cpp/ C pre processor manual */
43 #ifndef FILE_INTERRUPTS_H_SEEN
44 #define FILE_INTERRUPTS_H_SEEN
47 /* http://www.gnu.org/software/m68hc11/m68hc11_gcc.html Section 1.4.1 */
48 /* http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html */
49 /* http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Variable-Attributes.html */
51 /* Interrupt attribute shortcut */
52 #define INT __attribute__((interrupt))
54 /* Start and stop atomic operations (Things that we don't want interrupted half way through) */
55 /* For certain operations we will need to prevent the process from being interrupted, operations such as */
56 /* writing all vars to a block ready for reading and logging etc. The link below is for avrs, but goes */
57 /* into some detail about clearing and setting interrupts during important operations. */
58 /* http://hubbard.engr.scu.edu/embedded/avr/doc/avr-libc/avr-libc-user-manual/group__avr__interrupts.html */
59 #define ATOMIC_START() __asm__ __volatile__ ("sei") /* set global interrupt mask */
60 #define ATOMIC_END() __asm__ __volatile__ ("cli") /* clear global interrupt mask */
62 /* Interrupt vector memory management */
63 #define VECTORS __attribute__ ((section (".vectors")))
64 extern void _start(void);
66 /* Interrupt sub-routine prototypes - assigned to text1 region in linear space */
67 void UISR(void) INT TEXT1; /* Unimplemented Interrupt Sub Routine */
69 /** This ISR is expanded from @ref InjectorXISR via include
70 * statement, and macro definitions, so are the othe 5 below.
72 * @see injectorISR.c
73 * @see injectionISRs.c
75 void Injector1ISR(void) INT TEXT1;
76 void Injector2ISR(void) INT TEXT1; ///< @copydoc Injector1ISR
77 void Injector3ISR(void) INT TEXT1; ///< @copydoc Injector1ISR
78 void Injector4ISR(void) INT TEXT1; ///< @copydoc Injector1ISR
79 void Injector5ISR(void) INT TEXT1; ///< @copydoc Injector1ISR
80 void Injector6ISR(void) INT TEXT1; ///< @copydoc Injector1ISR
82 /** RPM ISRs, IC timer for engine position and RPM.
84 * There are multiple copies of this interrupt handler, each is linked with the
85 * rest of the code once such that if there are N decoder implementations and/or
86 * variants, then there are N loadable binaries produced after a full build.
88 * For details on any specific decoder implementation, see the documentation for
89 * that specific file.
91 void PrimaryRPMISR(void) INT TEXT1;
92 void SecondaryRPMISR(void) INT TEXT1; ///< @copydoc PrimaryRPMISR
94 void TimerOverflow(void) INT TEXT1; /* IC/OC timer overflow handling */
95 void ModDownCtrISR(void) INT TEXT1; /* Modulus Down Counter */
97 void IgnitionDwellISR(void) INT TEXT1; /* PIT timer 0 for dwell start */
98 void IgnitionFireISR(void) INT TEXT1; /* PIT timer 1 for coil firing */
99 void StagedOnISR(void) INT TEXT1; /* PIT timer 2 for switching staged injectors on */
100 void StagedOffISR(void) INT TEXT1; /* PIT timer 3 for switching staged injectors off */
102 void PortPISR(void) INT TEXT1; /* Port P interrupt service routine */
103 void PortHISR(void) INT TEXT1; /* Port P interrupt service routine */
104 void PortJISR(void) INT TEXT1; /* Port P interrupt service routine */
106 void IRQISR(void) INT TEXT1; /* IRQ/PE1 interrupt service routine */
107 void XIRQISR(void) INT TEXT1; /* XIRQ/PE0 interrupt service routine */
109 void RTIISR(void) INT TEXT1; /* Real Time interrupt service routine */
111 void SCI0ISR(void) INT TEXT1; /* Serial 0 interrupt service routine */
113 void LowVoltageISR(void) INT TEXT1; /* Low voltage counter ISR */
114 void VRegAPIISR(void) INT TEXT1; /* VReg periodic interrupt ISR */
115 void PLLLockISR(void) INT TEXT1; /* PLL lock lost/gained ISR */
116 void SelfClockISR(void) INT TEXT1; /* Self Clock mode entered/exited ISR */
118 void SpuriousISR(void) INT TEXT1; /* Spurious Interrupt ISR */
119 void UnimplOpcodeISR(void) INT TEXT1; /* Unimplemented Opcode ISR */
120 void RAMViolationISR(void) INT TEXT1; /* CPU RAM Access Violation ISR */
121 void XGATEErrorISR(void) INT TEXT1; /* XGATE Software Error ISR */
124 typedef void (* interruptTable)(void);
127 #else
128 /* let us know if we are being untidy with headers */
129 #warning "Header file INTERRUPTS_H seen before, sort it out!"
130 /* end of the wrapper ifdef from the very top */
131 #endif