diff options
Diffstat (limited to 'Projects/AVRISP-MKII')
23 files changed, 448 insertions, 429 deletions
diff --git a/Projects/AVRISP-MKII/AVRISP-MKII.c b/Projects/AVRISP-MKII/AVRISP-MKII.c index 8f27a9b22..b7e551e99 100644 --- a/Projects/AVRISP-MKII/AVRISP-MKII.c +++ b/Projects/AVRISP-MKII/AVRISP-MKII.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -43,7 +43,7 @@ int main(void) { SetupHardware(); V2Protocol_Init(); - + LEDs_SetAllLEDs(LEDMASK_USB_NOTREADY); sei(); @@ -54,7 +54,7 @@ int main(void) 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(); USB_USBTask(); } @@ -72,7 +72,7 @@ void SetupHardware(void) /* Hardware Initialization */ LEDs_Init(); - USB_Init(); + USB_Init(); } /** Event handler for the library USB Connection event. */ @@ -100,9 +100,9 @@ void EVENT_USB_Device_ConfigurationChanged(void) ConfigSuccess &= Endpoint_ConfigureEndpoint(AVRISP_DATA_IN_EPNUM, EP_TYPE_BULK, ENDPOINT_DIR_IN, AVRISP_DATA_EPSIZE, ENDPOINT_BANK_SINGLE); #endif - + /* Indicate endpoint configuration success or failure */ - LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); + LEDs_SetAllLEDs(ConfigSuccess ? LEDMASK_USB_READY : LEDMASK_USB_ERROR); } /** Processes incoming V2 Protocol commands from the host, returning a response when required. */ @@ -115,7 +115,7 @@ void AVRISP_Task(void) V2Params_UpdateParamValues(); Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM); - + /* Check to see if a V2 Protocol command has been received */ if (Endpoint_IsOUTReceived()) { diff --git a/Projects/AVRISP-MKII/AVRISP-MKII.h b/Projects/AVRISP-MKII/AVRISP-MKII.h index 3491abf0c..6e7f12edb 100644 --- a/Projects/AVRISP-MKII/AVRISP-MKII.h +++ b/Projects/AVRISP-MKII/AVRISP-MKII.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -45,11 +45,11 @@ #include <LUFA/Version.h> #include <LUFA/Drivers/Board/LEDs.h> #include <LUFA/Drivers/USB/USB.h> - + #if defined(ADC) #include <LUFA/Drivers/Peripheral/ADC.h> #endif - + #include "Descriptors.h" #include "Lib/V2Protocol.h" @@ -68,16 +68,17 @@ /** 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); - + void EVENT_USB_Device_Connect(void); void EVENT_USB_Device_Disconnect(void); void EVENT_USB_Device_ConfigurationChanged(void); - + #endif + diff --git a/Projects/AVRISP-MKII/AVRISP-MKII.txt b/Projects/AVRISP-MKII/AVRISP-MKII.txt index eb6431477..e36ffe231 100644 --- a/Projects/AVRISP-MKII/AVRISP-MKII.txt +++ b/Projects/AVRISP-MKII/AVRISP-MKII.txt @@ -3,7 +3,7 @@ * This file contains special DoxyGen information for the generation of the main page and other special * documentation pages. It is not a project source file. */ - + /** \mainpage AVRISP MKII Programmer Project * * \section SSec_Compat Project Compatibility: @@ -28,7 +28,7 @@ * <td><b>USB Class:</b></td> * <td>Vendor Specific Class</td> * </tr> - * <tr> + * <tr> * <td><b>USB Subclass:</b></td> * <td>N/A</td> * </tr> @@ -42,7 +42,7 @@ * </tr> * </table> * - * \section SSec_Description Project Description: + * \section SSec_Description Project Description: * * Firmware for an AVRStudio compatible AVRISP-MKII clone programmer. This project will enable the USB AVR series of * microcontrollers to act as a clone of the official Atmel AVRISP-MKII programmer, usable within AVRStudio. In its @@ -240,31 +240,31 @@ * <td>VTARGET_ADC_CHANNEL</td> * <td>Makefile LUFA_OPTS</td> * <td>ADC channel number (on supported AVRs) to use for VTARGET level detection, if NO_VTARGET_DETECT is not defined. - * <i>Ignored when compiled for targets lacking an ADC.</i></td> + * <i>Ignored when compiled for targets lacking an ADC.</i></td> * </tr> * <tr> * <td>ENABLE_ISP_PROTOCOL</td> * <td>Makefile LUFA_OPTS</td> - * <td>Define to enable SPI programming protocol support. <i>Ignored when compiled for the XPLAIN board.</i></td> + * <td>Define to enable SPI programming protocol support. <i>Ignored when compiled for the XPLAIN board.</i></td> * </tr> * <tr> * <td>ENABLE_XPROG_PROTOCOL</td> * <td>Makefile LUFA_OPTS</td> - * <td>Define to enable PDI and TPI programming protocol support. <i>Ignored when compiled for the XPLAIN board.</i></td> + * <td>Define to enable PDI and TPI programming protocol support. <i>Ignored when compiled for the XPLAIN board.</i></td> * </tr> * <tr> * <td>NO_VTARGET_DETECT</td> * <td>Makefile LUFA_OPTS</td> * <td>Define to disable VTARGET sampling and reporting on AVR models with an ADC converter. This will cause the programmer * to report a fixed 5V target voltage to the host regardless of the real target voltage. <i>Ignored when compiled for - * targets lacking an ADC.</i></td> + * targets lacking an ADC.</i></td> * </tr> * <tr> * <td>VTARGET_REF_VOLTS</td> * <td>Makefile LUFA_OPTS</td> * <td>Indicates the programmer AVR's AVCC reference voltage when measuring the target's supply voltage. Note that the supply * voltage should never exceed the reference voltage on the programmer AVR without some form of protection to prevent damage - * to the ADC. <i>Ignored when compiled for targets lacking an ADC, or when NO_VTARGET_DETECT is defined.</i></td> + * to the ADC. <i>Ignored when compiled for targets lacking an ADC, or when NO_VTARGET_DETECT is defined.</i></td> * </tr> * <tr> * <td>VTARGET_SCALE_FACTOR</td> @@ -272,8 +272,8 @@ * <td>Indicates the target's supply voltage scale factor when applied to the ADC. A simple resistive divider can be used on the * ADC pin for measuring the target's supply voltage, so that voltages above the programmer AVR's AVCC reference voltage can be * measured. This should be the reciprocal of the division performed - e.g. if the VTARGET voltage is halved, this should be set - * to 2. <i>Ignored when compiled for targets lacking an ADC, or when NO_VTARGET_DETECT is defined.</i></td> - * </tr> + * to 2. <i>Ignored when compiled for targets lacking an ADC, or when NO_VTARGET_DETECT is defined.</i></td> + * </tr> * <tr> * <td>LIBUSB_DRIVER_COMPAT</td> * <td>Makefile LUFA_OPTS</td> @@ -282,3 +282,4 @@ * </tr> * </table> */ + diff --git a/Projects/AVRISP-MKII/Descriptors.c b/Projects/AVRISP-MKII/Descriptors.c index 5559bc11e..01a93cb64 100644 --- a/Projects/AVRISP-MKII/Descriptors.c +++ b/Projects/AVRISP-MKII/Descriptors.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -30,9 +30,9 @@ /** \file * - * USB Device Descriptors, for library use when in USB device mode. Descriptors are special + * USB Device Descriptors, for library use when in USB device mode. Descriptors are special * computer-readable structures which the host requests upon device enumeration, to determine - * the device's capabilities and functions. + * the device's capabilities and functions. */ #include "Descriptors.h" @@ -45,22 +45,22 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor = { .Header = {.Size = sizeof(USB_Descriptor_Device_t), .Type = DTYPE_Device}, - + .USBSpecification = VERSION_BCD(01.10), .Class = 0xFF, .SubClass = 0x00, .Protocol = 0x00, - + .Endpoint0Size = FIXED_CONTROL_ENDPOINT_SIZE, - + .VendorID = 0x03EB, .ProductID = 0x2104, .ReleaseNumber = VERSION_BCD(02.00), - + .ManufacturerStrIndex = 0x01, .ProductStrIndex = 0x02, .SerialNumStrIndex = 0x03, - + .NumberOfConfigurations = FIXED_NUM_CONFIGURATIONS }; @@ -71,41 +71,41 @@ USB_Descriptor_Device_t PROGMEM DeviceDescriptor = */ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = { - .Config = + .Config = { .Header = {.Size = sizeof(USB_Descriptor_Configuration_Header_t), .Type = DTYPE_Configuration}, .TotalConfigurationSize = sizeof(USB_Descriptor_Configuration_t), .TotalInterfaces = 1, - + .ConfigurationNumber = 1, .ConfigurationStrIndex = NO_DESCRIPTOR, - + .ConfigAttributes = USB_CONFIG_ATTR_BUSPOWERED, - + .MaxPowerConsumption = USB_CONFIG_POWER_MA(100) }, - .AVRISP_Interface = + .AVRISP_Interface = { .Header = {.Size = sizeof(USB_Descriptor_Interface_t), .Type = DTYPE_Interface}, .InterfaceNumber = 0, .AlternateSetting = 0, - + .TotalEndpoints = 2, - + .Class = 0xFF, .SubClass = 0x00, .Protocol = 0x00, - + .InterfaceStrIndex = NO_DESCRIPTOR }, - .AVRISP_DataInEndpoint = + .AVRISP_DataInEndpoint = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, - + .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_IN | AVRISP_DATA_IN_EPNUM), .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = AVRISP_DATA_EPSIZE, @@ -115,7 +115,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = .AVRISP_DataOutEndpoint = { .Header = {.Size = sizeof(USB_Descriptor_Endpoint_t), .Type = DTYPE_Endpoint}, - + .EndpointAddress = (ENDPOINT_DESCRIPTOR_DIR_OUT | AVRISP_DATA_OUT_EPNUM), .Attributes = (EP_TYPE_BULK | ENDPOINT_ATTR_NO_SYNC | ENDPOINT_USAGE_DATA), .EndpointSize = AVRISP_DATA_EPSIZE, @@ -130,7 +130,7 @@ USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = USB_Descriptor_String_t PROGMEM LanguageString = { .Header = {.Size = USB_STRING_LEN(1), .Type = DTYPE_String}, - + .UnicodeString = {LANGUAGE_ID_ENG} }; @@ -141,7 +141,7 @@ USB_Descriptor_String_t PROGMEM LanguageString = USB_Descriptor_String_t PROGMEM ManufacturerString = { .Header = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String}, - + .UnicodeString = L"Dean Camera" }; @@ -152,7 +152,7 @@ USB_Descriptor_String_t PROGMEM ManufacturerString = USB_Descriptor_String_t PROGMEM ProductString = { .Header = {.Size = USB_STRING_LEN(22), .Type = DTYPE_String}, - + .UnicodeString = L"LUFA AVRISP MkII Clone" }; @@ -162,7 +162,7 @@ USB_Descriptor_String_t PROGMEM ProductString = USB_Descriptor_String_t PROGMEM SerialString = { .Header = {.Size = USB_STRING_LEN(13), .Type = DTYPE_String}, - + .UnicodeString = L"0000A00128255" }; @@ -181,41 +181,42 @@ uint16_t CALLBACK_USB_GetDescriptor(const uint16_t wValue, const void* Address = NULL; uint16_t Size = NO_DESCRIPTOR; - + switch (DescriptorType) { - case DTYPE_Device: + case DTYPE_Device: Address = &DeviceDescriptor; Size = sizeof(USB_Descriptor_Device_t); break; - case DTYPE_Configuration: + case DTYPE_Configuration: Address = &ConfigurationDescriptor; Size = sizeof(USB_Descriptor_Configuration_t); break; - case DTYPE_String: + case DTYPE_String: switch (DescriptorNumber) { - case 0x00: + case 0x00: Address = &LanguageString; Size = pgm_read_byte(&LanguageString.Header.Size); break; - case 0x01: + case 0x01: Address = &ManufacturerString; Size = pgm_read_byte(&ManufacturerString.Header.Size); break; - case 0x02: + case 0x02: Address = &ProductString; Size = pgm_read_byte(&ProductString.Header.Size); break; case 0x03: Address = &SerialString; Size = pgm_read_byte(&SerialString.Header.Size); - break; + break; } - + break; } - + *DescriptorAddress = Address; return Size; } + diff --git a/Projects/AVRISP-MKII/Descriptors.h b/Projects/AVRISP-MKII/Descriptors.h index 6c0e0d163..b707e7f26 100644 --- a/Projects/AVRISP-MKII/Descriptors.h +++ b/Projects/AVRISP-MKII/Descriptors.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -32,7 +32,7 @@ * * Header file for Descriptors.c. */ - + #ifndef _DESCRIPTORS_H_ #define _DESCRIPTORS_H_ @@ -79,3 +79,4 @@ ATTR_WARN_UNUSED_RESULT ATTR_NON_NULL_PTR_ARG(3); #endif + diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c index aff84a962..8821ac991 100644 --- a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c +++ b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -53,7 +53,7 @@ void ISPProtocol_EnterISPMode(void) uint8_t PollIndex; uint8_t EnterProgBytes[4]; } Enter_ISP_Params; - + Endpoint_Read_Stream_LE(&Enter_ISP_Params, sizeof(Enter_ISP_Params), NO_STREAM_CALLBACK); Endpoint_ClearOUT(); @@ -61,9 +61,9 @@ void ISPProtocol_EnterISPMode(void) Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); uint8_t ResponseStatus = STATUS_CMD_FAILED; - + CurrentAddress = 0; - + /* Set up the synchronous USART to generate the .5MHz recovery clock on XCK pin */ UBRR1 = (F_CPU / 500000UL); UCSR1B = (1 << TXEN1); @@ -71,7 +71,7 @@ void ISPProtocol_EnterISPMode(void) DDRD |= (1 << 5); /* Perform execution delay, initialize SPI bus */ - ISPProtocol_DelayMS(Enter_ISP_Params.ExecutionDelayMS); + ISPProtocol_DelayMS(Enter_ISP_Params.ExecutionDelayMS); ISPTarget_Init(); /* Continuously attempt to synchronize with the target until either the number of attempts specified @@ -88,7 +88,7 @@ void ISPProtocol_EnterISPMode(void) ISPProtocol_DelayMS(Enter_ISP_Params.ByteDelay); ResponseBytes[RByte] = ISPTarget_TransferByte(Enter_ISP_Params.EnterProgBytes[RByte]); } - + /* Check if polling disabled, or if the polled value matches the expected value */ if (!(Enter_ISP_Params.PollIndex) || (ResponseBytes[Enter_ISP_Params.PollIndex - 1] == Enter_ISP_Params.PollValue)) { @@ -116,7 +116,7 @@ void ISPProtocol_LeaveISPMode(void) } Leave_ISP_Params; Endpoint_Read_Stream_LE(&Leave_ISP_Params, sizeof(Leave_ISP_Params), NO_STREAM_CALLBACK); - + Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); @@ -155,13 +155,13 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) uint8_t PollValue2; 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)), NO_STREAM_CALLBACK); Write_Memory_Params.BytesToWrite = SwapEndian_16(Write_Memory_Params.BytesToWrite); - + if (Write_Memory_Params.BytesToWrite > sizeof(Write_Memory_Params.ProgData)) { Endpoint_ClearOUT(); @@ -173,14 +173,14 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) Endpoint_ClearIN(); return; } - + Endpoint_Read_Stream_LE(&Write_Memory_Params.ProgData, Write_Memory_Params.BytesToWrite, NO_STREAM_CALLBACK); Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - uint8_t ProgrammingStatus = STATUS_CMD_OK; + uint8_t ProgrammingStatus = STATUS_CMD_OK; uint16_t PollAddress = 0; uint8_t PollValue = (V2Command == CMD_PROGRAM_FLASH_ISP) ? Write_Memory_Params.PollValue1 : Write_Memory_Params.PollValue2; @@ -190,7 +190,7 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) if (Write_Memory_Params.ProgrammingMode & PROG_MODE_PAGED_WRITES_MASK) { uint16_t StartAddress = (CurrentAddress & 0xFFFF); - + /* Check to see if we need to send a LOAD EXTENDED ADDRESS command to the target */ if (MustLoadExtendedAddress) { @@ -203,12 +203,12 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) { bool IsOddByte = (CurrentByte & 0x01); uint8_t ByteToWrite = *(NextWriteByte++); - + ISPTarget_SendByte(Write_Memory_Params.ProgrammingCommands[0]); ISPTarget_SendByte(CurrentAddress >> 8); ISPTarget_SendByte(CurrentAddress & 0xFF); ISPTarget_SendByte(ByteToWrite); - + /* AVR FLASH addressing requires us to modify the write command based on if we are writing a high * or low byte at the current word address */ if (V2Command == CMD_PROGRAM_FLASH_ISP) @@ -220,14 +220,14 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) if (IsOddByte && (V2Command == CMD_PROGRAM_FLASH_ISP)) Write_Memory_Params.ProgrammingCommands[2] |= READ_WRITE_HIGH_BYTE_MASK; - PollAddress = (CurrentAddress & 0xFFFF); - } + PollAddress = (CurrentAddress & 0xFFFF); + } /* EEPROM increments the address on each byte, flash needs to increment on each word */ if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP)) CurrentAddress++; } - + /* If the current page must be committed, send the PROGRAM PAGE command to the target */ if (Write_Memory_Params.ProgrammingMode & PROG_MODE_COMMIT_PAGE_MASK) { @@ -235,12 +235,12 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) ISPTarget_SendByte(StartAddress >> 8); ISPTarget_SendByte(StartAddress & 0xFF); ISPTarget_SendByte(0x00); - + /* Check if polling is possible and enabled, if not switch to timed delay mode */ if (!(PollAddress) && (Write_Memory_Params.ProgrammingMode & PROG_MODE_PAGED_VALUE_MASK)) { Write_Memory_Params.ProgrammingMode &= ~PROG_MODE_PAGED_VALUE_MASK; - Write_Memory_Params.ProgrammingMode |= PROG_MODE_PAGED_TIMEDELAY_MASK; + Write_Memory_Params.ProgrammingMode |= PROG_MODE_PAGED_TIMEDELAY_MASK; } ProgrammingStatus = ISPTarget_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue, @@ -248,7 +248,7 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) /* Check to see if the FLASH address has crossed the extended address boundary */ if ((V2Command == CMD_PROGRAM_FLASH_ISP) && !(CurrentAddress & 0xFFFF)) - MustLoadExtendedAddress = true; + MustLoadExtendedAddress = true; } } else @@ -258,7 +258,7 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) { bool IsOddByte = (CurrentByte & 0x01); uint8_t ByteToWrite = *(NextWriteByte++); - + /* Check to see if we need to send a LOAD EXTENDED ADDRESS command to the target */ if (MustLoadExtendedAddress) { @@ -270,12 +270,12 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) ISPTarget_SendByte(CurrentAddress >> 8); ISPTarget_SendByte(CurrentAddress & 0xFF); ISPTarget_SendByte(ByteToWrite); - + /* AVR FLASH addressing requires us to modify the write command based on if we are writing a high * or low byte at the current word address */ if (V2Command == CMD_PROGRAM_FLASH_ISP) Write_Memory_Params.ProgrammingCommands[0] ^= READ_WRITE_HIGH_BYTE_MASK; - + /* Save previous programming mode in case we modify it for the current word */ uint8_t PreviousProgrammingMode = Write_Memory_Params.ProgrammingMode; @@ -283,18 +283,18 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) { if (IsOddByte && (V2Command == CMD_PROGRAM_FLASH_ISP)) Write_Memory_Params.ProgrammingCommands[2] |= READ_WRITE_HIGH_BYTE_MASK; - + PollAddress = (CurrentAddress & 0xFFFF); } else if (!(Write_Memory_Params.ProgrammingMode & PROG_MODE_WORD_READYBUSY_MASK)) { Write_Memory_Params.ProgrammingMode &= ~PROG_MODE_WORD_VALUE_MASK; - Write_Memory_Params.ProgrammingMode |= PROG_MODE_WORD_TIMEDELAY_MASK; + Write_Memory_Params.ProgrammingMode |= PROG_MODE_WORD_TIMEDELAY_MASK; } - + ProgrammingStatus = ISPTarget_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue, Write_Memory_Params.DelayMS, Write_Memory_Params.ProgrammingCommands[2]); - + /* Restore previous programming mode mask in case the current word needed to change it */ Write_Memory_Params.ProgrammingMode = PreviousProgrammingMode; @@ -308,9 +308,9 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) if ((CurrentByte & 0x01) || (V2Command == CMD_PROGRAM_EEPROM_ISP)) { CurrentAddress++; - + if ((V2Command != CMD_PROGRAM_EEPROM_ISP) && !(CurrentAddress & 0xFFFF)) - MustLoadExtendedAddress = true; + MustLoadExtendedAddress = true; } } } @@ -332,14 +332,14 @@ void ISPProtocol_ReadMemory(uint8_t V2Command) uint16_t BytesToRead; uint8_t ReadMemoryCommand; } Read_Memory_Params; - + Endpoint_Read_Stream_LE(&Read_Memory_Params, sizeof(Read_Memory_Params), NO_STREAM_CALLBACK); Read_Memory_Params.BytesToRead = SwapEndian_16(Read_Memory_Params.BytesToRead); - + Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + Endpoint_Write_Byte(V2Command); Endpoint_Write_Byte(STATUS_CMD_OK); @@ -358,28 +358,28 @@ void ISPProtocol_ReadMemory(uint8_t V2Command) ISPTarget_SendByte(CurrentAddress >> 8); ISPTarget_SendByte(CurrentAddress & 0xFF); Endpoint_Write_Byte(ISPTarget_ReceiveByte()); - + /* Check if the endpoint bank is currently full, if so send the packet */ if (!(Endpoint_IsReadWriteAllowed())) { Endpoint_ClearIN(); Endpoint_WaitUntilReady(); } - + /* AVR FLASH addressing requires us to modify the read command based on if we are reading a high * or low byte at the current word address */ if (V2Command == CMD_READ_FLASH_ISP) Read_Memory_Params.ReadMemoryCommand ^= READ_WRITE_HIGH_BYTE_MASK; - + /* EEPROM just increments the address each byte, flash needs to increment on each word and * also check to ensure that a LOAD EXTENDED ADDRESS command is issued each time the extended * address boundary has been crossed */ if ((CurrentByte & 0x01) || (V2Command == CMD_READ_EEPROM_ISP)) { CurrentAddress++; - + if ((V2Command != CMD_READ_EEPROM_ISP) && !(CurrentAddress & 0xFFFF)) - MustLoadExtendedAddress = true; + MustLoadExtendedAddress = true; } } @@ -387,13 +387,13 @@ void ISPProtocol_ReadMemory(uint8_t V2Command) bool IsEndpointFull = !(Endpoint_IsReadWriteAllowed()); Endpoint_ClearIN(); - + /* Ensure last packet is a short packet to terminate the transfer */ if (IsEndpointFull) { - Endpoint_WaitUntilReady(); + Endpoint_WaitUntilReady(); Endpoint_ClearIN(); - Endpoint_WaitUntilReady(); + Endpoint_WaitUntilReady(); } } @@ -406,15 +406,15 @@ void ISPProtocol_ChipErase(void) uint8_t PollMethod; uint8_t EraseCommandBytes[4]; } Erase_Chip_Params; - + Endpoint_Read_Stream_LE(&Erase_Chip_Params, sizeof(Erase_Chip_Params), NO_STREAM_CALLBACK); - + Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + uint8_t ResponseStatus = STATUS_CMD_OK; - + /* Send the chip erase commands as given by the host to the device */ for (uint8_t SByte = 0; SByte < sizeof(Erase_Chip_Params.EraseCommandBytes); SByte++) ISPTarget_SendByte(Erase_Chip_Params.EraseCommandBytes[SByte]); @@ -424,7 +424,7 @@ void ISPProtocol_ChipErase(void) ISPProtocol_DelayMS(Erase_Chip_Params.EraseDelayMS); else ResponseStatus = ISPTarget_WaitWhileTargetBusy(); - + Endpoint_Write_Byte(CMD_CHIP_ERASE_ISP); Endpoint_Write_Byte(ResponseStatus); Endpoint_ClearIN(); @@ -442,7 +442,7 @@ void ISPProtocol_ReadFuseLockSigOSCCAL(uint8_t V2Command) uint8_t RetByte; uint8_t ReadCommandBytes[4]; } Read_FuseLockSigOSCCAL_Params; - + Endpoint_Read_Stream_LE(&Read_FuseLockSigOSCCAL_Params, sizeof(Read_FuseLockSigOSCCAL_Params), NO_STREAM_CALLBACK); Endpoint_ClearOUT(); @@ -454,7 +454,7 @@ void ISPProtocol_ReadFuseLockSigOSCCAL(uint8_t V2Command) /* Send the Fuse or Lock byte read commands as given by the host to the device, store response */ for (uint8_t RByte = 0; RByte < sizeof(ResponseBytes); RByte++) ResponseBytes[RByte] = ISPTarget_TransferByte(Read_FuseLockSigOSCCAL_Params.ReadCommandBytes[RByte]); - + Endpoint_Write_Byte(V2Command); Endpoint_Write_Byte(STATUS_CMD_OK); Endpoint_Write_Byte(ResponseBytes[Read_FuseLockSigOSCCAL_Params.RetByte - 1]); @@ -473,7 +473,7 @@ void ISPProtocol_WriteFuseLock(uint8_t V2Command) { uint8_t WriteCommandBytes[4]; } Write_FuseLockSig_Params; - + Endpoint_Read_Stream_LE(&Write_FuseLockSig_Params, sizeof(Write_FuseLockSig_Params), NO_STREAM_CALLBACK); Endpoint_ClearOUT(); @@ -483,7 +483,7 @@ void ISPProtocol_WriteFuseLock(uint8_t V2Command) /* Send the Fuse or Lock byte program commands as given by the host to the device */ for (uint8_t SByte = 0; SByte < sizeof(Write_FuseLockSig_Params.WriteCommandBytes); SByte++) ISPTarget_SendByte(Write_FuseLockSig_Params.WriteCommandBytes[SByte]); - + Endpoint_Write_Byte(V2Command); Endpoint_Write_Byte(STATUS_CMD_OK); Endpoint_Write_Byte(STATUS_CMD_OK); @@ -500,14 +500,14 @@ void ISPProtocol_SPIMulti(void) uint8_t RxStartAddr; uint8_t TxData[255]; } SPI_Multi_Params; - + Endpoint_Read_Stream_LE(&SPI_Multi_Params, (sizeof(SPI_Multi_Params) - sizeof(SPI_Multi_Params.TxData)), NO_STREAM_CALLBACK); Endpoint_Read_Stream_LE(&SPI_Multi_Params.TxData, SPI_Multi_Params.TxBytes, NO_STREAM_CALLBACK); - + Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + Endpoint_Write_Byte(CMD_SPI_MULTI); Endpoint_Write_Byte(STATUS_CMD_OK); @@ -521,7 +521,7 @@ void ISPProtocol_SPIMulti(void) ISPTarget_SendByte(SPI_Multi_Params.TxData[CurrTxPos]); else ISPTarget_SendByte(0); - + CurrTxPos++; } @@ -532,28 +532,28 @@ void ISPProtocol_SPIMulti(void) Endpoint_Write_Byte(ISPTarget_TransferByte(SPI_Multi_Params.TxData[CurrTxPos++])); else Endpoint_Write_Byte(ISPTarget_ReceiveByte()); - + /* Check to see if we have filled the endpoint bank and need to send the packet */ if (!(Endpoint_IsReadWriteAllowed())) { Endpoint_ClearIN(); Endpoint_WaitUntilReady(); } - + CurrRxPos++; - } - + } + Endpoint_Write_Byte(STATUS_CMD_OK); bool IsEndpointFull = !(Endpoint_IsReadWriteAllowed()); Endpoint_ClearIN(); - + /* Ensure last packet is a short packet to terminate the transfer */ if (IsEndpointFull) { - Endpoint_WaitUntilReady(); + Endpoint_WaitUntilReady(); Endpoint_ClearIN(); - Endpoint_WaitUntilReady(); + Endpoint_WaitUntilReady(); } } @@ -567,4 +567,4 @@ void ISPProtocol_DelayMS(uint8_t DelayMS) _delay_ms(1); } -#endif
\ No newline at end of file +#endif diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h index bc6bb5de1..c7058f5b5 100644 --- a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h +++ b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -39,15 +39,15 @@ /* Includes: */ #include <avr/io.h> #include <util/delay.h> - + #include <LUFA/Drivers/USB/USB.h> #include "../V2Protocol.h" - + /* Preprocessor Checks: */ #if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) #undef ENABLE_ISP_PROTOCOL - + #if !defined(ENABLE_XPROG_PROTOCOL) #define ENABLE_XPROG_PROTOCOL #endif @@ -77,3 +77,4 @@ void ISPProtocol_SPIMulti(void); void ISPProtocol_DelayMS(uint8_t DelayMS); #endif + diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c index 6fea24435..0aa0c6986 100644 --- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c +++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -132,10 +132,10 @@ ISR(TIMER1_COMPA_vect, ISR_BLOCK) TCCR1B = 0; if (PINB & (1 << 3)) - SoftSPI_Data |= 0x01; + SoftSPI_Data |= 0x01; } - PORTB ^= (1 << 1); + PORTB ^= (1 << 1); } /** Initialises the appropriate SPI driver (hardware or software, depending on the selected ISP speed) ready for @@ -155,7 +155,7 @@ void ISPTarget_Init(void) else { HardwareSPIMode = false; - + DDRB |= ((1 << 1) | (1 << 2)); PORTB |= ((1 << 0) | (1 << 3)); @@ -176,7 +176,7 @@ void ISPTarget_ShutDown(void) else { DDRB &= ~((1 << 1) | (1 << 2)); - PORTB &= ~((1 << 0) | (1 << 3)); + PORTB &= ~((1 << 0) | (1 << 3)); } } @@ -200,7 +200,7 @@ uint8_t ISPTarget_TransferSoftSPIByte(const uint8_t Byte) TCCR1B = ((1 << WGM12) | (1 << CS11)); while (SoftSPI_BitsRemaining && TimeoutTicksRemaining); TCCR1B = 0; - + return SoftSPI_Data; } @@ -214,7 +214,7 @@ void ISPTarget_ChangeTargetResetLine(const bool ResetTarget) if (ResetTarget) { AUX_LINE_DDR |= AUX_LINE_MASK; - + if (!(V2Params_GetParameterValue(PARAM_RESET_POLARITY))) AUX_LINE_PORT |= AUX_LINE_MASK; else @@ -254,7 +254,7 @@ void ISPTarget_LoadExtendedAddress(void) ISPTarget_SendByte(LOAD_EXTENDED_ADDRESS_CMD); ISPTarget_SendByte(0x00); ISPTarget_SendByte((CurrentAddress & 0x00FF0000) >> 16); - ISPTarget_SendByte(0x00); + ISPTarget_SendByte(0x00); } /** Waits until the last issued target memory programming command has completed, via the check mode given and using @@ -296,8 +296,8 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, if (!(TimeoutTicksRemaining)) ProgrammingStatus = STATUS_CMD_TOUT; - - break; + + break; case PROG_MODE_WORD_READYBUSY_MASK: case PROG_MODE_PAGED_READYBUSY_MASK: ProgrammingStatus = ISPTarget_WaitWhileTargetBusy(); @@ -308,3 +308,4 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, } #endif + diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h index 967849abd..dfcf7ee8b 100644 --- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h +++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -43,13 +43,13 @@ #include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/Peripheral/SPI.h> - + #include "../V2ProtocolParams.h" /* Preprocessor Checks: */ #if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) #undef ENABLE_ISP_PROTOCOL - + #if !defined(ENABLE_XPROG_PROTOCOL) #define ENABLE_XPROG_PROTOCOL #endif @@ -58,7 +58,7 @@ /* Macros: */ /** Low level device command to issue an extended FLASH address, for devices with other 128KB of FLASH. */ #define LOAD_EXTENDED_ADDRESS_CMD 0x4D - + /** Macro to convert an ISP frequency to a number of timer clock cycles for the software SPI driver */ #define TIMER_COMP(freq) ((((F_CPU / 8) / freq) / 2) - 1) @@ -121,3 +121,4 @@ } #endif + diff --git a/Projects/AVRISP-MKII/Lib/V2Protocol.c b/Projects/AVRISP-MKII/Lib/V2Protocol.c index 4ef1b94a1..3ee3ebd54 100644 --- a/Projects/AVRISP-MKII/Lib/V2Protocol.c +++ b/Projects/AVRISP-MKII/Lib/V2Protocol.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -59,12 +59,12 @@ void V2Protocol_Init(void) ADC_SetupChannel(VTARGET_ADC_CHANNEL); ADC_StartReading(ADC_REFERENCE_AVCC | ADC_RIGHT_ADJUSTED | VTARGET_ADC_CHANNEL_MASK); #endif - + /* Timeout timer initialization (10ms period) */ OCR0A = ((F_CPU / 1024) / 100); TCCR0A = (1 << WGM01); TIMSK0 = (1 << OCIE0A); - + V2Params_LoadNonVolatileParamValues(); } @@ -75,11 +75,11 @@ void V2Protocol_Init(void) void V2Protocol_ProcessCommand(void) { uint8_t V2Command = Endpoint_Read_Byte(); - + /* Start the timeout management timer */ TimeoutTicksRemaining = COMMAND_TIMEOUT_TICKS; TCCR0B = ((1 << CS02) | (1 << CS00)); - + switch (V2Command) { case CMD_SIGN_ON: @@ -104,7 +104,7 @@ void V2Protocol_ProcessCommand(void) break; case CMD_PROGRAM_FLASH_ISP: case CMD_PROGRAM_EEPROM_ISP: - ISPProtocol_ProgramMemory(V2Command); + ISPProtocol_ProgramMemory(V2Command); break; case CMD_READ_FLASH_ISP: case CMD_READ_EEPROM_ISP: @@ -139,7 +139,7 @@ void V2Protocol_ProcessCommand(void) V2Protocol_UnknownCommand(V2Command); break; } - + /* Disable the timeout management timer */ TCCR0B = 0; @@ -193,10 +193,10 @@ static void V2Protocol_ResetProtection(void) Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + Endpoint_Write_Byte(CMD_RESET_PROTECTION); Endpoint_Write_Byte(STATUS_CMD_OK); - Endpoint_ClearIN(); + Endpoint_ClearIN(); } @@ -209,18 +209,18 @@ static void V2Protocol_GetSetParam(const uint8_t V2Command) { uint8_t ParamID = Endpoint_Read_Byte(); uint8_t ParamValue; - + if (V2Command == CMD_SET_PARAMETER) ParamValue = Endpoint_Read_Byte(); Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + Endpoint_Write_Byte(V2Command); - + uint8_t ParamPrivs = V2Params_GetParameterPrivileges(ParamID); - + if ((V2Command == CMD_SET_PARAMETER) && (ParamPrivs & PARAM_PRIV_WRITE)) { Endpoint_Write_Byte(STATUS_CMD_OK); @@ -232,7 +232,7 @@ static void V2Protocol_GetSetParam(const uint8_t V2Command) Endpoint_Write_Byte(V2Params_GetParameterValue(ParamID)); } else - { + { Endpoint_Write_Byte(STATUS_CMD_FAILED); } @@ -250,7 +250,7 @@ static void V2Protocol_LoadAddress(void) Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + if (CurrentAddress & (1UL << 31)) MustLoadExtendedAddress = true; @@ -258,3 +258,4 @@ static void V2Protocol_LoadAddress(void) Endpoint_Write_Byte(STATUS_CMD_OK); Endpoint_ClearIN(); } + diff --git a/Projects/AVRISP-MKII/Lib/V2Protocol.h b/Projects/AVRISP-MKII/Lib/V2Protocol.h index 8cbd45531..48dc78733 100644 --- a/Projects/AVRISP-MKII/Lib/V2Protocol.h +++ b/Projects/AVRISP-MKII/Lib/V2Protocol.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -38,7 +38,7 @@ /* Includes: */ #include <LUFA/Drivers/USB/USB.h> - + #include "../Descriptors.h" #include "V2ProtocolConstants.h" #include "V2ProtocolParams.h" @@ -48,12 +48,12 @@ /* Preprocessor Checks: */ #if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) #undef ENABLE_ISP_PROTOCOL - + #if !defined(ENABLE_XPROG_PROTOCOL) #define ENABLE_XPROG_PROTOCOL #endif #endif - + #if defined(USB_SERIES_4_AVR) && ((VTARGET_ADC_CHANNEL == 2) || (VTARGET_ADC_CHANNEL == 3)) #error The U4 AVR chips do not contain ADC channels 2 or 3. Please change VTARGET_ADC_CHANNEL or define NO_VTARGET_DETECT in the makefile. #endif @@ -66,10 +66,10 @@ /** Programmer ID string, returned to the host during the CMD_SIGN_ON command processing. */ #define PROGRAMMER_ID "AVRISP_MK2" - + /** Timeout period for each issued command from the host before it is aborted (in 10ms ticks). */ #define COMMAND_TIMEOUT_TICKS 100 - + /** Command timeout counter register, GPIOR for speed. */ #define TimeoutTicksRemaining GPIOR1 @@ -83,7 +83,7 @@ /* Function Prototypes: */ void V2Protocol_Init(void); void V2Protocol_ProcessCommand(void); - + #if defined(INCLUDE_FROM_V2PROTOCOL_C) static void V2Protocol_UnknownCommand(const uint8_t V2Command); static void V2Protocol_SignOn(void); diff --git a/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h b/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h index 94c60766b..107daa360 100644 --- a/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h +++ b/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -86,3 +86,4 @@ #define PARAM_DISCHARGEDELAY 0xA4 #endif + diff --git a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c index 31303c77d..1982fb90f 100644 --- a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c +++ b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -40,7 +40,7 @@ uint8_t EEMEM EEPROM_Rest_Polarity = 0x00; /* Volatile Parameter Values for RAM storage */ -static ParameterItem_t ParameterTable[] = +static ParameterItem_t ParameterTable[] = { { .ParamID = PARAM_BUILD_NUMBER_LOW, .ParamPrivileges = PARAM_PRIV_READ, @@ -109,11 +109,11 @@ void V2Params_UpdateParamValues(void) * \param[in] ParamID Parameter ID whose privileges are to be retrieved from the table * * \return Privileges for the requested parameter, as a mask of PARAM_PRIV_* masks - */ + */ uint8_t V2Params_GetParameterPrivileges(const uint8_t ParamID) { ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID); - + if (ParamInfo == NULL) return 0; @@ -129,14 +129,14 @@ uint8_t V2Params_GetParameterPrivileges(const uint8_t ParamID) * \param[in] ParamID Parameter ID whose value is to be retrieved from the table * * \return Current value of the parameter in the table, or 0 if not found - */ + */ uint8_t V2Params_GetParameterValue(const uint8_t ParamID) { ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID); - + if (ParamInfo == NULL) return 0; - + return ParamInfo->ParamValue; } @@ -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_Rest_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 @@ -182,9 +182,10 @@ static ParameterItem_t* V2Params_GetParamFromTable(const uint8_t ParamID) { if (ParamID == CurrTableItem->ParamID) return CurrTableItem; - + CurrTableItem++; } return NULL; } + diff --git a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h index 4b7e18913..2336f686f 100644 --- a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h +++ b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -45,7 +45,7 @@ #if defined(ADC) #include <LUFA/Drivers/Peripheral/ADC.h> #endif - + #include "V2Protocol.h" #include "V2ProtocolConstants.h" #include "ISP/ISPTarget.h" @@ -56,7 +56,7 @@ /** Parameter privilege mask to allow the host PC to change the parameter's value. */ #define PARAM_PRIV_WRITE (1 << 1) - + /** Total number of parameters in the parameter table */ #define TABLE_PARAM_COUNT (sizeof(ParameterTable) / sizeof(ParameterTable[0])) @@ -72,12 +72,12 @@ /* Function Prototypes: */ void V2Params_LoadNonVolatileParamValues(void); void V2Params_UpdateParamValues(void); - + uint8_t V2Params_GetParameterPrivileges(const uint8_t ParamID); uint8_t V2Params_GetParameterValue(const uint8_t ParamID); void V2Params_SetParameterValue(const uint8_t ParamID, const uint8_t Value); - + #if defined(INCLUDE_FROM_V2PROTOCOL_PARAMS_C) static ParameterItem_t* V2Params_GetParamFromTable(const uint8_t ParamID); #endif diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c index d45e42a1a..7522dc81f 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -138,17 +138,17 @@ bool TINYNVM_ReadMemory(const uint16_t ReadAddress, /* Set the NVM control register to the NO OP command for memory reading */ TINYNVM_SendWriteNVMRegister(XPROG_Param_NVMCMDRegAddr); XPROGTarget_SendByte(TINY_NVM_CMD_NOOP); - + /* Send the address of the location to read from */ TINYNVM_SendPointerAddress(ReadAddress); - + while (ReadSize-- && TimeoutTicksRemaining) { /* Read the byte of data from the target */ XPROGTarget_SendByte(TPI_CMD_SLD | TPI_POINTER_INDIRECT_PI); *(ReadBuffer++) = XPROGTarget_ReceiveByte(); } - + return (TimeoutTicksRemaining != 0); } @@ -167,7 +167,7 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, /* Wait until the NVM controller is no longer busy */ if (!(TINYNVM_WaitWhileNVMControllerBusy())) return false; - + /* Must have an integer number of words to write - if extra byte, word-align via a dummy high byte */ if (WriteLength & 0x01) WriteBuffer[WriteLength++] = 0xFF; @@ -175,10 +175,10 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, /* Set the NVM control register to the WORD WRITE command for memory reading */ TINYNVM_SendWriteNVMRegister(XPROG_Param_NVMCMDRegAddr); XPROGTarget_SendByte(TINY_NVM_CMD_WORDWRITE); - + /* Send the address of the location to write to */ TINYNVM_SendPointerAddress(WriteAddress); - + while (WriteLength) { /* Wait until the NVM controller is no longer busy */ @@ -188,7 +188,7 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, /* Write the low byte of data to the target */ XPROGTarget_SendByte(TPI_CMD_SST | TPI_POINTER_INDIRECT_PI); XPROGTarget_SendByte(*(WriteBuffer++)); - + /* Write the high byte of data to the target */ XPROGTarget_SendByte(TPI_CMD_SST | TPI_POINTER_INDIRECT_PI); XPROGTarget_SendByte(*(WriteBuffer++)); @@ -196,7 +196,7 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, /* Need to decrement the write length twice, since we read out a whole word */ WriteLength -= 2; } - + return true; } @@ -226,8 +226,9 @@ bool TINYNVM_EraseMemory(const uint8_t EraseCommand, /* Wait until the NVM controller is no longer busy */ if (!(TINYNVM_WaitWhileNVMControllerBusy())) return false; - + return true; } #endif + diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h index cbb2c27aa..339b299d2 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -40,16 +40,16 @@ #include <avr/io.h> #include <avr/interrupt.h> #include <stdbool.h> - + #include <LUFA/Common/Common.h> - + #include "XPROGProtocol.h" #include "XPROGTarget.h" - + /* Preprocessor Checks: */ #if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) #undef ENABLE_ISP_PROTOCOL - + #if !defined(ENABLE_XPROG_PROTOCOL) #define ENABLE_XPROG_PROTOCOL #endif @@ -61,7 +61,7 @@ #define TINY_NVM_CMD_SECTIONERASE 0x14 #define TINY_NVM_CMD_WORDWRITE 0x1D - /* Function Prototypes: */ + /* Function Prototypes: */ bool TINYNVM_WaitWhileNVMBusBusy(void); bool TINYNVM_WaitWhileNVMControllerBusy(void); bool TINYNVM_ReadMemory(const uint16_t ReadAddress, @@ -80,3 +80,4 @@ #endif #endif + diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c index 22f4e93e0..322f2ea80 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -76,13 +76,13 @@ bool XMEGANVM_WaitWhileNVMBusBusy(void) { /* Send the LDCS command to read the PDI STATUS register to see the NVM bus is active */ XPROGTarget_SendByte(PDI_CMD_LDCS | PDI_STATUS_REG); - + uint8_t StatusRegister = XPROGTarget_ReceiveByte(); - + /* We might have timed out waiting for the status register read response, check here */ if (!(TimeoutTicksRemaining)) return false; - + /* Check the status register read response to see if the NVM bus is enabled */ if (StatusRegister & PDI_STATUS_NVM) return true; @@ -102,7 +102,7 @@ bool XMEGANVM_WaitWhileNVMControllerBusy(void) /* Send a LDS command to read the NVM STATUS register to check the BUSY flag */ XPROGTarget_SendByte(PDI_CMD_LDS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_STATUS); - + uint8_t StatusRegister = XPROGTarget_ReceiveByte(); /* We might have timed out waiting for the status register read response, check here */ @@ -127,7 +127,7 @@ bool XMEGANVM_GetMemoryCRC(const uint8_t CRCCommand, uint32_t* const CRCDest) /* Wait until the NVM controller is no longer busy */ if (!(XMEGANVM_WaitWhileNVMControllerBusy())) return false; - + /* Set the NVM command to the correct CRC read command */ XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CMD); @@ -145,7 +145,7 @@ bool XMEGANVM_GetMemoryCRC(const uint8_t CRCCommand, uint32_t* const CRCDest) /* Wait until the NVM controller is no longer busy */ if (!(XMEGANVM_WaitWhileNVMControllerBusy())) return false; - + /* Load the PDI pointer register with the DAT0 register start address */ XPROGTarget_SendByte(PDI_CMD_ST | (PDI_POINTER_DIRECT << 2) | PDI_DATSIZE_4BYTES); XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_DAT0); @@ -153,12 +153,12 @@ bool XMEGANVM_GetMemoryCRC(const uint8_t CRCCommand, uint32_t* const CRCDest) /* Send the REPEAT command to grab the CRC bytes */ XPROGTarget_SendByte(PDI_CMD_REPEAT | PDI_DATSIZE_1BYTE); XPROGTarget_SendByte(XMEGA_CRC_LENGTH - 1); - + /* Read in the CRC bytes from the target */ XPROGTarget_SendByte(PDI_CMD_LD | (PDI_POINTER_INDIRECT_PI << 2) | PDI_DATSIZE_1BYTE); for (uint8_t i = 0; i < XMEGA_CRC_LENGTH; i++) ((uint8_t*)CRCDest)[i] = XPROGTarget_ReceiveByte(); - + return (TimeoutTicksRemaining != 0); } @@ -175,7 +175,7 @@ bool XMEGANVM_ReadMemory(const uint32_t ReadAddress, uint8_t* ReadBuffer, uint16 /* Wait until the NVM controller is no longer busy */ if (!(XMEGANVM_WaitWhileNVMControllerBusy())) return false; - + /* Send the READNVM command to the NVM controller for reading of an arbitrary location */ XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CMD); @@ -188,12 +188,12 @@ bool XMEGANVM_ReadMemory(const uint32_t ReadAddress, uint8_t* ReadBuffer, uint16 /* Send the REPEAT command with the specified number of bytes to read */ XPROGTarget_SendByte(PDI_CMD_REPEAT | PDI_DATSIZE_1BYTE); XPROGTarget_SendByte(ReadSize - 1); - + /* Send a LD command with indirect access and post-increment to read out the bytes */ XPROGTarget_SendByte(PDI_CMD_LD | (PDI_POINTER_INDIRECT_PI << 2) | PDI_DATSIZE_1BYTE); while (ReadSize-- && TimeoutTicksRemaining) *(ReadBuffer++) = XPROGTarget_ReceiveByte(); - + return (TimeoutTicksRemaining != 0); } @@ -215,12 +215,12 @@ bool XMEGANVM_WriteByteMemory(const uint8_t WriteCommand, const uint32_t WriteAd XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CMD); XPROGTarget_SendByte(WriteCommand); - + /* Send new memory byte to the memory of the target */ XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendAddress(WriteAddress); XPROGTarget_SendByte(Byte); - + return true; } @@ -275,13 +275,13 @@ bool XMEGANVM_WritePageMemory(const uint8_t WriteBuffCommand, const uint8_t Eras /* Send the REPEAT command with the specified number of bytes to write */ XPROGTarget_SendByte(PDI_CMD_REPEAT | PDI_DATSIZE_1BYTE); XPROGTarget_SendByte(WriteSize - 1); - + /* Send a ST command with indirect access and post-increment to write the bytes */ XPROGTarget_SendByte(PDI_CMD_ST | (PDI_POINTER_INDIRECT_PI << 2) | PDI_DATSIZE_1BYTE); while (WriteSize--) XPROGTarget_SendByte(*(WriteBuffer++)); } - + if (PageMode & XPRG_PAGEMODE_WRITE) { /* Wait until the NVM controller is no longer busy */ @@ -292,7 +292,7 @@ bool XMEGANVM_WritePageMemory(const uint8_t WriteBuffCommand, const uint8_t Eras XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CMD); XPROGTarget_SendByte(WritePageCommand); - + /* Send the address of the first page location to write the memory page */ XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendAddress(WriteAddress); @@ -322,11 +322,11 @@ bool XMEGANVM_EraseMemory(const uint8_t EraseCommand, const uint32_t Address) XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CMD); XPROGTarget_SendByte(EraseCommand); - + /* Set CMDEX bit in NVM CTRLA register to start the erase sequence */ XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CTRLA); - XPROGTarget_SendByte(1 << 0); + XPROGTarget_SendByte(1 << 0); } else if (EraseCommand == XMEGA_NVM_CMD_ERASEEEPROM) { @@ -356,21 +356,21 @@ bool XMEGANVM_EraseMemory(const uint8_t EraseCommand, const uint32_t Address) /* Send the REPEAT command with the specified number of bytes to write */ XPROGTarget_SendByte(PDI_CMD_REPEAT | PDI_DATSIZE_1BYTE); XPROGTarget_SendByte(XPROG_Param_EEPageSize - 1); - + /* Send a ST command with indirect access and post-increment to tag each byte in the EEPROM page buffer */ XPROGTarget_SendByte(PDI_CMD_ST | (PDI_POINTER_INDIRECT_PI << 2) | PDI_DATSIZE_1BYTE); for (uint8_t PageByte = 0; PageByte < XPROG_Param_EEPageSize; PageByte++) XPROGTarget_SendByte(0x00); - + /* Send the memory erase command to the target */ XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CMD); XPROGTarget_SendByte(EraseCommand); - + /* Set CMDEX bit in NVM CTRLA register to start the EEPROM erase sequence */ XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CTRLA); - XPROGTarget_SendByte(1 << 0); + XPROGTarget_SendByte(1 << 0); } else { @@ -378,18 +378,19 @@ bool XMEGANVM_EraseMemory(const uint8_t EraseCommand, const uint32_t Address) XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendNVMRegAddress(XMEGA_NVM_REG_CMD); XPROGTarget_SendByte(EraseCommand); - + /* Other erase modes just need us to address a byte within the target memory space */ XPROGTarget_SendByte(PDI_CMD_STS | (PDI_DATSIZE_4BYTES << 2)); XMEGANVM_SendAddress(Address); XPROGTarget_SendByte(0x00); } - + /* Wait until the NVM bus is ready again */ if (!(XMEGANVM_WaitWhileNVMBusBusy())) return false; - + return true; } #endif + diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h index af38afdac..f65e88ad8 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -40,16 +40,16 @@ #include <avr/io.h> #include <avr/interrupt.h> #include <stdbool.h> - + #include <LUFA/Common/Common.h> - + #include "XPROGProtocol.h" #include "XPROGTarget.h" - + /* Preprocessor Checks: */ #if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) #undef ENABLE_ISP_PROTOCOL - + #if !defined(ENABLE_XPROG_PROTOCOL) #define ENABLE_XPROG_PROTOCOL #endif @@ -57,7 +57,7 @@ /* Defines: */ #define XMEGA_CRC_LENGTH 3 - + #define XMEGA_NVM_REG_ADDR0 0x00 #define XMEGA_NVM_REG_ADDR1 0x01 #define XMEGA_NVM_REG_ADDR2 0x02 @@ -70,7 +70,7 @@ #define XMEGA_NVM_REG_INTCTRL 0x0D #define XMEGA_NVM_REG_STATUS 0x0F #define XMEGA_NVM_REG_LOCKBITS 0x10 - + #define XMEGA_NVM_CMD_NOOP 0x00 #define XMEGA_NVM_CMD_CHIPERASE 0x40 #define XMEGA_NVM_CMD_READNVM 0x43 @@ -118,7 +118,8 @@ #if defined(INCLUDE_FROM_XMEGANVM_C) static void XMEGANVM_SendNVMRegAddress(const uint8_t Register); - static void XMEGANVM_SendAddress(const uint32_t AbsoluteAddress); + static void XMEGANVM_SendAddress(const uint32_t AbsoluteAddress); #endif #endif + diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c index 85820fd31..edd362b48 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -61,18 +61,18 @@ void XPROGProtocol_SetMode(void) { uint8_t Protocol; } SetMode_XPROG_Params; - + Endpoint_Read_Stream_LE(&SetMode_XPROG_Params, sizeof(SetMode_XPROG_Params), NO_STREAM_CALLBACK); Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + XPROG_SelectedProtocol = SetMode_XPROG_Params.Protocol; - + Endpoint_Write_Byte(CMD_XPROG_SETMODE); Endpoint_Write_Byte((SetMode_XPROG_Params.Protocol != XPRG_PROTOCOL_JTAG) ? STATUS_CMD_OK : STATUS_CMD_FAILED); - Endpoint_ClearIN(); + Endpoint_ClearIN(); } /** Handler for the CMD_XPROG command, which wraps up XPROG commands in a V2 wrapper which need to be @@ -81,7 +81,7 @@ void XPROGProtocol_SetMode(void) void XPROGProtocol_Command(void) { uint8_t XPROGCommand = Endpoint_Read_Byte(); - + switch (XPROGCommand) { case XPRG_CMD_ENTER_PROGMODE: @@ -114,7 +114,7 @@ static void XPROGProtocol_EnterXPROGMode(void) Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + bool NVMBusEnabled = false; if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI) @@ -123,11 +123,11 @@ static void XPROGProtocol_EnterXPROGMode(void) XPROGTarget_EnableTargetPDI(); /* Store the RESET key into the RESET PDI register to keep the XMEGA in reset */ - XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG); + XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG); XPROGTarget_SendByte(PDI_RESET_KEY); /* Lower direction change guard time to 0 USART bits */ - XPROGTarget_SendByte(PDI_CMD_STCS | PDI_CTRL_REG); + XPROGTarget_SendByte(PDI_CMD_STCS | PDI_CTRL_REG); XPROGTarget_SendByte(0x07); /* Enable access to the XPROG NVM bus by sending the documented NVM access key to the device */ @@ -142,20 +142,20 @@ static void XPROGProtocol_EnterXPROGMode(void) { /* Enable TPI programming mode with the attached target */ XPROGTarget_EnableTargetTPI(); - + /* Lower direction change guard time to 0 USART bits */ XPROGTarget_SendByte(TPI_CMD_SSTCS | TPI_CTRL_REG); XPROGTarget_SendByte(0x07); - + /* Enable access to the XPROG NVM bus by sending the documented NVM access key to the device */ - XPROGTarget_SendByte(TPI_CMD_SKEY); + XPROGTarget_SendByte(TPI_CMD_SKEY); for (uint8_t i = sizeof(TPI_NVMENABLE_KEY); i > 0; i--) XPROGTarget_SendByte(TPI_NVMENABLE_KEY[i - 1]); /* Wait until the NVM bus becomes active */ NVMBusEnabled = TINYNVM_WaitWhileNVMBusBusy(); } - + Endpoint_Write_Byte(CMD_XPROG); Endpoint_Write_Byte(XPRG_CMD_ENTER_PROGMODE); Endpoint_Write_Byte(NVMBusEnabled ? XPRG_ERR_OK : XPRG_ERR_FAILED); @@ -170,17 +170,17 @@ static void XPROGProtocol_LeaveXPROGMode(void) Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI) { XMEGANVM_WaitWhileNVMBusBusy(); /* Clear the RESET key in the RESET PDI register to allow the XMEGA to run */ - XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG); + XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG); XPROGTarget_SendByte(0x00); /* Do it twice to make sure it takes affect (silicon bug?) */ - XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG); + XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG); XPROGTarget_SendByte(0x00); XPROGTarget_DisableTargetPDI(); @@ -190,12 +190,12 @@ static void XPROGProtocol_LeaveXPROGMode(void) TINYNVM_WaitWhileNVMBusBusy(); /* Clear the NVMEN bit in the TPI CONTROL register to disable TPI mode */ - XPROGTarget_SendByte(TPI_CMD_SSTCS | TPI_CTRL_REG); + XPROGTarget_SendByte(TPI_CMD_SSTCS | TPI_CTRL_REG); XPROGTarget_SendByte(0x00); - + XPROGTarget_DisableTargetTPI(); } - + Endpoint_Write_Byte(CMD_XPROG); Endpoint_Write_Byte(XPRG_CMD_LEAVE_PROGMODE); Endpoint_Write_Byte(XPRG_ERR_OK); @@ -219,11 +219,11 @@ static void XPROGProtocol_Erase(void) Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + uint8_t EraseCommand; if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI) - { + { /* Determine which NVM command to send to the device depending on the memory to erase */ switch (Erase_XPROG_Params.MemoryType) { @@ -255,7 +255,7 @@ static void XPROGProtocol_Erase(void) EraseCommand = XMEGA_NVM_CMD_NOOP; break; } - + /* Erase the target memory, indicate timeout if occurred */ if (!(XMEGANVM_EraseMemory(EraseCommand, Erase_XPROG_Params.Address))) ReturnStatus = XPRG_ERR_TIMEOUT; @@ -266,16 +266,16 @@ static void XPROGProtocol_Erase(void) EraseCommand = TINY_NVM_CMD_CHIPERASE; else EraseCommand = TINY_NVM_CMD_SECTIONERASE; - + /* Erase the target memory, indicate timeout if occurred */ if (!(TINYNVM_EraseMemory(EraseCommand, Erase_XPROG_Params.Address))) ReturnStatus = XPRG_ERR_TIMEOUT; } - + Endpoint_Write_Byte(CMD_XPROG); Endpoint_Write_Byte(XPRG_CMD_ERASE); Endpoint_Write_Byte(ReturnStatus); - Endpoint_ClearIN(); + Endpoint_ClearIN(); } /** Handler for the XPROG WRITE_MEMORY command to write to a specific memory space within the attached device. */ @@ -291,7 +291,7 @@ static void XPROGProtocol_WriteMemory(void) uint16_t Length; uint8_t ProgData[256]; } WriteMemory_XPROG_Params; - + Endpoint_Read_Stream_LE(&WriteMemory_XPROG_Params, (sizeof(WriteMemory_XPROG_Params) - sizeof(WriteMemory_XPROG_Params).ProgData), NO_STREAM_CALLBACK); WriteMemory_XPROG_Params.Address = SwapEndian_32(WriteMemory_XPROG_Params.Address); @@ -309,7 +309,7 @@ static void XPROGProtocol_WriteMemory(void) uint8_t WriteBuffCommand = XMEGA_NVM_CMD_LOADFLASHPAGEBUFF; uint8_t EraseBuffCommand = XMEGA_NVM_CMD_ERASEFLASHPAGEBUFF; bool PagedMemory = true; - + switch (WriteMemory_XPROG_Params.MemoryType) { case XPRG_MEM_TYPE_APPL: @@ -321,7 +321,7 @@ static void XPROGProtocol_WriteMemory(void) case XPRG_MEM_TYPE_EEPROM: WriteCommand = XMEGA_NVM_CMD_ERASEWRITEEEPROMPAGE; WriteBuffCommand = XMEGA_NVM_CMD_LOADEEPROMPAGEBUFF; - EraseBuffCommand = XMEGA_NVM_CMD_ERASEEEPROMPAGEBUFF; + EraseBuffCommand = XMEGA_NVM_CMD_ERASEEEPROMPAGEBUFF; break; case XPRG_MEM_TYPE_USERSIG: WriteCommand = XMEGA_NVM_CMD_WRITEUSERSIG; @@ -335,9 +335,9 @@ static void XPROGProtocol_WriteMemory(void) PagedMemory = false; break; } - + /* Send the appropriate memory write commands to the device, indicate timeout if occurred */ - if ((PagedMemory && !(XMEGANVM_WritePageMemory(WriteBuffCommand, EraseBuffCommand, WriteCommand, + if ((PagedMemory && !(XMEGANVM_WritePageMemory(WriteBuffCommand, EraseBuffCommand, WriteCommand, WriteMemory_XPROG_Params.PageMode, WriteMemory_XPROG_Params.Address, WriteMemory_XPROG_Params.ProgData, WriteMemory_XPROG_Params.Length))) || (!PagedMemory && !(XMEGANVM_WriteByteMemory(WriteCommand, WriteMemory_XPROG_Params.Address, @@ -355,10 +355,10 @@ static void XPROGProtocol_WriteMemory(void) ReturnStatus = XPRG_ERR_TIMEOUT; } } - + Endpoint_Write_Byte(CMD_XPROG); Endpoint_Write_Byte(XPRG_CMD_WRITE_MEM); - Endpoint_Write_Byte(ReturnStatus); + Endpoint_Write_Byte(ReturnStatus); Endpoint_ClearIN(); } @@ -375,7 +375,7 @@ static void XPROGProtocol_ReadMemory(void) uint32_t Address; uint16_t Length; } ReadMemory_XPROG_Params; - + Endpoint_Read_Stream_LE(&ReadMemory_XPROG_Params, sizeof(ReadMemory_XPROG_Params), NO_STREAM_CALLBACK); ReadMemory_XPROG_Params.Address = SwapEndian_32(ReadMemory_XPROG_Params.Address); ReadMemory_XPROG_Params.Length = SwapEndian_16(ReadMemory_XPROG_Params.Length); @@ -385,7 +385,7 @@ static void XPROGProtocol_ReadMemory(void) Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); uint8_t ReadBuffer[256]; - + if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI) { /* Read the PDI target's memory, indicate timeout if occurred */ @@ -402,10 +402,10 @@ static void XPROGProtocol_ReadMemory(void) Endpoint_Write_Byte(CMD_XPROG); Endpoint_Write_Byte(XPRG_CMD_READ_MEM); Endpoint_Write_Byte(ReturnStatus); - + if (ReturnStatus == XPRG_ERR_OK) Endpoint_Write_Stream_LE(ReadBuffer, ReadMemory_XPROG_Params.Length, NO_STREAM_CALLBACK); - + Endpoint_ClearIN(); } @@ -415,18 +415,18 @@ static void XPROGProtocol_ReadMemory(void) static void XPROGProtocol_ReadCRC(void) { uint8_t ReturnStatus = XPRG_ERR_OK; - + struct { uint8_t CRCType; } ReadCRC_XPROG_Params; - + Endpoint_Read_Stream_LE(&ReadCRC_XPROG_Params, sizeof(ReadCRC_XPROG_Params), NO_STREAM_CALLBACK); Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + uint32_t MemoryCRC; if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI) @@ -446,7 +446,7 @@ static void XPROGProtocol_ReadCRC(void) CRCCommand = XMEGA_NVM_CMD_FLASHCRC; break; } - + /* Perform and retrieve the memory CRC, indicate timeout if occurred */ if (!(XMEGANVM_GetMemoryCRC(CRCCommand, &MemoryCRC))) ReturnStatus = XPRG_ERR_TIMEOUT; @@ -456,18 +456,18 @@ static void XPROGProtocol_ReadCRC(void) /* TPI does not support memory CRC */ ReturnStatus = XPRG_ERR_FAILED; } - + Endpoint_Write_Byte(CMD_XPROG); Endpoint_Write_Byte(XPRG_CMD_CRC); Endpoint_Write_Byte(ReturnStatus); - + if (ReturnStatus == XPRG_ERR_OK) { Endpoint_Write_Byte(MemoryCRC >> 16); - Endpoint_Write_Word_LE(MemoryCRC & 0xFFFF); + Endpoint_Write_Word_LE(MemoryCRC & 0xFFFF); } - - Endpoint_ClearIN(); + + Endpoint_ClearIN(); } /** Handler for the XPROG SET_PARAM command to set a XPROG parameter for use when communicating with the @@ -478,7 +478,7 @@ static void XPROGProtocol_SetParam(void) uint8_t ReturnStatus = XPRG_ERR_OK; uint8_t XPROGParam = Endpoint_Read_Byte(); - + /* Determine which parameter is being set, store the new parameter value */ switch (XPROGParam) { @@ -502,7 +502,7 @@ static void XPROGProtocol_SetParam(void) Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); - + Endpoint_Write_Byte(CMD_XPROG); Endpoint_Write_Byte(XPRG_CMD_SET_PARAM); Endpoint_Write_Byte(ReturnStatus); @@ -510,3 +510,4 @@ static void XPROGProtocol_SetParam(void) } #endif + diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h index 978a5a2ab..a4a7a8413 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -40,10 +40,10 @@ #include <avr/io.h> #include <util/delay.h> #include <stdio.h> - + #include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/Peripheral/SerialStream.h> - + #include "../V2Protocol.h" #include "XPROGTarget.h" #include "XMEGANVM.h" @@ -52,12 +52,12 @@ /* Preprocessor Checks: */ #if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) #undef ENABLE_ISP_PROTOCOL - + #if !defined(ENABLE_XPROG_PROTOCOL) #define ENABLE_XPROG_PROTOCOL #endif #endif - + /* Macros: */ #define XPRG_CMD_ENTER_PROGMODE 0x01 #define XPRG_CMD_LEAVE_PROGMODE 0x02 @@ -100,25 +100,25 @@ #define XPRG_PARAM_EEPPAGESIZE 0x02 #define XPRG_PARAM_NVMCMD_REG 0x03 #define XPRG_PARAM_NVMCSR_REG 0x04 - + #define XPRG_PROTOCOL_PDI 0x00 #define XPRG_PROTOCOL_JTAG 0x01 #define XPRG_PROTOCOL_TPI 0x02 - + #define XPRG_PAGEMODE_WRITE (1 << 1) #define XPRG_PAGEMODE_ERASE (1 << 0) - + /* External Variables: */ extern uint32_t XPROG_Param_NVMBase; extern uint16_t XPROG_Param_EEPageSize; extern uint8_t XPROG_Param_NVMCSRRegAddr; extern uint8_t XPROG_Param_NVMCMDRegAddr; extern uint8_t XPROG_SelectedProtocol; - + /* Function Prototypes: */ void XPROGProtocol_SetMode(void); void XPROGProtocol_Command(void); - + #if (defined(INCLUDE_FROM_XPROGPROTOCOL_C) && defined(ENABLE_XPROG_PROTOCOL)) static void XPROGProtocol_EnterXPROGMode(void); static void XPROGProtocol_LeaveXPROGMode(void); @@ -128,5 +128,6 @@ static void XPROGProtocol_ReadMemory(void); static void XPROGProtocol_ReadCRC(void); #endif - + #endif + diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c index 2e5200561..28cb6abca 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -49,11 +49,11 @@ void XPROGTarget_EnableTargetPDI(void) /* 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 / XPROG_HARDWARE_SPEED); UCSR1B = (1 << TXEN1); @@ -77,7 +77,7 @@ void XPROGTarget_EnableTargetTPI(void) /* 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 / XPROG_HARDWARE_SPEED); UCSR1B = (1 << TXEN1); @@ -133,7 +133,7 @@ void XPROGTarget_SendByte(const uint8_t Byte) /* Switch to Tx mode if currently in Rx mode */ if (!(IsSending)) XPROGTarget_SetTxMode(); - + /* Wait until there is space in the hardware Tx buffer before writing */ while (!(UCSR1A & (1 << UDRE1))); UCSR1A |= (1 << TXC1); @@ -202,3 +202,4 @@ static void XPROGTarget_SetRxMode(void) } #endif + diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h index 0e5d373ef..6aedea6fb 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h @@ -1,7 +1,7 @@ /* LUFA Library Copyright (C) Dean Camera, 2010. - + dean [at] fourwalledcubicle [dot] com www.fourwalledcubicle.com */ @@ -9,13 +9,13 @@ /* Copyright 2010 Dean Camera (dean [at] fourwalledcubicle [dot] com) - Permission to use, copy, modify, distribute, and sell this + Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted - without fee, provided that the above copyright notice appear in + without fee, provided that the above copyright notice appear in all copies and that both that the copyright notice and this - permission notice and warranty disclaimer appear in supporting - documentation, and that the name of the author not be used in - advertising or publicity pertaining to distribution of the + permission notice and warranty disclaimer appear in supporting + documentation, and that the name of the author not be used in + advertising or publicity pertaining to distribution of the software without specific, written prior permission. The author disclaim all warranties with regard to this @@ -40,27 +40,27 @@ #include <avr/io.h> #include <avr/interrupt.h> #include <stdbool.h> - + #include <LUFA/Common/Common.h> - + #include "../V2Protocol.h" #include "XPROGProtocol.h" - + /* Preprocessor Checks: */ #if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1)) #undef ENABLE_ISP_PROTOCOL - + #if !defined(ENABLE_XPROG_PROTOCOL) #define ENABLE_XPROG_PROTOCOL #endif #endif - + /** Serial carrier TPI/PDI speed when hardware TPI/PDI mode is used. */ #define XPROG_HARDWARE_SPEED 500000 /** Total number of bits in a single USART frame. */ #define BITS_IN_USART_FRAME 12 - + #define PDI_CMD_LDS 0x00 #define PDI_CMD_LD 0x20 #define PDI_CMD_STS 0x40 @@ -69,11 +69,11 @@ #define PDI_CMD_REPEAT 0xA0 #define PDI_CMD_STCS 0xC0 #define PDI_CMD_KEY 0xE0 - + #define PDI_STATUS_REG 0 #define PDI_RESET_REG 1 #define PDI_CTRL_REG 2 - + #define PDI_STATUS_NVM (1 << 1) #define PDI_RESET_KEY 0x59 @@ -83,7 +83,7 @@ #define PDI_DATSIZE_2BYTES 1 #define PDI_DATSIZE_3BYTES 2 #define PDI_DATSIZE_4BYTES 3 - + #define PDI_POINTER_INDIRECT 0 #define PDI_POINTER_INDIRECT_PI 1 #define PDI_POINTER_DIRECT 2 @@ -100,14 +100,14 @@ #define TPI_STATUS_REG 0x00 #define TPI_CTRL_REG 0x02 #define TPI_ID_REG 0x0F - + #define TPI_STATUS_NVM (1 << 1) #define TPI_NVMENABLE_KEY (uint8_t[]){0x12, 0x89, 0xAB, 0x45, 0xCD, 0xD8, 0x88, 0xFF} #define TPI_POINTER_INDIRECT 0 #define TPI_POINTER_INDIRECT_PI 4 - + /* Function Prototypes: */ void XPROGTarget_EnableTargetPDI(void); void XPROGTarget_EnableTargetTPI(void); @@ -117,10 +117,11 @@ uint8_t XPROGTarget_ReceiveByte(void); void XPROGTarget_SendBreak(void); bool XPROGTarget_WaitWhileNVMBusBusy(void); - + #if (defined(INCLUDE_FROM_XPROGTARGET_C) && defined(ENABLE_XPROG_PROTOCOL)) static void XPROGTarget_SetTxMode(void); static void XPROGTarget_SetRxMode(void); #endif #endif + diff --git a/Projects/AVRISP-MKII/makefile b/Projects/AVRISP-MKII/makefile index fad461aa3..6c6e11708 100644 --- a/Projects/AVRISP-MKII/makefile +++ b/Projects/AVRISP-MKII/makefile @@ -47,7 +47,7 @@ # make doxygen = Generate DoxyGen documentation for the project (must have # DoxyGen installed) # -# make debug = Start either simulavr or avarice as specified for debugging, +# make debug = Start either simulavr or avarice as specified for debugging, # with avr-gdb or avr-insight as the front end for debugging. # # make filename.s = Just compile filename.c into the assembler code only. @@ -64,14 +64,14 @@ MCU = at90usb1287 # Target board (see library "Board Types" documentation, NONE for projects not requiring -# LUFA board drivers). If USER is selected, put custom board drivers in a directory called +# LUFA board drivers). If USER is selected, put custom board drivers in a directory called # "Board" inside the application directory. BOARD = USBKEY # Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency in Hz. You can then use this symbol in your source code to +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency in Hz. You can then use this symbol in your source code to # calculate timings. Do NOT tack on a 'UL' at the end, this will be done # automatically to create a 32-bit value in your source code. # @@ -84,7 +84,7 @@ F_CPU = 8000000 # Input clock frequency. -# This will define a symbol, F_CLOCK, in all source code files equal to the +# This will define a symbol, F_CLOCK, in all source code files equal to the # input clock frequency (before any prescaling is performed) in Hz. This value may # differ from F_CPU if prescaling is used on the latter, and is required as the # raw input clock is fed directly to the PLL sections of the AVR for high speed @@ -158,7 +158,7 @@ SRC = $(TARGET).c \ # List C++ source files here. (C dependencies are automatically generated.) -CPPSRC = +CPPSRC = # List Assembler source files here. @@ -171,7 +171,7 @@ CPPSRC = ASRC = -# Optimization level, can be [0, 1, 2, 3, s]. +# Optimization level, can be [0, 1, 2, 3, s]. # 0 = turn off optimization. s = optimize for size. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s @@ -285,7 +285,7 @@ CPPFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) # for use in COFF files, additional information about filenames # and function names needs to be present in the assembler source # files -- see avr-libc docs [FIXME: not yet described there] -# -listing-cont-lines: Sets the maximum number of continuation lines of hex +# -listing-cont-lines: Sets the maximum number of continuation lines of hex # dump that will be displayed for a given single line of source input. ASFLAGS = $(ADEFS) -Wa,-adhlns=$(<:%.S=$(OBJDIR)/%.lst),-gstabs,--listing-cont-lines=100 @@ -298,7 +298,7 @@ PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt # If this is left blank, then it will use the Standard printf version. -PRINTF_LIB = +PRINTF_LIB = #PRINTF_LIB = $(PRINTF_LIB_MIN) #PRINTF_LIB = $(PRINTF_LIB_FLOAT) @@ -310,7 +310,7 @@ SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt # If this is left blank, then it will use the Standard scanf version. -SCANF_LIB = +SCANF_LIB = #SCANF_LIB = $(SCANF_LIB_MIN) #SCANF_LIB = $(SCANF_LIB_FLOAT) @@ -322,7 +322,7 @@ MATH_LIB = -lm # Each directory must be seperated by a space. # Use forward slashes for directory separators. # For a directory that has spaces, enclose it in quotes. -EXTRALIBDIRS = +EXTRALIBDIRS = @@ -345,7 +345,7 @@ EXTMEMOPTS = # -Map: create map file # --cref: add cross reference to map file LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += -Wl,--relax +LDFLAGS += -Wl,--relax LDFLAGS += -Wl,--gc-sections LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(patsubst %,-L%,$(EXTRALIBDIRS)) @@ -379,7 +379,7 @@ AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex #AVRDUDE_NO_VERIFY = -V # Increase verbosity level. Please use this when submitting bug -# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> +# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> # to submit bug reports. #AVRDUDE_VERBOSE = -v -v @@ -413,7 +413,7 @@ JTAG_DEV = /dev/com1 DEBUG_PORT = 4242 # Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when +# just set to localhost unless doing some sort of crazy debugging when # avarice is running on a different computer. DEBUG_HOST = localhost @@ -442,7 +442,7 @@ WINSHELL = cmd MSG_ERRORS_NONE = Errors: none MSG_BEGIN = -------- begin -------- MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: +MSG_SIZE_BEFORE = Size before: MSG_SIZE_AFTER = Size after: MSG_COFF = Converting to AVR COFF: MSG_EXTENDED_COFF = Converting to AVR Extended COFF: @@ -461,10 +461,10 @@ MSG_CREATING_LIBRARY = Creating library: # Define all object files. -OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) +OBJ = $(SRC:%.c=$(OBJDIR)/%.o) $(CPPSRC:%.cpp=$(OBJDIR)/%.o) $(ASRC:%.S=$(OBJDIR)/%.o) # Define all listing files. -LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) +LST = $(SRC:%.c=$(OBJDIR)/%.lst) $(CPPSRC:%.cpp=$(OBJDIR)/%.lst) $(ASRC:%.S=$(OBJDIR)/%.lst) # Compiler flags to generate dependency files. @@ -529,11 +529,11 @@ sizeafter: # Display compiler version information. -gccversion : +gccversion : @$(CC) --version -# Program the device. +# Program the device. program: $(TARGET).hex $(TARGET).eep $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) @@ -560,9 +560,9 @@ dfu-ee: $(TARGET).hex $(TARGET).eep # Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set +# define the reset signal, load the target file, connect to target, and set # a breakpoint at main(). -gdb-config: +gdb-config: @$(REMOVE) $(GDBINIT_FILE) @echo define reset >> $(GDBINIT_FILE) @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) @@ -660,14 +660,14 @@ extcoff: $(TARGET).elf $(OBJDIR)/%.o : %.c @echo @echo $(MSG_COMPILING) $< - $(CC) -c $(ALL_CFLAGS) $< -o $@ + $(CC) -c $(ALL_CFLAGS) $< -o $@ # Compile: create object files from C++ source files. $(OBJDIR)/%.o : %.cpp @echo @echo $(MSG_COMPILING_CPP) $< - $(CC) -c $(ALL_CPPFLAGS) $< -o $@ + $(CC) -c $(ALL_CPPFLAGS) $< -o $@ # Compile: create assembler files from C source files. @@ -689,7 +689,7 @@ $(OBJDIR)/%.o : %.S # Create preprocessed source for use in sending a bug report. %.i : %.c - $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ # Target: clean project. @@ -733,3 +733,4 @@ $(shell mkdir $(OBJDIR) 2>/dev/null) build elf hex eep lss sym coff extcoff doxygen clean \ clean_list clean_doxygen program dfu flip flip-ee dfu-ee \ debug gdb-config + |