X-Git-Url: http://git.linex4red.de/pub/USBasp.git/blobdiff_plain/e0852408de92eada94b242cf84b007dc4f188467..a9abe1fdea5ccf67aaccab6fdde300d6fcf2d15a:/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c index e4f1186b0..820374fb9 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c @@ -1,13 +1,13 @@ /* LUFA Library - Copyright (C) Dean Camera, 2011. + Copyright (C) Dean Camera, 2012. dean [at] fourwalledcubicle [dot] com www.lufa-lib.org */ /* - Copyright 2011 Dean Camera (dean [at] fourwalledcubicle [dot] com) + Copyright 2012 Dean Camera (dean [at] fourwalledcubicle [dot] com) Permission to use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted @@ -149,13 +149,18 @@ void XMEGANVM_DisablePDI(void) { XMEGANVM_WaitWhileNVMBusBusy(); - /* Clear the RESET key in the RESET PDI register to allow the XMEGA to run */ - XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG); - XPROGTarget_SendByte(0x00); + /* Clear the RESET key in the RESET PDI register to allow the XMEGA to run - must perform this until the + * change takes effect, as in some cases it takes multiple writes (silicon bug?). + */ + do + { + /* Clear reset register */ + XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG); + XPROGTarget_SendByte(0x00); - /* Do it twice to make sure it takes effect (silicon bug?) */ - XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG); - XPROGTarget_SendByte(0x00); + /* Read back the reset register, check to see if it took effect */ + XPROGTarget_SendByte(PDI_CMD_LDCS | PDI_RESET_REG); + } while (XPROGTarget_ReceiveByte() != 0x00); XPROGTarget_DisableTargetPDI(); }