COSA
An Object-Oriented Platform for Arduino Programming
LilyPad_USB.hh
Go to the documentation of this file.
1 
21 #ifndef COSA_BOARD_ARDUINO_LILYPAD_USB_HH
22 #define COSA_BOARD_ARDUINO_LILYPAD_USB_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 
63 class Board {
64  friend class Pin;
65  friend class GPIO;
66  friend class UART;
67 private:
71  Board() {}
72 
78  static volatile uint8_t* SFR(uint8_t pin)
79  __attribute__((always_inline))
80  {
81  return (pin < 8 ? &PINB :
82  pin < 16 ? &PINC :
83  pin < 24 ? &PIND :
84  pin < 32 ? &PINE :
85  &PINF);
86  }
87 
94  static uint8_t BIT(uint8_t pin)
95  __attribute__((always_inline))
96  {
97  return (pin & 0x07);
98  }
99 
105  static volatile uint8_t* PCIMR(uint8_t pin)
106  __attribute__((always_inline))
107  {
108  UNUSED(pin);
109  return (&PCMSK0);
110  }
111 
117  static volatile uint8_t* UART(uint8_t port)
118  __attribute__((always_inline))
119  {
120  UNUSED(port);
121  return (&UCSR1A);
122  }
123 
124 public:
128  static void init() {}
129 
133  enum DigitalPin {
134  D0 = 18, // PD2/Not used
135  D1 = 19, // PD3/Not used
136  D2 = 17, // PD1
137  D3 = 16, // PD0
138  D4 = 20, // PD4/Not used
139  D5 = 14, // PC6/Not used
140  D6 = 23, // PD7/Not used
141  D7 = 30, // PE6/Not used
142  D8 = 4, // PB4/Not used
143  D9 = 5, // PB5
144  D10 = 6, // PB6
145  D11 = 7, // PB7
146  D12 = 22, // PD6/Not used
147  D13 = 15, // PC7/Not used
148  D14 = 39, // PF7/Not used
149  D15 = 38, // PF6/Not used
150  D16 = 37, // PF5
151  D17 = 36, // PF4
152  D18 = 33, // PF1
153  D19 = 32, // PF0
154  D20 = 0, // PB0/Not used
155  D21 = 1, // PB1/ISCP
156  D22 = 2, // PB2/ISCP
157  D23 = 3, // PB3/ISCP
158  LED = 15, // PC7
159  TXLED = 0, // Green
160  RXLED = 21 // Yellow
161  } __attribute__((packed));
162 
166  enum AnalogPin {
167  A0 = 7, // PF7/D14/Not used
168  A1 = 6, // PF6/D15/Not used
169  A2 = 5, // PF5/D16
170  A3 = 4, // PF4/D17
171  A4 = 1, // PF1/D18
172  A5 = 0, // PF0/D19
173  A6 = 32, // PD4/D4/Not used
174  A7 = 33, // PD6/D12/Not used
175  A8 = 34, // PD7/D6/Not used
176  A9 = 35, // PB4/D8/Not used
177  A10 = 36, // PB5/D9
178  A11 = 37 // PB6/D10
179  } __attribute__((packed));
180 
184  enum Reference {
185  APIN_REFERENCE = 0,
186  AVCC_REFERENCE = _BV(REFS0),
187  A2V56_REFERENCE = (_BV(REFS1) | _BV(REFS0))
188  } __attribute__((packed));
189 
194  enum PWMPin {
195  PWM0 = D11, // PB7 => OCR0A
196  PWM1 = D3, // PD0 => OCR0B
197  PWM2 = D9, // PB5 => OCR1A
198  PWM3 = D10, // PB6 => OCR1B
199  PWM4 = D5, // PC6 => OCR3A/Not used
200  PWM5 = D13, // PC7 => OCR4A/LED
201  PWM6 = D6 // PD7 => OCR4D/Not used
202  } __attribute__((packed));
203 
209  EXT0 = D3, // PD0
210  EXT1 = D2, // PD1
211  EXT2 = D0, // PD2/Not used
212  EXT3 = D1 // PD3/Not used
213  } __attribute__((packed));
214 
219  PCI0 = D20, // PB0/Not used
220  PCI1 = D21, // PB1/Not used
221  PCI2 = D22, // PB2/Not used
222  PCI3 = D23, // PB3/Not used
223  PCI4 = D8, // PB4/Not used
224  PCI5 = D9, // PB5
225  PCI6 = D10, // PB6
226  PCI7 = D11 // PB7
227  } __attribute__((packed));
228 
232  enum {
233  ANALOG_PIN_MAX = 12,
234  DIGITAL_PIN_MAX = 24,
235  EXT_PIN_MAX = 4,
236  PCI_PIN_MAX = 8,
237  PWM_PIN_MAX = 7
238  };
239 
243  enum TWIPin {
244  SDA = 1, // PD1/D2
245  SCL = 0 // PD0/D3
246  } __attribute__((packed));
247 
251  enum SPIPin {
252  SS = 0, // PB0/D20/Not used
253  SCK = 1, // PB1/D21/ICSP
254  MOSI = 2, // PB2/D22/ICSP
255  MISO = 3 // PB3/D23/ICSP
256  } __attribute__((packed));
257 
261  enum {
262  VBG = (_BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1)),
263  UART_MAX = 2,
264  EXT_MAX = 7,
265  PCMSK_MAX = 1,
266  PCINT_MAX = 8
267  } __attribute__((packed));
268 };
269 
273 #define UCSZ00 UCSZ10
274 #define UCSZ01 UCSZ11
275 #define UCSZ02 UCSZ12
276 #define UPM00 UPM10
277 #define UPM01 UPM11
278 #define USBS0 USBS1
279 #define U2X0 U2X1
280 #define TXC0 TXC1
281 #define RXCIE0 RXCIE1
282 #define RXEN0 RXEN1
283 #define TXEN0 TXEN1
284 #define UDRE0 UDRE1
285 #define UDRIE0 UDRIE1
286 #define TXCIE0 TXCIE1
287 #if !defined(ADCW)
288 #define ADCW ADC
289 #endif
290 
294 extern "C" {
295  void ADC_vect(void) __attribute__ ((signal));
296  void ANALOG_COMP_vect(void) __attribute__ ((signal));
297  void INT0_vect(void) __attribute__ ((signal));
298  void INT1_vect(void) __attribute__ ((signal));
299  void INT2_vect(void) __attribute__ ((signal));
300  void INT3_vect(void) __attribute__ ((signal));
301  void INT6_vect(void) __attribute__ ((signal));
302  void PCINT0_vect(void) __attribute__ ((signal));
303  void SPI_STC_vect(void) __attribute__ ((signal));
304  void TIMER0_COMPA_vect(void) __attribute__ ((signal));
305  void TIMER0_COMPB_vect(void) __attribute__ ((signal));
306  void TIMER0_OVF_vect(void) __attribute__ ((signal));
307  void TIMER1_CAPT_vect(void) __attribute__ ((signal));
308  void TIMER1_COMPA_vect(void) __attribute__ ((signal));
309  void TIMER1_COMPB_vect(void) __attribute__ ((signal));
310  void TIMER1_COMPC_vect(void) __attribute__ ((signal));
311  void TIMER1_OVF_vect(void) __attribute__ ((signal));
312  void TIMER3_CAPT_vect(void) __attribute__ ((signal));
313  void TIMER3_COMPA_vect(void) __attribute__ ((signal));
314  void TIMER3_COMPB_vect(void) __attribute__ ((signal));
315  void TIMER3_COMPC_vect(void) __attribute__ ((signal));
316  void TIMER3_OVF_vect(void) __attribute__ ((signal));
317  void TIMER4_COMPA_vect(void) __attribute__ ((signal));
318  void TIMER4_COMPB_vect(void) __attribute__ ((signal));
319  void TIMER4_COMPD_vect(void) __attribute__ ((signal));
320  void TIMER4_FPF_vect(void) __attribute__ ((signal));
321  void TIMER4_OVF_vect(void) __attribute__ ((signal));
322  void TWI_vect(void) __attribute__ ((signal));
323  void WDT_vect(void) __attribute__ ((signal));
324  void USART1_RX_vect(void) __attribute__ ((signal));
325  void USART1_TX_vect(void) __attribute__ ((signal));
326  void USART1_UDRE_vect(void) __attribute__ ((signal));
327  void USB_COM_vect(void) __attribute__ ((signal));
328  void USB_GEN_vect(void) __attribute__ ((signal));
329 }
330 #endif
void USART1_RX_vect(void)
void ANALOG_COMP_vect(void)
#define UNUSED(x)
Definition: LilyPad_USB.hh:31
void TIMER1_COMPB_vect(void)
void INT2_vect(void)
Definition: Pin.hh:35
void TIMER4_OVF_vect(void)
void TIMER4_FPF_vect(void)
void INT1_vect(void)
void INT3_vect(void)
void TIMER0_COMPA_vect(void)
void USB_COM_vect(void)
Definition: LED.hh:32
void TIMER4_COMPB_vect(void)
void TIMER3_COMPC_vect(void)
void USB_GEN_vect(void)
void TIMER1_COMPA_vect(void)
friend class UART
Definition: ATmega1284P.hh:39
void INT6_vect(void)
void TWI_vect(void)
void TIMER1_OVF_vect(void)
void WDT_vect(void)
ExternalInterruptPin
Definition: ATmega1284P.hh:190
Definition: UART.hh:59
#define PCMSK0
Definition: ATtinyX5.hh:227
Definition: PWMPin.hh:29
void TIMER3_OVF_vect(void)
void TIMER3_COMPA_vect(void)
void PCINT0_vect(void)
void TIMER0_OVF_vect(void)
Definition: GPIO.hh:30
void TIMER4_COMPD_vect(void)
void ADC_vect(void)
void TIMER1_COMPC_vect(void)
void TIMER1_CAPT_vect(void)
void TIMER4_COMPA_vect(void)
void USART1_UDRE_vect(void)
void TIMER3_COMPB_vect(void)
void TIMER0_COMPB_vect(void)
static void init()
Definition: LilyPad_USB.hh:128
void USART1_TX_vect(void)
void TIMER3_CAPT_vect(void)
void INT0_vect(void)
void SPI_STC_vect(void)