summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam D. Jones <[email protected]>2019-10-10 04:02:35 -0400
committerWilliam D. Jones <[email protected]>2019-10-10 04:02:35 -0400
commitc8e899fef03461d0aecfd82370f818483e8c9a3d (patch)
treeb4390b84e424c29fcb1f927935878e3c5552de0b
parent97af9e3332435cfd0fbed9487df2b5c08096e973 (diff)
dcd_msp430x5xx: Improve SETUP packet and EP0 NAK interactions, per
42.3.1.3 in Reference Manual; fix is incomplete but works.
-rw-r--r--src/portable/ti/msp430x5xx/dcd_msp430x5xx.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/portable/ti/msp430x5xx/dcd_msp430x5xx.c b/src/portable/ti/msp430x5xx/dcd_msp430x5xx.c
index 32565c38e..7b31ddd0a 100644
--- a/src/portable/ti/msp430x5xx/dcd_msp430x5xx.c
+++ b/src/portable/ti/msp430x5xx/dcd_msp430x5xx.c
@@ -90,9 +90,9 @@ static void bus_reset(void)
USBOEPIE |= BIT0;
USBIEPIE |= BIT0;
- // Set NAK until a setup packet is received.
- USBOEPCNT_0 |= NAK;
- USBIEPCNT_0 |= NAK;
+ // Clear NAK until a setup packet is received.
+ USBOEPCNT_0 &= ~NAK;
+ USBIEPCNT_0 &= ~NAK;
USBCTL |= FEN; // Enable responding to packets.
@@ -515,6 +515,11 @@ static void handle_setup_packet(void)
_setup_packet[i] = setup_buf[i];
}
+ // The NAK bits must be clear to receive a SETUP packet. Clearing SETUPIFG
+ // by reading USBVECINT does not set NAK, so now that we have a SETUP packet
+ // force NAKs.
+ USBIEPCNT_0 |= NAK;
+ USBOEPCNT_0 |= NAK;
dcd_event_setup_received(0, (uint8_t*) &_setup_packet[0], true);
}