COSA
An Object-Oriented Platform for Arduino Programming
Leonardo.hh
Go to the documentation of this file.
1 
21 #ifndef COSA_BOARD_ARDUINO_LEONARDO_HH
22 #define COSA_BOARD_ARDUINO_LEONARDO_HH
23 
24 
25 /* This board is based on ATmega32U4 */
26 #define BOARD_ATMEGA32U4
27 
31 #if !defined(UNUSED)
32 #define UNUSED(x) (void) (x)
33 #endif
34 
79 class Board {
80  friend class Pin;
81  friend class GPIO;
82  friend class UART;
83 private:
87  Board() {}
88 
94  static volatile uint8_t* SFR(uint8_t pin)
95  __attribute__((always_inline))
96  {
97  return (pin < 8 ? &PINB :
98  pin < 16 ? &PINC :
99  pin < 24 ? &PIND :
100  pin < 32 ? &PINE :
101  &PINF);
102  }
103 
110  static uint8_t BIT(uint8_t pin)
111  __attribute__((always_inline))
112  {
113  return (pin & 0x07);
114  }
115 
121  static volatile uint8_t* PCIMR(uint8_t pin)
122  __attribute__((always_inline))
123  {
124  UNUSED(pin);
125  return (&PCMSK0);
126  }
127 
133  static volatile uint8_t* UART(uint8_t port)
134  __attribute__((always_inline))
135  {
136  UNUSED(port);
137  return (&UCSR1A);
138  }
139 
140 public:
144  static void init() {}
145 
149  enum DigitalPin {
150  D0 = 18, // PD2
151  D1 = 19, // PD3
152  D2 = 17, // PD1
153  D3 = 16, // PD0
154  D4 = 20, // PD4
155  D5 = 14, // PC6
156  D6 = 23, // PD7
157  D7 = 30, // PE6
158  D8 = 4, // PB4
159  D9 = 5, // PB5
160  D10 = 6, // PB6
161  D11 = 7, // PB7
162  D12 = 22, // PD6
163  D13 = 15, // PC7
164  D14 = 39, // PF7
165  D15 = 38, // PF6
166  D16 = 37, // PF5
167  D17 = 36, // PF4
168  D18 = 33, // PF1
169  D19 = 32, // PF0
170  D20 = 0, // PB0
171  D21 = 1, // PB1
172  D22 = 2, // PB2
173  D23 = 3, // PB3
174  LED = 15, // PC7
175  TXLED = 0, // Green
176  RXLED = 21 // Yellow
177  } __attribute__((packed));
178 
182  enum AnalogPin {
183  A0 = 7, // PF7/D14
184  A1 = 6, // PF6/D15
185  A2 = 5, // PF5/D16
186  A3 = 4, // PF4/D17
187  A4 = 1, // PF1/D18
188  A5 = 0, // PF0/D19
189  A6 = 32, // PD4/D4
190  A7 = 33, // PD6/D12
191  A8 = 34, // PD7/D6
192  A9 = 35, // PB4/D8
193  A10 = 36, // PB5/D9
194  A11 = 37 // PB6/D10
195  } __attribute__((packed));
196 
200  enum Reference {
201  APIN_REFERENCE = 0,
202  AVCC_REFERENCE = _BV(REFS0),
203  A2V56_REFERENCE = (_BV(REFS1) | _BV(REFS0))
204  } __attribute__((packed));
205 
210  enum PWMPin {
211  PWM0 = D11, // PB7 => OCR0A
212  PWM1 = D3, // PD0 => OCR0B
213  PWM2 = D9, // PB5 => OCR1A
214  PWM3 = D10, // PB6 => OCR1B
215  PWM4 = D5, // PC6 => OCR3A
216  PWM5 = D13, // PC7 => OCR4A
217  PWM6 = D6 // PD7 => OCR4D
218  } __attribute__((packed));
219 
225  EXT0 = D3, // PD0
226  EXT1 = D2, // PD1
227  EXT2 = D0, // PD2
228  EXT3 = D1 // PD3
229  } __attribute__((packed));
230 
235  PCI0 = D20, // PB0
236  PCI1 = D21, // PB1
237  PCI2 = D22, // PB2
238  PCI3 = D23, // PB3
239  PCI4 = D8, // PB4
240  PCI5 = D9, // PB5
241  PCI6 = D10, // PB6
242  PCI7 = D11 // PB7
243  } __attribute__((packed));
244 
248  enum {
249  ANALOG_PIN_MAX = 12,
250  DIGITAL_PIN_MAX = 24,
251  EXT_PIN_MAX = 4,
252  PCI_PIN_MAX = 8,
253  PWM_PIN_MAX = 7
254  };
255 
259  enum TWIPin {
260  SDA = 1, // PD1/D2
261  SCL = 0 // PD0/D3
262  } __attribute__((packed));
263 
267  enum SPIPin {
268  SS = 0, // PB0
269  SCK = 1, // PB1/ICSP
270  MOSI = 2, // PB2/ICSP
271  MISO = 3 // PB3/ICSP
272  } __attribute__((packed));
273 
277  enum {
278  VBG = (_BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1)),
279  UART_MAX = 2,
280  EXT_MAX = 7,
281  PCMSK_MAX = 1,
282  PCINT_MAX = 8
283  } __attribute__((packed));
284 };
285 
289 #define UCSZ00 UCSZ10
290 #define UCSZ01 UCSZ11
291 #define UCSZ02 UCSZ12
292 #define UPM00 UPM10
293 #define UPM01 UPM11
294 #define USBS0 USBS1
295 #define U2X0 U2X1
296 #define TXC0 TXC1
297 #define RXCIE0 RXCIE1
298 #define RXEN0 RXEN1
299 #define TXEN0 TXEN1
300 #define UDRE0 UDRE1
301 #define UDRIE0 UDRIE1
302 #define TXCIE0 TXCIE1
303 #if !defined(ADCW)
304 #define ADCW ADC
305 #endif
306 
310 extern "C" {
311  void ADC_vect(void) __attribute__ ((signal));
312  void ANALOG_COMP_vect(void) __attribute__ ((signal));
313  void INT0_vect(void) __attribute__ ((signal));
314  void INT1_vect(void) __attribute__ ((signal));
315  void INT2_vect(void) __attribute__ ((signal));
316  void INT3_vect(void) __attribute__ ((signal));
317  void INT6_vect(void) __attribute__ ((signal));
318  void PCINT0_vect(void) __attribute__ ((signal));
319  void SPI_STC_vect(void) __attribute__ ((signal));
320  void TIMER0_COMPA_vect(void) __attribute__ ((signal));
321  void TIMER0_COMPB_vect(void) __attribute__ ((signal));
322  void TIMER0_OVF_vect(void) __attribute__ ((signal));
323  void TIMER1_CAPT_vect(void) __attribute__ ((signal));
324  void TIMER1_COMPA_vect(void) __attribute__ ((signal));
325  void TIMER1_COMPB_vect(void) __attribute__ ((signal));
326  void TIMER1_COMPC_vect(void) __attribute__ ((signal));
327  void TIMER1_OVF_vect(void) __attribute__ ((signal));
328  void TIMER3_CAPT_vect(void) __attribute__ ((signal));
329  void TIMER3_COMPA_vect(void) __attribute__ ((signal));
330  void TIMER3_COMPB_vect(void) __attribute__ ((signal));
331  void TIMER3_COMPC_vect(void) __attribute__ ((signal));
332  void TIMER3_OVF_vect(void) __attribute__ ((signal));
333  void TIMER4_COMPA_vect(void) __attribute__ ((signal));
334  void TIMER4_COMPB_vect(void) __attribute__ ((signal));
335  void TIMER4_COMPD_vect(void) __attribute__ ((signal));
336  void TIMER4_FPF_vect(void) __attribute__ ((signal));
337  void TIMER4_OVF_vect(void) __attribute__ ((signal));
338  void TWI_vect(void) __attribute__ ((signal));
339  void WDT_vect(void) __attribute__ ((signal));
340  void USART1_RX_vect(void) __attribute__ ((signal));
341  void USART1_TX_vect(void) __attribute__ ((signal));
342  void USART1_UDRE_vect(void) __attribute__ ((signal));
343  void USB_COM_vect(void) __attribute__ ((signal));
344  void USB_GEN_vect(void) __attribute__ ((signal));
345 }
346 #endif
void TIMER0_OVF_vect(void)
void ANALOG_COMP_vect(void)
void INT2_vect(void)
void TIMER1_COMPB_vect(void)
void TIMER1_COMPA_vect(void)
void USART1_TX_vect(void)
void TWI_vect(void)
Definition: Pin.hh:35
void INT0_vect(void)
void TIMER3_OVF_vect(void)
Definition: LED.hh:32
void USART1_UDRE_vect(void)
void TIMER1_CAPT_vect(void)
void INT1_vect(void)
friend class UART
Definition: ATmega1284P.hh:39
void TIMER4_COMPD_vect(void)
void TIMER0_COMPB_vect(void)
void TIMER3_COMPB_vect(void)
void USB_GEN_vect(void)
ExternalInterruptPin
Definition: ATmega1284P.hh:190
void TIMER4_FPF_vect(void)
Definition: UART.hh:59
#define PCMSK0
Definition: ATtinyX5.hh:227
void INT6_vect(void)
Definition: PWMPin.hh:29
void USB_COM_vect(void)
void USART1_RX_vect(void)
void TIMER3_COMPA_vect(void)
void INT3_vect(void)
void TIMER1_COMPC_vect(void)
void TIMER0_COMPA_vect(void)
void TIMER4_OVF_vect(void)
Definition: GPIO.hh:30
void TIMER3_COMPC_vect(void)
void ADC_vect(void)
#define UNUSED(x)
Definition: Leonardo.hh:32
void PCINT0_vect(void)
void TIMER4_COMPA_vect(void)
void SPI_STC_vect(void)
void TIMER3_CAPT_vect(void)
static void init()
Definition: Leonardo.hh:144
void TIMER1_OVF_vect(void)
void WDT_vect(void)
void TIMER4_COMPB_vect(void)