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