123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- ;//###########################################################################
- ;//
- ;// FILE: F2837xD_usDelay.asm
- ;//
- ;// TITLE: Simple delay function
- ;//
- ;// DESCRIPTION:
- ;// This is a simple delay function that can be used to insert a specified
- ;// delay into code.
- ;// This function is only accurate if executed from internal zero-waitstate
- ;// SARAM. If it is executed from waitstate memory then the delay will be
- ;// longer then specified.
- ;// To use this function:
- ;// 1 - update the CPU clock speed in the F2837xD_Examples.h
- ;// file. For example:
- ;// #define CPU_RATE 6.667L // for a 150MHz CPU clock speed
- ;// 2 - Call this function by using the DELAY_US(A) macro
- ;// that is defined in the F2837xD_Device.h file. This macro
- ;// will convert the number of microseconds specified
- ;// into a loop count for use with this function.
- ;// This count will be based on the CPU frequency you specify.
- ;// 3 - For the most accurate delay
- ;// - Execute this function in 0 waitstate RAM.
- ;// - Disable interrupts before calling the function
- ;// If you do not disable interrupts, then think of
- ;// this as an "at least" delay function as the actual
- ;// delay may be longer.
- ;// The C assembly call from the DELAY_US(time) macro will
- ;// look as follows:
- ;// extern void Delay(long LoopCount);
- ;// MOV AL,#LowLoopCount
- ;// MOV AH,#HighLoopCount
- ;// LCR _Delay
- ;// Or as follows (if count is less then 16-bits):
- ;// MOV ACC,#LoopCount
- ;// LCR _Delay
- ;//
- ;//###########################################################################
- ;// $TI Release: F2837xD Support Library v3.05.00.00 $
- ;// $Release Date: Tue Jun 26 03:15:23 CDT 2018 $
- ;// $Copyright:
- ;// Copyright (C) 2013-2018 Texas Instruments Incorporated - http://www.ti.com/
- ;//
- ;// Redistribution and use in source and binary forms, with or without
- ;// modification, are permitted provided that the following conditions
- ;// are met:
- ;//
- ;// Redistributions of source code must retain the above copyright
- ;// notice, this list of conditions and the following disclaimer.
- ;//
- ;// Redistributions in binary form must reproduce the above copyright
- ;// notice, this list of conditions and the following disclaimer in the
- ;// documentation and/or other materials provided with the
- ;// distribution.
- ;//
- ;// Neither the name of Texas Instruments Incorporated nor the names of
- ;// its contributors may be used to endorse or promote products derived
- ;// from this software without specific prior written permission.
- ;//
- ;// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- ;// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- ;// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- ;// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- ;// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- ;// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- ;// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- ;// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- ;// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- ;// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- ;// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- ;// $
- ;//###########################################################################
- .def _F28x_usDelay
- .cdecls LIST ;;Used to populate __TI_COMPILER_VERSION__ macro
- %{
- %}
- .if __TI_COMPILER_VERSION__
- .if __TI_COMPILER_VERSION__ >= 15009000
- .sect ".TI.ramfunc" ;;Used with compiler v15.9.0 and newer
- .else
- .sect "ramfuncs" ;;Used with compilers older than v15.9.0
- .endif
- .endif
- .global __F28x_usDelay
- _F28x_usDelay:
- SUB ACC,#1
- BF _F28x_usDelay,GEQ ;; Loop if ACC >= 0
- LRETR
- ;There is a 9/10 cycle overhead and each loop
- ;takes five cycles. The LoopCount is given by
- ;the following formula:
- ; DELAY_CPU_CYCLES = 9 + 5*LoopCount
- ; LoopCount = (DELAY_CPU_CYCLES - 9) / 5
- ; The macro DELAY_US(A) performs this calculation for you
- ;
- ;
- ;//
- ;// End of file
- ;//
|