Fixed ISP mode in the AVRISP programmer project.

pull/1469/head
Dean Camera 15 years ago
parent d1608d4af3
commit 8cd7e118e9

@ -17,6 +17,7 @@
* - Slowed down bit-banged PDI programming in the AVRISP project slightly to prevent transmission errors * - Slowed down bit-banged PDI programming in the AVRISP project slightly to prevent transmission errors
* *
* <b>Fixed:</b> * <b>Fixed:</b>
* - Fixed AVRISP project not able to enter programming mode when ISP protocol is used
* *
* \section Sec_ChangeLog091223 Version 091223 * \section Sec_ChangeLog091223 Version 091223
* *

@ -38,6 +38,7 @@
/* Includes: */ /* Includes: */
#include <avr/io.h> #include <avr/io.h>
#include <util/delay.h>
#include <LUFA/Drivers/USB/USB.h> #include <LUFA/Drivers/USB/USB.h>
@ -66,26 +67,14 @@
#define PROG_MODE_COMMIT_PAGE_MASK (1 << 7) #define PROG_MODE_COMMIT_PAGE_MASK (1 << 7)
/* Inline Functions: */ /* Inline Functions: */
/** Blocking delay for a given number of milliseconds, via a hardware timer. /** Blocking delay for a given number of milliseconds.
* *
* \param[in] DelayMS Number of milliseconds to delay for * \param[in] DelayMS Number of milliseconds to delay for
*/ */
static inline void ISPProtocol_DelayMS(uint8_t DelayMS) static inline void ISPProtocol_DelayMS(uint8_t DelayMS)
{ {
OCR2A = ((F_CPU / 64) / 1000); while (DelayMS--)
TCCR2A = (1 << WGM01); _delay_ms(1);
TCCR2B = ((1 << CS01) | (1 << CS00));
while (DelayMS)
{
if (TIFR2 & (1 << OCF2A))
{
TIFR2 = (1 << OCF2A);
DelayMS--;
}
}
TCCR2B = 0;
} }
/* Function Prototypes: */ /* Function Prototypes: */

@ -122,6 +122,9 @@ uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode, const uint1
break; break;
case PROG_MODE_WORD_VALUE_MASK: case PROG_MODE_WORD_VALUE_MASK:
case PROG_MODE_PAGED_VALUE_MASK: case PROG_MODE_PAGED_VALUE_MASK:
TCNT0 = 0;
TIFR0 = (1 << OCF1A);
do do
{ {
SPI_SendByte(ReadMemCommand); SPI_SendByte(ReadMemCommand);

@ -131,7 +131,7 @@ uint8_t V2Params_GetParameterValue(const uint8_t ParamID)
{ {
ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID); ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID);
if ((ParamInfo == NULL) || !(ParamInfo->ParamPrivileges & PARAM_PRIV_READ)) if (ParamInfo == NULL)
return 0; return 0;
return ParamInfo->ParamValue; return ParamInfo->ParamValue;
@ -148,7 +148,7 @@ void V2Params_SetParameterValue(const uint8_t ParamID, const uint8_t Value)
{ {
ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID); ParameterItem_t* ParamInfo = V2Params_GetParamFromTable(ParamID);
if ((ParamInfo == NULL) || !(ParamInfo->ParamPrivileges & PARAM_PRIV_WRITE)) if (ParamInfo == NULL)
return; return;
ParamInfo->ParamValue = Value; ParamInfo->ParamValue = Value;
@ -167,11 +167,15 @@ void V2Params_SetParameterValue(const uint8_t ParamID, const uint8_t Value)
*/ */
static ParameterItem_t* V2Params_GetParamFromTable(const uint8_t ParamID) static ParameterItem_t* V2Params_GetParamFromTable(const uint8_t ParamID)
{ {
ParameterItem_t* CurrTableItem = ParameterTable;
/* Find the parameter in the parameter table if present */ /* Find the parameter in the parameter table if present */
for (uint8_t TableIndex = 0; TableIndex < (sizeof(ParameterTable) / sizeof(ParameterTable[0])); TableIndex++) for (uint8_t TableIndex = 0; TableIndex < (sizeof(ParameterTable) / sizeof(ParameterTable[0])); TableIndex++)
{ {
if (ParamID == ParameterTable[TableIndex].ParamID) if (ParamID == CurrTableItem->ParamID)
return &ParameterTable[TableIndex]; return CurrTableItem;
CurrTableItem++;
} }
return NULL; return NULL;

@ -60,7 +60,7 @@
# MCU name # MCU name
MCU = at90usb1287 MCU = at90usb162
# Target board (see library "Board Types" documentation, USER or blank for projects not requiring # Target board (see library "Board Types" documentation, USER or blank for projects not requiring

Loading…
Cancel
Save