mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-07-16 12:51:47 +00:00
Correct UC3 global interrupt functions.
Replace all calls and references to _delay_ms() in the code with the architecture-agnostic Delay_MS() function. Improve code generation for the Delay_MS() function on the AVR8 architecture when called with a constant input.
This commit is contained in:
parent
70284d390f
commit
de9bd767dc
@ -109,7 +109,7 @@ int main(void)
|
|||||||
|
|
||||||
/* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */
|
/* Enable pull-up on the JTAG TCK pin so we can use it to select the mode */
|
||||||
PORTF |= (1 << 4);
|
PORTF |= (1 << 4);
|
||||||
_delay_ms(10);
|
Delay_MS(10);
|
||||||
|
|
||||||
/* If the TCK pin is not jumpered to ground, start the user application instead */
|
/* If the TCK pin is not jumpered to ground, start the user application instead */
|
||||||
RunBootloader = (!(PINF & (1 << 4)));
|
RunBootloader = (!(PINF & (1 << 4)));
|
||||||
|
@ -236,18 +236,28 @@
|
|||||||
/** Function to perform a blocking delay for a specified number of milliseconds. The actual delay will be
|
/** Function to perform a blocking delay for a specified number of milliseconds. The actual delay will be
|
||||||
* at a minimum the specified number of milliseconds, however due to loop overhead and internal calculations
|
* at a minimum the specified number of milliseconds, however due to loop overhead and internal calculations
|
||||||
* may be slightly higher.
|
* may be slightly higher.
|
||||||
|
*
|
||||||
|
* \param[in] Milliseconds Number of milliseconds to delay
|
||||||
*/
|
*/
|
||||||
static inline void Delay_MS(uint8_t Milliseconds)
|
static inline void Delay_MS(uint8_t Milliseconds)
|
||||||
{
|
{
|
||||||
|
#if (ARCH == ARCH_AVR8)
|
||||||
|
if (__builtin_constant_p(Milliseconds))
|
||||||
|
{
|
||||||
|
_delay_ms(Milliseconds);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
while (Milliseconds--)
|
||||||
|
_delay_ms(1);
|
||||||
|
}
|
||||||
|
#elif (ARCH == ARCH_UC3)
|
||||||
while (Milliseconds--)
|
while (Milliseconds--)
|
||||||
{
|
{
|
||||||
#if (ARCH == ARCH_AVR8)
|
|
||||||
_delay_ms(1);
|
|
||||||
#elif (ARCH == ARCH_UC3)
|
|
||||||
__builtin_mtsr(AVR32_COUNT, 0);
|
__builtin_mtsr(AVR32_COUNT, 0);
|
||||||
while (__builtin_mfsr(AVR32_COUNT) < (F_CPU / 1000));
|
while (__builtin_mfsr(AVR32_COUNT) < (F_CPU / 1000));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -79,17 +79,17 @@
|
|||||||
*
|
*
|
||||||
* // Turn on each of the four LEDs in turn
|
* // Turn on each of the four LEDs in turn
|
||||||
* LEDs_SetAllLEDs(LEDS_LED1);
|
* LEDs_SetAllLEDs(LEDS_LED1);
|
||||||
* _delay_ms(500);
|
* Delay_MS(500);
|
||||||
* LEDs_SetAllLEDs(LEDS_LED1);
|
* LEDs_SetAllLEDs(LEDS_LED1);
|
||||||
* _delay_ms(500);
|
* Delay_MS(500);
|
||||||
* LEDs_SetAllLEDs(LEDS_LED1);
|
* LEDs_SetAllLEDs(LEDS_LED1);
|
||||||
* _delay_ms(500);
|
* Delay_MS(500);
|
||||||
* LEDs_SetAllLEDs(LEDS_LED1);
|
* LEDs_SetAllLEDs(LEDS_LED1);
|
||||||
* _delay_ms(500);
|
* Delay_MS(500);
|
||||||
*
|
*
|
||||||
* // Turn on all LEDs
|
* // Turn on all LEDs
|
||||||
* LEDs_SetAllLEDs(LEDS_ALL_LEDS);
|
* LEDs_SetAllLEDs(LEDS_ALL_LEDS);
|
||||||
* _delay_ms(1000);
|
* Delay_MS(1000);
|
||||||
*
|
*
|
||||||
* // Turn on LED 1, turn off LED 2, leaving LEDs 3 and 4 in their current state
|
* // Turn on LED 1, turn off LED 2, leaving LEDs 3 and 4 in their current state
|
||||||
* LEDs_ChangeLEDs((LEDS_LED1 | LEDS_LED2), LEDS_LED1);
|
* LEDs_ChangeLEDs((LEDS_LED1 | LEDS_LED2), LEDS_LED1);
|
||||||
|
@ -273,7 +273,7 @@ static void USB_Host_ResetDevice(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_delay_ms(1);
|
Delay_MS(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HSOFIEnabled)
|
if (HSOFIEnabled)
|
||||||
|
@ -273,7 +273,7 @@ static void USB_Host_ResetDevice(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
_delay_ms(1);
|
Delay_MS(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HSOFIEnabled)
|
if (HSOFIEnabled)
|
||||||
|
@ -87,14 +87,15 @@
|
|||||||
static inline uint_reg_t USB_INT_GetGlobalEnableState(void)
|
static inline uint_reg_t USB_INT_GetGlobalEnableState(void)
|
||||||
{
|
{
|
||||||
GCC_MEMORY_BARRIER();
|
GCC_MEMORY_BARRIER();
|
||||||
return (__builtin_mfsr(AVR32_SR) & AVR32_SR_GM);
|
return __builtin_mfsr(AVR32_SR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void USB_INT_SetGlobalEnableState(uint_reg_t GlobalIntState) ATTR_ALWAYS_INLINE;
|
static inline void USB_INT_SetGlobalEnableState(uint_reg_t GlobalIntState) ATTR_ALWAYS_INLINE;
|
||||||
static inline void USB_INT_SetGlobalEnableState(uint_reg_t GlobalIntState)
|
static inline void USB_INT_SetGlobalEnableState(uint_reg_t GlobalIntState)
|
||||||
{
|
{
|
||||||
GCC_MEMORY_BARRIER();
|
GCC_MEMORY_BARRIER();
|
||||||
__builtin_ssrf(AVR32_SR_GM_OFFSET, GlobalIntState);
|
if (GlobalIntState & AVR32_SR_GM)
|
||||||
|
__builtin_ssrf(AVR32_SR_GM_OFFSET);
|
||||||
GCC_MEMORY_BARRIER();
|
GCC_MEMORY_BARRIER();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,8 +54,7 @@
|
|||||||
* cli();
|
* cli();
|
||||||
*
|
*
|
||||||
* // Wait two seconds for the USB detachment to register on the host
|
* // Wait two seconds for the USB detachment to register on the host
|
||||||
* for (uint8_t i = 0; i < 128; i++)
|
* Delay_MS(2000);
|
||||||
* _delay_ms(16);
|
|
||||||
*
|
*
|
||||||
* // Set the bootloader key to the magic value and force a reset
|
* // Set the bootloader key to the magic value and force a reset
|
||||||
* Boot_Key = MAGIC_BOOT_KEY;
|
* Boot_Key = MAGIC_BOOT_KEY;
|
||||||
|
@ -519,7 +519,7 @@ void ISPProtocol_SPIMulti(void)
|
|||||||
void ISPProtocol_DelayMS(uint8_t DelayMS)
|
void ISPProtocol_DelayMS(uint8_t DelayMS)
|
||||||
{
|
{
|
||||||
while (DelayMS-- && !(TimeoutExpired))
|
while (DelayMS-- && !(TimeoutExpired))
|
||||||
_delay_ms(1);
|
Delay_MS(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -181,7 +181,7 @@ void SetupHardware(void)
|
|||||||
|
|
||||||
/* Enable pull-up on the JTAG TDI pin so we can use it to select the mode */
|
/* Enable pull-up on the JTAG TDI pin so we can use it to select the mode */
|
||||||
PORTF |= (1 << 7);
|
PORTF |= (1 << 7);
|
||||||
_delay_ms(10);
|
Delay_MS(10);
|
||||||
|
|
||||||
/* Select the firmware mode based on the JTD pin's value */
|
/* Select the firmware mode based on the JTD pin's value */
|
||||||
CurrentFirmwareMode = (PINF & (1 << 7)) ? MODE_USART_BRIDGE : MODE_PDI_PROGRAMMER;
|
CurrentFirmwareMode = (PINF & (1 << 7)) ? MODE_USART_BRIDGE : MODE_PDI_PROGRAMMER;
|
||||||
|
Loading…
Reference in New Issue
Block a user