Fixed PDI programming mode in the AVRISP programmer project not exiting programming...
[pub/USBasp.git] / Projects / AVRISP-MKII / Lib / XPROG / XPROGProtocol.c
index 805eaa3..08936a2 100644 (file)
@@ -119,7 +119,7 @@ static void XPROGProtocol_EnterXPROGMode(void)
        {\r
                /* Enable PDI programming mode with the attached target */\r
                XPROGTarget_EnableTargetPDI();\r
        {\r
                /* Enable PDI programming mode with the attached target */\r
                XPROGTarget_EnableTargetPDI();\r
-               \r
+\r
                /* Store the RESET key into the RESET PDI register to keep the XMEGA in reset */\r
                XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG);     \r
                XPROGTarget_SendByte(PDI_RESET_KEY);\r
                /* Store the RESET key into the RESET PDI register to keep the XMEGA in reset */\r
                XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG);     \r
                XPROGTarget_SendByte(PDI_RESET_KEY);\r
@@ -170,14 +170,22 @@ static void XPROGProtocol_LeaveXPROGMode(void)
        \r
        if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI)\r
        {\r
        \r
        if (XPROG_SelectedProtocol == XPRG_PROTOCOL_PDI)\r
        {\r
+               XMEGANVM_WaitWhileNVMBusBusy();\r
+\r
                /* Clear the RESET key in the RESET PDI register to allow the XMEGA to run */\r
                XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG);     \r
                XPROGTarget_SendByte(0x00);\r
                /* Clear the RESET key in the RESET PDI register to allow the XMEGA to run */\r
                XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG);     \r
                XPROGTarget_SendByte(0x00);\r
+               \r
+               /* Clear /RESET key twice (for some reason this needs to be done twice to take effect) */\r
+               XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG);     \r
+               XPROGTarget_SendByte(0x00);\r
 \r
                XPROGTarget_DisableTargetPDI();\r
        }\r
        else\r
        {\r
 \r
                XPROGTarget_DisableTargetPDI();\r
        }\r
        else\r
        {\r
+               TINYNVM_WaitWhileNVMBusBusy();\r
+\r
                /* Clear the NVMEN bit in the TPI CONTROL register to disable TPI mode */\r
                XPROGTarget_SendByte(TPI_CMD_SSTCS | TPI_CTRL_REG);     \r
                XPROGTarget_SendByte(0x00);\r
                /* Clear the NVMEN bit in the TPI CONTROL register to disable TPI mode */\r
                XPROGTarget_SendByte(TPI_CMD_SSTCS | TPI_CTRL_REG);     \r
                XPROGTarget_SendByte(0x00);\r