Maxim Integrated / OneWire

Dependents:   MAXREFDES131_Qt_Demo MAX32630FTHR_iButton_uSD_Logger MAX32630FTHR_DS18B20_uSD_Logger MAXREFDES130_131_Demo ... more

OneWire_Masters/GPIO/owlink.s

Committer:
IanBenzMaxim
Date:
2016-04-06
Revision:
46:afe466c96069
Parent:
40:590791ecac1c
Child:
52:4cba20c21941

File content as of revision 46:afe466c96069:

#define PROC_CLOCK_MHZ (__SYSTEM_HFX / 1000000) // Processor clock in MHz
#define OVERHEAD_TUNING 21 // Fraction where OverheadTime(us) = OVERHEAD_TUNING / PROC_CLOCK_MHZ
// Make PROC_CLOCK_MHZ and OVERHEAD_TUNING divisible by PROC_CYCLES_PER_LOOP for best results

#define PIPELINE_REFILL_PROC_CYCLES 1 // ARM specifies 1-3 cycles for pipeline refill following a branch
#define PROC_CYCLES_PER_LOOP (2 + PIPELINE_REFILL_PROC_CYCLES)
#define LOOPS_PER_US (PROC_CLOCK_MHZ / PROC_CYCLES_PER_LOOP) // Number of loop passes for a 1 us delay
#define LOOPS_REMOVED_TUNING (OVERHEAD_TUNING / PROC_CYCLES_PER_LOOP)

// LABEL macro
#ifdef TOOLCHAIN_GCC_ARM
#define LABEL(x) x:
#else // TOOLCHAIN_IAR or TOOLCHAIN_ARM_STD
#define LABEL(x) x
#endif

// EXPORT_LABEL macro
#ifdef TOOLCHAIN_GCC_ARM
#define EXPORT_LABEL(x) .global x
#else // TOOLCHAIN_IAR or TOOLCHAIN_ARM_STD
#define EXPORT_LABEL(x) EXPORT x
#endif

// THUMB_FUNC macro
#ifdef TOOLCHAIN_GCC_ARM
#define THUMB_FUNC .thumb_func
#else // TOOLCHAIN_IAR or TOOLCHAIN_ARM_STD
#define THUMB_FUNC
#endif
 
#if defined TOOLCHAIN_IAR 
  SECTION owlink : CODE
#elif defined TOOLCHAIN_ARM_STD
  AREA owlink, CODE
#else // TOOLCHAIN_GCC_ARM
  .syntax unified
  .section .text
#endif

// void ow_usdelay(unsigned int time_us)
  THUMB_FUNC
  EXPORT_LABEL(ow_usdelay)
LABEL(ow_usdelay)
  cmp R0, #0 // Return if time_us equals zero
  beq return
  mov R1, #LOOPS_PER_US
  mul R0, R0, R1
  sub R0, R0, #LOOPS_REMOVED_TUNING
LABEL(loop)
  subs R0, R0, #1
  bne loop
LABEL(return)
  bx R14
  
#ifdef TOOLCHAIN_GCC_ARM
  .end
#else // TOOLCHAIN_IAR or TOOLCHAIN_ARM_STD
  END
#endif