AVR-LibC  2.3.0git
Standard C library for AVR-GCC
 

AVR-LibC Documen­tation

AVR-LibC Development Pages

Main Page

User Manual

Library Refe­rence

FAQ

Example Projects

File List

Index

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