aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-05-13 09:25:17 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-05-13 09:25:17 +0000
commitcd0093a14bd12d61ceab6860341c1a1fcd0ebb04 (patch)
treead4402b674c74297f30c2a72b1522c2ac1d475ee
parent1331cce08a6e899b15382dd1c6110565ed1b34c5 (diff)
downloadlufa-cd0093a14bd12d61ceab6860341c1a1fcd0ebb04.tar.gz
lufa-cd0093a14bd12d61ceab6860341c1a1fcd0ebb04.tar.bz2
lufa-cd0093a14bd12d61ceab6860341c1a1fcd0ebb04.zip
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.
-rw-r--r--LUFA/ManPages/ChangeLog.txt3
-rw-r--r--Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c46
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h2
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h2
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h2
-rw-r--r--Projects/Benito/Lib/RingBuff.h2
-rw-r--r--Projects/Benito/makefile2
7 files changed, 45 insertions, 14 deletions
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index 09a168dc1..70c81dc00 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -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
*
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
index a16504da1..430772ddc 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
@@ -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);
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
index 73bf1f953..2daca16fc 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
@@ -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);
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
index 1fdb5a1b8..c812578e5 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
@@ -119,7 +119,7 @@
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);
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
index 436f0f30d..db233a1a4 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
@@ -118,7 +118,7 @@
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
diff --git a/Projects/Benito/Lib/RingBuff.h b/Projects/Benito/Lib/RingBuff.h
index b4933aa4d..30dbf104e 100644
--- a/Projects/Benito/Lib/RingBuff.h
+++ b/Projects/Benito/Lib/RingBuff.h
@@ -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
diff --git a/Projects/Benito/makefile b/Projects/Benito/makefile
index 4fadc10c1..5bab672f4 100644
--- a/Projects/Benito/makefile
+++ b/Projects/Benito/makefile
@@ -60,7 +60,7 @@
# MCU name
-MCU = atmega32u4
+MCU = atmega32u2
# Target board (see library "Board Types" documentation, NONE for projects not requiring