COSA
An Object-Oriented Platform for Arduino Programming
Pro_Mini.hh
Go to the documentation of this file.
1 
21 #ifndef COSA_BOARD_ARDUINO_PRO_MINI_HH
22 #define COSA_BOARD_ARDUINO_PRO_MINI_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 
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 ? &PIND :
87  pin < 14 ? &PINB :
88  &PINC);
89  }
90 
97  static uint8_t BIT(uint8_t pin)
98  __attribute__((always_inline))
99  {
100  return (pin < 8 ? pin :
101  pin < 14 ? pin - 8 :
102  pin - 14);
103  }
104 
110  static volatile uint8_t* PCIMR(uint8_t pin)
111  __attribute__((always_inline))
112  {
113  return (pin < 8 ? &PCMSK2 :
114  pin < 14 ? &PCMSK0 :
115  &PCMSK1);
116  }
117 
123  static volatile uint8_t* UART(uint8_t port)
124  __attribute__((always_inline))
125  {
126  UNUSED(port);
127  return (&UCSR0A);
128  }
129 
130 public:
134  static void init() {}
135 
139  enum DigitalPin {
140  D0 = 0, // PD0
141  D1, // PD1
142  D2, // PD2
143  D3, // PD3
144  D4, // PD4
145  D5, // PD5
146  D6, // PD6
147  D7, // PD7
148  D8, // PB0
149  D9, // PB1
150  D10, // PB2
151  D11, // PB3
152  D12, // PB4
153  D13, // PB5
154  D14, // PC0
155  D15, // PC1
156  D16, // PC2
157  D17, // PC3
158  D18, // PC4
159  D19, // PC5
160  LED = D13
161  } __attribute__((packed));
162 
166  enum AnalogPin {
167  A0 = 0, // PC0/D14
168  A1, // PC1/D15
169  A2, // PC2/D16
170  A3, // PC3/D17
171  A4, // PC4/D18
172  A5, // PC5/D19
173  A6,
174  A7
175  } __attribute__((packed));
176 
180  enum Reference {
181  APIN_REFERENCE = 0,
182  AVCC_REFERENCE = _BV(REFS0),
183  A1V1_REFERENCE = (_BV(REFS1) | _BV(REFS0))
184  } __attribute__((packed));
185 
190  enum PWMPin {
191  PWM0 = D3, // PD3 => OCR2B
192  PWM1 = D5, // PD5 => OCR0B
193  PWM2 = D6, // PD6 => OCR0A
194  PWM3 = D9, // PB1 => OCR1A
195  PWM4 = D10, // PB2 => OCR1B
196  PWM5 = D11 // PB3 => OCR2A
197  } __attribute__((packed));
198 
204  EXT0 = D2, // PD2
205  EXT1 = D3 // PD3
206  } __attribute__((packed));
207 
212  PCI0 = D0, // PD0
213  PCI1 = D1, // PD1
214  PCI2 = D2, // PD2
215  PCI3 = D3, // PD3
216  PCI4 = D4, // PD4
217  PCI5 = D5, // PD5
218  PCI6 = D6, // PD6
219  PCI7 = D7, // PD7
220  PCI8 = D8, // PB0
221  PCI9 = D9, // PB1
222  PCI10 = D10, // PB2
223  PCI11 = D11, // PB3
224  PCI12 = D12, // PB4
225  PCI13 = D13, // PB5
226  PCI14 = D14, // PC0
227  PCI15 = D15, // PC1
228  PCI16 = D16, // PC2
229  PCI17 = D17, // PC3
230  PCI18 = D18, // PC4
231  PCI19 = D19 // PC5
232  } __attribute__((packed));
233 
237  enum {
238  ANALOG_PIN_MAX = 8,
239  DIGITAL_PIN_MAX = 20,
240  EXT_PIN_MAX = 2,
241  PCI_PIN_MAX = 20,
242  PWM_PIN_MAX = 6
243  };
244 
248  enum TWIPin {
249  SDA = 4, // PC4/A4
250  SCL = 5 // PC5/A5
251  } __attribute__((packed));
252 
256  enum SPIPin {
257  SS = 2, // PB2/D10
258  MOSI = 3, // PB3/D11/ICSP
259  MISO = 4, // PB4/D12/ICSP
260  SCK = 5 // PB5/D13/ICSP
261  } __attribute__((packed));
262 
266  enum {
267  VBG = (_BV(MUX3) | _BV(MUX2) | _BV(MUX1)),
268  UART_MAX = 1,
269  EXT_MAX = 2,
270  PCMSK_MAX = 3,
271  PCINT_MAX = 24
272  } __attribute__((packed));
273 };
274 
278 extern "C" {
279  void ADC_vect(void) __attribute__ ((signal));
280  void ANALOG_COMP_vect(void) __attribute__ ((signal));
281  void INT0_vect(void) __attribute__ ((signal));
282  void INT1_vect(void) __attribute__ ((signal));
283  void PCINT0_vect(void) __attribute__ ((signal));
284  void PCINT1_vect(void) __attribute__ ((signal));
285  void PCINT2_vect(void) __attribute__ ((signal));
286  void SPI_STC_vect(void) __attribute__ ((signal));
287  void TIMER0_COMPA_vect(void) __attribute__ ((signal));
288  void TIMER0_COMPB_vect(void) __attribute__ ((signal));
289  void TIMER0_OVF_vect(void) __attribute__ ((signal));
290  void TIMER1_CAPT_vect(void) __attribute__ ((signal));
291  void TIMER1_COMPA_vect(void) __attribute__ ((signal));
292  void TIMER1_COMPB_vect(void) __attribute__ ((signal));
293  void TIMER1_OVF_vect(void) __attribute__ ((signal));
294  void TIMER2_COMPA_vect(void) __attribute__ ((signal));
295  void TIMER2_COMPB_vect(void) __attribute__ ((signal));
296  void TIMER2_OVF_vect(void) __attribute__ ((signal));
297  void TWI_vect(void) __attribute__ ((signal));
298  void WDT_vect(void) __attribute__ ((signal));
299  void USART_RX_vect(void) __attribute__ ((signal));
300  void USART_TX_vect(void) __attribute__ ((signal));
301  void USART_UDRE_vect(void) __attribute__ ((signal));
302 }
303 #endif
void ANALOG_COMP_vect(void)
void TIMER1_COMPB_vect(void)
#define UNUSED(x)
Definition: Pro_Mini.hh:31
void TIMER0_OVF_vect(void)
Definition: Pin.hh:35
void TIMER1_COMPA_vect(void)
void USART_TX_vect(void)
void INT0_vect(void)
void TWI_vect(void)
Definition: LED.hh:32
void USART_UDRE_vect(void)
void TIMER2_COMPB_vect(void)
void USART_RX_vect(void)
friend class UART
Definition: ATmega1284P.hh:39
void PCINT1_vect(void)
ExternalInterruptPin
Definition: ATmega1284P.hh:190
void INT1_vect(void)
Definition: UART.hh:59
void TIMER0_COMPB_vect(void)
#define PCMSK0
Definition: ATtinyX5.hh:227
Definition: PWMPin.hh:29
void PCINT0_vect(void)
void TIMER1_CAPT_vect(void)
void ADC_vect(void)
void TIMER2_COMPA_vect(void)
Definition: GPIO.hh:30
void SPI_STC_vect(void)
void WDT_vect(void)
void TIMER2_OVF_vect(void)
void TIMER1_OVF_vect(void)
void PCINT2_vect(void)
void TIMER0_COMPA_vect(void)
static void init()
Definition: Pro_Mini.hh:134