Added Load Extended Command functionality to the LOAD ADDRESS V2 Protocol command handler for devices with more than 64KB of memory.pull/1469/head
							parent
							
								
									f229502d9a
								
							
						
					
					
						commit
						7e74bd3ea2
					
				
											
												
													File diff suppressed because one or more lines are too long
												
											
										
									
								| @ -0,0 +1,116 @@ | ||||
| /*
 | ||||
|              LUFA Library | ||||
|      Copyright (C) Dean Camera, 2009. | ||||
|                | ||||
|   dean [at] fourwalledcubicle [dot] com | ||||
|       www.fourwalledcubicle.com | ||||
| */ | ||||
| 
 | ||||
| /*
 | ||||
|   Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com) | ||||
| 
 | ||||
|   Permission to use, copy, modify, and distribute this software | ||||
|   and its documentation for any purpose and without fee is hereby | ||||
|   granted, provided that the above copyright notice appear in all | ||||
|   copies and that both that the copyright notice and this | ||||
|   permission notice and warranty disclaimer appear in supporting | ||||
|   documentation, and that the name of the author not be used in | ||||
|   advertising or publicity pertaining to distribution of the | ||||
|   software without specific, written prior permission. | ||||
| 
 | ||||
|   The author disclaim all warranties with regard to this | ||||
|   software, including all implied warranties of merchantability | ||||
|   and fitness.  In no event shall the author be liable for any | ||||
|   special, indirect or consequential damages or any damages | ||||
|   whatsoever resulting from loss of use, data or profits, whether | ||||
|   in an action of contract, negligence or other tortious action, | ||||
|   arising out of or in connection with the use or performance of | ||||
|   this software. | ||||
| */ | ||||
| 
 | ||||
| /** \file
 | ||||
|  * | ||||
|  *  Target-related functions for the V2 Protocol decoder. | ||||
|  */ | ||||
| 
 | ||||
| #include "V2ProtocolTarget.h" | ||||
| 
 | ||||
| /** Current memory address for FLASH/EEPROM memory read/write commands */ | ||||
| uint32_t CurrentAddress; | ||||
| 
 | ||||
| /** Table of masks for SPI_Init() from a given PARAM_SCK_DURATION value */ | ||||
| static const uint8_t SPIMaskFromSCKDuration[] = | ||||
| 	{ | ||||
| 		#if (F_CPU == 8000000) | ||||
| 		SPI_SPEED_FCPU_DIV_2, | ||||
| 		#endif | ||||
| 		SPI_SPEED_FCPU_DIV_2, SPI_SPEED_FCPU_DIV_4, SPI_SPEED_FCPU_DIV_8, | ||||
| 		SPI_SPEED_FCPU_DIV_16, SPI_SPEED_FCPU_DIV_32, SPI_SPEED_FCPU_DIV_64 | ||||
| 		#if (F_CPU == 16000000)										 | ||||
| 		, SPI_SPEED_FCPU_DIV_128 | ||||
| 		#endif | ||||
| 	}; | ||||
| 	 | ||||
| 
 | ||||
| uint8_t V2Protocol_GetSPIPrescalerMask(void) | ||||
| { | ||||
| 	uint8_t SCKDuration = V2Params_GetParameterValue(PARAM_SCK_DURATION); | ||||
| 
 | ||||
| 	if (SCKDuration >= sizeof(SPIMaskFromSCKDuration)) | ||||
| 	  SCKDuration = (sizeof(SPIMaskFromSCKDuration) - 1); | ||||
| 	   | ||||
| 	return SPIMaskFromSCKDuration[SCKDuration]; | ||||
| } | ||||
| 
 | ||||
| void V2Protocol_ChangeTargetResetLine(bool ResetTarget) | ||||
| { | ||||
| 	if (ResetTarget) | ||||
| 	{ | ||||
| 		RESET_LINE_DDR  |= RESET_LINE_MASK; | ||||
| 		 | ||||
| 		if (!(V2Params_GetParameterValue(PARAM_RESET_POLARITY))) | ||||
| 		  RESET_LINE_PORT |= RESET_LINE_MASK; | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		RESET_LINE_PORT &= ~RESET_LINE_MASK;	 | ||||
| 		RESET_LINE_DDR  &= ~RESET_LINE_MASK; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void V2Protocol_DelayMS(uint8_t MS) | ||||
| { | ||||
| 	while (MS--) | ||||
| 	  _delay_ms(1); | ||||
| } | ||||
| 
 | ||||
| uint8_t V2Protocol_WaitWhileTargetBusy(void) | ||||
| { | ||||
| 	uint8_t TimeoutMS = TARGET_BUSY_TIMEOUT_MS; | ||||
| 	uint8_t ResponseByte; | ||||
| 	 | ||||
| 	do | ||||
| 	{ | ||||
| 		V2Protocol_DelayMS(1); | ||||
| 	 | ||||
| 		SPI_SendByte(0xF0); | ||||
| 		SPI_SendByte(0x00); | ||||
| 
 | ||||
| 		SPI_SendByte(0x00); | ||||
| 		ResponseByte = SPI_ReceiveByte(); | ||||
| 	} | ||||
| 	while ((ResponseByte & 0x01) && (TimeoutMS--)); | ||||
| 
 | ||||
| 	if (!(TimeoutMS)) | ||||
| 	  return STATUS_CMD_TOUT; | ||||
| 	else | ||||
| 	  return STATUS_CMD_OK; | ||||
| } | ||||
| 
 | ||||
| void V2Protocol_LoadExtendedAddress(void) | ||||
| { | ||||
| 	SPI_SendByte(0x4D); | ||||
| 	SPI_SendByte(0x00); | ||||
| 	SPI_SendByte((CurrentAddress & 0x00FF0000) >> 16); | ||||
| 	SPI_SendByte(0x00);	 | ||||
| } | ||||
| @ -0,0 +1,63 @@ | ||||
| /*
 | ||||
|              LUFA Library | ||||
|      Copyright (C) Dean Camera, 2009. | ||||
|                | ||||
|   dean [at] fourwalledcubicle [dot] com | ||||
|       www.fourwalledcubicle.com | ||||
| */ | ||||
| 
 | ||||
| /*
 | ||||
|   Copyright 2009  Dean Camera (dean [at] fourwalledcubicle [dot] com) | ||||
| 
 | ||||
|   Permission to use, copy, modify, and distribute this software | ||||
|   and its documentation for any purpose and without fee is hereby | ||||
|   granted, provided that the above copyright notice appear in all | ||||
|   copies and that both that the copyright notice and this | ||||
|   permission notice and warranty disclaimer appear in supporting | ||||
|   documentation, and that the name of the author not be used in | ||||
|   advertising or publicity pertaining to distribution of the | ||||
|   software without specific, written prior permission. | ||||
| 
 | ||||
|   The author disclaim all warranties with regard to this | ||||
|   software, including all implied warranties of merchantability | ||||
|   and fitness.  In no event shall the author be liable for any | ||||
|   special, indirect or consequential damages or any damages | ||||
|   whatsoever resulting from loss of use, data or profits, whether | ||||
|   in an action of contract, negligence or other tortious action, | ||||
|   arising out of or in connection with the use or performance of | ||||
|   this software. | ||||
| */ | ||||
| 
 | ||||
| /** \file
 | ||||
|  * | ||||
|  *  Header file for V2ProtocolTarget.c. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _V2_PROTOCOL_TARGET_ | ||||
| #define _V2_PROTOCOL_TARGET_ | ||||
| 
 | ||||
| 	/* Includes: */ | ||||
| 		#include <avr/io.h> | ||||
| 		#include <util/delay.h> | ||||
| 
 | ||||
| 		#include <LUFA/Drivers/USB/USB.h> | ||||
| 		#include <LUFA/Drivers/Peripheral/SPI.h> | ||||
| 		 | ||||
| 		#include "../Descriptors.h" | ||||
| 		#include "V2ProtocolConstants.h" | ||||
| 		#include "V2ProtocolParams.h" | ||||
| 
 | ||||
| 	/* Macros: */ | ||||
| 		#define TARGET_BUSY_TIMEOUT_MS    100 | ||||
| 	 | ||||
| 	/* External Variables: */ | ||||
| 		extern uint32_t CurrentAddress; | ||||
| 
 | ||||
| 	/* Function Prototypes: */ | ||||
| 			uint8_t V2Protocol_GetSPIPrescalerMask(void); | ||||
| 			void    V2Protocol_ChangeTargetResetLine(bool ResetTarget); | ||||
| 			void    V2Protocol_DelayMS(uint8_t MS); | ||||
| 			uint8_t V2Protocol_WaitWhileTargetBusy(void); | ||||
| 			void    V2Protocol_LoadExtendedAddress(void); | ||||
| 
 | ||||
| #endif | ||||
					Loading…
					
					
				
		Reference in new issue
	
	 Dean Camera
						Dean Camera