Speeduino
Loading...
Searching...
No Matches
board_avr2560.h
Go to the documentation of this file.
1#ifndef AVR2560_H
2#define AVR2560_H
3
4#include "globals.h"
5#if defined(CORE_AVR)
6
7#include <avr/interrupt.h>
8#include <avr/io.h>
9
10/*
11***********************************************************************************************************
12* General
13*/
14 #define COMPARE_TYPE uint16_t
15 #define SERIAL_BUFFER_SIZE (256+7+1) //Size of the serial buffer used by new comms protocol. The largest single packet is the O2 calibration which is 256 bytes + 7 bytes of overhead
16 #define FPU_MAX_SIZE 0 //Size of the FPU buffer. 0 means no FPU.
17 #ifdef USE_SPI_EEPROM
18 #define EEPROM_LIB_H "src/SPIAsEEPROM/SPIAsEEPROM.h"
20 #else
21 #define EEPROM_LIB_H <EEPROM.h>
22 typedef int eeprom_address_t;
23 #endif
24 #ifdef PLATFORMIO
25 #define RTC_LIB_H <TimeLib.h>
26 #else
27 #define RTC_LIB_H <Time.h>
28 #endif
29 void initBoard(void);
30 uint16_t freeRam(void);
31 void doSystemReset(void);
32 void jumpToBootloader(void);
34
35 #define pinIsReserved(pin) ( ((pin) == 0) ) //Forbidden pins like USB on other boards
36
37/*
38***********************************************************************************************************
39* Schedules
40*/
41 //Refer to svn.savannah.nongnu.org/viewvc/trunk/avr-libc/include/avr/iomxx0_1.h?root=avr-libc&view=markup
42 #define FUEL1_COUNTER TCNT3
43 #define FUEL2_COUNTER TCNT3
44 #define FUEL3_COUNTER TCNT3
45 #define FUEL4_COUNTER TCNT4
46 #define FUEL5_COUNTER TCNT4
47 #define FUEL6_COUNTER TCNT4 //Replaces ignition 4
48 #define FUEL7_COUNTER TCNT5 //Replaces ignition 3
49 #define FUEL8_COUNTER TCNT5 //Replaces ignition 2
50
51 #define IGN1_COUNTER TCNT5
52 #define IGN2_COUNTER TCNT5
53 #define IGN3_COUNTER TCNT5
54 #define IGN4_COUNTER TCNT4
55 #define IGN5_COUNTER TCNT4
56 #define IGN6_COUNTER TCNT4 //Replaces injector 4
57 #define IGN7_COUNTER TCNT3 //Replaces injector 3
58 #define IGN8_COUNTER TCNT3 //Replaces injector 2
59
60 #define FUEL1_COMPARE OCR3A
61 #define FUEL2_COMPARE OCR3B
62 #define FUEL3_COMPARE OCR3C
63 #define FUEL4_COMPARE OCR4B //Replaces ignition 6
64 #define FUEL5_COMPARE OCR4C //Replaces ignition 5
65 #define FUEL6_COMPARE OCR4A //Replaces ignition 4
66 #define FUEL7_COMPARE OCR5C //Replaces ignition 3
67 #define FUEL8_COMPARE OCR5B //Replaces ignition 2
68
69 #define IGN1_COMPARE OCR5A
70 #define IGN2_COMPARE OCR5B
71 #define IGN3_COMPARE OCR5C
72 #define IGN4_COMPARE OCR4A //Replaces injector 6
73 #define IGN5_COMPARE OCR4C //Replaces injector 5
74 #define IGN6_COMPARE OCR4B //Replaces injector 4
75 #define IGN7_COMPARE OCR3C //Replaces injector 3
76 #define IGN8_COMPARE OCR3B //Replaces injector 2
77
78 //Note that the interrupt flag is reset BEFORE the interrupt is enabled
79static inline void FUEL1_TIMER_ENABLE(void) { TIFR3 |= (1<<OCF3A) ; TIMSK3 |= (1 << OCIE3A); } //Turn on the A compare unit (ie turn on the interrupt)
80static inline void FUEL2_TIMER_ENABLE(void) { TIFR3 |= (1<<OCF3B); TIMSK3 |= (1 << OCIE3B); } //Turn on the B compare unit (ie turn on the interrupt)
81static inline void FUEL3_TIMER_ENABLE(void) { TIFR3 |= (1<<OCF3C); TIMSK3 |= (1 << OCIE3C); } //Turn on the C compare unit (ie turn on the interrupt)
82static inline void FUEL4_TIMER_ENABLE(void) { TIFR4 |= (1<<OCF4B); TIMSK4 |= (1 << OCIE4B); } //Turn on the B compare unit (ie turn on the interrupt)
83static inline void FUEL5_TIMER_ENABLE(void) { TIFR4 |= (1<<OCF4C); TIMSK4 |= (1 << OCIE4C); } //Turn on the C compare unit (ie turn on the interrupt)
84static inline void FUEL6_TIMER_ENABLE(void) { TIFR4 |= (1<<OCF4A); TIMSK4 |= (1 << OCIE4A); } //Turn on the A compare unit (ie turn on the interrupt)
85static inline void FUEL7_TIMER_ENABLE(void) { TIFR5 |= (1<<OCF5C); TIMSK5 |= (1 << OCIE5C); } //
86static inline void FUEL8_TIMER_ENABLE(void) { TIFR5 |= (1<<OCF5B); TIMSK5 |= (1 << OCIE5B); } //
87
88static inline void FUEL1_TIMER_DISABLE(void) { TIMSK3 &= ~(1 << OCIE3A); } // //Turn off this output compare unit
89static inline void FUEL2_TIMER_DISABLE(void) { TIMSK3 &= ~(1 << OCIE3B); } // //Turn off this output compare unit
90static inline void FUEL3_TIMER_DISABLE(void) { TIMSK3 &= ~(1 << OCIE3C); } // //Turn off this output compare unit
91static inline void FUEL4_TIMER_DISABLE(void) { TIMSK4 &= ~(1 << OCIE4B); }
92static inline void FUEL5_TIMER_DISABLE(void) { TIMSK4 &= ~(1 << OCIE4C); } // //
93static inline void FUEL6_TIMER_DISABLE(void) { TIMSK4 &= ~(1 << OCIE4A); } // //
94static inline void FUEL7_TIMER_DISABLE(void) { TIMSK5 &= ~(1 << OCIE5C); } // //
95static inline void FUEL8_TIMER_DISABLE(void) { TIMSK5 &= ~(1 << OCIE5B); } //
96
97 //These have the TIFR5 bits set to 1 to clear the interrupt flag. This prevents a false interrupt being called the first time the channel is enabled.
98static inline void IGN1_TIMER_ENABLE(void) { TIFR5 |= (1<<OCF5A); TIMSK5 |= (1 << OCIE5A); } //Turn on the A compare unit (ie turn on the interrupt)
99static inline void IGN2_TIMER_ENABLE(void) { TIFR5 |= (1<<OCF5B); TIMSK5 |= (1 << OCIE5B); }//Turn on the B compare unit (ie turn on the interrupt)
100static inline void IGN3_TIMER_ENABLE(void) { TIFR5 |= (1<<OCF5C); TIMSK5 |= (1 << OCIE5C); }//Turn on the C compare unit (ie turn on the interrupt)
101static inline void IGN4_TIMER_ENABLE(void) { TIFR4 |= (1<<OCF4A); TIMSK4 |= (1 << OCIE4A); }//Turn on the A compare unit (ie turn on the interrupt)
102static inline void IGN5_TIMER_ENABLE(void) { TIFR4 |= (1<<OCF4C); TIMSK4 |= (1 << OCIE4C); } //Turn on the A compare unit (ie turn on the interrupt)
103static inline void IGN6_TIMER_ENABLE(void) { TIFR4 |= (1<<OCF4B); TIMSK4 |= (1 << OCIE4B); } //Replaces injector 4
104static inline void IGN7_TIMER_ENABLE(void) { TIMSK3 |= (1 << OCIE3C); }//Replaces injector 3
105static inline void IGN8_TIMER_ENABLE(void) { TIMSK3 |= (1 << OCIE3B); } //Replaces injector 2
106
107static inline void IGN1_TIMER_DISABLE(void) { TIMSK5 &= ~(1 << OCIE5A); } //Turn off this output compare unit
108static inline void IGN2_TIMER_DISABLE(void) { TIMSK5 &= ~(1 << OCIE5B); } //Turn off this output compare unit
109static inline void IGN3_TIMER_DISABLE(void) { TIMSK5 &= ~(1 << OCIE5C); } //Turn off this output compare unit
110static inline void IGN4_TIMER_DISABLE(void) { TIMSK4 &= ~(1 << OCIE4A); } //Turn off this output compare unit
111static inline void IGN5_TIMER_DISABLE(void) { TIMSK4 &= ~(1 << OCIE4C); } //Turn off this output compare unit
112static inline void IGN6_TIMER_DISABLE(void) { TIMSK4 &= ~(1 << OCIE4B); } //Replaces injector 4
113static inline void IGN7_TIMER_DISABLE(void) { TIMSK3 &= ~(1 << OCIE3C); } //Replaces injector 3
114static inline void IGN8_TIMER_DISABLE(void) { TIMSK3 &= ~(1 << OCIE3B); } //Replaces injector 2
115
116 #define MAX_TIMER_PERIOD 262140UL //The longest period of time (in uS) that the timer can permit (IN this case it is 65535 * 4, as each timer tick is 4uS)
117 #define uS_TO_TIMER_COMPARE(uS1) ((uS1) >> 2) //Converts a given number of uS into the required number of timer ticks until that time has passed
118
119/*
120***********************************************************************************************************
121* Auxiliaries
122*/
123 #define ENABLE_BOOST_TIMER() TIMSK1 |= (1 << OCIE1A)
124 #define DISABLE_BOOST_TIMER() TIMSK1 &= ~(1 << OCIE1A)
125 #define ENABLE_VVT_TIMER() TIMSK1 |= (1 << OCIE1B)
126 #define DISABLE_VVT_TIMER() TIMSK1 &= ~(1 << OCIE1B)
127
128 #define BOOST_TIMER_COMPARE OCR1A
129 #define BOOST_TIMER_COUNTER TCNT1
130 #define VVT_TIMER_COMPARE OCR1B
131 #define VVT_TIMER_COUNTER TCNT1
132
133/*
134***********************************************************************************************************
135* Idle
136*/
137 #define IDLE_COUNTER TCNT1
138 #define IDLE_COMPARE OCR1C
139
140 #define IDLE_TIMER_ENABLE() TIMSK1 |= (1 << OCIE1C)
141 #define IDLE_TIMER_DISABLE() TIMSK1 &= ~(1 << OCIE1C)
142
143/*
144***********************************************************************************************************
145* CAN / Second serial
146*/
147#define SECONDARY_SERIAL_T HardwareSerial
148
149#endif //CORE_AVR
150#endif //AVR2560_H
static uint32_t rshift(uint32_t a)
Bitwise right shift - generic, unoptimized, case.
Definition bit_shifts.h:348