In this way we're sure __delay() won't be inlined nor optimized by the
compiler and it can be used suitably as a simple spinning delay.
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@3391
38d2e660-2303-0410-9eaa-
f027e97ec537
/*
* Very small delay: each loop takes 3 cycles.
*/
/*
* Very small delay: each loop takes 3 cycles.
*/
-INLINE void __delay(unsigned long iterations)
+void NAKED __delay(unsigned long iterations)
+ register uint32_t __n asm("r0") = iterations;
+
- "1: subs %0, #1\n\t"
- " bne 1b\n\t"
- : "=r"(iterations) : : "memory", "cc");
+ "1: subs r0, #1\n\t"
+ "bne 1b\n\t"
+ "bx lr\n\t"
+ : : "r"(__n) : "memory", "cc");
}
unsigned long clock_get_rate(void)
}
unsigned long clock_get_rate(void)
HWREG(SYSCTL_RCC) = rcc;
HWREG(SYSCTL_RCC) = rcc2;
HWREG(SYSCTL_RCC) = rcc;
HWREG(SYSCTL_RCC) = rcc2;
/*
* Step #2: select the crystal value (XTAL) and oscillator source
* (OSCSRC), and clear the PWRDN bit in RCC/RCC2. Setting the XTAL
/*
* Step #2: select the crystal value (XTAL) and oscillator source
* (OSCSRC), and clear the PWRDN bit in RCC/RCC2. Setting the XTAL
/* Crystal frequency attached to the main oscillator. */
#define XTAL_FREQ SYSCTL_RCC_XTAL_8MHZ
/* Crystal frequency attached to the main oscillator. */
#define XTAL_FREQ SYSCTL_RCC_XTAL_8MHZ
+extern void __delay(unsigned long iterations);
+
unsigned long clock_get_rate(void);
void clock_set_rate(void);
unsigned long clock_get_rate(void);
void clock_set_rate(void);