COSA
An Object-Oriented Platform for Arduino Programming
ATmega1284P.hh
Go to the documentation of this file.
1 
21 #ifndef COSA_BOARD_ARDUINO_ATMEGA1248P_HH
22 #define COSA_BOARD_ARDUINO_ATMEGA1248P_HH
23 
24 /* This board is based on ATmega1248P */
25 #define BOARD_ATMEGA1248P
26 
36 class Board {
37  friend class Pin;
38  friend class GPIO;
39  friend class UART;
40 private:
44  Board() {}
45 
51  static volatile uint8_t* SFR(uint8_t pin)
52  __attribute__((always_inline))
53  {
54  return (pin < 8 ? &PINB :
55  pin < 16 ? &PIND :
56  pin < 24 ? &PINC :
57  &PINA);
58  }
59 
66  static uint8_t BIT(uint8_t pin)
67  __attribute__((always_inline))
68  {
69  return (pin & 0x7);
70  }
71 
77  static volatile uint8_t* PCIMR(uint8_t pin)
78  __attribute__((always_inline))
79  {
80  return (pin < 8 ? &PCMSK1 :
81  pin < 16 ? &PCMSK3 :
82  pin < 24 ? &PCMSK2 :
83  &PCMSK0);
84  }
85 
91  static volatile uint8_t* UART(uint8_t port)
92  __attribute__((always_inline))
93  {
94  return (port == 1 ? &UCSR1A : &UCSR0A);
95  }
96 
97 public:
101  static void init() {}
102 
106  enum DigitalPin {
107  D0 = 0, // PB0
108  D1, // PB1
109  D2, // PB2
110  D3, // PB3
111  D4, // PB4
112  D5, // PB5
113  D6, // PB6
114  D7, // PB7
115  D8, // PD0
116  D9, // PD1
117  D10, // PD2
118  D11, // PD3
119  D12, // PD4
120  D13, // PD5
121  D14, // PD6
122  D15, // PD7
123  D16, // PC0
124  D17, // PC1
125  D18, // PC2
126  D19, // PC3
127  D20, // PC4
128  D21, // PC5
129  D22, // PC6
130  D23, // PC7
131  D24, // PA0
132  D25, // PA1
133  D26, // PA2
134  D27, // PA3
135  D28, // PA4
136  D29, // PA5
137  D30, // PA6
138  D31, // PA7
140  } __attribute__((packed));
141 
145  enum AnalogPin {
146  A0 = 0, // PA0
147  A1, // PA1
148  A2, // PA2
149  A3, // PA3
150  A4, // PA4
151  A5, // PA5
152  A6, // PA6
153  A7 // PA7
154  } __attribute__((packed));
155 
159  enum Reference {
161  AVCC_REFERENCE = _BV(REFS0),
162  A1V1_REFERENCE = _BV(REFS1),
163  A2V56_REFERENCE = (_BV(REFS1) | _BV(REFS0))
164  } __attribute__((packed));
165 
170  enum PWMPin {
171  PWM0 = D3, // PB3 => OCR0A
172  PWM1 = D4, // PB4 => OCR0B
173 #if defined(__AVR_ATmega1284P__)
174  PWM2 = D6, // PB6 => OCR3A
175  PWM3 = D7, // PB7 => OCR3B
176 #else
177  PWM2 = 255, // PB6 => NOP
178  PWM3 = 255, // PB7 => NOP
179 #endif
180  PWM4 = D12, // PD4 => OCR1B
181  PWM5 = D13, // PD5 => OCR1A
182  PWM6 = D14, // PD6 => OCR2B
183  PWM7 = D15 // PD7 => OCR2A
184  } __attribute__((packed));
185 
191  EXT0 = D10, // PD2
192  EXT1 = D11, // PD3
193  EXT2 = D2 // PB2
194  } __attribute__((packed));
195 
200  PCI0 = D0, // PB0
201  PCI1 = D1, // PB1
202  PCI2 = D2, // PB2
203  PCI3 = D3, // PB3
204  PCI4 = D4, // PB4
205  PCI5 = D5, // PB5
206  PCI6 = D6, // PB6
207  PCI7 = D7, // PB7
208  PCI8 = D8, // PD0
209  PCI9 = D9, // PD1
210  PCI10 = D10, // PD2
211  PCI11 = D11, // PD3
212  PCI12 = D12, // PD4
213  PCI13 = D13, // PD5
214  PCI14 = D14, // PD6
215  PCI15 = D15, // PD7
216  PCI16 = D16, // PC0
217  PCI17 = D17, // PC1
218  PCI18 = D18, // PC2
219  PCI19 = D19, // PC3
220  PCI20 = D20, // PC4
221  PCI21 = D21, // PC5
222  PCI22 = D22, // PC6
223  PCI23 = D23, // PC7
224  PCI24 = D24, // PA0
225  PCI25 = D25, // PA1
226  PCI26 = D26, // PA2
227  PCI27 = D27, // PA3
228  PCI28 = D28, // PA4
229  PCI29 = D29, // PA5
230  PCI30 = D30, // PA6
231  PCI31 = D31 // PA7
232  } __attribute__((packed));
233 
237  enum {
243  };
244 
248  enum TWIPin {
249  SDA = 1, // PC1/D17
250  SCL = 0 // PC0/D16
251  } __attribute__((packed));
252 
256  enum SPIPin {
257  SS = 4, // PB4/D4
258  MOSI = 5, // PB5/D5
259  MISO = 6, // PB6/D6
260  SCK = 7 // PB7/D7
261  } __attribute__((packed));
262 
266  enum {
267  VBG = (_BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1)),
268  UART_MAX = 2,
269  EXT_MAX = 3,
272  } __attribute__((packed));
273 };
274 
278 #define USART_UDRE_vect USART0_UDRE_vect
279 #define USART_RX_vect USART0_RX_vect
280 #define USART_TX_vect USART0_TX_vect
281 
285 extern "C" {
286  void ADC_vect(void) __attribute__ ((signal));
287  void ANALOG_COMP_vect(void) __attribute__ ((signal));
288  void INT0_vect(void) __attribute__ ((signal));
289  void INT1_vect(void) __attribute__ ((signal));
290  void INT2_vect(void) __attribute__ ((signal));
291  void PCINT0_vect(void) __attribute__ ((signal));
292  void PCINT1_vect(void) __attribute__ ((signal));
293  void PCINT2_vect(void) __attribute__ ((signal));
294  void PCINT3_vect(void) __attribute__ ((signal));
295  void SPI_STC_vect(void) __attribute__ ((signal));
296  void TIMER0_COMPA_vect(void) __attribute__ ((signal));
297  void TIMER0_COMPB_vect(void) __attribute__ ((signal));
298  void TIMER0_OVF_vect(void) __attribute__ ((signal));
299  void TIMER1_CAPT_vect(void) __attribute__ ((signal));
300  void TIMER1_COMPA_vect(void) __attribute__ ((signal));
301  void TIMER1_COMPB_vect(void) __attribute__ ((signal));
302  void TIMER1_OVF_vect(void) __attribute__ ((signal));
303  void TIMER2_COMPA_vect(void) __attribute__ ((signal));
304  void TIMER2_COMPB_vect(void) __attribute__ ((signal));
305  void TIMER2_OVF_vect(void) __attribute__ ((signal));
306 #if defined(__AVR_ATmega1284P__)
307  void TIMER3_CAPT_vect(void) __attribute__ ((signal));
308  void TIMER3_COMPA_vect(void) __attribute__ ((signal));
309  void TIMER3_COMPB_vect(void) __attribute__ ((signal));
310  void TIMER3_OVF_vect(void) __attribute__ ((signal));
311 #endif
312  void TWI_vect(void) __attribute__ ((signal));
313  void WDT_vect(void) __attribute__ ((signal));
314  void USART_RX_vect(void) __attribute__ ((signal));
315  void USART_TX_vect(void) __attribute__ ((signal));
316  void USART_UDRE_vect(void) __attribute__ ((signal));
317  void USART1_RX_vect(void) __attribute__ ((signal));
318  void USART1_UDRE_vect(void) __attribute__ ((signal));
319  void USART1_TX_vect(void) __attribute__ ((signal));
320 }
321 #endif
void PCINT2_vect(void)
void TWI_vect(void)
void TIMER1_COMPB_vect(void)
#define USART_UDRE_vect
Definition: ATmega1284P.hh:278
void SPI_STC_vect(void)
void TIMER1_CAPT_vect(void)
void TIMER2_COMPA_vect(void)
void USART1_RX_vect(void)
Definition: Pin.hh:35
void PCINT1_vect(void)
void WDT_vect(void)
void PCINT0_vect(void)
void USART1_UDRE_vect(void)
void TIMER3_OVF_vect(void)
Definition: LED.hh:32
void PCINT3_vect(void)
void TIMER1_OVF_vect(void)
void ANALOG_COMP_vect(void)
void TIMER0_COMPA_vect(void)
void INT0_vect(void)
void TIMER1_COMPA_vect(void)
void USART1_TX_vect(void)
friend class UART
Definition: ATmega1284P.hh:39
void TIMER3_COMPB_vect(void)
void TIMER0_OVF_vect(void)
ExternalInterruptPin
Definition: ATmega1284P.hh:190
Definition: UART.hh:59
#define USART_RX_vect
Definition: ATmega1284P.hh:279
void INT2_vect(void)
#define PCMSK0
Definition: ATtinyX5.hh:227
Definition: PWMPin.hh:29
void INT1_vect(void)
void TIMER2_COMPB_vect(void)
void TIMER3_COMPA_vect(void)
Definition: GPIO.hh:30
void ADC_vect(void)
void TIMER3_CAPT_vect(void)
#define USART_TX_vect
Definition: ATmega1284P.hh:280
void TIMER0_COMPB_vect(void)
static void init()
Definition: ATmega1284P.hh:101
void TIMER2_OVF_vect(void)