diff options
author | Dean Camera <dean@fourwalledcubicle.com> | 2011-05-29 12:47:56 +0000 |
---|---|---|
committer | Dean Camera <dean@fourwalledcubicle.com> | 2011-05-29 12:47:56 +0000 |
commit | 0b6d5467bc70ba36ff71a186da9cf4d0742612a6 (patch) | |
tree | a0292668256c00166ee52cac38da1d4dc7316726 /Projects/AVRISP-MKII/Lib/XPROG | |
parent | ea922c98d187eb74c31535afa3334ead5bd50526 (diff) | |
download | lufa-0b6d5467bc70ba36ff71a186da9cf4d0742612a6.tar.gz lufa-0b6d5467bc70ba36ff71a186da9cf4d0742612a6.tar.bz2 lufa-0b6d5467bc70ba36ff71a186da9cf4d0742612a6.zip |
Oops - revert commit of an incomplete port of the AVRISP-MKII project.
Diffstat (limited to 'Projects/AVRISP-MKII/Lib/XPROG')
-rw-r--r-- | Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h | 13 | ||||
-rw-r--r-- | Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h | 13 | ||||
-rw-r--r-- | Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c | 20 | ||||
-rw-r--r-- | Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h | 14 | ||||
-rw-r--r-- | Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c | 181 | ||||
-rw-r--r-- | Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h | 11 |
6 files changed, 98 insertions, 154 deletions
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h index 089341592..b2b37e916 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h @@ -37,17 +37,12 @@ #define _TINY_NVM_ /* Includes: */ - #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 <avr/io.h> + #include <avr/interrupt.h> #include <stdbool.h> + #include <LUFA/Common/Common.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 11f79326b..48fa8eb96 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/XMEGANVM.h @@ -37,17 +37,12 @@ #define _XMEGA_NVM_ /* Includes: */ - #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 <avr/io.h> + #include <avr/interrupt.h> #include <stdbool.h> + #include <LUFA/Common/Common.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 778a7df9b..72cc53636 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; - } ATTR_PACKED SetMode_XPROG_Params; + } 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; - } ATTR_PACKED Erase_XPROG_Params; + } Erase_XPROG_Params; Endpoint_Read_Stream_LE(&Erase_XPROG_Params, sizeof(Erase_XPROG_Params), NULL); - Erase_XPROG_Params.Address = be32_to_cpu(Erase_XPROG_Params.Address); + Erase_XPROG_Params.Address = SwapEndian_32(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]; - } ATTR_PACKED WriteMemory_XPROG_Params; + } WriteMemory_XPROG_Params; Endpoint_Read_Stream_LE(&WriteMemory_XPROG_Params, (sizeof(WriteMemory_XPROG_Params) - sizeof(WriteMemory_XPROG_Params).ProgData), NULL); - WriteMemory_XPROG_Params.Address = be32_to_cpu(WriteMemory_XPROG_Params.Address); - WriteMemory_XPROG_Params.Length = be16_to_cpu(WriteMemory_XPROG_Params.Length); + WriteMemory_XPROG_Params.Address = SwapEndian_32(WriteMemory_XPROG_Params.Address); + WriteMemory_XPROG_Params.Length = SwapEndian_16(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; - } ATTR_PACKED ReadMemory_XPROG_Params; + } ReadMemory_XPROG_Params; Endpoint_Read_Stream_LE(&ReadMemory_XPROG_Params, sizeof(ReadMemory_XPROG_Params), NULL); - ReadMemory_XPROG_Params.Address = be32_to_cpu(ReadMemory_XPROG_Params.Address); - ReadMemory_XPROG_Params.Length = be16_to_cpu(ReadMemory_XPROG_Params.Length); + ReadMemory_XPROG_Params.Address = SwapEndian_32(ReadMemory_XPROG_Params.Address); + ReadMemory_XPROG_Params.Length = SwapEndian_16(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; - } ATTR_PACKED ReadCRC_XPROG_Params; + } 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 9c7986e55..d637c79ea 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h @@ -37,18 +37,12 @@ #define _XPROG_PROTOCOL_ /* Includes: */ - #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 <avr/io.h> + #include <util/delay.h> #include <stdio.h> + #include <LUFA/Drivers/USB/USB.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 70e49f7c6..0a2dee73b 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c @@ -46,22 +46,18 @@ void XPROGTarget_EnableTargetPDI(void) { IsSending = false; - #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 + /* 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); /* Send two IDLEs of 12 bits each to enable PDI interface (need at least 16 idle bits) */ XPROGTarget_SendIdle(); @@ -73,23 +69,19 @@ void XPROGTarget_EnableTargetTPI(void) { IsSending = false; - #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 /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); - /* 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); - #elif (ARCH == ARCH_UC3) - // TODO: FIXME - #endif + /* 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); /* Send two IDLEs of 12 bits each to enable TPI interface (need at least 16 idle bits) */ XPROGTarget_SendIdle(); @@ -102,18 +94,14 @@ void XPROGTarget_DisableTargetPDI(void) /* Switch to Rx mode to ensure that all pending transmissions are complete */ XPROGTarget_SetRxMode(); - #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 + /* 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)); } /** Disables the target's TPI interface, exits programming mode and starts the target's application. */ @@ -122,22 +110,18 @@ void XPROGTarget_DisableTargetTPI(void) /* Switch to Rx mode to ensure that all pending transmissions are complete */ XPROGTarget_SetRxMode(); - #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 + /* 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; } /** Sends a byte via the USART. @@ -150,14 +134,10 @@ void XPROGTarget_SendByte(const uint8_t Byte) if (!(IsSending)) XPROGTarget_SetTxMode(); - #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 + /* Wait until there is space in the hardware Tx buffer before writing */ + while (!(UCSR1A & (1 << UDRE1))); + UCSR1A |= (1 << TXC1); + UDR1 = Byte; } /** Receives a byte via the software USART, blocking until data is received. @@ -170,15 +150,10 @@ uint8_t XPROGTarget_ReceiveByte(void) if (IsSending) XPROGTarget_SetRxMode(); - #if (ARCH == ARCH_AVR8) - /* Wait until a byte has been received before reading */ - while (!(UCSR1A & (1 << RXC1)) && !(TimeoutExpired)); + /* Wait until a byte has been received before reading */ + while (!(UCSR1A & (1 << RXC1)) && !(TimeoutExpired)); - return UDR1; - #elif (ARCH == ARCH_UC3) - // TODO: FIXME - return 0; - #endif + return UDR1; } /** Sends an IDLE via the USART to the attached target, consisting of a full frame of idle bits. */ @@ -188,52 +163,40 @@ void XPROGTarget_SendIdle(void) if (!(IsSending)) XPROGTarget_SetTxMode(); - #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 + /* 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))); + } } static void XPROGTarget_SetTxMode(void) { - #if (ARCH == ARCH_AVR8) - /* Wait for a full cycle of the clock */ - while (PIND & (1 << 5)); - while (!(PIND & (1 << 5))); + /* 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); - #elif (ARCH == ARCH_UC3) - // TODO: FIXME - #endif + UCSR1B &= ~(1 << RXEN1); + UCSR1B |= (1 << TXEN1); IsSending = true; } static void XPROGTarget_SetRxMode(void) { - #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 + while (!(UCSR1A & (1 << TXC1))); + UCSR1A |= (1 << TXC1); + + UCSR1B &= ~(1 << TXEN1); + UCSR1B |= (1 << RXEN1); + + DDRD &= ~(1 << 3); + PORTD &= ~(1 << 3); IsSending = false; } diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h index e2194b3fe..ebc563933 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h @@ -37,14 +37,11 @@ #define _XPROG_TARGET_ /* Includes: */ - #include <LUFA/Common/Common.h> + #include <avr/io.h> + #include <avr/interrupt.h> + #include <stdbool.h> - #if (ARCH == ARCH_AVR8) - #include <avr/io.h> - #include <avr/interrupt.h> - #elif (ARCH == ARCH_UC3) - #include <avr32/io.h> - #endif + #include <LUFA/Common/Common.h> #include "../V2Protocol.h" #include "XPROGProtocol.h" |