msp430x5xx: Add fix for possible bug in msp430-elf-gcc 9.3.0.

This commit is contained in:
William D. Jones 2022-05-30 14:01:57 -04:00
parent f4efb51fe2
commit 731ac3d3d6
1 changed files with 12 additions and 1 deletions

View File

@ -623,7 +623,18 @@ void dcd_int_handler(uint8_t rhport)
handle_setup_packet();
}
uint16_t curr_vector = USBVECINT;
// Workaround possible bug in MSP430 GCC 9.3.0 where volatile variable
// USBVECINT is read from twice when only once is intended. The second
// (garbage) read seems to be triggered by certain switch statement
// configurations.
uint16_t curr_vector;
#if __GNUC__ > 9 || (__GNUC__ == 9 && __GNUC_MINOR__ > 2)
asm volatile ("mov %1, %0"
: "=r" (curr_vector)
: "m" (USBVECINT));
#else
curr_vector = USBVECINT;
#endif
switch(curr_vector)
{