bool MustSetAddress;\r
\r
\r
-/** ISR for the management of the command execution timeout counter */\r
-ISR(TIMER0_COMPA_vect, ISR_BLOCK)\r
+/** ISR to manage timeouts whilst processing a V2Protocol command */\r
+ISR(TIMER0_COMPA_vect, ISR_NOBLOCK)\r
{\r
if (TimeoutMSRemaining)\r
TimeoutMSRemaining--;\r
/* Millisecond timer initialization for managing the command timeout counter */\r
OCR0A = ((F_CPU / 64) / 1000);\r
TCCR0A = (1 << WGM01);\r
- TCCR0B = ((1 << CS01) | (1 << CS00));\r
+ TIMSK0 = (1 << OCIE0A);\r
\r
V2Params_LoadNonVolatileParamValues();\r
}\r
{\r
uint8_t V2Command = Endpoint_Read_Byte();\r
\r
- /* Set total command processing timeout value, enable timeout management interrupt */\r
+ /* Start the timeout management timer */\r
TimeoutMSRemaining = COMMAND_TIMEOUT_MS;\r
- TIMSK0 |= (1 << OCIE0A);\r
-\r
+ TCCR0B = ((1 << CS01) | (1 << CS00));\r
+ \r
switch (V2Command)\r
{\r
case CMD_SIGN_ON:\r
V2Protocol_UnknownCommand(V2Command);\r
break;\r
}\r
- \r
- /* Disable timeout management interrupt once processing has completed */\r
- TIMSK0 &= ~(1 << OCIE0A);\r
+ \r
+ /* Disable the timeout management timer */\r
+ TCCR0B = 0;\r
\r
Endpoint_WaitUntilReady();\r
+ Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM);\r
Endpoint_SetEndpointDirection(ENDPOINT_DIR_OUT);\r
}\r
\r
}\r
\r
Endpoint_ClearOUT();\r
+ Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
\r
Endpoint_Write_Byte(V2Command);\r
static void V2Protocol_SignOn(void)\r
{\r
Endpoint_ClearOUT();\r
+ Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
\r
Endpoint_Write_Byte(CMD_SIGN_ON);\r
static void V2Protocol_ResetProtection(void)\r
{\r
Endpoint_ClearOUT();\r
+ Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
\r
Endpoint_Write_Byte(CMD_RESET_PROTECTION);\r
ParamValue = Endpoint_Read_Byte();\r
\r
Endpoint_ClearOUT();\r
+ Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
\r
Endpoint_Write_Byte(V2Command);\r
Endpoint_Read_Stream_BE(&CurrentAddress, sizeof(CurrentAddress), NO_STREAM_CALLBACK);\r
\r
Endpoint_ClearOUT();\r
+ Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);\r
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);\r
\r
MustSetAddress = true;\r