avrboot/testapp/testapp.c

63 lines
1.1 KiB
C

// Martin Thomas 4/2008
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/wdt.h>
#include <util/delay.h>
#define LED_PORT PORTB
#define LED_DDR DDRB
#define LED_BIT PB2
#define BT_PORT PORTC
#define BT_DDR DDRC
#define BT_PIN PINC
#define BT_BIT PC7
static inline void my_wdt_off(void)
{
cli();
wdt_reset();
/* Clear WDRF in MCUSR */
MCUSR &= ~(1<<WDRF);
/* Write logical one to WDCE and WDE */
/* Keep old prescaler setting to prevent unintentional time-out */
WDTCSR |= (1<<WDCE) | (1<<WDE);
/* Turn off WDT */
WDTCSR = 0x00;
}
static void my_delay( void )
{
int i;
for ( i=0; i<500; i++ ) {
_delay_ms(1);
}
}
int main( void )
{
my_wdt_off();
LED_PORT |= ( 1<<LED_BIT );
LED_DDR |= ( 1<<LED_BIT );
BT_DDR &= ~( 1<<BT_BIT );
BT_PORT |= ( 1<<BT_BIT );
while ( 1 ) {
LED_PORT &= ~( 1<<LED_BIT );
my_delay();
LED_PORT |= ( 1<<LED_BIT );
my_delay();
if ( !( BT_PIN & ( 1<<BT_BIT ) ) ) {
/* start bootloader */
wdt_enable( WDTO_250MS );
while (1) { ; }
}
}
return 0; /* never reached */
}