Switching tests for __AVR_ATmega168__ to tests for __AVR_ATmega8__ so that less changes are needed to support other processors.
This commit is contained in:
parent
e42b8d7ef8
commit
de4710abc8
|
@ -35,9 +35,9 @@
|
|||
volatile static voidFuncPtr intFunc[EXTERNAL_NUM_INTERRUPTS];
|
||||
// volatile static voidFuncPtr twiIntFunc;
|
||||
|
||||
#if defined(__AVR_ATmega168__)
|
||||
#define MCUCR EICRA
|
||||
#define GICR EIMSK
|
||||
#if defined(__AVR_ATmega8__)
|
||||
#define EICRA MCUCR
|
||||
#define EIMSK GICR
|
||||
#endif
|
||||
|
||||
void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) {
|
||||
|
@ -49,13 +49,13 @@ void attachInterrupt(uint8_t interruptNum, void (*userFunc)(void), int mode) {
|
|||
// edge, or falling edge). The mode constants were chosen to correspond
|
||||
// to the configuration bits in the hardware register, so we simply shift
|
||||
// the mode into place.
|
||||
MCUCR = (MCUCR & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
|
||||
EICRA = (EICRA & ~((1 << ISC00) | (1 << ISC01))) | (mode << ISC00);
|
||||
|
||||
// Enable the interrupt.
|
||||
GICR |= (1 << INT0);
|
||||
EIMSK |= (1 << INT0);
|
||||
} else {
|
||||
MCUCR = (MCUCR & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
|
||||
GICR |= (1 << INT1);
|
||||
EICRA = (EICRA & ~((1 << ISC10) | (1 << ISC11))) | (mode << ISC10);
|
||||
EIMSK |= (1 << INT1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -64,9 +64,9 @@ void detachInterrupt(uint8_t interruptNum) {
|
|||
if(interruptNum < EXTERNAL_NUM_INTERRUPTS) {
|
||||
if (interruptNum == 0)
|
||||
// Disable the interrupt.
|
||||
GICR &= ~(1 << INT0);
|
||||
EIMSK &= ~(1 << INT0);
|
||||
else
|
||||
GICR &= ~(1 << INT1);
|
||||
EIMSK &= ~(1 << INT1);
|
||||
|
||||
intFunc[interruptNum] = 0;
|
||||
}
|
||||
|
|
|
@ -134,28 +134,28 @@ const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
|
|||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
// on the ATmega168, digital pin 3 has hardware pwm
|
||||
#if defined(__AVR_ATmega168__)
|
||||
TIMER2B,
|
||||
#else
|
||||
#if defined(__AVR_ATmega8__)
|
||||
NOT_ON_TIMER,
|
||||
#else
|
||||
TIMER2B,
|
||||
#endif
|
||||
NOT_ON_TIMER,
|
||||
// on the ATmega168, digital pins 5 and 6 have hardware pwm
|
||||
#if defined(__AVR_ATmega168__)
|
||||
#if defined(__AVR_ATmega8__)
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
#else
|
||||
TIMER0B,
|
||||
TIMER0A,
|
||||
#else
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
#endif
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER, /* 8 - port B */
|
||||
TIMER1A,
|
||||
TIMER1B,
|
||||
#if defined(__AVR_ATmega168__)
|
||||
TIMER2A,
|
||||
#else
|
||||
#if defined(__AVR_ATmega8__)
|
||||
TIMER2,
|
||||
#else
|
||||
TIMER2A,
|
||||
#endif
|
||||
NOT_ON_TIMER,
|
||||
NOT_ON_TIMER,
|
||||
|
|
|
@ -130,23 +130,23 @@ void init()
|
|||
// on the ATmega168, timer 0 is also used for fast hardware pwm
|
||||
// (using phase-correct PWM would mean that timer 0 overflowed half as often
|
||||
// resulting in different millis() behavior on the ATmega8 and ATmega168)
|
||||
#if defined(__AVR_ATmega168__)
|
||||
#if !defined(__AVR_ATmega8__)
|
||||
sbi(TCCR0A, WGM01);
|
||||
sbi(TCCR0A, WGM00);
|
||||
#endif
|
||||
// set timer 0 prescale factor to 64
|
||||
#if defined(__AVR_ATmega168__)
|
||||
sbi(TCCR0B, CS01);
|
||||
sbi(TCCR0B, CS00);
|
||||
#else
|
||||
#if defined(__AVR_ATmega8__)
|
||||
sbi(TCCR0, CS01);
|
||||
sbi(TCCR0, CS00);
|
||||
#else
|
||||
sbi(TCCR0B, CS01);
|
||||
sbi(TCCR0B, CS00);
|
||||
#endif
|
||||
// enable timer 0 overflow interrupt
|
||||
#if defined(__AVR_ATmega168__)
|
||||
sbi(TIMSK0, TOIE0);
|
||||
#else
|
||||
#if defined(__AVR_ATmega8__)
|
||||
sbi(TIMSK, TOIE0);
|
||||
#else
|
||||
sbi(TIMSK0, TOIE0);
|
||||
#endif
|
||||
|
||||
// timers 1 and 2 are used for phase-correct hardware pwm
|
||||
|
@ -161,16 +161,16 @@ void init()
|
|||
sbi(TCCR1A, WGM10);
|
||||
|
||||
// set timer 2 prescale factor to 64
|
||||
#if defined(__AVR_ATmega168__)
|
||||
sbi(TCCR2B, CS22);
|
||||
#else
|
||||
#if defined(__AVR_ATmega8__)
|
||||
sbi(TCCR2, CS22);
|
||||
#else
|
||||
sbi(TCCR2B, CS22);
|
||||
#endif
|
||||
// configure timer 2 for phase correct pwm (8-bit)
|
||||
#if defined(__AVR_ATmega168__)
|
||||
sbi(TCCR2A, WGM20);
|
||||
#else
|
||||
#if defined(__AVR_ATmega8__)
|
||||
sbi(TCCR2, WGM20);
|
||||
#else
|
||||
sbi(TCCR2A, WGM20);
|
||||
#endif
|
||||
|
||||
// set a2d prescale factor to 128
|
||||
|
@ -187,9 +187,9 @@ void init()
|
|||
// the bootloader connects pins 0 and 1 to the USART; disconnect them
|
||||
// here so they can be used as normal digital i/o; they will be
|
||||
// reconnected in Serial.begin()
|
||||
#if defined(__AVR_ATmega168__)
|
||||
UCSR0B = 0;
|
||||
#else
|
||||
#if defined(__AVR_ATmega8__)
|
||||
UCSRB = 0;
|
||||
#else
|
||||
UCSR0B = 0;
|
||||
#endif
|
||||
}
|
|
@ -87,7 +87,13 @@ void analogWrite(uint8_t pin, int val)
|
|||
sbi(TCCR1A, COM1B1);
|
||||
// set pwm duty
|
||||
OCR1B = val;
|
||||
#if defined(__AVR_ATmega168__)
|
||||
#if defined(__AVR_ATmega8__)
|
||||
} else if (digitalPinToTimer(pin) == TIMER2) {
|
||||
// connect pwm to pin on timer 2, channel B
|
||||
sbi(TCCR2, COM21);
|
||||
// set pwm duty
|
||||
OCR2 = val;
|
||||
#else
|
||||
} else if (digitalPinToTimer(pin) == TIMER0A) {
|
||||
if (val == 0) {
|
||||
digitalWrite(pin, LOW);
|
||||
|
@ -116,12 +122,6 @@ void analogWrite(uint8_t pin, int val)
|
|||
sbi(TCCR2A, COM2B1);
|
||||
// set pwm duty
|
||||
OCR2B = val;
|
||||
#else
|
||||
} else if (digitalPinToTimer(pin) == TIMER2) {
|
||||
// connect pwm to pin on timer 2, channel B
|
||||
sbi(TCCR2, COM21);
|
||||
// set pwm duty
|
||||
OCR2 = val;
|
||||
#endif
|
||||
} else if (val < 128)
|
||||
digitalWrite(pin, LOW);
|
||||
|
|
|
@ -53,13 +53,13 @@ static inline void turnOffPWM(uint8_t timer)
|
|||
if (timer == TIMER1A) cbi(TCCR1A, COM1A1);
|
||||
if (timer == TIMER1B) cbi(TCCR1A, COM1B1);
|
||||
|
||||
#if defined(__AVR_ATmega168__)
|
||||
#if defined(__AVR_ATmega8__)
|
||||
if (timer == TIMER2) cbi(TCCR2, COM21);
|
||||
#else
|
||||
if (timer == TIMER0A) cbi(TCCR0A, COM0A1);
|
||||
if (timer == TIMER0B) cbi(TCCR0A, COM0B1);
|
||||
if (timer == TIMER2A) cbi(TCCR2A, COM2A1);
|
||||
if (timer == TIMER2B) cbi(TCCR2A, COM2B1);
|
||||
#else
|
||||
if (timer == TIMER2) cbi(TCCR2, COM21);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
|
@ -37,17 +37,7 @@ int rx_buffer_tail = 0;
|
|||
|
||||
void beginSerial(long baud)
|
||||
{
|
||||
#if defined(__AVR_ATmega168__)
|
||||
UBRR0H = ((F_CPU / 16 + baud / 2) / baud - 1) >> 8;
|
||||
UBRR0L = ((F_CPU / 16 + baud / 2) / baud - 1);
|
||||
|
||||
// enable rx and tx
|
||||
sbi(UCSR0B, RXEN0);
|
||||
sbi(UCSR0B, TXEN0);
|
||||
|
||||
// enable interrupt on complete reception of a byte
|
||||
sbi(UCSR0B, RXCIE0);
|
||||
#else
|
||||
#if defined(__AVR_ATmega8__)
|
||||
UBRRH = ((F_CPU / 16 + baud / 2) / baud - 1) >> 8;
|
||||
UBRRL = ((F_CPU / 16 + baud / 2) / baud - 1);
|
||||
|
||||
|
@ -57,6 +47,16 @@ void beginSerial(long baud)
|
|||
|
||||
// enable interrupt on complete reception of a byte
|
||||
sbi(UCSRB, RXCIE);
|
||||
#else
|
||||
UBRR0H = ((F_CPU / 16 + baud / 2) / baud - 1) >> 8;
|
||||
UBRR0L = ((F_CPU / 16 + baud / 2) / baud - 1);
|
||||
|
||||
// enable rx and tx
|
||||
sbi(UCSR0B, RXEN0);
|
||||
sbi(UCSR0B, TXEN0);
|
||||
|
||||
// enable interrupt on complete reception of a byte
|
||||
sbi(UCSR0B, RXCIE0);
|
||||
#endif
|
||||
|
||||
// defaults to 8-bit, no parity, 1 stop bit
|
||||
|
@ -64,16 +64,16 @@ void beginSerial(long baud)
|
|||
|
||||
void serialWrite(unsigned char c)
|
||||
{
|
||||
#if defined(__AVR_ATmega168__)
|
||||
while (!(UCSR0A & (1 << UDRE0)))
|
||||
;
|
||||
|
||||
UDR0 = c;
|
||||
#else
|
||||
#if defined(__AVR_ATmega8__)
|
||||
while (!(UCSRA & (1 << UDRE)))
|
||||
;
|
||||
|
||||
UDR = c;
|
||||
#else
|
||||
while (!(UCSR0A & (1 << UDRE0)))
|
||||
;
|
||||
|
||||
UDR0 = c;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -104,16 +104,16 @@ void serialFlush()
|
|||
rx_buffer_head = rx_buffer_tail;
|
||||
}
|
||||
|
||||
#if defined(__AVR_ATmega168__)
|
||||
SIGNAL(SIG_USART_RECV)
|
||||
#else
|
||||
#if defined(__AVR_ATmega8__)
|
||||
SIGNAL(SIG_UART_RECV)
|
||||
#else
|
||||
SIGNAL(SIG_USART_RECV)
|
||||
#endif
|
||||
{
|
||||
#if defined(__AVR_ATmega168__)
|
||||
unsigned char c = UDR0;
|
||||
#else
|
||||
#if defined(__AVR_ATmega8__)
|
||||
unsigned char c = UDR;
|
||||
#else
|
||||
unsigned char c = UDR0;
|
||||
#endif
|
||||
|
||||
int i = (rx_buffer_head + 1) % RX_BUFFER_SIZE;
|
||||
|
|
Loading…
Reference in New Issue