Browse Source

No need for _sync using CycCnt on each systick

teensy4-core
Defragster 5 years ago
parent
commit
5ee1d187e3
No account linked to committer's email address
1 changed files with 2 additions and 12 deletions
  1. +2
    -12
      teensy4/startup.c

+ 2
- 12
teensy4/startup.c View File

@@ -112,27 +112,17 @@ void ResetHandler(void)
#define SYSTICK_EXT_FREQ 100000

extern volatile uint32_t systick_cycle_count;
#define MAGIC_VAL 5 // empiric start value syncs signif. digits to millis()
static void systick_isr_sync(void)
{
// 1st[0] tick is sync baseline CycCnt for micros()
if ( 0 == systick_millis_count )
systick_cycle_count = ARM_DWT_CYCCNT - MAGIC_VAL*F_CPU_ACTUAL/1000;
else
_VectorsRam[15] = systick_isr; // use CORE _isr
systick_millis_count++;
}
static void configure_systick(void)
{
_VectorsRam[14] = pendablesrvreq_isr;
_VectorsRam[15] = systick_isr_sync; // Wait for CycleCounter to sync
_VectorsRam[15] = systick_isr; // Wait for CycleCounter to sync
SYST_RVR = (SYSTICK_EXT_FREQ / 1000) - 1;
SYST_CVR = 0;
SYST_CSR = SYST_CSR_TICKINT | SYST_CSR_ENABLE;
SCB_SHPR3 = 0x20000000; // Systick = priority 32
ARM_DEMCR |= ARM_DEMCR_TRCENA;
ARM_DWT_CTRL |= ARM_DWT_CTRL_CYCCNTENA; // turn on cycle counter
systick_cycle_count = ARM_DWT_CYCCNT; // was 0, must sync w/_isr
systick_cycle_count = ARM_DWT_CYCCNT; // compiled 0, corrected w/1st systick
}



Loading…
Cancel
Save