DSP281x_usDelay.asm
上传用户:qingfan3
上传日期:2014-10-27
资源大小:31439k
文件大小:2k
源码类别:

DSP编程

开发平台:

C/C++

  1. ;//###########################################################################
  2. ;//
  3. ;// FILE:  DSP281x_usDelay.asm
  4. ;//
  5. ;// TITLE: Simple delay function
  6. ;//
  7. ;// DESCRIPTION:
  8. ;//  
  9. ;// This is a simple delay function that can be used to insert a specified
  10. ;// delay into code.  
  11. ;// 
  12. ;// This function is only accurate if executed from internal zero-waitstate
  13. ;// SARAM. If it is executed from waitstate memory then the delay will be
  14. ;// longer then specified. 
  15. ;// 
  16. ;// To use this function:
  17. ;//
  18. ;//  1 - update the CPU clock speed in the DSP281x_Examples.h
  19. ;//    file. For example:
  20. ;//    #define CPU_CLOCK_SPEED 6.6667L // for a 150MHz CPU clock speed
  21. ;//
  22. ;//  2 - Call this function by using the DELAY_US(A) macro
  23. ;//    that is defined in the DSP28_Device.h file.  This macro
  24. ;//    will convert the number of microseconds specified
  25. ;//    into a loop count for use with this function.  
  26. ;//    This count will be based on the CPU frequency you specify.
  27. ;//
  28. ;//  3 - For the most accurate delay 
  29. ;//    - Execute this function in 0 waitstate RAM.  
  30. ;//    - Disable interrupts before calling the function
  31. ;//      If you do not disable interrupts, then think of
  32. ;//      this as an "at least" delay function as the actual
  33. ;//      delay may be longer. 
  34. ;//
  35. ;//  The C assembly call from the DELAY_US(time) macro will
  36. ;//  look as follows: 
  37. ;//
  38. ;//  extern void Delay(long LoopCount);                
  39. ;//
  40. ;//        MOV   AL,#LowLoopCount
  41. ;//        MOV   AH,#HighLoopCount
  42. ;//        LCR   _Delay
  43. ;//
  44. ;//  Or as follows (if count is less then 16-bits):
  45. ;//
  46. ;//        MOV   ACC,#LoopCount
  47. ;//        LCR   _Delay
  48. ;//
  49. ;//
  50. ;//###########################################################################
  51. ;//
  52. ;//  Ver | dd mmm yyyy | Who  | Description of changes
  53. ;// =====|=============|======|===============================================
  54. ;//  1.00| 11 Sep 2003 | L.H. | No changes since v.58
  55. ;//########################################################################### 
  56.        .def _DSP28x_usDelay
  57.        .sect "ramfuncs"
  58.         .global  __DSP28x_usDelay
  59. _DSP28x_usDelay:
  60.         SUB    ACC,#1
  61.         BF     _DSP28x_usDelay,GEQ    ;; Loop if ACC >= 0
  62.         LRETR 
  63. ;There is a 9/10 cycle overhead and each loop
  64. ;takes five cycles. The LoopCount is given by
  65. ;the following formula:
  66. ;  DELAY_CPU_CYCLES = 9 + 5*LoopCount
  67. ; LoopCount = (DELAY_CPU_CYCLES - 9) / 5
  68. ; The macro DELAY_US(A) performs this calculation for you
  69. ;==================================================