COSA
An Object-Oriented Platform for Arduino Programming
Diecimila.hh
Go to the documentation of this file.
1 
21 #ifndef COSA_BOARD_ARDUINO_DIECIMILA_HH
22 #define COSA_BOARD_ARDUINO_DIECIMILA_HH
23 
24 /* This board is based on ATmega168 */
25 #define BOARD_ATMEGA168
26 
30 #if !defined(UNUSED)
31 #define UNUSED(x) (void) (x)
32 #endif
33 
76 class Board {
77  friend class Pin;
78  friend class GPIO;
79  friend class UART;
80 private:
84  Board() {}
85 
91  static volatile uint8_t* SFR(uint8_t pin)
92  __attribute__((always_inline))
93  {
94  return (pin < 8 ? &PIND :
95  pin < 14 ? &PINB :
96  &PINC);
97  }
98 
105  static uint8_t BIT(uint8_t pin)
106  __attribute__((always_inline))
107  {
108  return (pin < 8 ? pin :
109  pin < 14 ? pin - 8 :
110  pin - 14);
111  }
112 
118  static volatile uint8_t* PCIMR(uint8_t pin)
119  __attribute__((always_inline))
120  {
121  return (pin < 8 ? &PCMSK2 :
122  pin < 14 ? &PCMSK0 :
123  &PCMSK1);
124  }
125 
131  static volatile uint8_t* UART(uint8_t port)
132  __attribute__((always_inline))
133  {
134  UNUSED(port);
135  return (&UCSR0A);
136  }
137 
138 public:
142  static void init() {}
143 
147  enum DigitalPin {
148  D0 = 0, // PD0
149  D1, // PD1
150  D2, // PD2
151  D3, // PD3
152  D4, // PD4
153  D5, // PD5
154  D6, // PD6
155  D7, // PD7
156  D8, // PB0
157  D9, // PB1
158  D10, // PB2
159  D11, // PB3
160  D12, // PB4
161  D13, // PB5
162  D14, // PC0
163  D15, // PC1
164  D16, // PC2
165  D17, // PC3
166  D18, // PC4
167  D19, // PC5
168  LED = D13
169  } __attribute__((packed));
170 
174  enum AnalogPin {
175  A0 = 0, // PC0/D14
176  A1, // PC1/D15
177  A2, // PC2/D16
178  A3, // PC3/D17
179  A4, // PC4/D18
180  A5 // PC5/D19
181  } __attribute__((packed));
182 
186  enum Reference {
187  APIN_REFERENCE = 0,
188  AVCC_REFERENCE = _BV(REFS0),
189  A1V1_REFERENCE = (_BV(REFS1) | _BV(REFS0))
190  } __attribute__((packed));
191 
196  enum PWMPin {
197  PWM0 = D3, // PD3 => OCR2B
198  PWM1 = D5, // PD5 => OCR0B
199  PWM2 = D6, // PD6 => OCR0A
200  PWM3 = D9, // PB1 => OCR1A
201  PWM4 = D10, // PB2 => OCR1B
202  PWM5 = D11 // PB3 => OCR2A
203  } __attribute__((packed));
204 
210  EXT0 = D2, // PD2
211  EXT1 = D3 // PD3
212  } __attribute__((packed));
213 
218  PCI0 = D0, // PD0
219  PCI1 = D1, // PD1
220  PCI2 = D2, // PD2
221  PCI3 = D3, // PD3
222  PCI4 = D4, // PD4
223  PCI5 = D5, // PD5
224  PCI6 = D6, // PD6
225  PCI7 = D7, // PD7
226  PCI8 = D8, // PB0
227  PCI9 = D9, // PB1
228  PCI10 = D10, // PB2
229  PCI11 = D11, // PB3
230  PCI12 = D12, // PB4
231  PCI13 = D13, // PB5
232  PCI14 = D14, // PC0
233  PCI15 = D15, // PC1
234  PCI16 = D16, // PC2
235  PCI17 = D17, // PC3
236  PCI18 = D18, // PC4
237  PCI19 = D19 // PC5
238  } __attribute__((packed));
239 
243  enum {
244  ANALOG_PIN_MAX = 6,
245  DIGITAL_PIN_MAX = 20,
246  EXT_PIN_MAX = 2,
247  PCI_PIN_MAX = 20,
248  PWM_PIN_MAX = 6
249  };
250 
254  enum TWIPin {
255  SDA = 4, // PA4/A4
256  SCL = 5 // PA4/A5
257  } __attribute__((packed));
258 
262  enum SPIPin {
263  SS = 2, // PB2/D10
264  MOSI = 3, // PB3/D11/ICSP
265  MISO = 4, // PB4/D12/ICSP
266  SCK = 5 // PB5/D13/ICSP
267  } __attribute__((packed));
268 
272  enum {
273  VBG = (_BV(MUX3) | _BV(MUX2) | _BV(MUX1)),
274  UART_MAX = 1,
275  EXT_MAX = 2,
276  PCMSK_MAX = 3,
277  PCINT_MAX = 24
278  } __attribute__((packed));
279 };
280 
284 extern "C" {
285  void ADC_vect(void) __attribute__ ((signal));
286  void ANALOG_COMP_vect(void) __attribute__ ((signal));
287  void INT0_vect(void) __attribute__ ((signal));
288  void INT1_vect(void) __attribute__ ((signal));
289  void PCINT0_vect(void) __attribute__ ((signal));
290  void PCINT1_vect(void) __attribute__ ((signal));
291  void PCINT2_vect(void) __attribute__ ((signal));
292  void SPI_STC_vect(void) __attribute__ ((signal));
293  void TIMER0_COMPA_vect(void) __attribute__ ((signal));
294  void TIMER0_COMPB_vect(void) __attribute__ ((signal));
295  void TIMER0_OVF_vect(void) __attribute__ ((signal));
296  void TIMER1_CAPT_vect(void) __attribute__ ((signal));
297  void TIMER1_COMPA_vect(void) __attribute__ ((signal));
298  void TIMER1_COMPB_vect(void) __attribute__ ((signal));
299  void TIMER1_OVF_vect(void) __attribute__ ((signal));
300  void TIMER2_COMPA_vect(void) __attribute__ ((signal));
301  void TIMER2_COMPB_vect(void) __attribute__ ((signal));
302  void TIMER2_OVF_vect(void) __attribute__ ((signal));
303  void TWI_vect(void) __attribute__ ((signal));
304  void WDT_vect(void) __attribute__ ((signal));
305  void USART_RX_vect(void) __attribute__ ((signal));
306  void USART_TX_vect(void) __attribute__ ((signal));
307  void USART_UDRE_vect(void) __attribute__ ((signal));
308 }
309 #endif
void PCINT0_vect(void)
void INT0_vect(void)
void INT1_vect(void)
void PCINT1_vect(void)
void TIMER2_OVF_vect(void)
void USART_RX_vect(void)
Definition: Pin.hh:35
#define UNUSED(x)
Definition: Diecimila.hh:31
void TIMER1_CAPT_vect(void)
void SPI_STC_vect(void)
void TIMER1_COMPA_vect(void)
void ANALOG_COMP_vect(void)
void TIMER1_OVF_vect(void)
Definition: LED.hh:32
void USART_TX_vect(void)
friend class UART
Definition: ATmega1284P.hh:39
void WDT_vect(void)
void TIMER0_COMPB_vect(void)
ExternalInterruptPin
Definition: ATmega1284P.hh:190
Definition: UART.hh:59
#define PCMSK0
Definition: ATtinyX5.hh:227
Definition: PWMPin.hh:29
void TIMER2_COMPB_vect(void)
void TWI_vect(void)
Definition: GPIO.hh:30
void USART_UDRE_vect(void)
void TIMER1_COMPB_vect(void)
void TIMER0_COMPA_vect(void)
void ADC_vect(void)
void TIMER0_OVF_vect(void)
void PCINT2_vect(void)
static void init()
Definition: Diecimila.hh:142
void TIMER2_COMPA_vect(void)