-uint32_t CurrentAddress;\r
-\r
-\r
-/* Table of masks for SPI_Init() from a given PARAM_SCK_DURATION value */\r
-static const uint8_t SPIMaskFromSCKDuration[] =\r
- {\r
- #if (F_CPU == 8000000)\r
- SPI_SPEED_FCPU_DIV_2,\r
- #endif\r
- SPI_SPEED_FCPU_DIV_2, SPI_SPEED_FCPU_DIV_4, SPI_SPEED_FCPU_DIV_8,\r
- SPI_SPEED_FCPU_DIV_16, SPI_SPEED_FCPU_DIV_32, SPI_SPEED_FCPU_DIV_64\r
- #if (F_CPU == 16000000) \r
- , SPI_SPEED_FCPU_DIV_128\r
- #endif\r
- };\r
-\r
-static uint8_t V2Protocol_GetSPIPrescalerMask(void)\r
-{\r
- uint8_t SCKDuration = V2Params_GetParameterValue(PARAM_SCK_DURATION);\r
-\r
- if (SCKDuration >= sizeof(SPIMaskFromSCKDuration))\r
- SCKDuration = (sizeof(SPIMaskFromSCKDuration) - 1);\r
- \r
- return SPIMaskFromSCKDuration[SCKDuration];\r
-}\r
-\r
-static void V2Protocol_ChangeTargetResetLine(bool ResetTarget)\r
-{\r
- if (ResetTarget)\r
- {\r
- RESET_LINE_DDR |= RESET_LINE_MASK;\r
- \r
- if (!(V2Params_GetParameterValue(PARAM_RESET_POLARITY)))\r
- RESET_LINE_PORT |= RESET_LINE_MASK;\r
- }\r
- else\r
- {\r
- RESET_LINE_PORT &= ~RESET_LINE_MASK; \r
- RESET_LINE_DDR &= ~RESET_LINE_MASK;\r
- }\r
-}\r
-\r
-static void V2Protocol_DelayMS(uint8_t MS)\r
-{\r
- while (MS--)\r
- _delay_ms(1);\r
-}\r
-\r
-static uint8_t V2Protocol_WaitWhileTargetBusy(void)\r
-{\r
- uint8_t TimeoutMS = TARGET_BUST_TIMEOUT_MS;\r
- uint8_t ResponseByte;\r
- \r
- do\r
- {\r
- V2Protocol_DelayMS(1);\r
- \r
- SPI_SendByte(0xF0);\r
- SPI_SendByte(0x00);\r
-\r
- SPI_SendByte(0x00);\r
- ResponseByte = SPI_ReceiveByte();\r
- }\r
- while ((ResponseByte & 0x01) && (TimeoutMS--));\r
-\r
- if (!(TimeoutMS))\r
- return STATUS_CMD_TOUT;\r
- else\r
- return STATUS_CMD_OK;\r
-}\r
-