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