1 /* 2 * Copyright 2024 NXP 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 */ 7 8 #include "fsl_common.h" 9 10 /* Component ID definition, used by tools. */ 11 #ifndef FSL_COMPONENT_ID 12 #define FSL_COMPONENT_ID "platform.drivers.common_riscv" 13 #endif 14 DelayLoop(uint32_t count)15static void DelayLoop(uint32_t count) 16 { 17 __ASM volatile( 18 " mv a0, %0 \n" 19 "loop%=: \n" 20 " addi a0, a0, -1 \n" 21 " bgtz a0, loop%= \n" 22 : 23 : "r"(count) 24 :); 25 } 26 SDK_DelayAtLeastUs(uint32_t delayTime_us,uint32_t coreClock_Hz)27void SDK_DelayAtLeastUs(uint32_t delayTime_us, uint32_t coreClock_Hz) 28 { 29 uint64_t count; 30 31 if (delayTime_us > 0U) 32 { 33 count = USEC_TO_COUNT(delayTime_us, coreClock_Hz); 34 35 assert(count <= UINT32_MAX); 36 37 /* 38 * Add is 1 cycle. 39 * Branch is 2 cycle. 40 */ 41 count = count / 3U; 42 43 DelayLoop((uint32_t)count); 44 } 45 } 46