forked from mfulz_github/qmk_firmware
Fixed ISP mode in the AVRISP programmer project.
This commit is contained in:
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…
Reference in New Issue