diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2011-10-12 05:31:35 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2011-10-12 05:31:35 +0000 |
commit | c6d6bdae0a6fa5604174428787ff3c415ca73fad (patch) | |
tree | dbe01c236feef19ec75fec2f7c2d04451eaf02b5 /Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c | |
parent | c15eaa5dae5b8913d9401f0ad508494a6b66744a (diff) | |
download | lufa-c6d6bdae0a6fa5604174428787ff3c415ca73fad.tar.gz lufa-c6d6bdae0a6fa5604174428787ff3c415ca73fad.tar.bz2 lufa-c6d6bdae0a6fa5604174428787ff3c415ca73fad.zip |
Added reliability patches to the AVRISP-MKII Clone project's PDI/TPI protocols (thanks to Justin Mattair).
Diffstat (limited to 'Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c')
-rw-r--r-- | Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c index e4f1186b0..71fa78222 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.c @@ -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); - - /* Do it twice to make sure it takes effect (silicon bug?) */ - 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); + + /* 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(); } |