COSA
An Object-Oriented Platform for Arduino Programming
Nano.hh
Go to the documentation of this file.
1 
21 #ifndef COSA_BOARD_ARDUINO_NANO_HH
22 #define COSA_BOARD_ARDUINO_NANO_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  A6, // Pin only
173  A7 // Pin only
174  } __attribute__((packed));
175 
179  enum Reference {
180  APIN_REFERENCE = 0,
181  AVCC_REFERENCE = _BV(REFS0),
182  A1V1_REFERENCE = (_BV(REFS1) | _BV(REFS0))
183  } __attribute__((packed));
184 
189  enum PWMPin {
190  PWM0 = D3, // PD3 => OCR2B
191  PWM1 = D5, // PD5 => OCR0B
192  PWM2 = D6, // PD6 => OCR0A
193  PWM3 = D9, // PB1 => OCR1A
194  PWM4 = D10, // PB2 => OCR1B
195  PWM5 = D11 // PB3 => OCR2A
196  } __attribute__((packed));
197 
203  EXT0 = D2, // PD2
204  EXT1 = D3 // PD3
205  } __attribute__((packed));
206 
211  PCI0 = D0, // PD0
212  PCI1 = D1, // PD1
213  PCI2 = D2, // PD2
214  PCI3 = D3, // PD3
215  PCI4 = D4, // PD4
216  PCI5 = D5, // PD5
217  PCI6 = D6, // PD6
218  PCI7 = D7, // PD7
219  PCI8 = D8, // PB0
220  PCI9 = D9, // PB1
221  PCI10 = D10, // PB2
222  PCI11 = D11, // PB3
223  PCI12 = D12, // PB4
224  PCI13 = D13, // PB5
225  PCI14 = D14, // PC0
226  PCI15 = D15, // PC1
227  PCI16 = D16, // PC2
228  PCI17 = D17, // PC3
229  PCI18 = D18, // PC4
230  PCI19 = D19 // PC5
231  } __attribute__((packed));
232 
236  enum {
237  ANALOG_PIN_MAX = 8,
238  DIGITAL_PIN_MAX = 20,
239  EXT_PIN_MAX = 2,
240  PCI_PIN_MAX = 20,
241  PWM_PIN_MAX = 6
242  };
243 
247  enum TWIPin {
248  SDA = 4, // PC4/A4
249  SCL = 5 // PC5/A5
250  } __attribute__((packed));
251 
255  enum SPIPin {
256  SS = 2, // PB2/D10
257  MOSI = 3, // PB3/D11/ICSP
258  MISO = 4, // PB4/D12/ICSP
259  SCK = 5 // PB5/D13/ICSP
260  } __attribute__((packed));
261 
265  enum {
266  VBG = (_BV(MUX3) | _BV(MUX2) | _BV(MUX1)),
267  UART_MAX = 1,
268  EXT_MAX = 2,
269  PCMSK_MAX = 3,
270  PCINT_MAX = 24
271  } __attribute__((packed));
272 };
273 
277 extern "C" {
278  void ADC_vect(void) __attribute__ ((signal));
279  void ANALOG_COMP_vect(void) __attribute__ ((signal));
280  void INT0_vect(void) __attribute__ ((signal));
281  void INT1_vect(void) __attribute__ ((signal));
282  void PCINT0_vect(void) __attribute__ ((signal));
283  void PCINT1_vect(void) __attribute__ ((signal));
284  void PCINT2_vect(void) __attribute__ ((signal));
285  void SPI_STC_vect(void) __attribute__ ((signal));
286  void TIMER0_COMPA_vect(void) __attribute__ ((signal));
287  void TIMER0_COMPB_vect(void) __attribute__ ((signal));
288  void TIMER0_OVF_vect(void) __attribute__ ((signal));
289  void TIMER1_CAPT_vect(void) __attribute__ ((signal));
290  void TIMER1_COMPA_vect(void) __attribute__ ((signal));
291  void TIMER1_COMPB_vect(void) __attribute__ ((signal));
292  void TIMER1_OVF_vect(void) __attribute__ ((signal));
293  void TIMER2_COMPA_vect(void) __attribute__ ((signal));
294  void TIMER2_COMPB_vect(void) __attribute__ ((signal));
295  void TIMER2_OVF_vect(void) __attribute__ ((signal));
296  void TWI_vect(void) __attribute__ ((signal));
297  void WDT_vect(void) __attribute__ ((signal));
298  void USART_RX_vect(void) __attribute__ ((signal));
299  void USART_TX_vect(void) __attribute__ ((signal));
300  void USART_UDRE_vect(void) __attribute__ ((signal));
301 }
302 #endif
void WDT_vect(void)
void TIMER1_COMPA_vect(void)
void TIMER1_COMPB_vect(void)
void TIMER1_OVF_vect(void)
Definition: Pin.hh:35
void TWI_vect(void)
void TIMER1_CAPT_vect(void)
void TIMER2_OVF_vect(void)
void TIMER2_COMPA_vect(void)
void ANALOG_COMP_vect(void)
Definition: LED.hh:32
void TIMER2_COMPB_vect(void)
#define UNUSED(x)
Definition: Nano.hh:31
friend class UART
Definition: ATmega1284P.hh:39
void SPI_STC_vect(void)
void USART_RX_vect(void)
void TIMER0_COMPB_vect(void)
ExternalInterruptPin
Definition: ATmega1284P.hh:190
Definition: UART.hh:59
#define PCMSK0
Definition: ATtinyX5.hh:227
void PCINT0_vect(void)
Definition: PWMPin.hh:29
void USART_UDRE_vect(void)
void ADC_vect(void)
Definition: GPIO.hh:30
void TIMER0_OVF_vect(void)
void PCINT2_vect(void)
void PCINT1_vect(void)
void USART_TX_vect(void)
static void init()
Definition: Nano.hh:133
void INT0_vect(void)
void INT1_vect(void)
void TIMER0_COMPA_vect(void)