AVR-LibC  2.2.0
Standard C library for AVR-GCC
 

AVR-LibC Documentation

Logo

AVR-LibC Development Pages

Main Page

User Manual

Library Reference

FAQ

Example Projects

File List

Loading...
Searching...
No Matches
iocompat.h
1/*
2 * ----------------------------------------------------------------------------
3 * "THE BEER-WARE LICENSE" (Revision 42):
4 * <joerg@FreeBSD.ORG> wrote this file. As long as you retain this notice you
5 * can do whatever you want with this stuff. If we meet some day, and you think
6 * this stuff is worth it, you can buy me a beer in return. Joerg Wunsch
7 * ----------------------------------------------------------------------------
8 *
9 * IO feature compatibility definitions for various AVRs.
10 *
11 * $Id$
12 */
13
14#if !defined(IOCOMPAT_H)
15#define IOCOMPAT_H 1
16
17/*
18 * Device-specific adjustments:
19 *
20 * Supply definitions for the location of the OCR1[A] port/pin, the
21 * name of the OCR register controlling the PWM, and adjust interrupt
22 * vector names that differ from the one used in demo.c
23 * [TIMER1_OVF_vect].
24 */
25#if defined(__AVR_AT90S2313__)
26# define OC1 PB3
27# define OCR OCR1
28# define DDROC DDRB
29# define TIMER1_OVF_vect TIMER1_OVF1_vect
30#elif defined(__AVR_AT90S2333__) || defined(__AVR_AT90S4433__)
31# define OC1 PB1
32# define DDROC DDRB
33# define OCR OCR1
34#elif defined(__AVR_AT90S4414__) || defined(__AVR_AT90S8515__) || \
35 defined(__AVR_AT90S4434__) || defined(__AVR_AT90S8535__) || \
36 defined(__AVR_ATmega163__) || defined(__AVR_ATmega8515__) || \
37 defined(__AVR_ATmega8535__) || \
38 defined(__AVR_ATmega164P__) || defined(__AVR_ATmega324P__) || \
39 defined(__AVR_ATmega644__) || defined(__AVR_ATmega644P__) || \
40 defined(__AVR_ATmega1284P__)
41# define OC1 PD5
42# define DDROC DDRD
43# define OCR OCR1A
44# if !defined(TIMSK) /* new ATmegas */
45# define TIMSK TIMSK1
46# endif
47#elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega48__) || \
48 defined(__AVR_ATmega88__) || defined(__AVR_ATmega168__)
49# define OC1 PB1
50# define DDROC DDRB
51# define OCR OCR1A
52# if !defined(TIMSK) /* ATmega48/88/168 */
53# define TIMSK TIMSK1
54# endif /* !defined(TIMSK) */
55#elif defined(__AVR_ATtiny2313__)
56# define OC1 PB3
57# define OCR OCR1A
58# define DDROC DDRB
59#elif defined(__AVR_ATtiny24__) || defined(__AVR_ATtiny44__) || \
60 defined(__AVR_ATtiny84__)
61# define OC1 PA6
62# define DDROC DDRA
63# if !defined(OCR1A)
64# /* work around misspelled name in AVR-LibC 1.4.[0..1] */
65# define OCR OCRA1
66# else
67# define OCR OCR1A
68# endif
69# define TIMSK TIMSK1
70# define TIMER1_OVF_vect TIM1_OVF_vect /* XML and datasheet mismatch */
71#elif defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || \
72 defined(__AVR_ATtiny85__)
73/* Timer 1 is only an 8-bit timer on these devices. */
74# define OC1 PB1
75# define DDROC DDRB
76# define OCR OCR1A
77# define TCCR1A TCCR1
78# define TCCR1B TCCR1
79# define TIMER1_OVF_vect TIM1_OVF_vect
80# define TIMER1_TOP 255 /* only 8-bit PWM possible */
81# define TIMER1_PWM_INIT _BV(PWM1A) | _BV(COM1A1)
82# define TIMER1_CLOCKSOURCE _BV(CS12) /* use 1/8 prescaler */
83#elif defined(__AVR_ATtiny26__)
84/* Rather close to ATtinyX5 but different enough for its own section. */
85# define OC1 PB1
86# define DDROC DDRB
87# define OCR OCR1A
88# define TIMER1_OVF_vect TIMER1_OVF1_vect
89# define TIMER1_TOP 255 /* only 8-bit PWM possible */
90# define TIMER1_PWM_INIT _BV(PWM1A) | _BV(COM1A1)
91# define TIMER1_CLOCKSOURCE _BV(CS12) /* use 1/8 prescaler */
92/*
93 * Without setting OCR1C to TOP, the ATtiny26 does not trigger an
94 * overflow interrupt in PWM mode.
95 */
96# define TIMER1_SETUP_HOOK() OCR1C = 255
97#elif defined(__AVR_ATtiny261__) || defined(__AVR_ATtiny461__) || \
98 defined(__AVR_ATtiny861__)
99# define OC1 PB1
100# define DDROC DDRB
101# define OCR OCR1A
102# define TIMER1_PWM_INIT _BV(WGM10) | _BV(PWM1A) | _BV(COM1A1)
103/*
104 * While timer 1 could be operated in 10-bit mode on these devices,
105 * the handling of the 10-bit IO registers is more complicated than
106 * that of the 16-bit registers of other AVR devices (no combined
107 * 16-bit IO operations possible), so we restrict this demo to 8-bit
108 * mode which is pretty standard.
109 */
110# define TIMER1_TOP 255
111# define TIMER1_CLOCKSOURCE _BV(CS12) /* use 1/8 prescaler */
112#elif defined(__AVR_ATmega32__) || defined(__AVR_ATmega16__)
113# define OC1 PD5
114# define DDROC DDRD
115# define OCR OCR1A
116#elif defined(__AVR_ATmega64__) || defined(__AVR_ATmega128__) || \
117 defined(__AVR_ATmega165__) || defined(__AVR_ATmega169__) || \
118 defined(__AVR_ATmega325__) || defined(__AVR_ATmega3250__) || \
119 defined(__AVR_ATmega645__) || defined(__AVR_ATmega6450__) || \
120 defined(__AVR_ATmega329__) || defined(__AVR_ATmega3290__) || \
121 defined(__AVR_ATmega649__) || defined(__AVR_ATmega6490__) || \
122 defined(__AVR_ATmega640__) || \
123 defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || \
124 defined(__AVR_ATmega2560__) || defined(__AVR_ATmega2561__) || \
125 defined(__AVR_ATmega32U4__)
126# define OC1 PB5
127# define DDROC DDRB
128# define OCR OCR1A
129# if !defined(PB5) /* work around missing bit definition */
130# define PB5 5
131# endif
132# if !defined(TIMSK) /* new ATmegas */
133# define TIMSK TIMSK1
134# endif
135#else
136# error "Don't know what kind of MCU you are compiling for"
137#endif
138
139/*
140 * Map register names for older AVRs here.
141 */
142#if !defined(COM1A1)
143# define COM1A1 COM11
144#endif
145
146#if !defined(WGM10)
147# define WGM10 PWM10
148# define WGM11 PWM11
149#endif
150
151/*
152 * Provide defaults for device-specific macros unless overridden
153 * above.
154 */
155#if !defined(TIMER1_TOP)
156# define TIMER1_TOP 1023 /* 10-bit PWM */
157#endif
158
159#if !defined(TIMER1_PWM_INIT)
160# define TIMER1_PWM_INIT _BV(WGM10) | _BV(WGM11) | _BV(COM1A1)
161#endif
162
163#if !defined(TIMER1_CLOCKSOURCE)
164# define TIMER1_CLOCKSOURCE _BV(CS10) /* full clock */
165#endif
166
167#endif /* !defined(IOCOMPAT_H) */