aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2010-03-17 11:48:39 +0000
committerDean Camera <dean@fourwalledcubicle.com>2010-03-17 11:48:39 +0000
commit9a5ae36a4f62e0cda37972401c61727c6804a985 (patch)
tree77452ab5bbd5fc2fa983d8da6d76e2f883d7b02c
parent7d51e51c79c3af7791f4c3e8c7e5e8196a2c3f93 (diff)
downloadlufa-9a5ae36a4f62e0cda37972401c61727c6804a985.tar.gz
lufa-9a5ae36a4f62e0cda37972401c61727c6804a985.tar.bz2
lufa-9a5ae36a4f62e0cda37972401c61727c6804a985.zip
Software PDI mode breaks unless the software USART has 100 cycles between bits.
-rw-r--r--Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c4
-rw-r--r--LUFA/Drivers/USB/LowLevel/Pipe.c9
-rw-r--r--LUFA/ManPages/ChangeLog.txt2
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c2
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c4
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c12
-rw-r--r--Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h7
-rw-r--r--Projects/AVRISP-MKII/makefile2
8 files changed, 20 insertions, 22 deletions
diff --git a/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c b/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c
index b6411858a..6339a9239 100644
--- a/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c
+++ b/Demos/Host/ClassDriver/MouseHostWithParser/MouseHostWithParser.c
@@ -147,7 +147,7 @@ int main(void)
(ReportItem->Attributes.Usage.Usage == USAGE_SCROLL_WHEEL) &&
(ReportItem->ItemType == REPORT_ITEM_TYPE_In))
{
- int16_t WheelDelta = (int16_t)(ReportItem->Value << (16 - ReportItem->Attributes.BitSize));
+ int16_t WheelDelta = HID_ALIGN_DATA(ReportItem->Value, int16_t);
if (WheelDelta)
LEDMask = (LEDS_LED1 | LEDS_LED2 | ((WheelDelta > 0) ? LEDS_LED3 : LEDS_LED4));
@@ -157,7 +157,7 @@ int main(void)
(ReportItem->Attributes.Usage.Usage == USAGE_Y)) &&
(ReportItem->ItemType == REPORT_ITEM_TYPE_In))
{
- int16_t DeltaMovement = (int16_t)(ReportItem->Value << (16 - ReportItem->Attributes.BitSize));
+ int16_t DeltaMovement = HID_ALIGN_DATA(ReportItem->Value, int16_t);
if (ReportItem->Attributes.Usage.Usage == USAGE_X)
{
diff --git a/LUFA/Drivers/USB/LowLevel/Pipe.c b/LUFA/Drivers/USB/LowLevel/Pipe.c
index 78c82e8c4..8784bea0c 100644
--- a/LUFA/Drivers/USB/LowLevel/Pipe.c
+++ b/LUFA/Drivers/USB/LowLevel/Pipe.c
@@ -80,14 +80,13 @@ bool Pipe_IsEndpointBound(const uint8_t EndpointAddress)
Pipe_SelectPipe(PNum);
uint8_t PipeToken = Pipe_GetPipeToken();
+ bool PipeTokenCorrect = true;
if (PipeToken != PIPE_TOKEN_SETUP)
- PipeToken = (PipeToken == ((EndpointAddress & PIPE_EPDIR_MASK) ? PIPE_TOKEN_IN : PIPE_TOKEN_OUT));
+ PipeTokenCorrect = (PipeToken == ((EndpointAddress & PIPE_EPDIR_MASK) ? PIPE_TOKEN_IN : PIPE_TOKEN_OUT));
- if (Pipe_IsConfigured() && (Pipe_BoundEndpointNumber() == (EndpointAddress & PIPE_EPNUM_MASK)) && PipeToken)
- {
- return true;
- }
+ if (Pipe_IsConfigured() && PipeTokenCorrect && (Pipe_BoundEndpointNumber() == (EndpointAddress & PIPE_EPNUM_MASK)))
+ return true;
}
Pipe_SelectPipe(PrevPipeNumber);
diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt
index b776175d6..8ce9f2240 100644
--- a/LUFA/ManPages/ChangeLog.txt
+++ b/LUFA/ManPages/ChangeLog.txt
@@ -27,8 +27,6 @@
* - Fixed ADC routines not correctly returning the last result when multiple channels were read
* - Fixed ADC routines failing to read the extended channels (Channels 8 to 13, Internal Temperature Sensor) on the
* U4 series USB AVR parts
- * - Fixed PDI programming mode in the AVRISP programmer project not exiting programming mode correctly (clear target
- * Reset key twice, possible silicon bug?)
*
* \section Sec_ChangeLog100219 Version 100219
*
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c
index a894793c7..c0f04c6bd 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.c
@@ -65,7 +65,7 @@ static void TINYNVM_SendReadNVMRegister(const uint8_t Address)
*/
static void TINYNVM_SendWriteNVMRegister(const uint8_t Address)
{
- /* The TPI command for writing to the I/O space uses weird addressing, where the I/O address's upper
+ /* The TPI command for reading from the I/O space uses strange addressing, where the I/O address's upper
* two bits of the 6-bit address are shifted left once */
XPROGTarget_SendByte(TPI_CMD_SOUT | ((Address & 0x30) << 1) | (Address & 0x0F));
}
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
index 08936a202..07dce5011 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c
@@ -175,10 +175,6 @@ static void XPROGProtocol_LeaveXPROGMode(void)
/* Clear the RESET key in the RESET PDI register to allow the XMEGA to run */
XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG);
XPROGTarget_SendByte(0x00);
-
- /* Clear /RESET key twice (for some reason this needs to be done twice to take effect) */
- XPROGTarget_SendByte(PDI_CMD_STCS | PDI_RESET_REG);
- XPROGTarget_SendByte(0x00);
XPROGTarget_DisableTargetPDI();
}
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
index 3a74e1531..15467fe84 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.c
@@ -162,7 +162,7 @@ void XPROGTarget_EnableTargetPDI(void)
/* Set up the synchronous USART for XMEGA communications -
8 data bits, even parity, 2 stop bits */
- UBRR1 = (F_CPU / 500000UL);
+ UBRR1 = (F_CPU / XPROG_HARDWARE_SPEED);
UCSR1B = (1 << TXEN1);
UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
#else
@@ -203,7 +203,7 @@ void XPROGTarget_EnableTargetTPI(void)
/* Set up the synchronous USART for TINY communications -
8 data bits, even parity, 2 stop bits */
- UBRR1 = (F_CPU / 500000UL);
+ UBRR1 = (F_CPU / XPROG_HARDWARE_SPEED);
UCSR1B = (1 << TXEN1);
UCSR1C = (1 << UMSEL10) | (1 << UPM11) | (1 << USBS1) | (1 << UCSZ11) | (1 << UCSZ10) | (1 << UCPOL1);
#else
@@ -239,16 +239,18 @@ void XPROGTarget_DisableTargetPDI(void)
/* Tristate all pins */
DDRD &= ~((1 << 5) | (1 << 3));
- PORTD &= ~((1 << 3) | (1 << 2));
+ PORTD &= ~((1 << 5) | (1 << 3) | (1 << 2));
#else
/* Turn off software USART management timer */
TCCR1B = 0;
- /* Tristate all pins */
+ /* Set DATA and CLOCK lines to inputs */
BITBANG_PDIDATA_DDR &= ~BITBANG_PDIDATA_MASK;
BITBANG_PDICLOCK_DDR &= ~BITBANG_PDICLOCK_MASK;
- BITBANG_PDICLOCK_PORT &= ~BITBANG_PDICLOCK_MASK;
+
+ /* Tristate DATA and CLOCK lines */
BITBANG_PDIDATA_PORT &= ~BITBANG_PDIDATA_MASK;
+ BITBANG_PDICLOCK_PORT &= ~BITBANG_PDICLOCK_MASK;
#endif
}
diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
index 0c54ad4cf..7166c1023 100644
--- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
+++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h
@@ -58,7 +58,7 @@
/* Defines: */
#if ((BOARD == BOARD_XPLAIN) || (BOARD == BOARD_XPLAIN_REV1))
#define XPROG_VIA_HARDWARE_USART
- #else
+ #else
#define BITBANG_PDIDATA_PORT PORTB
#define BITBANG_PDIDATA_DDR DDRB
#define BITBANG_PDIDATA_PIN PINB
@@ -80,8 +80,11 @@
#define BITBANG_TPICLOCK_MASK (1 << 1)
#endif
+ /** Serial carrier TPI/PDI speed when hardware TPI/PDI mode is used */
+ #define XPROG_HARDWARE_SPEED 500000
+
/** Number of cycles between each clock when software USART mode is used */
- #define BITS_BETWEEN_USART_CLOCKS 80
+ #define BITS_BETWEEN_USART_CLOCKS 100
/** Total number of bits in a single USART frame */
#define BITS_IN_USART_FRAME 12
diff --git a/Projects/AVRISP-MKII/makefile b/Projects/AVRISP-MKII/makefile
index b2c139cec..b0b26c24c 100644
--- a/Projects/AVRISP-MKII/makefile
+++ b/Projects/AVRISP-MKII/makefile
@@ -66,7 +66,7 @@ MCU = at90usb1287
# Target board (see library "Board Types" documentation, NONE for projects not requiring
# LUFA board drivers). If USER is selected, put custom board drivers in a directory called
# "Board" inside the application directory.
-BOARD = XPLAIN
+BOARD = USBKEY
# Processor frequency.