COSA
An Object-Oriented Platform for Arduino Programming
LilyPad.hh
Go to the documentation of this file.
1 
21 #ifndef COSA_BOARD_ARDUINO_LILYPAD_HH
22 #define COSA_BOARD_ARDUINO_LILYPAD_HH
23 
24 /* This board is based on ATmega328P */
25 #define BOARD_ATMEGA328P
26 
30 #if !defined(UNUSED)
31 #define UNUSED(x) (void) (x)
32 #endif
33 
67 class Board {
68  friend class Pin;
69  friend class GPIO;
70  friend class UART;
71 private:
75  Board() {}
76 
82  static volatile uint8_t* SFR(uint8_t pin)
83  __attribute__((always_inline))
84  {
85  return (pin < 8 ? &PIND :
86  pin < 14 ? &PINB :
87  &PINC);
88  }
89 
96  static uint8_t BIT(uint8_t pin)
97  __attribute__((always_inline))
98  {
99  return (pin < 8 ? pin :
100  pin < 14 ? pin - 8 :
101  pin - 14);
102  }
103 
109  static volatile uint8_t* PCIMR(uint8_t pin)
110  __attribute__((always_inline))
111  {
112  return (pin < 8 ? &PCMSK2 :
113  pin < 14 ? &PCMSK0 :
114  &PCMSK1);
115  }
116 
122  static volatile uint8_t* UART(uint8_t port)
123  __attribute__((always_inline))
124  {
125  UNUSED(port);
126  return (&UCSR0A);
127  }
128 
129 public:
133  static void init() {}
134 
138  enum DigitalPin {
139  D0 = 0, // PD0
140  D1, // PD1
141  D2, // PD2
142  D3, // PD3
143  D4, // PD4
144  D5, // PD5
145  D6, // PD6
146  D7, // PD7
147  D8, // PB0
148  D9, // PB1
149  D10, // PB2
150  D11, // PB3
151  D12, // PB4
152  D13, // PB5
153  D14, // PC0
154  D15, // PC1
155  D16, // PC2
156  D17, // PC3
157  D18, // PC4
158  D19, // PC5
159  LED = D13
160  } __attribute__((packed));
161 
165  enum AnalogPin {
166  A0 = 0, // PC0/D14
167  A1, // PC1/D15
168  A2, // PC2/D16
169  A3, // PC3/D17
170  A4, // PC4/D18
171  A5 // PC5/D19
172  } __attribute__((packed));
173 
177  enum Reference {
178  APIN_REFERENCE = 0,
179  AVCC_REFERENCE = _BV(REFS0),
180  A1V1_REFERENCE = (_BV(REFS1) | _BV(REFS0))
181  } __attribute__((packed));
182 
187  enum PWMPin {
188  PWM0 = D3, // PD3 => OCR2B
189  PWM1 = D5, // PD5 => OCR0B
190  PWM2 = D6, // PD6 => OCR0A
191  PWM3 = D9, // PB1 => OCR1A
192  PWM4 = D10, // PB2 => OCR1B
193  PWM5 = D11 // PB3 => OCR2A
194  } __attribute__((packed));
195 
201  EXT0 = D2, // PD2
202  EXT1 = D3 // PD3
203  } __attribute__((packed));
204 
209  PCI0 = D0, // PD0
210  PCI1 = D1, // PD1
211  PCI2 = D2, // PD2
212  PCI3 = D3, // PD3
213  PCI4 = D4, // PD4
214  PCI5 = D5, // PD5
215  PCI6 = D6, // PD6
216  PCI7 = D7, // PD7
217  PCI8 = D8, // PB0
218  PCI9 = D9, // PB1
219  PCI10 = D10, // PB2
220  PCI11 = D11, // PB3
221  PCI12 = D12, // PB4
222  PCI13 = D13, // PB5
223  PCI14 = D14, // PC0
224  PCI15 = D15, // PC1
225  PCI16 = D16, // PC2
226  PCI17 = D17, // PC3
227  PCI18 = D18, // PC4
228  PCI19 = D19 // PC5
229  } __attribute__((packed));
230 
234  enum {
235  ANALOG_PIN_MAX = 6,
236  DIGITAL_PIN_MAX = 20,
237  EXT_PIN_MAX = 2,
238  PCI_PIN_MAX = 20,
239  PWM_PIN_MAX = 6
240  };
241 
245  enum TWIPin {
246  SDA = 4, // PA4/A4
247  SCL = 5 // PA4/A5
248  } __attribute__((packed));
249 
253  enum SPIPin {
254  SS = 2, // PB2/D10
255  MOSI = 3, // PB3/D11/ICSP
256  MISO = 4, // PB4/D12/ICSP
257  SCK = 5 // PB5/D13/ICSP
258  } __attribute__((packed));
259 
263  enum {
264  VBG = (_BV(MUX3) | _BV(MUX2) | _BV(MUX1)),
265  UART_MAX = 1,
266  EXT_MAX = 2,
267  PCMSK_MAX = 3,
268  PCINT_MAX = 24
269  } __attribute__((packed));
270 };
271 
275 extern "C" {
276  void ADC_vect(void) __attribute__ ((signal));
277  void ANALOG_COMP_vect(void) __attribute__ ((signal));
278  void INT0_vect(void) __attribute__ ((signal));
279  void INT1_vect(void) __attribute__ ((signal));
280  void PCINT0_vect(void) __attribute__ ((signal));
281  void PCINT1_vect(void) __attribute__ ((signal));
282  void PCINT2_vect(void) __attribute__ ((signal));
283  void SPI_STC_vect(void) __attribute__ ((signal));
284  void TIMER0_COMPA_vect(void) __attribute__ ((signal));
285  void TIMER0_COMPB_vect(void) __attribute__ ((signal));
286  void TIMER0_OVF_vect(void) __attribute__ ((signal));
287  void TIMER1_CAPT_vect(void) __attribute__ ((signal));
288  void TIMER1_COMPA_vect(void) __attribute__ ((signal));
289  void TIMER1_COMPB_vect(void) __attribute__ ((signal));
290  void TIMER1_OVF_vect(void) __attribute__ ((signal));
291  void TIMER2_COMPA_vect(void) __attribute__ ((signal));
292  void TIMER2_COMPB_vect(void) __attribute__ ((signal));
293  void TIMER2_OVF_vect(void) __attribute__ ((signal));
294  void TWI_vect(void) __attribute__ ((signal));
295  void WDT_vect(void) __attribute__ ((signal));
296  void USART_RX_vect(void) __attribute__ ((signal));
297  void USART_TX_vect(void) __attribute__ ((signal));
298  void USART_UDRE_vect(void) __attribute__ ((signal));
299 }
300 #endif
void TIMER1_OVF_vect(void)
void TWI_vect(void)
void TIMER2_OVF_vect(void)
Definition: Pin.hh:35
void TIMER0_COMPB_vect(void)
void ANALOG_COMP_vect(void)
Definition: LED.hh:32
void USART_TX_vect(void)
void TIMER0_OVF_vect(void)
void TIMER2_COMPB_vect(void)
void PCINT2_vect(void)
void WDT_vect(void)
friend class UART
Definition: ATmega1284P.hh:39
void TIMER1_COMPB_vect(void)
void TIMER2_COMPA_vect(void)
ExternalInterruptPin
Definition: ATmega1284P.hh:190
Definition: UART.hh:59
void ADC_vect(void)
#define PCMSK0
Definition: ATtinyX5.hh:227
Definition: PWMPin.hh:29
void SPI_STC_vect(void)
void TIMER1_CAPT_vect(void)
void TIMER1_COMPA_vect(void)
Definition: GPIO.hh:30
#define UNUSED(x)
Definition: LilyPad.hh:31
void INT0_vect(void)
void INT1_vect(void)
void PCINT0_vect(void)
void USART_RX_vect(void)
static void init()
Definition: LilyPad.hh:133
void TIMER0_COMPA_vect(void)
void USART_UDRE_vect(void)
void PCINT1_vect(void)