422 lines
10 KiB
C
422 lines
10 KiB
C
#include <avr/io.h>
|
|
#include <util/delay.h>
|
|
|
|
#ifndef DEFS_H
|
|
#define DEFS_H
|
|
|
|
#define PORTN_MAX 0
|
|
|
|
#ifdef DDRA
|
|
# if defined(PORTA7)
|
|
# define PORTAN 8
|
|
# elif defined(PORTA6)
|
|
# define PORTAN 7
|
|
# elif defined(PORTA5)
|
|
# define PORTAN 6
|
|
# elif defined(PORTA4)
|
|
# define PORTAN 5
|
|
# elif defined(PORTA3)
|
|
# define PORTAN 4
|
|
# elif defined(PORTA2)
|
|
# define PORTAN 3
|
|
# elif defined(PORTA1)
|
|
# define PORTAN 2
|
|
# elif defined(PORTA0)
|
|
# define PORTAN 1
|
|
# else
|
|
# define PORTAN 0
|
|
# endif
|
|
#else
|
|
# define PORTAN 0
|
|
#endif
|
|
|
|
#ifdef DDRB
|
|
# if defined(PORTB7)
|
|
# define PORTBN 8
|
|
# elif defined(PORTB6)
|
|
# define PORTBN 7
|
|
# elif defined(PORTB5)
|
|
# define PORTBN 6
|
|
# elif defined(PORTB4)
|
|
# define PORTBN 5
|
|
# elif defined(PORTB3)
|
|
# define PORTBN 4
|
|
# elif defined(PORTB2)
|
|
# define PORTBN 3
|
|
# elif defined(PORTB1)
|
|
# define PORTBN 2
|
|
# elif defined(PORTB0)
|
|
# define PORTBN 1
|
|
# else
|
|
# define PORTBN 0
|
|
# endif
|
|
#else
|
|
# define PORTAN 0
|
|
#endif
|
|
|
|
#ifdef DDRC
|
|
# if defined(PORTC7)
|
|
# define PORTCN 8
|
|
# elif defined(PORTC6)
|
|
# define PORTCN 7
|
|
# elif defined(PORTC5)
|
|
# define PORTCN 6
|
|
# elif defined(PORTC4)
|
|
# define PORTCN 5
|
|
# elif defined(PORTC3)
|
|
# define PORTCN 4
|
|
# elif defined(PORTC2)
|
|
# define PORTCN 3
|
|
# elif defined(PORTC1)
|
|
# define PORTCN 2
|
|
# elif defined(PORTC0)
|
|
# define PORTCN 1
|
|
# else
|
|
# define PORTCN 0
|
|
# endif
|
|
#else
|
|
# define PORTCN 0
|
|
#endif
|
|
|
|
#ifdef DDRD
|
|
# if defined(PORTD7)
|
|
# define PORTDN 8
|
|
# elif defined(PORTD6)
|
|
# define PORTDN 7
|
|
# elif defined(PORTD5)
|
|
# define PORTDN 6
|
|
# elif defined(PORTD4)
|
|
# define PORTDN 5
|
|
# elif defined(PORTD3)
|
|
# define PORTDN 4
|
|
# elif defined(PORTD2)
|
|
# define PORTDN 3
|
|
# elif defined(PORTD1)
|
|
# define PORTDN 2
|
|
# elif defined(PORTD0)
|
|
# define PORTDN 1
|
|
# else
|
|
# define PORTDN 0
|
|
# endif
|
|
#else
|
|
# define PORTDN 0
|
|
#endif
|
|
|
|
#ifdef DDRE
|
|
# if defined(PORTE7)
|
|
# define PORTEN 8
|
|
# elif defined(PORTE6)
|
|
# define PORTEN 7
|
|
# elif defined(PORTE5)
|
|
# define PORTEN 6
|
|
# elif defined(PORTE4)
|
|
# define PORTEN 5
|
|
# elif defined(PORTE3)
|
|
# define PORTEN 4
|
|
# elif defined(PORTE2)
|
|
# define PORTEN 3
|
|
# elif defined(PORTE1)
|
|
# define PORTEN 2
|
|
# elif defined(PORTE0)
|
|
# define PORTEN 1
|
|
# else
|
|
# define PORTEN 0
|
|
# endif
|
|
#else
|
|
# define PORTEN 0
|
|
#endif
|
|
|
|
#ifdef DDRF
|
|
# if defined(PORTF7)
|
|
# define PORTFN 8
|
|
# elif defined(PORTF6)
|
|
# define PORTFN 7
|
|
# elif defined(PORTF5)
|
|
# define PORTFN 6
|
|
# elif defined(PORTF4)
|
|
# define PORTFN 5
|
|
# elif defined(PORTF3)
|
|
# define PORTFN 4
|
|
# elif defined(PORTF2)
|
|
# define PORTFN 3
|
|
# elif defined(PORTF1)
|
|
# define PORTFN 2
|
|
# elif defined(PORTF0)
|
|
# define PORTFN 1
|
|
# else
|
|
# define PORTFN 0
|
|
# endif
|
|
#else
|
|
# define PORTFN 0
|
|
#endif
|
|
|
|
#ifdef DDRG
|
|
# if defined(PORTG7)
|
|
# define PORTGN 8
|
|
# elif defined(PORTG6)
|
|
# define PORTGN 7
|
|
# elif defined(PORTG5)
|
|
# define PORTGN 6
|
|
# elif defined(PORTG4)
|
|
# define PORTGN 5
|
|
# elif defined(PORTG3)
|
|
# define PORTGN 4
|
|
# elif defined(PORTG2)
|
|
# define PORTGN 3
|
|
# elif defined(PORTG1)
|
|
# define PORTGN 2
|
|
# elif defined(PORTG0)
|
|
# define PORTGN 1
|
|
# else
|
|
# define PORTGN 0
|
|
# endif
|
|
#else
|
|
# define PORTGN 0
|
|
#endif
|
|
|
|
#ifdef DDRH
|
|
# if defined(PORTH7)
|
|
# define PORTHN 8
|
|
# elif defined(PORTH6)
|
|
# define PORTHN 7
|
|
# elif defined(PORTH5)
|
|
# define PORTHN 6
|
|
# elif defined(PORTH4)
|
|
# define PORTHN 5
|
|
# elif defined(PORTH3)
|
|
# define PORTHN 4
|
|
# elif defined(PORTH2)
|
|
# define PORTHN 3
|
|
# elif defined(PORTH1)
|
|
# define PORTHN 2
|
|
# elif defined(PORTH0)
|
|
# define PORTHN 1
|
|
# else
|
|
# define PORTHN 0
|
|
# endif
|
|
#else
|
|
# define PORTHN 0
|
|
#endif
|
|
|
|
#if defined (__AVR_AT90PWM1__) || defined (__AVR_AT90PWM2__) || defined (__AVR_AT90PWM2B__) || \
|
|
defined (__AVR_AT90PWM3__) || defined (__AVR_AT90PWM3B__) || defined (__AVR_AT90PWM216__) || \
|
|
defined (__AVR_AT90PWM316__) || defined (__AVR_AT90PWM161__) || defined (__AVR_AT90PWM81__)
|
|
#undef PORTE_EXC
|
|
|
|
#elif defined (__AVR_ATtiny26__) || defined (__AVR_ATtiny261__) || defined (__AVR_ATtiny261A__) || \
|
|
defined (__AVR_ATtiny461__) || defined (__AVR_ATtiny461A__) || defined (__AVR_ATtiny861__) || \
|
|
defined (__AVR_ATtiny861A__) || defined (__AVR_ATtiny87__) || defined (__AVR_ATtiny167__) || \
|
|
defined (__AVR_ATA5505__)
|
|
#undef PORTB_EXC
|
|
#define PORTB_EXC 7
|
|
|
|
#elif defined (__AVR_ATtiny4__) || defined (__AVR_ATtiny5__) || defined (__AVR_ATtiny9__) || \
|
|
defined (__AVR_ATtiny10__) || defined (__AVR_ATtiny20__) || defined (__AVR_ATtiny441__) || \
|
|
defined (__AVR_ATtiny841__) || defined (__AVR_ATtiny24__) || defined (__AVR_ATtiny24A__) || \
|
|
defined (__AVR_ATtiny44__) || defined (__AVR_ATtiny44A__) || defined (__AVR_ATtiny84__)
|
|
#undef PORTB_EXC
|
|
#define PORTB_EXC 3
|
|
|
|
#elif defined (__AVR_ATtiny40__) || defined (__AVR_ATtiny1634__)
|
|
#undef PORTC_EXC
|
|
#define PORTC_EXC 3
|
|
|
|
#elif defined (__AVR_ATtiny43U__)
|
|
#undef PORTA_EXC
|
|
#define PORTA_EXC 7
|
|
|
|
#elif defined (__AVR_ATtiny828__)
|
|
#undef PORTD_EXC
|
|
#define PORTD_EXC 2
|
|
|
|
#elif defined (__AVR_ATA5782__) || defined (__AVR_ATA5831__)
|
|
#undef PORTC_EXC
|
|
#define PORTC_EXC 0
|
|
|
|
#elif defined (__AVR_ATmega16M1__) || defined (__AVR_ATmega32M1__) || defined (__AVR_ATmega64M1__) || \
|
|
defined (__AVR_ATmega32C1__) || defined (__AVR_ATmega64C1__)
|
|
#undef PORTE_EXC
|
|
#define PORTE_EXC 0
|
|
|
|
#elif defined (__AVR_AT90USB82__) || defined (__AVR_AT90USB162__) || defined (__AVR_ATmega8U2__) || \
|
|
defined (__AVR_ATmega16U2__) || defined (__AVR_ATmega32U2__)
|
|
#undef PORTC_EXC
|
|
#define PORTC_EXC 1
|
|
|
|
#elif defined (__AVR_ATmega8HVA__) || defined (__AVR_ATmega16HVA__) || defined (__AVR_ATmega16HVA2__) || \
|
|
defined (__AVR_ATtiny2313__) || defined (__AVR_ATtiny2313A__) || defined (__AVR_ATtiny4313__)
|
|
#undef PORTA_EXC
|
|
#define PORTA_EXC 2
|
|
|
|
#elif defined (__AVR_ATmega165__) || defined (__AVR_ATmega165A__) || defined (__AVR_ATmega165P__) || \
|
|
defined (__AVR_ATmega325__) || defined (__AVR_ATmega325A__) || defined (__AVR_ATmega325P__) || \
|
|
defined (__AVR_ATmega325PA__) || defined (__AVR_ATmega3250__) || defined (__AVR_ATmega3250A__) || \
|
|
defined (__AVR_ATmega3250P__) || defined (__AVR_ATmega3250PA__) || defined (__AVR_ATmega645__) || \
|
|
defined (__AVR_ATmega645A__) || defined (__AVR_ATmega645P__) || defined (__AVR_ATmega6450__) || \
|
|
defined (__AVR_ATmega6450A__) || defined (__AVR_ATmega6450P__) || defined (__AVR_ATmega165PA__) || \
|
|
defined (__AVR_ATmega6490__) || defined (__AVR_ATmega6490A__) || defined (__AVR_ATmega6490P__) || \
|
|
defined (__AVR_ATmega169__) || defined (__AVR_ATmega169A__) || defined (__AVR_ATmega169P__) || \
|
|
defined (__AVR_ATmega329__) || defined (__AVR_ATmega329A__) || defined (__AVR_ATmega3290P__) || \
|
|
defined (__AVR_ATmega329P__) || defined (__AVR_ATmega329PA__) || defined (__AVR_ATmega3290PA__) || \
|
|
defined (__AVR_ATmega3290__) || defined (__AVR_ATmega3290A__) || defined (__AVR_ATmega169PA__) || \
|
|
defined (__AVR_ATmega649__) || defined (__AVR_ATmega649A__) || defined (__AVR_ATmega649P__)
|
|
#undef PORTG_EXC
|
|
#define PORTG_EXC 5
|
|
|
|
#elif defined (__AVR_ATmega88PA__) || defined (__AVR_ATmega88PB__) || defined (__AVR_ATmega88P__) || \
|
|
defined (__AVR_ATmega88A__) || defined (__AVR_ATmega88__) || defined (__AVR_ATmega48P__) || \
|
|
defined (__AVR_ATmega48PB__) || defined (__AVR_ATmega48PA__) || defined (__AVR_ATmega48A__) || \
|
|
defined (__AVR_ATmega48__) || defined (__AVR_ATmega8A__) || defined (__AVR_ATmega8__) || \
|
|
defined (__AVR_ATmega168PA__) || defined (__AVR_ATmega168P__) || defined (__AVR_ATmega168A__) || \
|
|
defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__) || defined (__AVR_ATmega328__) || \
|
|
defined (__AVR_ATtiny48__) || defined (__AVR_ATtiny88__) || defined (__AVR_ATA6612C__) || \
|
|
defined (__AVR_ATA6613C__) || defined (__AVR_ATA6614Q__)
|
|
#undef PORTC_EXC
|
|
#define PORTC_EXC 6
|
|
|
|
#elif defined (__AVR_ATtiny13__) || defined (__AVR_ATtiny13A__) || defined (__AVR_ATtiny25__) || \
|
|
defined (__AVR_ATtiny45__) || defined (__AVR_ATtiny85__) || defined (__AVR_ATtiny15__) || \
|
|
defined (__AVR_ATtiny12__) || defined (__AVR_ATtiny11__)
|
|
#undef PORTB_EXC
|
|
#define PORTB_EXC 5
|
|
|
|
#endif
|
|
|
|
#ifdef PORTA_EXC
|
|
#define PORTA_EXC_MASK (~(1<<(PORTA_EXC+1)))
|
|
#else
|
|
#define PORTA_EXC_MASK 0xff
|
|
#endif
|
|
|
|
#ifdef PORTB_EXC
|
|
#define PORTB_EXC_MASK (~(1<<(PORTB_EXC+1)))
|
|
#else
|
|
#define PORTB_EXC_MASK 0xff
|
|
#endif
|
|
|
|
#ifdef PORTC_EXC
|
|
#define PORTC_EXC_MASK (~(1<<(PORTC_EXC+1)))
|
|
#else
|
|
#define PORTC_EXC_MASK 0xff
|
|
#endif
|
|
|
|
#ifdef PORTD_EXC
|
|
#define PORTD_EXC_MASK (~(1<<(PORTD_EXC+1)))
|
|
#else
|
|
#define PORTD_EXC_MASK 0xff
|
|
#endif
|
|
|
|
#ifdef PORTE_EXC
|
|
#define PORTE_EXC_MASK (~(1<<(PORTE_EXC+1)))
|
|
#else
|
|
#define PORTE_EXC_MASK 0xff
|
|
#endif
|
|
|
|
#ifdef PORTF_EXC
|
|
#define PORTF_EXC_MASK (~(1<<(PORTF_EXC+1)))
|
|
#else
|
|
#define PORTF_EXC_MASK 0xff
|
|
#endif
|
|
|
|
#ifdef PORTG_EXC
|
|
#define PORTG_EXC_MASK (~(1<<(PORTG_EXC+1)))
|
|
#else
|
|
#define PORTG_EXC_MASK 0xff
|
|
#endif
|
|
|
|
#ifdef PORTH_EXC
|
|
#define PORTH_EXC_MASK (~(1<<(PORTH_EXC+1)))
|
|
#else
|
|
#define PORTH_EXC_MASK 0xff
|
|
#endif
|
|
|
|
|
|
#if PORTAN > 0
|
|
# define PORTA_MASK (((1<<PORTAN)-1)&PORTA_EXC_MASK)
|
|
#else
|
|
# define PORTA_MASK 0
|
|
#endif
|
|
|
|
#if PORTBN > 0
|
|
# define PORTB_MASK (((1<<PORTBN)-1)&PORTB_EXC_MASK)
|
|
#else
|
|
# define PORTB_MASK 0
|
|
#endif
|
|
|
|
#if PORTCN > 0
|
|
# define PORTC_MASK (((1<<PORTCN)-1)&PORTC_EXC_MASK)
|
|
#else
|
|
# define PORTC_MASK 0
|
|
#endif
|
|
|
|
#if PORTDN > 0
|
|
#define PORTD_MASK (((1<<PORTDN)-1)&PORTD_EXC_MASK)
|
|
#else
|
|
#define PORTD_MASK 0
|
|
#endif
|
|
|
|
#if PORTEN > 0
|
|
#define PORTE_MASK (((1<<PORTEN)-1)&PORTE_EXC_MASK)
|
|
#else
|
|
#define PORTE_MASK 0
|
|
#endif
|
|
|
|
#if PORTFN > 0
|
|
#define PORTF_MASK (((1<<PORTFN)-1)&PORTF_EXC_MASK)
|
|
#else
|
|
#define PORTF_MASK 0
|
|
#endif
|
|
|
|
#if PORTGN > 0
|
|
#define PORTG_MASK (((1<<PORTGN)-1)&PORTG_EXC_MASK)
|
|
#else
|
|
#define PORTG_MASK 0
|
|
#endif
|
|
|
|
#if PORTHN > 0
|
|
#define PORTH_MASK (((1<<PORTHN)-1)&PORTH_EXC_MASK)
|
|
#else
|
|
#define PORTH_MASK 0
|
|
#endif
|
|
|
|
#if PORTAN > PORTN_MAX
|
|
#undef PORTN_MAX
|
|
#define PORTN_MAX PORTAN
|
|
#endif
|
|
|
|
#if PORTBN > PORTN_MAX
|
|
#undef PORTN_MAX
|
|
#define PORTN_MAX PORTBN
|
|
#endif
|
|
|
|
#if PORTCN > PORTN_MAX
|
|
#undef PORTN_MAX
|
|
#define PORTN_MAX PORTCN
|
|
#endif
|
|
|
|
#if PORTDN > PORTN_MAX
|
|
#undef PORTN_MAX
|
|
#define PORTN_MAX PORTDN
|
|
#endif
|
|
|
|
#if PORTEN > PORTN_MAX
|
|
#undef PORTN_MAX
|
|
#define PORTN_MAX PORTEN
|
|
#endif
|
|
|
|
#if PORTFN > PORTN_MAX
|
|
#undef PORTN_MAX
|
|
#define PORTN_MAX PORTFN
|
|
#endif
|
|
|
|
#if PORTGN > PORTN_MAX
|
|
#undef PORTN_MAX
|
|
#define PORTN_MAX PORTGN
|
|
#endif
|
|
|
|
#if PORTHN > PORTN_MAX
|
|
#undef PORTN_MAX
|
|
#define PORTN_MAX PORTHN
|
|
#endif
|
|
|
|
#endif /* DEFS_H */ |