From 2c2a0da46ba1000422456ac7ad7387b9e2a68f96 Mon Sep 17 00:00:00 2001 From: opendous Date: Sun, 30 Oct 2011 06:08:38 +0000 Subject: [PATCH] Arduino1 Bootloader for AT90USB128x: USB can be enabled. --- .../Firmware/Arduino1_Bootloader/Makefile | 2 +- .../Arduino1_Bootloader/src/DiskLoader.cpp | 4 +-- .../Arduino1_Bootloader/src/USBCore.cpp | 27 ++++++++++++------- 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/Micropendous/Firmware/Arduino1_Bootloader/Makefile b/Micropendous/Firmware/Arduino1_Bootloader/Makefile index 86cadd20..7231744e 100644 --- a/Micropendous/Firmware/Arduino1_Bootloader/Makefile +++ b/Micropendous/Firmware/Arduino1_Bootloader/Makefile @@ -5,7 +5,7 @@ ## General Flags PROJECT = DiskLoader TARGET = DiskLoader.elf -CC = avr-gcc +CC = avr-gcc -E # Select MCU name and bootloader start address - uncomment _ONE_ of the following pairs # diff --git a/Micropendous/Firmware/Arduino1_Bootloader/src/DiskLoader.cpp b/Micropendous/Firmware/Arduino1_Bootloader/src/DiskLoader.cpp index 186e5851..71276ec5 100644 --- a/Micropendous/Firmware/Arduino1_Bootloader/src/DiskLoader.cpp +++ b/Micropendous/Firmware/Arduino1_Bootloader/src/DiskLoader.cpp @@ -243,7 +243,7 @@ void LEDPulse() void Reboot() { -/* + TXLED0; // switch off the RX and TX LEDs before starting the user sketch RXLED0; UDCON = 1; // Detatch USB @@ -253,5 +253,5 @@ void Reboot() "clr r31\n" "ijmp\n" ::); -*/ + } diff --git a/Micropendous/Firmware/Arduino1_Bootloader/src/USBCore.cpp b/Micropendous/Firmware/Arduino1_Bootloader/src/USBCore.cpp index df3e358e..5a7093df 100644 --- a/Micropendous/Firmware/Arduino1_Bootloader/src/USBCore.cpp +++ b/Micropendous/Firmware/Arduino1_Bootloader/src/USBCore.cpp @@ -193,19 +193,22 @@ void USBInit(void) _usbConfiguration = 0; _ejected = 0; + // TODO: correctly check for other boards + DDRE |= (1 << PE7); PORTE &= ~(1 << PE7); // enable the USB signal switch to the USB-B connector + // power on internal regulator #if (defined(__AVR_AT90USB162__) || defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega32U2__)) - UHWCON |= (1 << UIMOD); // TODO: need this for U2 devices? + REGCR = (0 << REGDIS); // there is no UHWCON on the U2 USB AVR devices #elif (defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)) - UHWCON = 0x01; + UHWCON = (1 << UVREGE); #elif (defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_ATmega32U6__)) - UHWCON |= (1 << UIMOD); + UHWCON = ((1 << UIMOD) | (1 << UVREGE)); #else #error Selected device not supported by this bootloader #endif - USBCON = (1<