aboutsummaryrefslogtreecommitdiffstats
path: root/Projects
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2011-05-29 12:47:56 +0000
committerDean Camera <dean@fourwalledcubicle.com>2011-05-29 12:47:56 +0000
commit0b6d5467bc70ba36ff71a186da9cf4d0742612a6 (patch)
treea0292668256c00166ee52cac38da1d4dc7316726 /Projects
parentea922c98d187eb74c31535afa3334ead5bd50526 (diff)
downloadlufa-0b6d5467bc70ba36ff71a186da9cf4d0742612a6.tar.gz
lufa-0b6d5467bc70ba36ff71a186da9cf4d0742612a6.tar.bz2
lufa-0b6d5467bc70ba36ff71a186da9cf4d0742612a6.zip
Oops - revert commit of an incomplete port of the AVRISP-MKII project.
Diffstat (limited to 'Projects')
-rw-r--r--Projects/AVRISP-MKII/AVRISP-MKII.c46
-rw-r--r--Projects/AVRISP-MKII/AVRISP-MKII.h20
-rw-r--r--Projects/AVRISP-MKII/Descriptors.c59
-rw-r--r--Projects/AVRISP-MKII/Descriptors.h13
-rw-r--r--Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c22
-rw-r--r--Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h10
-rw-r--r--Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h19
-rw-r--r--Projects/AVRISP-MKII/Lib/V2Protocol.c8
-rw-r--r--Projects/AVRISP-MKII/Lib/V2Protocol.h21
-rw-r--r--Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h1
-rw-r--r--Projects/AVRISP-MKII/Lib/V2ProtocolParams.c6
-rw-r--r--Projects/AVRISP-MKII/Lib/V2ProtocolParams.h17
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h13
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h13
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c20
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h14
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c181
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h11
-rw-r--r--Projects/AVRISP-MKII/makefile2
19 files changed, 164 insertions, 332 deletions
diff --git a/Projects/AVRISP-MKII/AVRISP-MKII.c b/Projects/AVRISP-MKII/AVRISP-MKII.c
index d774b1119..654ce5471 100644
--- a/Projects/AVRISP-MKII/AVRISP-MKII.c
+++ b/Projects/AVRISP-MKII/AVRISP-MKII.c
@@ -45,14 +45,14 @@ int main(void)
V2Protocol_Init();
LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY);
- GlobalInterruptEnable();
-
+ sei();
+
for (;;)
{
#if (BOARD == BOARD_USBTINYMKII)
- /* On the USBTINY-MKII board target, there is a secondary LED which indicates the current selected
- power mode - either VBUS, or sourced from the VTARGET pin of the programming connectors */
- LEDs_ChangeLEDs(LEDS_LED3, (PIND & (1 << 0)) ? 0 : LEDS_LED3);
+ /* On the USBTINY-MKII target, there is a secondary LED which indicates the current selected power
+ mode - either VBUS, or sourced from the VTARGET pin of the programming connectors */
+ LEDs_ChangeLEDs(LEDMASK_VBUSPOWER, (PIND & (1 << 0)) ? 0 : LEDMASK_VBUSPOWER);
#endif
AVRISP_Task();
@@ -63,35 +63,13 @@ int main(void)
/** Configures the board hardware and chip peripherals for the demo's functionality. */
void SetupHardware(void)
{
- #if (ARCH == ARCH_AVR8)
- /* Disable watchdog if enabled by bootloader/fuses */
- MCUSR &= ~(1 << WDRF);
- wdt_disable();
-
- /* Disable clock division */
- clock_prescale_set(clock_div_1);
- #elif (ARCH == ARCH_UC3)
- /* Select slow startup, external high frequency crystal attached to OSC0 */
- AVR32_PM.OSCCTRL0.mode = 7;
- AVR32_PM.OSCCTRL0.startup = 6;
- AVR32_PM.MCCTRL.osc0en = true;
- while (!(AVR32_PM.POSCSR.osc0rdy));
-
- /* Switch CPU core to use OSC0 as the system clock */
- AVR32_PM.MCCTRL.mcsel = 1;
-
- /* Start PLL1 to feed into the USB generic clock module */
- AVR32_PM.PLL[1].pllmul = (F_USB / F_CPU) ? (((F_USB / F_CPU) - 1) / 2) : 0;
- AVR32_PM.PLL[1].plldiv = 0;
- AVR32_PM.PLL[1].pllosc = 0;
- AVR32_PM.PLL[1].pllen = true;
- while (!(AVR32_PM.POSCSR.lock1));
-
- /* Configure interrupt management peripheral */
-// INTC_Init();
- INTC_RegisterGroupHandler(AVR32_USBB_IRQ, AVR32_INTC_INT0, USB_GEN_vect);
- #endif
-
+ /* Disable watchdog if enabled by bootloader/fuses */
+ MCUSR &= ~(1 << WDRF);
+ wdt_disable();
+
+ /* Disable clock division */
+ clock_prescale_set(clock_div_1);
+
/* Hardware Initialization */
LEDs_Init();
USB_Init();
diff --git a/Projects/AVRISP-MKII/AVRISP-MKII.h b/Projects/AVRISP-MKII/AVRISP-MKII.h
index 5a0d09111..2650b4939 100644
--- a/Projects/AVRISP-MKII/AVRISP-MKII.h
+++ b/Projects/AVRISP-MKII/AVRISP-MKII.h
@@ -37,7 +37,11 @@
#define _AVRISP_H_
/* Includes: */
- #include <LUFA/Common/Common.h>
+ #include <avr/io.h>
+ #include <avr/wdt.h>
+ #include <avr/interrupt.h>
+ #include <avr/power.h>
+
#include <LUFA/Version.h>
#include <LUFA/Drivers/Board/LEDs.h>
#include <LUFA/Drivers/USB/USB.h>
@@ -46,17 +50,6 @@
#include <LUFA/Drivers/Peripheral/ADC.h>
#endif
- #if (ARCH == ARCH_AVR8)
- #include <avr/io.h>
- #include <avr/wdt.h>
- #include <avr/interrupt.h>
- #include <avr/power.h>
- #elif (ARCH == ARCH_UC3)
- #include <avr32/io.h>
-
- #include <LUFA/Platform/UC3/INTC_UC3.h> // TODO: FIXME
- #endif
-
#include "Descriptors.h"
#include "Lib/V2Protocol.h"
@@ -76,6 +69,9 @@
/** LED mask for the library LED driver, to indicate that the USB interface is busy. */
#define LEDMASK_BUSY (LEDS_LED1 | LEDS_LED2)
+ /** LED mask for the library LED driver, to indicate that the target is being powered by VBUS. */
+ #define LEDMASK_VBUSPOWER LEDS_LED3
+
/* Function Prototypes: */
void SetupHardware(void);
void AVRISP_Task(void);
diff --git a/Projects/AVRISP-MKII/Descriptors.c b/Projects/AVRISP-MKII/Descriptors.c
index 9889820cf..a84b75f38 100644
--- a/Projects/AVRISP-MKII/Descriptors.c
+++ b/Projects/AVRISP-MKII/Descriptors.c
@@ -53,8 +53,8 @@ const USB_Descriptor_Device_t PROGMEM DeviceDescriptor =
.Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE,
- .VendorID = CPU_TO_LE16(0x03EB),
- .ProductID = CPU_TO_LE16(0x2104),
+ .VendorID = 0x03EB,
+ .ProductID = 0x2104,
.ReleaseNumber = VERSION_BCD(02.00),
.ManufacturerStrIndex = 0x01,
@@ -75,7 +75,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
{
.Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration},
- .TotalConfigurationSize = CPU_TO_LE16(sizeof(USB_Descriptor_Configuration_t)),
+ .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t),
.TotalInterfaces = 1,
.ConfigurationNumber = 1,
@@ -108,7 +108,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | AVRISP_DATA_IN_EPNUM),
.Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CPU_TO_LE16(AVRISP_DATA_EPSIZE),
+ .EndpointSize = AVRISP_DATA_EPSIZE,
.PollingIntervalMS = 0x0A
},
@@ -118,7 +118,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor =
.EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | AVRISP_DATA_OUT_EPNUM),
.Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA),
- .EndpointSize = CPU_TO_LE16(AVRISP_DATA_EPSIZE),
+ .EndpointSize = AVRISP_DATA_EPSIZE,
.PollingIntervalMS = 0x0A
},
};
@@ -142,17 +142,7 @@ const USB_Descriptor_String_t PROGMEM ManufacturerString =
{
.Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},
- .UnicodeString = {CPU_TO_LE16('D'),
- CPU_TO_LE16('e'),
- CPU_TO_LE16('a'),
- CPU_TO_LE16('n'),
- CPU_TO_LE16(' '),
- CPU_TO_LE16('C'),
- CPU_TO_LE16('a'),
- CPU_TO_LE16('m'),
- CPU_TO_LE16('e'),
- CPU_TO_LE16('r'),
- CPU_TO_LE16('a')}
+ .UnicodeString = L"Dean Camera"
};
/** Product descriptor string. This is a Unicode string containing the product's details in human readable form,
@@ -163,28 +153,7 @@ const USB_Descriptor_String_t PROGMEM ProductString =
{
.Header = {.Size = USB_STRING_LEN(22), .Type = DTYPE_String},
- .UnicodeString = {CPU_TO_LE16('L'),
- CPU_TO_LE16('U'),
- CPU_TO_LE16('F'),
- CPU_TO_LE16('A'),
- CPU_TO_LE16(' '),
- CPU_TO_LE16('A'),
- CPU_TO_LE16('V'),
- CPU_TO_LE16('R'),
- CPU_TO_LE16('I'),
- CPU_TO_LE16('S'),
- CPU_TO_LE16('P'),
- CPU_TO_LE16(' '),
- CPU_TO_LE16('M'),
- CPU_TO_LE16('k'),
- CPU_TO_LE16('I'),
- CPU_TO_LE16('I'),
- CPU_TO_LE16(' '),
- CPU_TO_LE16('C'),
- CPU_TO_LE16('l'),
- CPU_TO_LE16('o'),
- CPU_TO_LE16('n'),
- CPU_TO_LE16('e')}
+ .UnicodeString = L"LUFA AVRISP MkII Clone"
};
/** Serial number string. This is a Unicode string containing the device's unique serial number, expressed as a
@@ -194,19 +163,7 @@ const USB_Descriptor_String_t PROGMEM SerialString =
{
.Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String},
- .UnicodeString = {CPU_TO_LE16('0'),
- CPU_TO_LE16('0'),
- CPU_TO_LE16('0'),
- CPU_TO_LE16('0'),
- CPU_TO_LE16('A'),
- CPU_TO_LE16('0'),
- CPU_TO_LE16('0'),
- CPU_TO_LE16('1'),
- CPU_TO_LE16('2'),
- CPU_TO_LE16('8'),
- CPU_TO_LE16('2'),
- CPU_TO_LE16('5'),
- CPU_TO_LE16('5')}
+ .UnicodeString = L"0000A00128255"
};
/** This function is called by the library when in device mode, and must be overridden (see library "USB Descriptors"
diff --git a/Projects/AVRISP-MKII/Descriptors.h b/Projects/AVRISP-MKII/Descriptors.h
index c831cffd6..ca68fd518 100644
--- a/Projects/AVRISP-MKII/Descriptors.h
+++ b/Projects/AVRISP-MKII/Descriptors.h
@@ -37,18 +37,11 @@
#define _DESCRIPTORS_H_
/* Includes: */
- #include <LUFA/Common/Common.h>
- #include <LUFA/Drivers/USB/USB.h>
+ #include <avr/pgmspace.h>
- #if (ARCH == ARCH_AVR8)
- #include <avr/pgmspace.h>
- #endif
+ #include <LUFA/Drivers/USB/USB.h>
/* Macros: */
- #if (ARCH == ARCH_UC3) // TODO: FIXME
- #define PROGMEM const
- #endif
-
#if !defined(LIBUSB_DRIVER_COMPAT)
/** Endpoint number of the AVRISP data OUT endpoint. */
#define AVRISP_DATA_OUT_EPNUM 2
@@ -77,7 +70,7 @@
USB_Descriptor_Interface_t AVRISP_Interface;
USB_Descriptor_Endpoint_t AVRISP_DataInEndpoint;
USB_Descriptor_Endpoint_t AVRISP_DataOutEndpoint;
- } ATTR_PACKED USB_Descriptor_Configuration_t;
+ } USB_Descriptor_Configuration_t;
/* Function Prototypes: */
uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue,
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
index 2e31c1819..ccd31f3d2 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
@@ -52,7 +52,7 @@ void ISPProtocol_EnterISPMode(void)
uint8_t PollValue;
uint8_t PollIndex;
uint8_t EnterProgBytes[4];
- } ATTR_PACKED Enter_ISP_Params;
+ } Enter_ISP_Params;
Endpoint_Read_Stream_LE(&Enter_ISP_Params, sizeof(Enter_ISP_Params), NULL);
@@ -107,7 +107,7 @@ void ISPProtocol_LeaveISPMode(void)
{
uint8_t PreDelayMS;
uint8_t PostDelayMS;
- } ATTR_PACKED Leave_ISP_Params;
+ } Leave_ISP_Params;
Endpoint_Read_Stream_LE(&Leave_ISP_Params, sizeof(Leave_ISP_Params), NULL);
@@ -141,12 +141,12 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
uint8_t ProgrammingCommands[3];
uint8_t PollValue1;
uint8_t PollValue2;
- uint8_t ProgData[256]; // Note, the Jungo driver has a very short ACK timeout period, need to buffer the
- } ATTR_PACKED Write_Memory_Params; // whole page and ACK the packet as fast as possible to prevent it from aborting
+ uint8_t ProgData[256]; // Note, the Jungo driver has a very short ACK timeout period, need to buffer the
+ } Write_Memory_Params; // whole page and ACK the packet as fast as possible to prevent it from aborting
Endpoint_Read_Stream_LE(&Write_Memory_Params, (sizeof(Write_Memory_Params) -
sizeof(Write_Memory_Params.ProgData)), NULL);
- Write_Memory_Params.BytesToWrite = be16_to_cpu(Write_Memory_Params.BytesToWrite);
+ Write_Memory_Params.BytesToWrite = SwapEndian_16(Write_Memory_Params.BytesToWrite);
if (Write_Memory_Params.BytesToWrite > sizeof(Write_Memory_Params.ProgData))
{
@@ -286,10 +286,10 @@ void ISPProtocol_ReadMemory(uint8_t V2Command)
{
uint16_t BytesToRead;
uint8_t ReadMemoryCommand;
- } ATTR_PACKED Read_Memory_Params;
+ } Read_Memory_Params;
Endpoint_Read_Stream_LE(&Read_Memory_Params, sizeof(Read_Memory_Params), NULL);
- Read_Memory_Params.BytesToRead = be16_to_cpu(Read_Memory_Params.BytesToRead);
+ Read_Memory_Params.BytesToRead = SwapEndian_16(Read_Memory_Params.BytesToRead);
Endpoint_ClearOUT();
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
@@ -360,7 +360,7 @@ void ISPProtocol_ChipErase(void)
uint8_t EraseDelayMS;
uint8_t PollMethod;
uint8_t EraseCommandBytes[4];
- } ATTR_PACKED Erase_Chip_Params;
+ } Erase_Chip_Params;
Endpoint_Read_Stream_LE(&Erase_Chip_Params, sizeof(Erase_Chip_Params), NULL);
@@ -396,7 +396,7 @@ void ISPProtocol_ReadFuseLockSigOSCCAL(uint8_t V2Command)
{
uint8_t RetByte;
uint8_t ReadCommandBytes[4];
- } ATTR_PACKED Read_FuseLockSigOSCCAL_Params;
+ } Read_FuseLockSigOSCCAL_Params;
Endpoint_Read_Stream_LE(&Read_FuseLockSigOSCCAL_Params, sizeof(Read_FuseLockSigOSCCAL_Params), NULL);
@@ -427,7 +427,7 @@ void ISPProtocol_WriteFuseLock(uint8_t V2Command)
struct
{
uint8_t WriteCommandBytes[4];
- } ATTR_PACKED Write_FuseLockSig_Params;
+ } Write_FuseLockSig_Params;
Endpoint_Read_Stream_LE(&Write_FuseLockSig_Params, sizeof(Write_FuseLockSig_Params), NULL);
@@ -454,7 +454,7 @@ void ISPProtocol_SPIMulti(void)
uint8_t RxBytes;
uint8_t RxStartAddr;
uint8_t TxData[255];
- } ATTR_PACKED SPI_Multi_Params;
+ } SPI_Multi_Params;
Endpoint_Read_Stream_LE(&SPI_Multi_Params, (sizeof(SPI_Multi_Params) - sizeof(SPI_Multi_Params.TxData)), NULL);
Endpoint_Read_Stream_LE(&SPI_Multi_Params.TxData, SPI_Multi_Params.TxBytes, NULL);
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h
index 8b0861971..213ce5ce6 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h
@@ -37,14 +37,10 @@
#define _ISP_PROTOCOL_
/* Includes: */
- #include <LUFA/Common/Common.h>
+ #include <avr/io.h>
+ #include <util/delay.h>
+
#include <LUFA/Drivers/USB/USB.h>
-
- #if (ARCH == ARCH_AVR8)
- #include <avr/io.h>
- #elif (ARCH == ARCH_UC3)
- #include <avr32/io.h>
- #endif
#include "../V2Protocol.h"
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
index e183dee0f..057aa7ad1 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
@@ -37,19 +37,12 @@
#define _ISP_TARGET_
/* Includes: */
- #include <LUFA/Common/Common.h>
+ #include <avr/io.h>
+ #include <avr/pgmspace.h>
+ #include <util/delay.h>
+
#include <LUFA/Drivers/USB/USB.h>
-
- #if defined(ENABLE_ISP_PROTOCOL) || defined(__DOXYGEN__)
- #include <LUFA/Drivers/Peripheral/SPI.h> // TODO: FIXME
- #endif
-
- #if (ARCH == ARCH_AVR8)
- #include <avr/io.h>
- #include <avr/pgmspace.h>
- #elif (ARCH == ARCH_UC3)
- #include <avr32/io.h>
- #endif
+ #include <LUFA/Drivers/Peripheral/SPI.h>
#include "../V2ProtocolParams.h"
@@ -91,7 +84,6 @@
const uint8_t ReadMemCommand);
/* Inline Functions: */
- #if defined(ENABLE_ISP_PROTOCOL) || defined(__DOXYGEN__)
/** Sends a byte of ISP data to the attached target, using the appropriate SPI hardware or
* software routines depending on the selected ISP speed.
*
@@ -132,7 +124,6 @@
else
return ISPTarget_TransferSoftSPIByte(Byte);
}
- #endif
#endif
diff --git a/Projects/AVRISP-MKII/Lib/V2Protocol.c b/Projects/AVRISP-MKII/Lib/V2Protocol.c
index a955a95a8..f763d6333 100644
--- a/Projects/AVRISP-MKII/Lib/V2Protocol.c
+++ b/Projects/AVRISP-MKII/Lib/V2Protocol.c
@@ -42,17 +42,13 @@ uint32_t CurrentAddress;
/** Flag to indicate that the next read/write operation must update the device's current extended FLASH address */
bool MustLoadExtendedAddress;
-/** Command timeout expiration flag. */
-volatile bool TimeoutExpired;
-#if (ARCH == ARCH_AVR8) // TODO: FIXME
/** ISR to manage timeouts whilst processing a V2Protocol command */
ISR(WDT_vect, ISR_BLOCK)
{
TimeoutExpired = true;
wdt_disable();
}
-#endif
/** Initialises the hardware and software associated with the V2 protocol command handling. */
void V2Protocol_Init(void)
@@ -79,12 +75,10 @@ void V2Protocol_ProcessCommand(void)
{
uint8_t V2Command = Endpoint_Read_8();
- #if (ARCH == ARCH_AVR8) // TODO: FIXME
/* Start the watchdog with timeout interrupt enabled to manage the timeout */
TimeoutExpired = false;
wdt_enable(WDTO_1S);
WDTCSR |= (1 << WDIE);
- #endif
switch (V2Command)
{
@@ -146,10 +140,8 @@ void V2Protocol_ProcessCommand(void)
break;
}
- #if (ARCH == ARCH_AVR8) // TODO: FIXME
/* Disable the timeout management watchdog timer */
wdt_disable();
- #endif
Endpoint_WaitUntilReady();
Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM);
diff --git a/Projects/AVRISP-MKII/Lib/V2Protocol.h b/Projects/AVRISP-MKII/Lib/V2Protocol.h
index c2f0ee072..8e9e6ff38 100644
--- a/Projects/AVRISP-MKII/Lib/V2Protocol.h
+++ b/Projects/AVRISP-MKII/Lib/V2Protocol.h
@@ -37,17 +37,12 @@
#define _V2_PROTOCOL_
/* Includes: */
- #include <LUFA/Common/Common.h>
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+ #include <avr/wdt.h>
+
#include <LUFA/Drivers/USB/USB.h>
- #if (ARCH == ARCH_AVR8)
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <avr/wdt.h>
- #elif (ARCH == ARCH_UC3)
- #include <avr32/io.h>
- #endif
-
#include "../Descriptors.h"
#include "V2ProtocolConstants.h"
#include "V2ProtocolParams.h"
@@ -74,13 +69,15 @@
/** Timeout period for each issued command from the host before it is aborted (in 10ms ticks). */
#define COMMAND_TIMEOUT_TICKS 100
+ /** Command timeout expiration flag, GPIOR for speed. */
+ #define TimeoutExpired GPIOR1
+
/** MUX mask for the VTARGET ADC channel number. */
#define VTARGET_ADC_CHANNEL_MASK ADC_GET_CHANNEL_MASK(VTARGET_ADC_CHANNEL)
/* External Variables: */
- extern uint32_t CurrentAddress;
- extern bool MustLoadExtendedAddress;
- extern volatile bool TimeoutExpired;
+ extern uint32_t CurrentAddress;
+ extern bool MustLoadExtendedAddress;
/* Function Prototypes: */
void V2Protocol_Init(void);
diff --git a/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h b/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h
index f4fad5eff..716e5fadb 100644
--- a/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h
+++ b/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h
@@ -73,7 +73,6 @@
#define STATUS_CONN_FAIL_SCK 0x04
#define STATUS_TGT_NOT_DETECTED 0x10
#define STATUS_TGT_REVERSE_INSERTED 0x20
- #define STATUS_ANSWER_CKSUM_ERROR 0xB0
#define PARAM_BUILD_NUMBER_LOW 0x80
#define PARAM_BUILD_NUMBER_HIGH 0x81
diff --git a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c
index 6342d75b3..3c1a88130 100644
--- a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c
+++ b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c
@@ -37,7 +37,7 @@
#include "V2ProtocolParams.h"
/* Non-Volatile Parameter Values for EEPROM storage */
-static uint8_t EEMEM EEPROM_Reset_Polarity = 0x00;
+static uint8_t EEMEM EEPROM_Rest_Polarity = 0x00;
/* Volatile Parameter Values for RAM storage */
static ParameterItem_t ParameterTable[] =
@@ -88,7 +88,7 @@ static ParameterItem_t ParameterTable[] =
void V2Params_LoadNonVolatileParamValues(void)
{
/* Target RESET line polarity is a non-volatile value, retrieve current parameter value from EEPROM */
- V2Params_GetParamFromTable(PARAM_RESET_POLARITY)->ParamValue = eeprom_read_byte(&EEPROM_Reset_Polarity);
+ V2Params_GetParamFromTable(PARAM_RESET_POLARITY)->ParamValue = eeprom_read_byte(&EEPROM_Rest_Polarity);
}
/** Updates any parameter values that are sourced from hardware rather than explicitly set by the host, such as
@@ -163,7 +163,7 @@ void V2Params_SetParameterValue(const uint8_t ParamID,
/* The target RESET line polarity is a non-volatile parameter, save to EEPROM when changed */
if (ParamID == PARAM_RESET_POLARITY)
- eeprom_update_byte(&EEPROM_Reset_Polarity, Value);
+ eeprom_update_byte(&EEPROM_Rest_Polarity, Value);
}
/** Retrieves a parameter entry (including ID, value and privileges) from the parameter table that matches the given
diff --git a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h
index 4ef091ce7..f4479d308 100644
--- a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h
+++ b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h
@@ -37,20 +37,15 @@
#define _V2_PROTOCOL_PARAMS_
/* Includes: */
- #include <LUFA/Common/Common.h>
+ #include <avr/io.h>
+ #include <avr/eeprom.h>
+
#include <LUFA/Version.h>
#if defined(ADC)
#include <LUFA/Drivers/Peripheral/ADC.h>
#endif
- #if (ARCH == ARCH_AVR8)
- #include <avr/io.h>
- #include <avr/eeprom.h>
- #elif (ARCH == ARCH_UC3)
- #include <avr32/io.h>
- #endif
-
#include "V2Protocol.h"
#include "V2ProtocolConstants.h"
#include "ISP/ISPTarget.h"
@@ -64,12 +59,6 @@
/** Total number of parameters in the parameter table */
#define TABLE_PARAM_COUNT (sizeof(ParameterTable) / sizeof(ParameterTable[0]))
-
- #if (ARCH == ARCH_UC3) // TODO: FIXME
- #define EEMEM
- #define eeprom_read_byte(x) *x
- #define eeprom_update_byte(x,y) *x=y
- #endif
/* Type Defines: */
/** Type define for a parameter table entry indicating a PC readable or writable device parameter. */
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
index 089341592..b2b37e916 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
@@ -37,17 +37,12 @@
#define _TINY_NVM_
/* Includes: */
- #include <LUFA/Common/Common.h>
-
- #if (ARCH == ARCH_AVR8)
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #elif (ARCH == ARCH_UC3)
- #include <avr32/io.h>
- #endif
-
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
#include <stdbool.h>
+ #include <LUFA/Common/Common.h>
+
#include "XPROGProtocol.h"
#include "XPROGTarget.h"
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h
index 11f79326b..48fa8eb96 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h
@@ -37,17 +37,12 @@
#define _XMEGA_NVM_
/* Includes: */
- #include <LUFA/Common/Common.h>
-
- #if (ARCH == ARCH_AVR8)
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #elif (ARCH == ARCH_UC3)
- #include <avr32/io.h>
- #endif
-
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
#include <stdbool.h>
+ #include <LUFA/Common/Common.h>
+
#include "XPROGProtocol.h"
#include "XPROGTarget.h"
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
index 778a7df9b..72cc53636 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
@@ -60,7 +60,7 @@ void XPROGProtocol_SetMode(void)
struct
{
uint8_t Protocol;
- } ATTR_PACKED SetMode_XPROG_Params;
+ } SetMode_XPROG_Params;
Endpoint_Read_Stream_LE(&SetMode_XPROG_Params, sizeof(SetMode_XPROG_Params), NULL);
@@ -163,10 +163,10 @@ static void XPROGProtocol_Erase(void)
{
uint8_t MemoryType;
uint32_t Address;
- } ATTR_PACKED Erase_XPROG_Params;
+ } Erase_XPROG_Params;
Endpoint_Read_Stream_LE(&Erase_XPROG_Params, sizeof(Erase_XPROG_Params), NULL);
- Erase_XPROG_Params.Address = be32_to_cpu(Erase_XPROG_Params.Address);
+ Erase_XPROG_Params.Address = SwapEndian_32(Erase_XPROG_Params.Address);
Endpoint_ClearOUT();
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
@@ -242,12 +242,12 @@ static void XPROGProtocol_WriteMemory(void)
uint32_t Address;
uint16_t Length;
uint8_t ProgData[256];
- } ATTR_PACKED WriteMemory_XPROG_Params;
+ } WriteMemory_XPROG_Params;
Endpoint_Read_Stream_LE(&WriteMemory_XPROG_Params, (sizeof(WriteMemory_XPROG_Params) -
sizeof(WriteMemory_XPROG_Params).ProgData), NULL);
- WriteMemory_XPROG_Params.Address = be32_to_cpu(WriteMemory_XPROG_Params.Address);
- WriteMemory_XPROG_Params.Length = be16_to_cpu(WriteMemory_XPROG_Params.Length);
+ WriteMemory_XPROG_Params.Address = SwapEndian_32(WriteMemory_XPROG_Params.Address);
+ WriteMemory_XPROG_Params.Length = SwapEndian_16(WriteMemory_XPROG_Params.Length);
Endpoint_Read_Stream_LE(&WriteMemory_XPROG_Params.ProgData, WriteMemory_XPROG_Params.Length, NULL);
// The driver will terminate transfers that are a round multiple of the endpoint bank in size with a ZLP, need
@@ -335,11 +335,11 @@ static void XPROGProtocol_ReadMemory(void)
uint8_t MemoryType;
uint32_t Address;
uint16_t Length;
- } ATTR_PACKED ReadMemory_XPROG_Params;
+ } ReadMemory_XPROG_Params;
Endpoint_Read_Stream_LE(&ReadMemory_XPROG_Params, sizeof(ReadMemory_XPROG_Params), NULL);
- ReadMemory_XPROG_Params.Address = be32_to_cpu(ReadMemory_XPROG_Params.Address);
- ReadMemory_XPROG_Params.Length = be16_to_cpu(ReadMemory_XPROG_Params.Length);
+ ReadMemory_XPROG_Params.Address = SwapEndian_32(ReadMemory_XPROG_Params.Address);
+ ReadMemory_XPROG_Params.Length = SwapEndian_16(ReadMemory_XPROG_Params.Length);
Endpoint_ClearOUT();
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
@@ -380,7 +380,7 @@ static void XPROGProtocol_ReadCRC(void)
struct
{
uint8_t CRCType;
- } ATTR_PACKED ReadCRC_XPROG_Params;
+ } ReadCRC_XPROG_Params;
Endpoint_Read_Stream_LE(&ReadCRC_XPROG_Params, sizeof(ReadCRC_XPROG_Params), NULL);
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
index 9c7986e55..d637c79ea 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
@@ -37,18 +37,12 @@
#define _XPROG_PROTOCOL_
/* Includes: */
- #include <LUFA/Common/Common.h>
- #include <LUFA/Drivers/USB/USB.h>
-
- #if (ARCH == ARCH_AVR8)
- #include <avr/io.h>
- #elif (ARCH == ARCH_UC3)
- #include <avr32/io.h>
- #endif
-
- #include <stdbool.h>
+ #include <avr/io.h>
+ #include <util/delay.h>
#include <stdio.h>
+ #include <LUFA/Drivers/USB/USB.h>
+
#include "../V2Protocol.h"
#include "XMEGANVM.h"
#include "TINYNVM.h"
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
index 70e49f7c6..0a2dee73b 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
@@ -46,22 +46,18 @@ void XPROGTarget_EnableTargetPDI(void)
{
IsSending = false;
- #if (ARCH == ARCH_AVR8)
- /* Set Tx and XCK as outputs, Rx as input */
- DDRD |= (1 << 5) | (1 << 3);
- DDRD &= ~(1 << 2);
-
- /* Set DATA line high for at least 90ns to disable /RESET functionality */
- PORTD |= (1 << 3);
- Delay_MS(1);
-
- /* Set up the synchronous USART for XMEGA communications - 8 data bits, even parity, 2 stop bits */
- UBRR1 = ((F_CPU / 2 / XPROG_HARDWARE_SPEED) - 1);
- UCSR1B = (1 << TXEN1);
- UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
- #elif (ARCH == ARCH_UC3)
- // TODO: FIXME
- #endif
+ /* Set Tx and XCK as outputs, Rx as input */
+ DDRD |= (1 << 5) | (1 << 3);
+ DDRD &= ~(1 << 2);
+
+ /* Set DATA line high for at least 90ns to disable /RESET functionality */
+ PORTD |= (1 << 3);
+ _delay_us(1);
+
+ /* Set up the synchronous USART for XMEGA communications - 8 data bits, even parity, 2 stop bits */
+ UBRR1 = ((F_CPU / 2 / XPROG_HARDWARE_SPEED) - 1);
+ UCSR1B = (1 << TXEN1);
+ UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
/* Send two IDLEs of 12 bits each to enable PDI interface (need at least 16 idle bits) */
XPROGTarget_SendIdle();
@@ -73,23 +69,19 @@ void XPROGTarget_EnableTargetTPI(void)
{
IsSending = false;
- #if (ARCH == ARCH_AVR8)
- /* Set /RESET line low for at least 400ns to enable TPI functionality */
- AUX_LINE_DDR |= AUX_LINE_MASK;
- AUX_LINE_PORT &= ~AUX_LINE_MASK;
- Delay_MS(1);
+ /* Set /RESET line low for at least 400ns to enable TPI functionality */
+ AUX_LINE_DDR |= AUX_LINE_MASK;
+ AUX_LINE_PORT &= ~AUX_LINE_MASK;
+ _delay_us(1);
- /* Set Tx and XCK as outputs, Rx as input */
- DDRD |= (1 << 5) | (1 << 3);
- DDRD &= ~(1 << 2);
+ /* Set Tx and XCK as outputs, Rx as input */
+ DDRD |= (1 << 5) | (1 << 3);
+ DDRD &= ~(1 << 2);
- /* Set up the synchronous USART for TINY communications - 8 data bits, even parity, 2 stop bits */
- UBRR1 = ((F_CPU / 2 / XPROG_HARDWARE_SPEED) - 1);
- UCSR1B = (1 << TXEN1);
- UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
- #elif (ARCH == ARCH_UC3)
- // TODO: FIXME
- #endif
+ /* Set up the synchronous USART for TINY communications - 8 data bits, even parity, 2 stop bits */
+ UBRR1 = ((F_CPU / 2 / XPROG_HARDWARE_SPEED) - 1);
+ UCSR1B = (1 << TXEN1);
+ UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
/* Send two IDLEs of 12 bits each to enable TPI interface (need at least 16 idle bits) */
XPROGTarget_SendIdle();
@@ -102,18 +94,14 @@ void XPROGTarget_DisableTargetPDI(void)
/* Switch to Rx mode to ensure that all pending transmissions are complete */
XPROGTarget_SetRxMode();
- #if (ARCH == ARCH_AVR8)
- /* Turn off receiver and transmitter of the USART, clear settings */
- UCSR1A = ((1 << TXC1) | (1 << RXC1));
- UCSR1B = 0;
- UCSR1C = 0;
-
- /* Tristate all pins */
- DDRD &= ~((1 << 5) | (1 << 3));
- PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
- #elif (ARCH == ARCH_UC3)
- // TODO: FIXME
- #endif
+ /* Turn off receiver and transmitter of the USART, clear settings */
+ UCSR1A = ((1 << TXC1) | (1 << RXC1));
+ UCSR1B = 0;
+ UCSR1C = 0;
+
+ /* Tristate all pins */
+ DDRD &= ~((1 << 5) | (1 << 3));
+ PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
}
/** Disables the target's TPI interface, exits programming mode and starts the target's application. */
@@ -122,22 +110,18 @@ void XPROGTarget_DisableTargetTPI(void)
/* Switch to Rx mode to ensure that all pending transmissions are complete */
XPROGTarget_SetRxMode();
- #if (ARCH == ARCH_AVR8)
- /* Turn off receiver and transmitter of the USART, clear settings */
- UCSR1A |= (1 << TXC1) | (1 << RXC1);
- UCSR1B = 0;
- UCSR1C = 0;
-
- /* Set all USART lines as inputs, tristate */
- DDRD &= ~((1 << 5) | (1 << 3));
- PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
-
- /* Tristate target /RESET line */
- AUX_LINE_DDR &= ~AUX_LINE_MASK;
- AUX_LINE_PORT &= ~AUX_LINE_MASK;
- #elif (ARCH == ARCH_UC3)
- // TODO: FIXME
- #endif
+ /* Turn off receiver and transmitter of the USART, clear settings */
+ UCSR1A |= (1 << TXC1) | (1 << RXC1);
+ UCSR1B = 0;
+ UCSR1C = 0;
+
+ /* Set all USART lines as inputs, tristate */
+ DDRD &= ~((1 << 5) | (1 << 3));
+ PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
+
+ /* Tristate target /RESET line */
+ AUX_LINE_DDR &= ~AUX_LINE_MASK;
+ AUX_LINE_PORT &= ~AUX_LINE_MASK;
}
/** Sends a byte via the USART.
@@ -150,14 +134,10 @@ void XPROGTarget_SendByte(const uint8_t Byte)
if (!(IsSending))
XPROGTarget_SetTxMode();
- #if (ARCH == ARCH_AVR8)
- /* Wait until there is space in the hardware Tx buffer before writing */
- while (!(UCSR1A & (1 << UDRE1)));
- UCSR1A |= (1 << TXC1);
- UDR1 = Byte;
- #elif (ARCH == ARCH_UC3)
- // TODO: FIXME
- #endif
+ /* Wait until there is space in the hardware Tx buffer before writing */
+ while (!(UCSR1A & (1 << UDRE1)));
+ UCSR1A |= (1 << TXC1);
+ UDR1 = Byte;
}
/** Receives a byte via the software USART, blocking until data is received.
@@ -170,15 +150,10 @@ uint8_t XPROGTarget_ReceiveByte(void)
if (IsSending)
XPROGTarget_SetRxMode();
- #if (ARCH == ARCH_AVR8)
- /* Wait until a byte has been received before reading */
- while (!(UCSR1A & (1 << RXC1)) && !(TimeoutExpired));
+ /* Wait until a byte has been received before reading */
+ while (!(UCSR1A & (1 << RXC1)) && !(TimeoutExpired));
- return UDR1;
- #elif (ARCH == ARCH_UC3)
- // TODO: FIXME
- return 0;
- #endif
+ return UDR1;
}
/** Sends an IDLE via the USART to the attached target, consisting of a full frame of idle bits. */
@@ -188,52 +163,40 @@ void XPROGTarget_SendIdle(void)
if (!(IsSending))
XPROGTarget_SetTxMode();
- #if (ARCH == ARCH_AVR8)
- /* Need to do nothing for a full frame to send an IDLE */
- for (uint8_t i = 0; i < BITS_IN_USART_FRAME; i++)
- {
- /* Wait for a full cycle of the clock */
- while (PIND & (1 << 5));
- while (!(PIND & (1 << 5)));
- }
- #elif (ARCH == ARCH_UC3)
- // TODO: FIXME
- #endif
+ /* Need to do nothing for a full frame to send an IDLE */
+ for (uint8_t i = 0; i < BITS_IN_USART_FRAME; i++)
+ {
+ /* Wait for a full cycle of the clock */
+ while (PIND & (1 << 5));
+ while (!(PIND & (1 << 5)));
+ }
}
static void XPROGTarget_SetTxMode(void)
{
- #if (ARCH == ARCH_AVR8)
- /* Wait for a full cycle of the clock */
- while (PIND & (1 << 5));
- while (!(PIND & (1 << 5)));
+ /* Wait for a full cycle of the clock */
+ while (PIND & (1 << 5));
+ while (!(PIND & (1 << 5)));
- PORTD |= (1 << 3);
- DDRD |= (1 << 3);
+ PORTD |= (1 << 3);
+ DDRD |= (1 << 3);
- UCSR1B &= ~(1 << RXEN1);
- UCSR1B |= (1 << TXEN1);
- #elif (ARCH == ARCH_UC3)
- // TODO: FIXME
- #endif
+ UCSR1B &= ~(1 << RXEN1);
+ UCSR1B |= (1 << TXEN1);
IsSending = true;
}
static void XPROGTarget_SetRxMode(void)
{
- #if (ARCH == ARCH_AVR8)
- while (!(UCSR1A & (1 << TXC1)));
- UCSR1A |= (1 << TXC1);
-
- UCSR1B &= ~(1 << TXEN1);
- UCSR1B |= (1 << RXEN1);
-
- DDRD &= ~(1 << 3);
- PORTD &= ~(1 << 3);
- #elif (ARCH == ARCH_UC3)
- // TODO: FIXME
- #endif
+ while (!(UCSR1A & (1 << TXC1)));
+ UCSR1A |= (1 << TXC1);
+
+ UCSR1B &= ~(1 << TXEN1);
+ UCSR1B |= (1 << RXEN1);
+
+ DDRD &= ~(1 << 3);
+ PORTD &= ~(1 << 3);
IsSending = false;
}
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
index e2194b3fe..ebc563933 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
@@ -37,14 +37,11 @@
#define _XPROG_TARGET_
/* Includes: */
- #include <LUFA/Common/Common.h>
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+ #include <stdbool.h>
- #if (ARCH == ARCH_AVR8)
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #elif (ARCH == ARCH_UC3)
- #include <avr32/io.h>
- #endif
+ #include <LUFA/Common/Common.h>
#include "../V2Protocol.h"
#include "XPROGProtocol.h"
diff --git a/Projects/AVRISP-MKII/makefile b/Projects/AVRISP-MKII/makefile
index d9129237e..de1e225da 100644
--- a/Projects/AVRISP-MKII/makefile
+++ b/Projects/AVRISP-MKII/makefile
@@ -174,7 +174,7 @@ CPPSRC =
# Even though the DOS/Win* filesystem matches both .s and .S the same,
# it will preserve the spelling of the filenames, and gcc itself does
# care about how the name is spelled on its command-line.
-ASRC =
+ASRC =
# Optimization level, can be [0, 1, 2, 3, s].