COSA
An Object-Oriented Platform for Arduino Programming
ATtinyX61.hh
Go to the documentation of this file.
1 
21 #ifndef COSA_BOARD_ARDUINO_ATTINYX61_HH
22 #define COSA_BOARD_ARDUINO_ATTINYX61_HH
23 
24 /* This board is based on ATtinyX61/ATtiny */
25 #define BOARD_ATTINYX61
26 #define BOARD_ATTINY
27 
57 class Board {
58  friend class Pin;
59  friend class GPIO;
60 private:
64  Board() {}
65 
71  static volatile uint8_t* SFR(uint8_t pin)
72  __attribute__((always_inline))
73  {
74  return (pin < 8 ? &PINA : &PINB);
75  }
76 
83  static uint8_t BIT(uint8_t pin)
84  __attribute__((always_inline))
85  {
86  return (pin < 8 ? pin : pin - 8);
87  }
88 
94  static volatile uint8_t* PCIMR(uint8_t pin)
95  __attribute__((always_inline))
96  {
97  return (pin < 8 ? &PCMSK0 : &PCMSK1);
98  }
99 
104  static volatile uint8_t* USI()
105  __attribute__((always_inline))
106  {
107  return (&PINA);
108  }
109 
110 public:
114  static void init() {}
115 
119  enum DigitalPin {
120  D0 = 0, // PA0
121  D1, // PA1
122  D2, // PA2
123  D3, // PA3
124  D4, // PA4
125  D5, // PA5
126  D6, // PA6
127  D7, // PA7
128  D8, // PB0
129  D9, // PB1
130  D10, // PB2
131  D11, // PB3
132  D12, // PB4
133  D13, // PB5
134  D14, // PB6
135  D15, // PB7
136  LED = D5
137  } __attribute__((packed));
138 
142  enum AnalogPin {
143  A0 = 0, // PA0/D0
144  A1, // PA1/D1
145  A2, // PA2/D2
146  A3, // PA3/D3
147  A4, // PA4/D4
148  A5, // PA5/D5
149  A6, // PA6/D6
150  A7, // PA7/D7
151  A8, // PB5/D13
152  A9, // PB6/D14
153  A10 // PB7/D15
154  } __attribute__((packed));
155 
159  enum Reference {
160  AVCC_REFERENCE = 0,
161  APIN_REFERENCE = _BV(REFS0),
162  A1V1_REFERENCE = _BV(REFS1),
163  A2V56_REFERENCE = (_BV(REFS2) | _BV(REFS1))
164  } __attribute__((packed));
165 
170  enum PWMPin {
171  PWM0 = D9, // PB1 => OCR1A
172  PWM1 = D11, // PB3 => OCR1B
173  PWM2 = D13 // PB5 => OCR1C
174  } __attribute__((packed));
175 
181  EXT0 = D14, // PB6
182  EXT1 = D2 // PA2
183  } __attribute__((packed));
184 
189  PCI0 = D0, // PA0
190  PCI1 = D1, // PA1
191  PCI2 = D2, // PA2
192  PCI3 = D3, // PA3
193  PCI4 = D4, // PA4
194  PCI5 = D5, // PA5
195  PCI6 = D6, // PA6
196  PCI7 = D7, // PA7
197  PCI8 = D8, // PB0
198  PCI9 = D9, // PB1
199  PCI10 = D10, // PB2
200  PCI11 = D11, // PB3
201  PCI12 = D12, // PB4
202  PCI13 = D13, // PB5
203  PCI14 = D14, // PB6
204  PCI15 = D15 // PB7
205  } __attribute__((packed));
206 
210  enum {
211  ANALOG_PIN_MAX = 11,
212  DIGITAL_PIN_MAX = 16,
213  EXT_PIN_MAX = 2,
214  PCI_PIN_MAX = 16,
215  PWM_PIN_MAX = 3
216  };
217 
221  enum TWIPin {
222  SDA = 0, // PB2/D8
223  SCL = 2 // PB2/D10
224  } __attribute__((packed));
225 
229  enum SPIPin {
230  MISO = 0, // PA0/D0
231  MOSI = 1, // PA1/D1
232  SCK = 2, // PA2/D2
233  SS = 3 // PA3/D3
234  } __attribute__((packed));
235 
239  enum {
240  VBG = (_BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1)),
241  EXT_MAX = 2,
242  PCMSK_MAX = 2,
243  PCINT_MAX = 16
244  } __attribute__((packed));
245 };
246 
250 #define ANALOG_COMP_vect ANA_COMP_vect
251 #define PCINT0_vect PCINT_vect
252 #define ACSR ACSRB
253 #define WGM01 WGM00
254 #define TIMSK0 TIMSK
255 #define TIMSK1 TIMSK
256 #define TCNT0 TCNT0L
257 #define TIFR0 TIFR
258 #define WDTCSR WDTCR
259 
263 extern "C" {
264  void ADC_vect(void) __attribute__ ((signal));
265  void ANALOG_COMP_vect(void) __attribute__ ((signal));
266  void INT0_vect(void) __attribute__ ((signal));
267  void INT1_vect(void) __attribute__ ((signal));
268  void PCINT0_vect(void) __attribute__ ((signal));
269  void TIMER0_CAPT_vect(void) __attribute__ ((signal));
270  void TIMER0_COMPA_vect(void) __attribute__ ((signal));
271  void TIMER0_COMPB_vect(void) __attribute__ ((signal));
272  void TIMER0_OVF_vect(void) __attribute__ ((signal));
273  void TIMER1_COMPA_vect(void) __attribute__ ((signal));
274  void TIMER1_COMPB_vect(void) __attribute__ ((signal));
275  void TIMER1_OVF_vect(void) __attribute__ ((signal));
276  void WDT_vect(void) __attribute__ ((signal));
277  void USI_START_vect(void) __attribute__ ((signal));
278  void USI_OVF_vect(void) __attribute__ ((signal));
279 }
280 #endif
void TIMER0_COMPB_vect(void)
Definition: Pin.hh:35
void WDT_vect(void)
void INT0_vect(void)
void TIMER0_OVF_vect(void)
void TIMER1_OVF_vect(void)
void TIMER0_CAPT_vect(void)
void USI_OVF_vect(void)
Definition: LED.hh:32
void USI_START_vect(void)
void INT1_vect(void)
void TIMER1_COMPA_vect(void)
void TIMER0_COMPA_vect(void)
void TIMER1_COMPB_vect(void)
#define PCINT0_vect
Definition: ATtinyX61.hh:251
ExternalInterruptPin
Definition: ATmega1284P.hh:190
#define PCMSK0
Definition: ATtinyX5.hh:227
void ADC_vect(void)
Definition: PWMPin.hh:29
#define ANALOG_COMP_vect
Definition: ATtinyX61.hh:250
Definition: GPIO.hh:30
static void init()
Definition: ATtinyX61.hh:114