1 // Copyright (c) 2010, Atmel Corporation. 2 // All rights reserved. 3 // 4 // Redistribution and use in source and binary forms, with or without 5 // modification, are permitted provided that the following conditions are met: 6 // * Redistributions of source code must retain the above copyright 7 // notice, this list of conditions and the following disclaimer. 8 // * Redistributions in binary form must reproduce the above copyright 9 // notice, this list of conditions and the following disclaimer in the 10 // documentation and/or other materials provided with the distribution. 11 // * Neither the name of Atmel nor the 12 // names of its contributors may be used to endorse or promote products 13 // derived from this software without specific prior written permission. 14 // 15 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 16 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY 19 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 26 #include <stdint.h> 27 #include "SHA_TimeUtils.h" 28 29 30 // The values below are valid for an AVR 8-bit processor running at 16 MHz. 31 // Code is compiled with -O1. 32 33 //!< Offsets time needed to prepare microseconds loop. 34 #define SHA_TIME_OFFSET_US (7) 35 36 //!< Fill a while loop with these CPU instructions to achieve 1 us per iteration. 37 #define SHA_TIME_LOOP_FILLER asm volatile ("nop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop") 38 39 40 extern void SA_Delay(uint32_t delay); 41 42 43 44 45 46 47 /** \brief Delays for a certain amount of time. 48 * 49 * \param[in] delay Delay for this number of microseconds (us). 50 */ 51 void SHAP_Delay(uint32_t delay) { 52 if (delay <= SHA_TIME_OFFSET_US) 53 // We spent already this much time entering this function. 54 // With other words: A value <= SHA_TIME_OFFSET_US will not produce the desired delay. 55 return; 56 57 delay -= SHA_TIME_OFFSET_US; 58 59 60 SA_Delay(delay); 61 62 return; 63 } 64 65 66 void loop_delay(int8_t multp) { 67 int i, base = 2000000 *multp; 68 for(i=0;i<base;i++) { 69 double value = 10.0; //((i * 33.3) - 12.1) / 10.0; 70 value += 1.0; 71 } 72 } 73