Merge pull request #1481 from cr1901/msp430-misopt-fix

msp430x5xx: Add fix for possible bug in msp430-elf-gcc 9.3.0.
This commit is contained in:
Ha Thach 2022-06-06 15:37:45 +07:00 committed by GitHub
commit afd9b1883d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -631,7 +631,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)
{