Example #1
0
//------------------------------------------------------------------------------
int __attribute__((OS_main)) main(void)
{
    const int* isr = isrJump; // read array from program memory, saves copy step
    for( unsigned char i=0; i<6; i+=2 )
    {
        boot_page_fill( i, pgm_read_word(isr++) ); // install RESET trampoline
    }
    commitPage( 0 );

    rnaInit();

    for(;;)
    {
        rnaPoll(); // everything else happens through the RNA bus
    }
}
Example #2
0
//------------------------------------------------------------------------------
int __attribute__((OS_main)) main(void)
{
	dnaUsbInit();
	enableLed();
	usbCommand = ceCommandIdle;
	usbRNAPacketExpected = 1;
	
	TCCR0B = 1<<CS01 | 1<<CS00; // set 8-bit timer prescaler to div/64
	TIMSK0 = 1<<TOIE0; // enable the interrupt
	
	rnaInit();

	sei();

	setLedOff();

	for(;;)
	{
		rnaPoll();
		
		if ( rnaPacketAvail )
		{
			setLedOn();
			rnaPacketAvail = 0;
			_delay_ms( 50 );
			while ( !rnaSend(usbRNATo, usbRNAPacket, usbRNAPacketExpected) )
			{
				_delay_ms(1);
			}
			setLedOff();
		}

		/*
		if ( usbRNAPacketPos == usbRNAPacketExpected )
		{
			usbRNAPacketPos = 0;
			if ( *usbRNAPacket == RNATypeDebugString )
			{
				usbRNAPacket[usbRNAPacketExpected] = 0;
				usbprint( (char *)usbRNAPacket + 1, usbRNAPacketExpected );
			}
		}
		*/
	}
}
Example #3
0
//------------------------------------------------------------------------------
int __attribute__((OS_main)) main(void)
{
	DDRD = 0x0;
	PORTD = 0b00000100; // turn on pullup for D2 (RNA bus)

	// if the source of the reset was a watchdog timeout, indicating a software
	// request of bootloader entry, disable the watchdog and enter the
	// bootloader
	if ( WDTCSR & (1<<WDE) )
	{
		MCUSR = 0;
		WDTCSR |= (1<<WDCE) | (1<<WDE);
		WDTCSR = 0;
	}
	else
	{
		_delay_us(50); // give state a chance to settle

		for( unsigned int i=4000; i; i-- )
		{
			_delay_ms(1);
			// pin must be HELD low, make sure spurious RNA requests do not reset us!
			if ( PIND & 0b00000100 ) 
			{
				goto jumpToZero;
			}
		}
	}

	rnaInit();

	for(;;)
	{
		rnaPoll(); // everything else happens through the RNA bus

		if ( jumpToApp )
		{
jumpToZero:
			boot_rww_enable();
			asm volatile ("ijmp" ::"z" (0)); // in with both feet...
		}
	}
}