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-03-29
Revision:
31:7c684e49fa8f
Parent:
30:fdd7a0f82f2f
Child:
40:590791ecac1c

File content as of revision 31:7c684e49fa8f:

#define PROC_CLOCK_MHZ 24 // 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)
 
#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)
#ifdef TOOLCHAIN_GCC_ARM
.thumb_func
  .global ow_usdelay
ow_usdelay:
#else // TOOLCHAIN_IAR or TOOLCHAIN_ARM_STD
  EXPORT ow_usdelay
ow_usdelay
#endif
  mov R1, #LOOPS_PER_US
  mul R0, R0, R1
  sub R0, R0, #LOOPS_REMOVED_TUNING
#ifdef TOOLCHAIN_GCC_ARM
loop:
#else // TOOLCHAIN_IAR or TOOLCHAIN_ARM_STD
loop
#endif
  subs R0, R0, #1
  bne loop
  bx R14
  
#ifdef TOOLCHAIN_GCC_ARM
  .end
#else // TOOLCHAIN_IAR or TOOLCHAIN_ARM_STD
  END
#endif