Added board hardware driver support for the Adafruit U4 breakout board.

Fixed calculation of timer register reload values derived from F_CPU; must subtract one from the division result for the compare value to be correct.

Change AVRISP-MKII rescue clock speed to 4MHz to ensure that a 125KHz ISP speed works regardless of the target's fuses (i.e. DIV8 set).
This commit is contained in:
Dean Camera 2010-11-08 03:41:48 +00:00
parent bac860b173
commit 0ce2950d81
14 changed files with 148 additions and 13 deletions

View file

@ -105,9 +105,9 @@
* </tr>
* </table>
*
* In addition, the AVR's OCR1A pin will generate a .5MHz clock, to act as an external rescue device clock
* if the fuses have been mis-set. To use the recovery clock, connect the OCR1A pin of the USB AVR to the target
* AVR's XTAL1 pin, and set the ISP programming speed to 125KHz (note: other ISP speeds will not work correctly).
* In addition, the AVR's OCR1A pin will generate a 4MHz clock, to act as an external rescue device clock if the
* fuses have been mis-set. To use the recovery clock, connect the OCR1A pin of the USB AVR to the target AVR's
* XTAL1 pin, and set the ISP programming speed to 125KHz (note: other ISP speeds will not work correctly).
*
* <b><sup>1</sup></b> <i>Optional, see \ref SSec_Options section - for USB AVRs with ADC modules only</i> \n
* <b><sup>2</sup></b> <i>See AUX line related tokens in the \ref SSec_Options section</i>

View file

@ -196,10 +196,10 @@ void ISPTarget_ConfigureRescueClock(void)
DDRB |= (1 << 5);
#endif
/* Start Timer 1 to generate a .5MHz clock on the OCR1A pin */
/* Start Timer 1 to generate a 4MHz clock on the OCR1A pin */
TIMSK1 = 0;
TCNT1 = 0;
OCR1A = (F_CPU / 2 / 500000UL);
OCR1A = ((F_CPU / 2 / 4000000UL) - 1);
TCCR1A = (1 << COM1A0);
TCCR1B = ((1 << WGM12) | (1 << CS10));
}

View file

@ -61,7 +61,7 @@ void V2Protocol_Init(void)
#endif
/* Timeout timer initialization (10ms period) */
OCR0A = ((F_CPU / 1024) / 100);
OCR0A = (((F_CPU / 1024) / 100) - 1);
TCCR0A = (1 << WGM01);
TIMSK0 = (1 << OCIE0A);

View file

@ -208,7 +208,7 @@ void SetupHardware(void)
TWI_Init();
/* 500ms logging interval timer configuration */
OCR1A = ((F_CPU / 1024) / 2);
OCR1A = (((F_CPU / 1024) / 2) - 1);
TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10);
TIMSK1 = (1 << OCIE1A);

View file

@ -19,7 +19,7 @@ ISR(TIMER1_COMPA_vect)
//Initialise the clock
void clock_init()
{
OCR1A = ((F_CPU / 1024) / 100);
OCR1A = (((F_CPU / 1024) / 100) - 1);
TCCR1B = ((1 << WGM12) | (1 << CS12) | (1 << CS10));
TIMSK1 = (1 << OCIE1A);
}