+ /* Determine method of Programming Complete check */\r
+ switch (ProgrammingMode & ~(PROG_MODE_PAGED_WRITES_MASK | PROG_MODE_COMMIT_PAGE_MASK))\r
+ {\r
+ case PROG_MODE_WORD_TIMEDELAY_MASK:\r
+ case PROG_MODE_PAGED_TIMEDELAY_MASK:\r
+ V2Protocol_DelayMS(DelayMS);\r
+ break;\r
+ case PROG_MODE_WORD_VALUE_MASK:\r
+ case PROG_MODE_PAGED_VALUE_MASK:\r
+ if (IsFlashMemory && (PollAddress & 0x01))\r
+ {\r
+ ReadMemCommand |= READ_WRITE_ODD_BYTE_MASK;\r
+ PollAddress >>= 1;\r
+ }\r
+\r
+ TCNT0 = 0;\r
+\r
+ do\r
+ {\r
+ SPI_SendByte(ReadMemCommand);\r
+ SPI_SendByte(PollAddress >> 8);\r
+ SPI_SendByte(PollAddress & 0xFF); \r
+ }\r
+ while ((SPI_TransferByte(0x00) != PollValue) && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));\r
+\r
+ if (TCNT0 >= TARGET_BUSY_TIMEOUT_MS)\r
+ ProgrammingStatus = STATUS_RDY_BSY_TOUT;\r
+ \r
+ break; \r
+ case PROG_MODE_WORD_READYBUSY_MASK:\r
+ case PROG_MODE_PAGED_READYBUSY_MASK:\r
+ ProgrammingStatus = V2Protocol_WaitWhileTargetBusy();\r
+ }\r
+\r
+ return ProgrammingStatus;\r