projects
/
pub
/
USBasp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix XMEGA architecture not correctly resetting the device address and endpoints in...
[pub/USBasp.git]
/
Bootloaders
/
DFU
/
BootloaderDFU.c
diff --git
a/Bootloaders/DFU/BootloaderDFU.c
b/Bootloaders/DFU/BootloaderDFU.c
index
f9bc4e0
..
3ce2a62
100644
(file)
--- a/
Bootloaders/DFU/BootloaderDFU.c
+++ b/
Bootloaders/DFU/BootloaderDFU.c
@@
-1,13
+1,13
@@
/*
LUFA Library
/*
LUFA Library
- Copyright (C) Dean Camera, 201
1
.
+ Copyright (C) Dean Camera, 201
2
.
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
dean [at] fourwalledcubicle [dot] com
www.lufa-lib.org
*/
/*
- Copyright 201
1
Dean Camera (dean [at] fourwalledcubicle [dot] com)
+ Copyright 201
2
Dean Camera (dean [at] fourwalledcubicle [dot] com)
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
Permission to use, copy, modify, distribute, and sell this
software and its documentation for any purpose is hereby granted
@@
-87,7
+87,7
@@
static uint8_t Flash64KBPage = 0;
*/
static uint16_t StartAddr = 0x0000;
*/
static uint16_t StartAddr = 0x0000;
-/** Memory end address, indicating the end address to read
to/write from
in the memory being addressed (either FLASH
+/** Memory end address, indicating the end address to read
from/write to
in the memory being addressed (either FLASH
* of EEPROM depending on the issued command from the host).
*/
static uint16_t EndAddr = 0x0000;
* of EEPROM depending on the issued command from the host).
*/
static uint16_t EndAddr = 0x0000;
@@
-109,16
+109,19
@@
int main(void)
/* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */
PORTF |= (1 << 4);
/* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */
PORTF |= (1 << 4);
-
_delay_ms
(10);
+
Delay_MS
(10);
/* If the TCK pin is not jumpered to ground, start the user application instead */
RunBootloader = (!(PINF & (1 << 4)));
/* If the TCK pin is not jumpered to ground, start the user application instead */
RunBootloader = (!(PINF & (1 << 4)));
-
+
/* Re-enable JTAG debugging */
MCUCR &= ~(1 << JTD);
/* Re-enable JTAG debugging */
MCUCR &= ~(1 << JTD);
- MCUCR &= ~(1 << JTD);
+ MCUCR &= ~(1 << JTD);
#endif
#endif
+ /* Turn on first LED on the board to indicate that the bootloader has started */
+ LEDs_SetAllLEDs(LEDS_LED1);
+
/* Enable global interrupts so that the USB stack can function */
sei();
/* Enable global interrupts so that the USB stack can function */
sei();
@@
-134,7
+137,7
@@
int main(void)
}
/** Configures all hardware required for the bootloader. */
}
/** Configures all hardware required for the bootloader. */
-void SetupHardware(void)
+
static
void SetupHardware(void)
{
/* Disable watchdog if enabled by bootloader/fuses */
MCUSR &= ~(1 << WDRF);
{
/* Disable watchdog if enabled by bootloader/fuses */
MCUSR &= ~(1 << WDRF);
@@
-147,30
+150,39
@@
void SetupHardware(void)
MCUCR = (1 << IVCE);
MCUCR = (1 << IVSEL);
MCUCR = (1 << IVCE);
MCUCR = (1 << IVSEL);
- /* Initialize the USB
subsystem
*/
+ /* Initialize the USB
and other board hardware drivers
*/
USB_Init();
USB_Init();
+ LEDs_Init();
+
+ /* Bootloader active LED toggle timer initialization */
+ TIMSK1 = (1 << TOIE1);
+ TCCR1B = ((1 << CS11) | (1 << CS10));
}
/** Resets all configured hardware required for the bootloader back to their original states. */
}
/** Resets all configured hardware required for the bootloader back to their original states. */
-void ResetHardware(void)
+
static
void ResetHardware(void)
{
{
- /* Shut down the USB
subsystem
*/
+ /* Shut down the USB
and other board hardware drivers
*/
USB_Disable();
USB_Disable();
+ LEDs_Disable();
/* Relocate the interrupt vector table back to the application section */
MCUCR = (1 << IVCE);
MCUCR = 0;
}
/* Relocate the interrupt vector table back to the application section */
MCUCR = (1 << IVCE);
MCUCR = 0;
}
+/** ISR to periodically toggle the LEDs on the board to indicate that the bootloader is active. */
+ISR(TIMER1_OVF_vect, ISR_BLOCK)
+{
+ LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
+}
+
/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
* the device from the USB host before passing along unhandled control requests to the library for processing
* internally.
*/
void EVENT_USB_Device_ControlRequest(void)
{
/** Event handler for the USB_ControlRequest event. This is used to catch and process control requests sent to
* the device from the USB host before passing along unhandled control requests to the library for processing
* internally.
*/
void EVENT_USB_Device_ControlRequest(void)
{
- /* Get the size of the command and data from the wLength value */
- SentCommand.DataSize = USB_ControlRequest.wLength;
-
/* Ignore any requests that aren't directed to the DFU interface */
if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) !=
(REQTYPE_CLASS | REQREC_INTERFACE))
/* Ignore any requests that aren't directed to the DFU interface */
if ((USB_ControlRequest.bmRequestType & (CONTROL_REQTYPE_TYPE | CONTROL_REQTYPE_RECIPIENT)) !=
(REQTYPE_CLASS | REQREC_INTERFACE))
@@
-178,6
+190,12
@@
void EVENT_USB_Device_ControlRequest(void)
return;
}
return;
}
+ /* Activity - toggle indicator LEDs */
+ LEDs_ToggleLEDs(LEDS_LED1 | LEDS_LED2);
+
+ /* Get the size of the command and data from the wLength value */
+ SentCommand.DataSize = USB_ControlRequest.wLength;
+
switch (USB_ControlRequest.bRequest)
{
case DFU_REQ_DNLOAD:
switch (USB_ControlRequest.bRequest)
{
case DFU_REQ_DNLOAD: