FreeEMS  0.2.0-SNAPSHOT-285-g028e24c
init.h
Go to the documentation of this file.
1 /* FreeEMS - the open source engine management system
2  *
3  * Copyright 2008-2013 Fred Cooke
4  *
5  * This file is part of the FreeEMS project.
6  *
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.
11  *
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.
16  *
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/
19  *
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!
22  *
23  * Thank you for choosing FreeEMS to run your engine!
24  */
25 
26 
27 /** @file
28  *
29  * @ingroup allHeaders
30  */
31 
32 
33 /* Header file multiple inclusion protection courtesy eclipse Header Template */
34 /* and http://gcc.gnu.org/onlinedocs/gcc-3.1.1/cpp/ C pre processor manual */
35 #ifndef FILE_INIT_H_SEEN
36 #define FILE_INIT_H_SEEN
37 
38 
39 #ifdef EXTERN
40 #warning "EXTERN already defined by another header, please sort it out!"
41 #undef EXTERN /* If fail on warning is off, remove the definition such that we can redefine correctly. */
42 #endif
43 
44 
45 #ifdef INIT_C
46 #define EXTERN
47 /* For private internal use of init.c init() function only, hence wrapped in this ifdef */
48 
49 /* Keep this non ISR stuff out of linear flash space */
50 void initPLL(void) FPAGE_FE;
51 void initADC(void) FPAGE_FE;
52 void initPWM(void) FPAGE_FE;
53 void initGPIO(void) FPAGE_FE;
54 void initAllPagedRAM(void) FPAGE_FE;
55 void initAllPagedAddresses(void) FPAGE_FE;
56 void initVariables(void) FPAGE_FE;
57 void initFlash(void) FPAGE_FE;
58 void initXgate(void) TEXT1; // Can't be paged because it has to burn to a page, for now...
59 void initECTTimer(void) FPAGE_FE;
60 void initPITTimer(void) FPAGE_FE;
61 void initSCIStuff(void) FPAGE_FE;
62 void initConfiguration(void) FPAGE_FE;
63 void initInterrupts(void) FPAGE_FE;
64 
65 // XGATE assembly symbols, only used for address/size
66 extern void xgateThread0(void);
67 extern void xgateThread0End(void);
68 
69 /* Place these functions in the same block of flash as the data upon which they operate! */
70 void initLookupAddresses(void) LOOKUPF;
74 void initPagedRAMFuel(void) FUELTABLESF;
75 void initPagedRAMTime(void) TIMETABLESF;
76 void initPagedRAMTune(void) TUNETABLESF;
77 
78 #else
79 #define EXTERN extern
80 #endif
81 
82 
83 /* Other function declarations are private and present in the C */
84 /* source file purely to assign them to a particular memory region. */
85 extern void init(void) FPAGE_FE;
86 extern void enablePLL(void) FPAGE_FE; // Needed in self clock ISR
87 
88 
89 /* Various masks and values used for initialising the contents of control registers. */
90 /* For information on how these are being used, try this link : */
91 /* http://www.vipan.com/htdocs/bitwisehelp.html */
92 
93 
94 // PLL control values
95 #define PLLSELOFF 0x7F /* Mask for switching to base external OSCCLK clock 0b_0111_1111 */
96 #define PLLOFF 0xBF /* Mask for turning the PLLON bit to ZERO 0b_1011_1111, IE, turning PLL off */
97 #define PLLDIVISOR 0x03 /* Input crystal frequency is divided by this number */
98 #define PLLMULTIPLIER 0x09 /* The result of the above is multiplied by this number to give the bus frequency */
99 
100 // Flash control values
101 #define PRDIV8 0x40 /* Mask for flash module to divide the oscillator clock by 8 */
102 
103 
104 /// @todo TODO define other macros such that raw values aren't used in the code
105 /// @todo TODO move all the reg masks to a header of their own for general use.
106 
107 
108 #undef EXTERN
109 
110 
111 #else
112  /* let us know if we are being untidy with headers */
113  #warning "Header file INIT_H seen before, sort it out!"
114 /* end of the wrapper ifdef from the very top */
115 #endif