COSA
An Object-Oriented Platform for Arduino Programming
Micro.hh
Go to the documentation of this file.
1 
21 #ifndef COSA_BOARD_ARDUINO_MICRO_HH
22 #define COSA_BOARD_ARDUINO_MICRO_HH
23 
24 /* This board is based on ATmega32U4 */
25 #define BOARD_ATMEGA32U4
26 
30 #if !defined(UNUSED)
31 #define UNUSED(x) (void) (x)
32 #endif
33 
73 class Board {
74  friend class Pin;
75  friend class GPIO;
76  friend class UART;
77 private:
81  Board() {}
82 
88  static volatile uint8_t* SFR(uint8_t pin)
89  __attribute__((always_inline))
90  {
91  return (pin < 8 ? &PINB :
92  pin < 16 ? &PINC :
93  pin < 24 ? &PIND :
94  pin < 32 ? &PINE :
95  &PINF);
96  }
97 
104  static uint8_t BIT(uint8_t pin)
105  __attribute__((always_inline))
106  {
107  return (pin & 0x07);
108  }
109 
115  static volatile uint8_t* PCIMR(uint8_t pin)
116  __attribute__((always_inline))
117  {
118  UNUSED(pin);
119  return (&PCMSK0);
120  }
121 
127  static volatile uint8_t* UART(uint8_t port)
128  __attribute__((always_inline))
129  {
130  UNUSED(port);
131  return (&UCSR1A);
132  }
133 
134 public:
138  static void init() {}
139 
143  enum DigitalPin {
144  D0 = 18, // PD2
145  D1 = 19, // PD3
146  D2 = 17, // PD1
147  D3 = 16, // PD0
148  D4 = 20, // PD4
149  D5 = 14, // PC6
150  D6 = 23, // PD7
151  D7 = 30, // PE6
152  D8 = 4, // PB4
153  D9 = 5, // PB5
154  D10 = 6, // PB6
155  D11 = 7, // PB7
156  D12 = 22, // PD6
157  D13 = 15, // PC7
158  D14 = 39, // PF7
159  D15 = 38, // PF6
160  D16 = 37, // PF5
161  D17 = 36, // PF4
162  D18 = 33, // PF1
163  D19 = 32, // PF0
164  D20 = 0, // PB0/SS/RXLED
165  D21 = 1, // PB1/SCK
166  D22 = 2, // PB2/MOSI
167  D23 = 3, // PB3/MISO
168  LED = 15, // PC7/Not used
169  RXLED = 0, // PB0/Green
170  TXLED = 21 // PD5/Yellow
171  } __attribute__((packed));
172 
176  enum AnalogPin {
177  A0 = 7, // PF7/D14
178  A1 = 6, // PF6/D15
179  A2 = 5, // PF5/D16
180  A3 = 4, // PF4/D17
181  A4 = 1, // PF1/D18
182  A5 = 0, // PF0/D19
183  A6 = 32, // PD4/D4
184  A7 = 33, // PD6/D12/Not used
185  A8 = 34, // PD7/D6
186  A9 = 35, // PB4/D8
187  A10 = 36, // PB5/D9
188  A11 = 37 // PB6/D10
189  } __attribute__((packed));
190 
194  enum Reference {
195  APIN_REFERENCE = 0,
196  AVCC_REFERENCE = _BV(REFS0),
197  A2V56_REFERENCE = (_BV(REFS1) | _BV(REFS0))
198  } __attribute__((packed));
199 
204  enum PWMPin {
205  PWM0 = D11, // PB7 => OCR0A
206  PWM1 = D3, // PD0 => OCR0B
207  PWM2 = D9, // PB5 => OCR1A
208  PWM3 = D10, // PB6 => OCR1B
209  PWM4 = D5, // PC6 => OCR3A
210  PWM5 = D13, // PC7 => OCR4A
211  PWM6 = D6 // PD7 => OCR4D
212  } __attribute__((packed));
213 
219  EXT0 = D3, // PD0
220  EXT1 = D2, // PD1
221  EXT2 = D0, // PD2
222  EXT3 = D1 // PD3
223  } __attribute__((packed));
224 
229  PCI0 = D20, // PB0
230  PCI1 = D21, // PB1
231  PCI2 = D22, // PB2
232  PCI3 = D23, // PB3
233  PCI4 = D8, // PB4
234  PCI5 = D9, // PB5
235  PCI6 = D10, // PB6
236  PCI7 = D11 // PB7/Not used
237  } __attribute__((packed));
238 
242  enum {
243  ANALOG_PIN_MAX = 12,
244  DIGITAL_PIN_MAX = 24,
245  EXT_PIN_MAX = 4,
246  PCI_PIN_MAX = 8,
247  PWM_PIN_MAX = 7
248  };
249 
253  enum TWIPin {
254  SDA = 1, // PD1/D2
255  SCL = 0 // PD0/D3
256  } __attribute__((packed));
257 
262  enum SPIPin {
263  SS = 0, // PB0/D20
264  SCK = 1, // PB1/D21
265  MOSI = 2, // PB2/D22
266  MISO = 3 // PB3/D23
267  } __attribute__((packed));
268 
272  enum {
273  VBG = (_BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1)),
274  UART_MAX = 2,
275  EXT_MAX = 7,
276  PCMSK_MAX = 1,
277  PCINT_MAX = 8
278  } __attribute__((packed));
279 };
280 
284 #define UCSZ00 UCSZ10
285 #define UCSZ01 UCSZ11
286 #define UCSZ02 UCSZ12
287 #define UPM00 UPM10
288 #define UPM01 UPM11
289 #define USBS0 USBS1
290 #define U2X0 U2X1
291 #define TXC0 TXC1
292 #define RXCIE0 RXCIE1
293 #define RXEN0 RXEN1
294 #define TXEN0 TXEN1
295 #define UDRE0 UDRE1
296 #define UDRIE0 UDRIE1
297 #define TXCIE0 TXCIE1
298 #if !defined(ADCW)
299 #define ADCW ADC
300 #endif
301 
305 extern "C" {
306  void ADC_vect(void) __attribute__ ((signal));
307  void ANALOG_COMP_vect(void) __attribute__ ((signal));
308  void INT0_vect(void) __attribute__ ((signal));
309  void INT1_vect(void) __attribute__ ((signal));
310  void INT2_vect(void) __attribute__ ((signal));
311  void INT3_vect(void) __attribute__ ((signal));
312  void INT6_vect(void) __attribute__ ((signal));
313  void PCINT0_vect(void) __attribute__ ((signal));
314  void SPI_STC_vect(void) __attribute__ ((signal));
315  void TIMER0_COMPA_vect(void) __attribute__ ((signal));
316  void TIMER0_COMPB_vect(void) __attribute__ ((signal));
317  void TIMER0_OVF_vect(void) __attribute__ ((signal));
318  void TIMER1_CAPT_vect(void) __attribute__ ((signal));
319  void TIMER1_COMPA_vect(void) __attribute__ ((signal));
320  void TIMER1_COMPB_vect(void) __attribute__ ((signal));
321  void TIMER1_COMPC_vect(void) __attribute__ ((signal));
322  void TIMER1_OVF_vect(void) __attribute__ ((signal));
323  void TIMER3_CAPT_vect(void) __attribute__ ((signal));
324  void TIMER3_COMPA_vect(void) __attribute__ ((signal));
325  void TIMER3_COMPB_vect(void) __attribute__ ((signal));
326  void TIMER3_COMPC_vect(void) __attribute__ ((signal));
327  void TIMER3_OVF_vect(void) __attribute__ ((signal));
328  void TIMER4_COMPA_vect(void) __attribute__ ((signal));
329  void TIMER4_COMPB_vect(void) __attribute__ ((signal));
330  void TIMER4_COMPD_vect(void) __attribute__ ((signal));
331  void TIMER4_FPF_vect(void) __attribute__ ((signal));
332  void TIMER4_OVF_vect(void) __attribute__ ((signal));
333  void TWI_vect(void) __attribute__ ((signal));
334  void WDT_vect(void) __attribute__ ((signal));
335  void USART1_RX_vect(void) __attribute__ ((signal));
336  void USART1_TX_vect(void) __attribute__ ((signal));
337  void USART1_UDRE_vect(void) __attribute__ ((signal));
338  void USB_COM_vect(void) __attribute__ ((signal));
339  void USB_GEN_vect(void) __attribute__ ((signal));
340 }
341 #endif
void TIMER3_COMPA_vect(void)
void USB_COM_vect(void)
void TIMER4_OVF_vect(void)
Definition: Pin.hh:35
void TIMER4_FPF_vect(void)
void TIMER1_OVF_vect(void)
void ADC_vect(void)
void TIMER3_CAPT_vect(void)
void TIMER4_COMPA_vect(void)
void INT6_vect(void)
void TIMER1_COMPC_vect(void)
void TIMER0_COMPB_vect(void)
Definition: LED.hh:32
void ANALOG_COMP_vect(void)
void INT0_vect(void)
void USB_GEN_vect(void)
void WDT_vect(void)
void TIMER4_COMPB_vect(void)
void TIMER0_COMPA_vect(void)
void TWI_vect(void)
#define UNUSED(x)
Definition: Micro.hh:31
friend class UART
Definition: ATmega1284P.hh:39
void TIMER3_OVF_vect(void)
void TIMER3_COMPC_vect(void)
ExternalInterruptPin
Definition: ATmega1284P.hh:190
Definition: UART.hh:59
#define PCMSK0
Definition: ATtinyX5.hh:227
void INT2_vect(void)
void PCINT0_vect(void)
void TIMER4_COMPD_vect(void)
Definition: PWMPin.hh:29
void INT3_vect(void)
void TIMER1_COMPB_vect(void)
void SPI_STC_vect(void)
void USART1_UDRE_vect(void)
Definition: GPIO.hh:30
void TIMER1_CAPT_vect(void)
void USART1_RX_vect(void)
void TIMER1_COMPA_vect(void)
void INT1_vect(void)
void USART1_TX_vect(void)
void TIMER3_COMPB_vect(void)
static void init()
Definition: Micro.hh:138
void TIMER0_OVF_vect(void)