aboutsummaryrefslogtreecommitdiffstats
path: root/Projects/AVRISP-MKII/Lib
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2011-05-29 12:41:14 +0000
committerDean Camera <dean@fourwalledcubicle.com>2011-05-29 12:41:14 +0000
commitea922c98d187eb74c31535afa3334ead5bd50526 (patch)
tree0add2892e10e4686e555ddf1d98c9110ebb4ba9f /Projects/AVRISP-MKII/Lib
parentcc9b190919abbc567cd179b31afeef565efb1f17 (diff)
downloadlufa-ea922c98d187eb74c31535afa3334ead5bd50526.tar.gz
lufa-ea922c98d187eb74c31535afa3334ead5bd50526.tar.bz2
lufa-ea922c98d187eb74c31535afa3334ead5bd50526.zip
Added new incomplete AudioInputHost Host LowLevel demo.
Added missing Audio class control request definitions. Added support for the Audio class GET STATUS request so that it is correctly ACKed when sent by the host.
Diffstat (limited to 'Projects/AVRISP-MKII/Lib')
-rw-r--r--Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c22
-rw-r--r--Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h10
-rw-r--r--Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h19
-rw-r--r--Projects/AVRISP-MKII/Lib/V2Protocol.c8
-rw-r--r--Projects/AVRISP-MKII/Lib/V2Protocol.h21
-rw-r--r--Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h1
-rw-r--r--Projects/AVRISP-MKII/Lib/V2ProtocolParams.c6
-rw-r--r--Projects/AVRISP-MKII/Lib/V2ProtocolParams.h17
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h13
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h13
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c20
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h14
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c181
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h11
14 files changed, 224 insertions, 132 deletions
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
index ccd31f3d2..2e31c1819 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c
@@ -52,7 +52,7 @@ void ISPProtocol_EnterISPMode(void)
uint8_t PollValue;
uint8_t PollIndex;
uint8_t EnterProgBytes[4];
- } Enter_ISP_Params;
+ } ATTR_PACKED Enter_ISP_Params;
Endpoint_Read_Stream_LE(&Enter_ISP_Params, sizeof(Enter_ISP_Params), NULL);
@@ -107,7 +107,7 @@ void ISPProtocol_LeaveISPMode(void)
{
uint8_t PreDelayMS;
uint8_t PostDelayMS;
- } Leave_ISP_Params;
+ } ATTR_PACKED Leave_ISP_Params;
Endpoint_Read_Stream_LE(&Leave_ISP_Params, sizeof(Leave_ISP_Params), NULL);
@@ -141,12 +141,12 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
uint8_t ProgrammingCommands[3];
uint8_t PollValue1;
uint8_t PollValue2;
- uint8_t ProgData[256]; // Note, the Jungo driver has a very short ACK timeout period, need to buffer the
- } Write_Memory_Params; // whole page and ACK the packet as fast as possible to prevent it from aborting
+ uint8_t ProgData[256]; // Note, the Jungo driver has a very short ACK timeout period, need to buffer the
+ } ATTR_PACKED Write_Memory_Params; // whole page and ACK the packet as fast as possible to prevent it from aborting
Endpoint_Read_Stream_LE(&Write_Memory_Params, (sizeof(Write_Memory_Params) -
sizeof(Write_Memory_Params.ProgData)), NULL);
- Write_Memory_Params.BytesToWrite = SwapEndian_16(Write_Memory_Params.BytesToWrite);
+ Write_Memory_Params.BytesToWrite = be16_to_cpu(Write_Memory_Params.BytesToWrite);
if (Write_Memory_Params.BytesToWrite > sizeof(Write_Memory_Params.ProgData))
{
@@ -286,10 +286,10 @@ void ISPProtocol_ReadMemory(uint8_t V2Command)
{
uint16_t BytesToRead;
uint8_t ReadMemoryCommand;
- } Read_Memory_Params;
+ } ATTR_PACKED Read_Memory_Params;
Endpoint_Read_Stream_LE(&Read_Memory_Params, sizeof(Read_Memory_Params), NULL);
- Read_Memory_Params.BytesToRead = SwapEndian_16(Read_Memory_Params.BytesToRead);
+ Read_Memory_Params.BytesToRead = be16_to_cpu(Read_Memory_Params.BytesToRead);
Endpoint_ClearOUT();
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
@@ -360,7 +360,7 @@ void ISPProtocol_ChipErase(void)
uint8_t EraseDelayMS;
uint8_t PollMethod;
uint8_t EraseCommandBytes[4];
- } Erase_Chip_Params;
+ } ATTR_PACKED Erase_Chip_Params;
Endpoint_Read_Stream_LE(&Erase_Chip_Params, sizeof(Erase_Chip_Params), NULL);
@@ -396,7 +396,7 @@ void ISPProtocol_ReadFuseLockSigOSCCAL(uint8_t V2Command)
{
uint8_t RetByte;
uint8_t ReadCommandBytes[4];
- } Read_FuseLockSigOSCCAL_Params;
+ } ATTR_PACKED Read_FuseLockSigOSCCAL_Params;
Endpoint_Read_Stream_LE(&Read_FuseLockSigOSCCAL_Params, sizeof(Read_FuseLockSigOSCCAL_Params), NULL);
@@ -427,7 +427,7 @@ void ISPProtocol_WriteFuseLock(uint8_t V2Command)
struct
{
uint8_t WriteCommandBytes[4];
- } Write_FuseLockSig_Params;
+ } ATTR_PACKED Write_FuseLockSig_Params;
Endpoint_Read_Stream_LE(&Write_FuseLockSig_Params, sizeof(Write_FuseLockSig_Params), NULL);
@@ -454,7 +454,7 @@ void ISPProtocol_SPIMulti(void)
uint8_t RxBytes;
uint8_t RxStartAddr;
uint8_t TxData[255];
- } SPI_Multi_Params;
+ } ATTR_PACKED SPI_Multi_Params;
Endpoint_Read_Stream_LE(&SPI_Multi_Params, (sizeof(SPI_Multi_Params) - sizeof(SPI_Multi_Params.TxData)), NULL);
Endpoint_Read_Stream_LE(&SPI_Multi_Params.TxData, SPI_Multi_Params.TxBytes, NULL);
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h
index 213ce5ce6..8b0861971 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.h
@@ -37,10 +37,14 @@
#define _ISP_PROTOCOL_
/* Includes: */
- #include <avr/io.h>
- #include <util/delay.h>
-
+ #include <LUFA/Common/Common.h>
#include <LUFA/Drivers/USB/USB.h>
+
+ #if (ARCH == ARCH_AVR8)
+ #include <avr/io.h>
+ #elif (ARCH == ARCH_UC3)
+ #include <avr32/io.h>
+ #endif
#include "../V2Protocol.h"
diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
index 057aa7ad1..e183dee0f 100644
--- a/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
+++ b/Projects/AVRISP-MKII/Lib/ISP/ISPTarget.h
@@ -37,12 +37,19 @@
#define _ISP_TARGET_
/* Includes: */
- #include <avr/io.h>
- #include <avr/pgmspace.h>
- #include <util/delay.h>
-
+ #include <LUFA/Common/Common.h>
#include <LUFA/Drivers/USB/USB.h>
- #include <LUFA/Drivers/Peripheral/SPI.h>
+
+ #if defined(ENABLE_ISP_PROTOCOL) || defined(__DOXYGEN__)
+ #include <LUFA/Drivers/Peripheral/SPI.h> // TODO: FIXME
+ #endif
+
+ #if (ARCH == ARCH_AVR8)
+ #include <avr/io.h>
+ #include <avr/pgmspace.h>
+ #elif (ARCH == ARCH_UC3)
+ #include <avr32/io.h>
+ #endif
#include "../V2ProtocolParams.h"
@@ -84,6 +91,7 @@
const uint8_t ReadMemCommand);
/* Inline Functions: */
+ #if defined(ENABLE_ISP_PROTOCOL) || defined(__DOXYGEN__)
/** Sends a byte of ISP data to the attached target, using the appropriate SPI hardware or
* software routines depending on the selected ISP speed.
*
@@ -124,6 +132,7 @@
else
return ISPTarget_TransferSoftSPIByte(Byte);
}
+ #endif
#endif
diff --git a/Projects/AVRISP-MKII/Lib/V2Protocol.c b/Projects/AVRISP-MKII/Lib/V2Protocol.c
index f763d6333..a955a95a8 100644
--- a/Projects/AVRISP-MKII/Lib/V2Protocol.c
+++ b/Projects/AVRISP-MKII/Lib/V2Protocol.c
@@ -42,13 +42,17 @@ uint32_t CurrentAddress;
/** Flag to indicate that the next read/write operation must update the device's current extended FLASH address */
bool MustLoadExtendedAddress;
+/** Command timeout expiration flag. */
+volatile bool TimeoutExpired;
+#if (ARCH == ARCH_AVR8) // TODO: FIXME
/** ISR to manage timeouts whilst processing a V2Protocol command */
ISR(WDT_vect, ISR_BLOCK)
{
TimeoutExpired = true;
wdt_disable();
}
+#endif
/** Initialises the hardware and software associated with the V2 protocol command handling. */
void V2Protocol_Init(void)
@@ -75,10 +79,12 @@ void V2Protocol_ProcessCommand(void)
{
uint8_t V2Command = Endpoint_Read_8();
+ #if (ARCH == ARCH_AVR8) // TODO: FIXME
/* Start the watchdog with timeout interrupt enabled to manage the timeout */
TimeoutExpired = false;
wdt_enable(WDTO_1S);
WDTCSR |= (1 << WDIE);
+ #endif
switch (V2Command)
{
@@ -140,8 +146,10 @@ void V2Protocol_ProcessCommand(void)
break;
}
+ #if (ARCH == ARCH_AVR8) // TODO: FIXME
/* Disable the timeout management watchdog timer */
wdt_disable();
+ #endif
Endpoint_WaitUntilReady();
Endpoint_SelectEndpoint(AVRISP_DATA_OUT_EPNUM);
diff --git a/Projects/AVRISP-MKII/Lib/V2Protocol.h b/Projects/AVRISP-MKII/Lib/V2Protocol.h
index 8e9e6ff38..c2f0ee072 100644
--- a/Projects/AVRISP-MKII/Lib/V2Protocol.h
+++ b/Projects/AVRISP-MKII/Lib/V2Protocol.h
@@ -37,12 +37,17 @@
#define _V2_PROTOCOL_
/* Includes: */
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <avr/wdt.h>
-
+ #include <LUFA/Common/Common.h>
#include <LUFA/Drivers/USB/USB.h>
+ #if (ARCH == ARCH_AVR8)
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+ #include <avr/wdt.h>
+ #elif (ARCH == ARCH_UC3)
+ #include <avr32/io.h>
+ #endif
+
#include "../Descriptors.h"
#include "V2ProtocolConstants.h"
#include "V2ProtocolParams.h"
@@ -69,15 +74,13 @@
/** Timeout period for each issued command from the host before it is aborted (in 10ms ticks). */
#define COMMAND_TIMEOUT_TICKS 100
- /** Command timeout expiration flag, GPIOR for speed. */
- #define TimeoutExpired GPIOR1
-
/** MUX mask for the VTARGET ADC channel number. */
#define VTARGET_ADC_CHANNEL_MASK ADC_GET_CHANNEL_MASK(VTARGET_ADC_CHANNEL)
/* External Variables: */
- extern uint32_t CurrentAddress;
- extern bool MustLoadExtendedAddress;
+ extern uint32_t CurrentAddress;
+ extern bool MustLoadExtendedAddress;
+ extern volatile bool TimeoutExpired;
/* Function Prototypes: */
void V2Protocol_Init(void);
diff --git a/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h b/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h
index 716e5fadb..f4fad5eff 100644
--- a/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h
+++ b/Projects/AVRISP-MKII/Lib/V2ProtocolConstants.h
@@ -73,6 +73,7 @@
#define STATUS_CONN_FAIL_SCK 0x04
#define STATUS_TGT_NOT_DETECTED 0x10
#define STATUS_TGT_REVERSE_INSERTED 0x20
+ #define STATUS_ANSWER_CKSUM_ERROR 0xB0
#define PARAM_BUILD_NUMBER_LOW 0x80
#define PARAM_BUILD_NUMBER_HIGH 0x81
diff --git a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c
index 3c1a88130..6342d75b3 100644
--- a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c
+++ b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.c
@@ -37,7 +37,7 @@
#include "V2ProtocolParams.h"
/* Non-Volatile Parameter Values for EEPROM storage */
-static uint8_t EEMEM EEPROM_Rest_Polarity = 0x00;
+static uint8_t EEMEM EEPROM_Reset_Polarity = 0x00;
/* Volatile Parameter Values for RAM storage */
static ParameterItem_t ParameterTable[] =
@@ -88,7 +88,7 @@ static ParameterItem_t ParameterTable[] =
void V2Params_LoadNonVolatileParamValues(void)
{
/* Target RESET line polarity is a non-volatile value, retrieve current parameter value from EEPROM */
- V2Params_GetParamFromTable(PARAM_RESET_POLARITY)->ParamValue = eeprom_read_byte(&EEPROM_Rest_Polarity);
+ V2Params_GetParamFromTable(PARAM_RESET_POLARITY)->ParamValue = eeprom_read_byte(&EEPROM_Reset_Polarity);
}
/** Updates any parameter values that are sourced from hardware rather than explicitly set by the host, such as
@@ -163,7 +163,7 @@ void V2Params_SetParameterValue(const uint8_t ParamID,
/* The target RESET line polarity is a non-volatile parameter, save to EEPROM when changed */
if (ParamID == PARAM_RESET_POLARITY)
- eeprom_update_byte(&EEPROM_Rest_Polarity, Value);
+ eeprom_update_byte(&EEPROM_Reset_Polarity, Value);
}
/** Retrieves a parameter entry (including ID, value and privileges) from the parameter table that matches the given
diff --git a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h
index f4479d308..4ef091ce7 100644
--- a/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h
+++ b/Projects/AVRISP-MKII/Lib/V2ProtocolParams.h
@@ -37,15 +37,20 @@
#define _V2_PROTOCOL_PARAMS_
/* Includes: */
- #include <avr/io.h>
- #include <avr/eeprom.h>
-
+ #include <LUFA/Common/Common.h>
#include <LUFA/Version.h>
#if defined(ADC)
#include <LUFA/Drivers/Peripheral/ADC.h>
#endif
+ #if (ARCH == ARCH_AVR8)
+ #include <avr/io.h>
+ #include <avr/eeprom.h>
+ #elif (ARCH == ARCH_UC3)
+ #include <avr32/io.h>
+ #endif
+
#include "V2Protocol.h"
#include "V2ProtocolConstants.h"
#include "ISP/ISPTarget.h"
@@ -59,6 +64,12 @@
/** Total number of parameters in the parameter table */
#define TABLE_PARAM_COUNT (sizeof(ParameterTable) / sizeof(ParameterTable[0]))
+
+ #if (ARCH == ARCH_UC3) // TODO: FIXME
+ #define EEMEM
+ #define eeprom_read_byte(x) *x
+ #define eeprom_update_byte(x,y) *x=y
+ #endif
/* Type Defines: */
/** Type define for a parameter table entry indicating a PC readable or writable device parameter. */
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
index b2b37e916..089341592 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h
@@ -37,12 +37,17 @@
#define _TINY_NVM_
/* Includes: */
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <stdbool.h>
-
#include <LUFA/Common/Common.h>
+ #if (ARCH == ARCH_AVR8)
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+ #elif (ARCH == ARCH_UC3)
+ #include <avr32/io.h>
+ #endif
+
+ #include <stdbool.h>
+
#include "XPROGProtocol.h"
#include "XPROGTarget.h"
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h
index 48fa8eb96..11f79326b 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h
@@ -37,12 +37,17 @@
#define _XMEGA_NVM_
/* Includes: */
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <stdbool.h>
-
#include <LUFA/Common/Common.h>
+ #if (ARCH == ARCH_AVR8)
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+ #elif (ARCH == ARCH_UC3)
+ #include <avr32/io.h>
+ #endif
+
+ #include <stdbool.h>
+
#include "XPROGProtocol.h"
#include "XPROGTarget.h"
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
index 72cc53636..778a7df9b 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
@@ -60,7 +60,7 @@ void XPROGProtocol_SetMode(void)
struct
{
uint8_t Protocol;
- } SetMode_XPROG_Params;
+ } ATTR_PACKED SetMode_XPROG_Params;
Endpoint_Read_Stream_LE(&SetMode_XPROG_Params, sizeof(SetMode_XPROG_Params), NULL);
@@ -163,10 +163,10 @@ static void XPROGProtocol_Erase(void)
{
uint8_t MemoryType;
uint32_t Address;
- } Erase_XPROG_Params;
+ } ATTR_PACKED Erase_XPROG_Params;
Endpoint_Read_Stream_LE(&Erase_XPROG_Params, sizeof(Erase_XPROG_Params), NULL);
- Erase_XPROG_Params.Address = SwapEndian_32(Erase_XPROG_Params.Address);
+ Erase_XPROG_Params.Address = be32_to_cpu(Erase_XPROG_Params.Address);
Endpoint_ClearOUT();
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
@@ -242,12 +242,12 @@ static void XPROGProtocol_WriteMemory(void)
uint32_t Address;
uint16_t Length;
uint8_t ProgData[256];
- } WriteMemory_XPROG_Params;
+ } ATTR_PACKED WriteMemory_XPROG_Params;
Endpoint_Read_Stream_LE(&WriteMemory_XPROG_Params, (sizeof(WriteMemory_XPROG_Params) -
sizeof(WriteMemory_XPROG_Params).ProgData), NULL);
- WriteMemory_XPROG_Params.Address = SwapEndian_32(WriteMemory_XPROG_Params.Address);
- WriteMemory_XPROG_Params.Length = SwapEndian_16(WriteMemory_XPROG_Params.Length);
+ WriteMemory_XPROG_Params.Address = be32_to_cpu(WriteMemory_XPROG_Params.Address);
+ WriteMemory_XPROG_Params.Length = be16_to_cpu(WriteMemory_XPROG_Params.Length);
Endpoint_Read_Stream_LE(&WriteMemory_XPROG_Params.ProgData, WriteMemory_XPROG_Params.Length, NULL);
// The driver will terminate transfers that are a round multiple of the endpoint bank in size with a ZLP, need
@@ -335,11 +335,11 @@ static void XPROGProtocol_ReadMemory(void)
uint8_t MemoryType;
uint32_t Address;
uint16_t Length;
- } ReadMemory_XPROG_Params;
+ } ATTR_PACKED ReadMemory_XPROG_Params;
Endpoint_Read_Stream_LE(&ReadMemory_XPROG_Params, sizeof(ReadMemory_XPROG_Params), NULL);
- ReadMemory_XPROG_Params.Address = SwapEndian_32(ReadMemory_XPROG_Params.Address);
- ReadMemory_XPROG_Params.Length = SwapEndian_16(ReadMemory_XPROG_Params.Length);
+ ReadMemory_XPROG_Params.Address = be32_to_cpu(ReadMemory_XPROG_Params.Address);
+ ReadMemory_XPROG_Params.Length = be16_to_cpu(ReadMemory_XPROG_Params.Length);
Endpoint_ClearOUT();
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
@@ -380,7 +380,7 @@ static void XPROGProtocol_ReadCRC(void)
struct
{
uint8_t CRCType;
- } ReadCRC_XPROG_Params;
+ } ATTR_PACKED ReadCRC_XPROG_Params;
Endpoint_Read_Stream_LE(&ReadCRC_XPROG_Params, sizeof(ReadCRC_XPROG_Params), NULL);
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
index d637c79ea..9c7986e55 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h
@@ -37,12 +37,18 @@
#define _XPROG_PROTOCOL_
/* Includes: */
- #include <avr/io.h>
- #include <util/delay.h>
- #include <stdio.h>
-
+ #include <LUFA/Common/Common.h>
#include <LUFA/Drivers/USB/USB.h>
+ #if (ARCH == ARCH_AVR8)
+ #include <avr/io.h>
+ #elif (ARCH == ARCH_UC3)
+ #include <avr32/io.h>
+ #endif
+
+ #include <stdbool.h>
+ #include <stdio.h>
+
#include "../V2Protocol.h"
#include "XMEGANVM.h"
#include "TINYNVM.h"
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
index 0a2dee73b..70e49f7c6 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
@@ -46,18 +46,22 @@ void XPROGTarget_EnableTargetPDI(void)
{
IsSending = false;
- /* Set Tx and XCK as outputs, Rx as input */
- DDRD |= (1 << 5) | (1 << 3);
- DDRD &= ~(1 << 2);
-
- /* Set DATA line high for at least 90ns to disable /RESET functionality */
- PORTD |= (1 << 3);
- _delay_us(1);
-
- /* Set up the synchronous USART for XMEGA communications - 8 data bits, even parity, 2 stop bits */
- UBRR1 = ((F_CPU / 2 / XPROG_HARDWARE_SPEED) - 1);
- UCSR1B = (1 << TXEN1);
- UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
+ #if (ARCH == ARCH_AVR8)
+ /* Set Tx and XCK as outputs, Rx as input */
+ DDRD |= (1 << 5) | (1 << 3);
+ DDRD &= ~(1 << 2);
+
+ /* Set DATA line high for at least 90ns to disable /RESET functionality */
+ PORTD |= (1 << 3);
+ Delay_MS(1);
+
+ /* Set up the synchronous USART for XMEGA communications - 8 data bits, even parity, 2 stop bits */
+ UBRR1 = ((F_CPU / 2 / XPROG_HARDWARE_SPEED) - 1);
+ UCSR1B = (1 << TXEN1);
+ UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
+ #elif (ARCH == ARCH_UC3)
+ // TODO: FIXME
+ #endif
/* Send two IDLEs of 12 bits each to enable PDI interface (need at least 16 idle bits) */
XPROGTarget_SendIdle();
@@ -69,19 +73,23 @@ void XPROGTarget_EnableTargetTPI(void)
{
IsSending = false;
- /* Set /RESET line low for at least 400ns to enable TPI functionality */
- AUX_LINE_DDR |= AUX_LINE_MASK;
- AUX_LINE_PORT &= ~AUX_LINE_MASK;
- _delay_us(1);
+ #if (ARCH == ARCH_AVR8)
+ /* Set /RESET line low for at least 400ns to enable TPI functionality */
+ AUX_LINE_DDR |= AUX_LINE_MASK;
+ AUX_LINE_PORT &= ~AUX_LINE_MASK;
+ Delay_MS(1);
- /* Set Tx and XCK as outputs, Rx as input */
- DDRD |= (1 << 5) | (1 << 3);
- DDRD &= ~(1 << 2);
+ /* Set Tx and XCK as outputs, Rx as input */
+ DDRD |= (1 << 5) | (1 << 3);
+ DDRD &= ~(1 << 2);
- /* Set up the synchronous USART for TINY communications - 8 data bits, even parity, 2 stop bits */
- UBRR1 = ((F_CPU / 2 / XPROG_HARDWARE_SPEED) - 1);
- UCSR1B = (1 << TXEN1);
- UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
+ /* Set up the synchronous USART for TINY communications - 8 data bits, even parity, 2 stop bits */
+ UBRR1 = ((F_CPU / 2 / XPROG_HARDWARE_SPEED) - 1);
+ UCSR1B = (1 << TXEN1);
+ UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
+ #elif (ARCH == ARCH_UC3)
+ // TODO: FIXME
+ #endif
/* Send two IDLEs of 12 bits each to enable TPI interface (need at least 16 idle bits) */
XPROGTarget_SendIdle();
@@ -94,14 +102,18 @@ void XPROGTarget_DisableTargetPDI(void)
/* Switch to Rx mode to ensure that all pending transmissions are complete */
XPROGTarget_SetRxMode();
- /* Turn off receiver and transmitter of the USART, clear settings */
- UCSR1A = ((1 << TXC1) | (1 << RXC1));
- UCSR1B = 0;
- UCSR1C = 0;
-
- /* Tristate all pins */
- DDRD &= ~((1 << 5) | (1 << 3));
- PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
+ #if (ARCH == ARCH_AVR8)
+ /* Turn off receiver and transmitter of the USART, clear settings */
+ UCSR1A = ((1 << TXC1) | (1 << RXC1));
+ UCSR1B = 0;
+ UCSR1C = 0;
+
+ /* Tristate all pins */
+ DDRD &= ~((1 << 5) | (1 << 3));
+ PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
+ #elif (ARCH == ARCH_UC3)
+ // TODO: FIXME
+ #endif
}
/** Disables the target's TPI interface, exits programming mode and starts the target's application. */
@@ -110,18 +122,22 @@ void XPROGTarget_DisableTargetTPI(void)
/* Switch to Rx mode to ensure that all pending transmissions are complete */
XPROGTarget_SetRxMode();
- /* Turn off receiver and transmitter of the USART, clear settings */
- UCSR1A |= (1 << TXC1) | (1 << RXC1);
- UCSR1B = 0;
- UCSR1C = 0;
-
- /* Set all USART lines as inputs, tristate */
- DDRD &= ~((1 << 5) | (1 << 3));
- PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
-
- /* Tristate target /RESET line */
- AUX_LINE_DDR &= ~AUX_LINE_MASK;
- AUX_LINE_PORT &= ~AUX_LINE_MASK;
+ #if (ARCH == ARCH_AVR8)
+ /* Turn off receiver and transmitter of the USART, clear settings */
+ UCSR1A |= (1 << TXC1) | (1 << RXC1);
+ UCSR1B = 0;
+ UCSR1C = 0;
+
+ /* Set all USART lines as inputs, tristate */
+ DDRD &= ~((1 << 5) | (1 << 3));
+ PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
+
+ /* Tristate target /RESET line */
+ AUX_LINE_DDR &= ~AUX_LINE_MASK;
+ AUX_LINE_PORT &= ~AUX_LINE_MASK;
+ #elif (ARCH == ARCH_UC3)
+ // TODO: FIXME
+ #endif
}
/** Sends a byte via the USART.
@@ -134,10 +150,14 @@ void XPROGTarget_SendByte(const uint8_t Byte)
if (!(IsSending))
XPROGTarget_SetTxMode();
- /* Wait until there is space in the hardware Tx buffer before writing */
- while (!(UCSR1A & (1 << UDRE1)));
- UCSR1A |= (1 << TXC1);
- UDR1 = Byte;
+ #if (ARCH == ARCH_AVR8)
+ /* Wait until there is space in the hardware Tx buffer before writing */
+ while (!(UCSR1A & (1 << UDRE1)));
+ UCSR1A |= (1 << TXC1);
+ UDR1 = Byte;
+ #elif (ARCH == ARCH_UC3)
+ // TODO: FIXME
+ #endif
}
/** Receives a byte via the software USART, blocking until data is received.
@@ -150,10 +170,15 @@ uint8_t XPROGTarget_ReceiveByte(void)
if (IsSending)
XPROGTarget_SetRxMode();
- /* Wait until a byte has been received before reading */
- while (!(UCSR1A & (1 << RXC1)) && !(TimeoutExpired));
+ #if (ARCH == ARCH_AVR8)
+ /* Wait until a byte has been received before reading */
+ while (!(UCSR1A & (1 << RXC1)) && !(TimeoutExpired));
- return UDR1;
+ return UDR1;
+ #elif (ARCH == ARCH_UC3)
+ // TODO: FIXME
+ return 0;
+ #endif
}
/** Sends an IDLE via the USART to the attached target, consisting of a full frame of idle bits. */
@@ -163,40 +188,52 @@ void XPROGTarget_SendIdle(void)
if (!(IsSending))
XPROGTarget_SetTxMode();
- /* Need to do nothing for a full frame to send an IDLE */
- for (uint8_t i = 0; i < BITS_IN_USART_FRAME; i++)
- {
- /* Wait for a full cycle of the clock */
- while (PIND & (1 << 5));
- while (!(PIND & (1 << 5)));
- }
+ #if (ARCH == ARCH_AVR8)
+ /* Need to do nothing for a full frame to send an IDLE */
+ for (uint8_t i = 0; i < BITS_IN_USART_FRAME; i++)
+ {
+ /* Wait for a full cycle of the clock */
+ while (PIND & (1 << 5));
+ while (!(PIND & (1 << 5)));
+ }
+ #elif (ARCH == ARCH_UC3)
+ // TODO: FIXME
+ #endif
}
static void XPROGTarget_SetTxMode(void)
{
- /* Wait for a full cycle of the clock */
- while (PIND & (1 << 5));
- while (!(PIND & (1 << 5)));
+ #if (ARCH == ARCH_AVR8)
+ /* Wait for a full cycle of the clock */
+ while (PIND & (1 << 5));
+ while (!(PIND & (1 << 5)));
- PORTD |= (1 << 3);
- DDRD |= (1 << 3);
+ PORTD |= (1 << 3);
+ DDRD |= (1 << 3);
- UCSR1B &= ~(1 << RXEN1);
- UCSR1B |= (1 << TXEN1);
+ UCSR1B &= ~(1 << RXEN1);
+ UCSR1B |= (1 << TXEN1);
+ #elif (ARCH == ARCH_UC3)
+ // TODO: FIXME
+ #endif
IsSending = true;
}
static void XPROGTarget_SetRxMode(void)
{
- while (!(UCSR1A & (1 << TXC1)));
- UCSR1A |= (1 << TXC1);
-
- UCSR1B &= ~(1 << TXEN1);
- UCSR1B |= (1 << RXEN1);
-
- DDRD &= ~(1 << 3);
- PORTD &= ~(1 << 3);
+ #if (ARCH == ARCH_AVR8)
+ while (!(UCSR1A & (1 << TXC1)));
+ UCSR1A |= (1 << TXC1);
+
+ UCSR1B &= ~(1 << TXEN1);
+ UCSR1B |= (1 << RXEN1);
+
+ DDRD &= ~(1 << 3);
+ PORTD &= ~(1 << 3);
+ #elif (ARCH == ARCH_UC3)
+ // TODO: FIXME
+ #endif
IsSending = false;
}
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
index ebc563933..e2194b3fe 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
@@ -37,12 +37,15 @@
#define _XPROG_TARGET_
/* Includes: */
- #include <avr/io.h>
- #include <avr/interrupt.h>
- #include <stdbool.h>
-
#include <LUFA/Common/Common.h>
+ #if (ARCH == ARCH_AVR8)
+ #include <avr/io.h>
+ #include <avr/interrupt.h>
+ #elif (ARCH == ARCH_UC3)
+ #include <avr32/io.h>
+ #endif
+
#include "../V2Protocol.h"
#include "XPROGProtocol.h"