utils.c 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. //*****************************************************************************
  2. //
  3. // utils.c
  4. //
  5. // Utility APIs
  6. //
  7. // Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
  8. //
  9. //
  10. // Redistribution and use in source and binary forms, with or without
  11. // modification, are permitted provided that the following conditions
  12. // are met:
  13. //
  14. // Redistributions of source code must retain the above copyright
  15. // notice, this list of conditions and the following disclaimer.
  16. //
  17. // Redistributions in binary form must reproduce the above copyright
  18. // notice, this list of conditions and the following disclaimer in the
  19. // documentation and/or other materials provided with the
  20. // distribution.
  21. //
  22. // Neither the name of Texas Instruments Incorporated nor the names of
  23. // its contributors may be used to endorse or promote products derived
  24. // from this software without specific prior written permission.
  25. //
  26. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  27. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  28. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  29. // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  30. // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  31. // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  32. // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  33. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  34. // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  35. // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  36. // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  37. //
  38. //*****************************************************************************
  39. //*****************************************************************************
  40. //
  41. //! \addtogroup Utils_api
  42. //! @{
  43. //
  44. //*****************************************************************************
  45. #include "utils.h"
  46. //*****************************************************************************
  47. //
  48. //! Provides a small delay.
  49. //!
  50. //! \param ulCount is the number of delay loop iterations to perform.
  51. //!
  52. //! This function provides a means of generating a constant length delay. It
  53. //! is written in assembly to keep the delay consistent across tool chains,
  54. //! avoiding the need to tune the delay based on the tool chain in use.
  55. //!
  56. //! The loop takes 3 cycles/loop.
  57. //!
  58. //! \return None.
  59. //
  60. //*****************************************************************************
  61. #if defined(ewarm) || defined(DOXYGEN)
  62. void
  63. UtilsDelay(unsigned long ulCount)
  64. {
  65. __asm(" subs r0, #1\n"
  66. " bne.n UtilsDelay\n");
  67. }
  68. #endif
  69. #if defined(gcc)
  70. void __attribute__((naked))
  71. UtilsDelay(unsigned long ulCount)
  72. {
  73. __asm(" subs r0, #1\n"
  74. " bne UtilsDelay\n"
  75. " bx lr");
  76. }
  77. #endif
  78. //
  79. // For CCS implement this function in pure assembly. This prevents the TI
  80. // compiler from doing funny things with the optimizer.
  81. //
  82. #if defined(ccs)
  83. __asm(" .sect \".text:UtilsDelay\"\n"
  84. " .clink\n"
  85. " .thumbfunc UtilsDelay\n"
  86. " .thumb\n"
  87. " .global UtilsDelay\n"
  88. "UtilsDelay:\n"
  89. " subs r0, #1\n"
  90. " bne.n UtilsDelay\n"
  91. " bx lr\n");
  92. #endif
  93. //*****************************************************************************
  94. //
  95. // Close the Doxygen group.
  96. //! @}
  97. //
  98. //*****************************************************************************