AVRISP-MKII Clone Programmer Project

Macros | Functions
XPROGTarget.h File Reference
`#include <avr/io.h>`
`#include <avr/interrupt.h>`
`#include <stdbool.h>`
`#include <LUFA/Common/Common.h>`
`#include "../V2Protocol.h"`
`#include "XPROGProtocol.h"`
`#include "Config/AppConfig.h"`

## Macros

#define | XPROG_HARDWARE_SPEED 2000000
#define | BITS_IN_USART_FRAME 12
PDI Related Constants
#define | PDI_CMD_LDS(AddressSize, DataSize) (0x00 | ( AddressSize << 2) | DataSize)
#define | PDI_CMD_LD(PointerAccess, DataSize) (0x20 | (PointerAccess << 2) | DataSize)
#define | PDI_CMD_STS(AddressSize, DataSize) (0x40 | ( AddressSize << 2) | DataSize)
#define | PDI_CMD_ST(PointerAccess, DataSize) (0x60 | (PointerAccess << 2) | DataSize)
#define | PDI_CMD_LDCS(PDIReg) (0x80 | PDIReg)
#define | PDI_CMD_REPEAT(DataSize) (0xA0 | DataSize)
#define | PDI_CMD_STCS(PDIReg) (0xC0 | PDIReg)
#define | PDI_CMD_KEY 0xE0
#define | PDI_REG_STATUS 0
#define | PDI_REG_RESET 1
#define | PDI_REG_CTRL 2
#define | PDI_STATUS_NVM (1 << 1)
#define | PDI_RESET_KEY 0x59
#define | PDI_NVMENABLE_KEY (uint8_t[]){0x12, 0x89, 0xAB, 0x45, 0xCD, 0xD8, 0x88, 0xFF}
#define | PDI_DATASIZE_1BYTE 0
#define | PDI_DATASIZE_2BYTES 1
#define | PDI_DATASIZE_3BYTES 2
#define | PDI_DATASIZE_4BYTES 3
#define | PDI_POINTER_INDIRECT 0
#define | PDI_POINTER_INDIRECT_PI 1
#define | PDI_POINTER_DIRECT 2
TPI Related Constants
#define | TPI_CMD_SLD(PointerAccess) (0x20 | PointerAccess)
#define | TPI_CMD_SST(PointerAccess) (0x60 | PointerAccess)
#define | TPI_CMD_SSTPR 0x68
#define | TPI_CMD_SIN(Address) (0x10 | ((Address & 0x30) << 1) | (Address & 0x0F))
#define | TPI_CMD_SOUT(Address) (0x90 | ((Address & 0x30) << 1) | (Address & 0x0F))
#define | TPI_CMD_SLDCS(TPIReg) (0x80 | TPIReg)
#define | TPI_CMD_SSTCS(TPIReg) (0xC0 | TPIReg)
#define | TPI_CMD_SKEY 0xE0
#define | TPI_REG_STATUS 0x00
#define | TPI_REG_CTRL 0x02
#define | TPI_REG_ID 0x0F
#define | TPI_STATUS_NVM (1 << 1)
#define | TPI_NVMENABLE_KEY (uint8_t[]){0x12, 0x89, 0xAB, 0x45, 0xCD, 0xD8, 0x88, 0xFF}
#define | TPI_POINTER_INDIRECT 0
#define | TPI_POINTER_INDIRECT_PI 4

## Functions

void | XPROGTarget_EnableTargetPDI (void)
void | XPROGTarget_EnableTargetTPI (void)
void | XPROGTarget_DisableTargetPDI (void)
void | XPROGTarget_DisableTargetTPI (void)
void | XPROGTarget_SendByte (const uint8_t Byte)
uint8_t | XPROGTarget_ReceiveByte (void)
void | XPROGTarget_SendIdle (void)
bool | XPROGTarget_WaitWhileNVMBusBusy (void)

## Detailed Description

Header file for XPROGTarget.c.

## Macro Definition Documentation

## § BITS_IN_USART_FRAME

#define BITS_IN_USART_FRAME 12

Total number of bits in a single USART frame.

## § PDI_CMD_KEY

#define PDI_CMD_KEY 0xE0

## § PDI_CMD_LD

#define PDI_CMD_LD | ( |  | PointerAccess,
|  |  | DataSize
| ) |  | (0x20 | (PointerAccess << 2) | DataSize)

## § PDI_CMD_LDCS

#define PDI_CMD_LDCS | ( |  | PDIReg | ) | (0x80 | PDIReg)

## § PDI_CMD_LDS

#define PDI_CMD_LDS | ( |  | AddressSize,
|  |  | DataSize
| ) |  | (0x00 | ( AddressSize << 2) | DataSize)

## § PDI_CMD_REPEAT

#define PDI_CMD_REPEAT | ( |  | DataSize | ) | (0xA0 | DataSize)

## § PDI_CMD_ST

#define PDI_CMD_ST | ( |  | PointerAccess,
|  |  | DataSize
| ) |  | (0x60 | (PointerAccess << 2) | DataSize)

## § PDI_CMD_STCS

#define PDI_CMD_STCS | ( |  | PDIReg | ) | (0xC0 | PDIReg)

## § PDI_CMD_STS

#define PDI_CMD_STS | ( |  | AddressSize,
|  |  | DataSize
| ) |  | (0x40 | ( AddressSize << 2) | DataSize)

## § PDI_DATASIZE_1BYTE

#define PDI_DATASIZE_1BYTE 0

## § PDI_DATASIZE_2BYTES

#define PDI_DATASIZE_2BYTES 1

## § PDI_DATASIZE_3BYTES

#define PDI_DATASIZE_3BYTES 2

## § PDI_DATASIZE_4BYTES

#define PDI_DATASIZE_4BYTES 3

## § PDI_NVMENABLE_KEY

#define PDI_NVMENABLE_KEY (uint8_t[]){0x12, 0x89, 0xAB, 0x45, 0xCD, 0xD8, 0x88, 0xFF}

## § PDI_POINTER_DIRECT

#define PDI_POINTER_DIRECT 2

## § PDI_POINTER_INDIRECT

#define PDI_POINTER_INDIRECT 0

## § PDI_POINTER_INDIRECT_PI

#define PDI_POINTER_INDIRECT_PI 1

## § PDI_REG_CTRL

#define PDI_REG_CTRL 2

## § PDI_REG_RESET

#define PDI_REG_RESET 1

## § PDI_REG_STATUS

#define PDI_REG_STATUS 0

## § PDI_RESET_KEY

#define PDI_RESET_KEY 0x59

## § PDI_STATUS_NVM

#define PDI_STATUS_NVM (1 << 1)

## § TPI_CMD_SIN

#define TPI_CMD_SIN | ( |  | Address | ) | (0x10 | ((Address & 0x30) << 1) | (Address & 0x0F))

## § TPI_CMD_SKEY

#define TPI_CMD_SKEY 0xE0

## § TPI_CMD_SLD

#define TPI_CMD_SLD | ( |  | PointerAccess | ) | (0x20 | PointerAccess)

## § TPI_CMD_SLDCS

#define TPI_CMD_SLDCS | ( |  | TPIReg | ) | (0x80 | TPIReg)

## § TPI_CMD_SOUT

#define TPI_CMD_SOUT | ( |  | Address | ) | (0x90 | ((Address & 0x30) << 1) | (Address & 0x0F))

## § TPI_CMD_SST

#define TPI_CMD_SST | ( |  | PointerAccess | ) | (0x60 | PointerAccess)

## § TPI_CMD_SSTCS

#define TPI_CMD_SSTCS | ( |  | TPIReg | ) | (0xC0 | TPIReg)

## § TPI_CMD_SSTPR

#define TPI_CMD_SSTPR 0x68

## § TPI_NVMENABLE_KEY

#define TPI_NVMENABLE_KEY (uint8_t[]){0x12, 0x89, 0xAB, 0x45, 0xCD, 0xD8, 0x88, 0xFF}

## § TPI_POINTER_INDIRECT

#define TPI_POINTER_INDIRECT 0

## § TPI_POINTER_INDIRECT_PI

#define TPI_POINTER_INDIRECT_PI 4

## § TPI_REG_CTRL

#define TPI_REG_CTRL 0x02

## § TPI_REG_ID

#define TPI_REG_ID 0x0F

## § TPI_REG_STATUS

#define TPI_REG_STATUS 0x00

## § TPI_STATUS_NVM

#define TPI_STATUS_NVM (1 << 1)

## § XPROG_HARDWARE_SPEED

#define XPROG_HARDWARE_SPEED 2000000

Serial carrier TPI/PDI speed in Hz, when hardware TPI/PDI mode is used.

## Function Documentation

## § XPROGTarget_DisableTargetPDI()

void XPROGTarget_DisableTargetPDI | ( | void |  | ) |

Disables the target's PDI interface, exits programming mode and starts the target's application.

## § XPROGTarget_DisableTargetTPI()

void XPROGTarget_DisableTargetTPI | ( | void |  | ) |

Disables the target's TPI interface, exits programming mode and starts the target's application.

## § XPROGTarget_EnableTargetPDI()

void XPROGTarget_EnableTargetPDI | ( | void |  | ) |

Enables the target's PDI interface, holding the target in reset until PDI mode is exited.

## § XPROGTarget_EnableTargetTPI()

void XPROGTarget_EnableTargetTPI | ( | void |  | ) |

Enables the target's TPI interface, holding the target in reset until TPI mode is exited.

## § XPROGTarget_ReceiveByte()

uint8_t XPROGTarget_ReceiveByte | ( | void |  | ) |

Receives a byte via the hardware USART, blocking until data is received or timeout expired.

Returns
  Received byte from the USART

## § XPROGTarget_SendByte()

void XPROGTarget_SendByte | ( | const uint8_t | Byte | ) |

Sends a byte via the USART.

Parameters

  [in] | Byte | Byte to send through the USART

## § XPROGTarget_SendIdle()

void XPROGTarget_SendIdle | ( | void |  | ) |

Sends an IDLE via the USART to the attached target, consisting of a full frame of idle bits.

## § XPROGTarget_WaitWhileNVMBusBusy()

bool XPROGTarget_WaitWhileNVMBusBusy | ( | void |  | ) |