Fixed AVRISP-MKII clone project not correctly issuing SET EXTENDED ADDRESS commands...
authorDean Camera <dean@fourwalledcubicle.com>
Thu, 13 May 2010 09:25:17 +0000 (09:25 +0000)
committerDean Camera <dean@fourwalledcubicle.com>
Thu, 13 May 2010 09:25:17 +0000 (09:25 +0000)
Fixed warnings when building the AVRISP-MKII clone project with the ENABLE_XPROG_PROTOCOL compile time option disabled.

LUFA/ManPages/ChangeLog.txt
Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
Projects/Benito/Lib/RingBuff.h
Projects/Benito/makefile

index 09a168d..70c81dc 100644 (file)
@@ -17,6 +17,9 @@
   *  <b>Fixed:</b>
   *  - Fixed possible device lockup when INTERRUPT_CONTROL_ENDPOINT is enabled and the control endpoint is not properly
   *    selected when the ISR completes
+  *  - Fixed AVRISP-MKII clone project not correctly issuing SET EXTENDED ADDRESS commands when the extended address
+  *    boundary is crossed during programming or readback (thanks to Gerard Sexton)
+  *  - Fixed warnings when building the AVRISP-MKII clone project with the ENABLE_XPROG_PROTOCOL compile time option disabled
   *
   *  \section Sec_ChangeLog100512 Version 100512
   *
index a16504d..430772d 100644 (file)
@@ -227,8 +227,18 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
                                PollAddress = (CurrentAddress & 0xFFFF);                                
                        }               
 
-                       if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP))
-                         CurrentAddress++;
+                       /* 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 (V2Command == CMD_PROGRAM_EEPROM_ISP)
+                       {
+                               CurrentAddress++;
+                       }
+                       else if (IsOddByte)
+                       {
+                               if (!(++CurrentAddress & 0xFFFF))
+                                 ISPTarget_LoadExtendedAddress();                      
+                       }
                }
                
                /* If the current page must be committed, send the PROGRAM PAGE command to the target */
@@ -276,8 +286,18 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
                                PollAddress = (CurrentAddress & 0xFFFF);
                        }
 
-                       if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP))
-                         CurrentAddress++;
+                       /* 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 (V2Command == CMD_PROGRAM_EEPROM_ISP)
+                       {
+                               CurrentAddress++;
+                       }
+                       else if (IsOddByte)
+                       {
+                               if (!(++CurrentAddress & 0xFFFF))
+                                 ISPTarget_LoadExtendedAddress();                      
+                       }
                        
                        ProgrammingStatus = ISPTarget_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue,
                                                                          Write_Memory_Params.DelayMS, Write_Memory_Params.ProgrammingCommands[2]);
@@ -346,11 +366,19 @@ void ISPProtocol_ReadMemory(uint8_t V2Command)
                 * or low byte at the current word address */
                if (V2Command == CMD_READ_FLASH_ISP)
                  Read_Memory_Params.ReadMemoryCommand ^= READ_WRITE_HIGH_BYTE_MASK;
-
-               /* Only increment the current address if we have read both bytes in the current word when in FLASH
-                * read mode, or for each byte when in EEPROM read mode */               
-               if (((CurrentByte & 0x01) && (V2Command == CMD_READ_FLASH_ISP)) || (V2Command == CMD_READ_EEPROM_ISP))
-                 CurrentAddress++;
+                
+               /* 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 (V2Command == CMD_READ_EEPROM_ISP)
+               {
+                       CurrentAddress++;
+               }
+               else if (CurrentByte & 0x01)
+               {
+                       if (!(++CurrentAddress & 0xFFFF))
+                         ISPTarget_LoadExtendedAddress();                      
+               }
        }
 
        Endpoint_Write_Byte(STATUS_CMD_OK);
index 73bf1f9..2daca16 100644 (file)
@@ -68,7 +68,7 @@
                bool TINYNVM_WriteMemory(const uint16_t WriteAddress, uint8_t* WriteBuffer, uint16_t WriteLength);
                bool TINYNVM_EraseMemory(const uint8_t EraseCommand, const uint16_t Address);
 
-               #if defined(INCLUDE_FROM_TINYNVM_C)
+               #if (defined(INCLUDE_FROM_TINYNVM_C) && defined(ENABLE_XPROG_PROTOCOL))
                        static void TINYNVM_SendReadNVMRegister(const uint8_t Address);
                        static void TINYNVM_SendWriteNVMRegister(const uint8_t Address);
                        static void TINYNVM_SendPointerAddress(const uint16_t AbsoluteAddress);
index 1fdb5a1..c812578 100644 (file)
                void XPROGProtocol_SetMode(void);
                void XPROGProtocol_Command(void);
                
-               #if defined(INCLUDE_FROM_XPROGPROTOCOL_C)
+               #if (defined(INCLUDE_FROM_XPROGPROTOCOL_C) && defined(ENABLE_XPROG_PROTOCOL))
                        static void XPROGProtocol_EnterXPROGMode(void);
                        static void XPROGProtocol_LeaveXPROGMode(void);
                        static void XPROGProtocol_SetParam(void);
index 436f0f3..db233a1 100644 (file)
                void    XPROGTarget_SendBreak(void);
                bool    XPROGTarget_WaitWhileNVMBusBusy(void);
                
-               #if defined(INCLUDE_FROM_XPROGTARGET_C)
+               #if (defined(INCLUDE_FROM_XPROGTARGET_C) && defined(ENABLE_XPROG_PROTOCOL))
                        static void XPROGTarget_SetTxMode(void);
                        static void XPROGTarget_SetRxMode(void);
                #endif
index b4933aa..30dbf10 100644 (file)
@@ -30,7 +30,7 @@
 
 /* Buffer Configuration: */
    /* Buffer length - select static size of created ring buffers: */
-        #define BUFF_STATICSIZE 128      // Set to the static ring buffer size for all ring buffers (place size after define)
+        #define BUFF_STATICSIZE 255      // Set to the static ring buffer size for all ring buffers (place size after define)
 
    /* Volatile mode - uncomment to make buffers volatile, for use in ISRs, etc: */
         #define BUFF_VOLATILE            // Uncomment to cause all ring buffers to become volatile (and atomic if multi-byte) in access
index 4fadc10..5bab672 100644 (file)
@@ -60,7 +60,7 @@
 
 
 # MCU name
-MCU = atmega32u4
+MCU = atmega32u2
 
 
 # Target board (see library "Board Types" documentation, NONE for projects not requiring