Added support to the AVRISP-MKII project for ISP speeds slower than 125KHz via a new software SPI driver.
Added new SPI_ORDER_* data order masks to the SPI peripheral driver.
This commit is contained in:
parent
9a97f16b07
commit
de5b16909a
11 changed files with 269 additions and 90 deletions
|
|
@ -56,21 +56,68 @@
|
|||
#endif
|
||||
|
||||
/* Macros: */
|
||||
/** Total number of allowable ISP programming speeds supported by the device. */
|
||||
#define TOTAL_ISP_PROGRAMMING_SPEEDS 7
|
||||
|
||||
/** Low level device command to issue an extended FLASH address, for devices with other 128KB of FLASH. */
|
||||
#define LOAD_EXTENDED_ADDRESS_CMD 0x4D
|
||||
|
||||
/** Macro to convert an ISP frequency to a number of timer clock cycles for the software SPI driver */
|
||||
#define TIMER_COMP(freq) ((((F_CPU / 8) / freq) / 2) - 1)
|
||||
|
||||
/* External Variables: */
|
||||
extern bool HardwareSPIMode;
|
||||
|
||||
/* Function Prototypes: */
|
||||
uint8_t ISPTarget_GetSPIPrescalerMask(void);
|
||||
void ISPTarget_Init(void);
|
||||
void ISPTarget_ShutDown(void);
|
||||
uint8_t ISPTarget_TransferSoftSPIByte(const uint8_t Byte);
|
||||
void ISPTarget_ChangeTargetResetLine(const bool ResetTarget);
|
||||
uint8_t ISPTarget_WaitWhileTargetBusy(void);
|
||||
void ISPTarget_LoadExtendedAddress(void);
|
||||
uint8_t ISPTarget_WaitForProgComplete(const uint8_t ProgrammingMode,
|
||||
const uint16_t PollAddress,
|
||||
const uint8_t PollValue,
|
||||
const uint8_t DelayMS,
|
||||
const uint8_t ReadMemCommand);
|
||||
uint8_t ISPTarget_WaitWhileTargetBusy(void);
|
||||
void ISPTarget_LoadExtendedAddress(void);
|
||||
|
||||
/* Inline Functions: */
|
||||
/** Sends a byte of ISP data to the attached target, using the appropriate SPI hardware or
|
||||
* software routines depending on the selected ISP speed.
|
||||
*
|
||||
* \param[in] Byte Byte of data to send to the attached target
|
||||
*/
|
||||
static inline void ISPTarget_SendByte(const uint8_t Byte)
|
||||
{
|
||||
if (HardwareSPIMode)
|
||||
SPI_SendByte(Byte);
|
||||
else
|
||||
ISPTarget_TransferSoftSPIByte(Byte);
|
||||
}
|
||||
|
||||
/** Receives a byte of ISP data from the attached target, using the appropriate
|
||||
* SPI hardware or software routines depending on the selected ISP speed.
|
||||
*
|
||||
* \return Received byte of data from the attached target
|
||||
*/
|
||||
static inline uint8_t ISPTarget_ReceiveByte(void)
|
||||
{
|
||||
if (HardwareSPIMode)
|
||||
return SPI_ReceiveByte();
|
||||
else
|
||||
return ISPTarget_TransferSoftSPIByte(0x00);
|
||||
}
|
||||
|
||||
/** Sends and receives a byte of ISP data to and from the attached target, using the
|
||||
* appropriate SPI hardware or software routines depending on the selected ISP speed.
|
||||
*
|
||||
* \param[in] Byte Byte of data to send to the attached target
|
||||
*
|
||||
* \return Received byte of data from the attached target
|
||||
*/
|
||||
static inline uint8_t ISPTarget_TransferByte(const uint8_t Byte)
|
||||
{
|
||||
if (HardwareSPIMode)
|
||||
return SPI_TransferByte(Byte);
|
||||
else
|
||||
return ISPTarget_TransferSoftSPIByte(Byte);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue