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