Procházet zdrojové kódy

optimized delayNanoseconds

shifting both sides by 16 bit gives pretty good accuracy with fast code:
        movw    r3, #9155
        ldr     r2, .L2
        mul     r0, r3, r0
        lsrs    r0, r0, #1
        umull   r3, r0, r2, r0
        lsrs    r0, r0, #8
.L2:
        .word   144122641

with 984 MHz it allows nsec to be max ~143000  max which is plenty
teensy4-core
Frank před 6 roky
rodič
revize
3605d91f39
Žádný účet není propojen s e-mailovou adresou tvůrce revize
1 změnil soubory, kde provedl 1 přidání a 1 odebrání
  1. +1
    -1
      teensy4/core_pins.h

+ 1
- 1
teensy4/core_pins.h Zobrazit soubor

@@ -758,7 +758,7 @@ static inline void delayNanoseconds(uint32_t) __attribute__((always_inline, unus
static inline void delayNanoseconds(uint32_t nsec)
{
uint32_t begin = ARM_DWT_CYCCNT;
uint32_t cycles = ((uint64_t)F_CPU_ACTUAL * nsec) / 1000000000UL;
uint32_t cycles = ((F_CPU_ACTUAL>>16) * nsec) / (1000000000UL>>16);
while (ARM_DWT_CYCCNT - begin < cycles) ; // wait
}


Načítá se…
Zrušit
Uložit