1 /** 2 * @file hi_time.h 3 * 4 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 * Description: time APIs.CNcomment:时间接口描述CNend 18 * @li System time of the hi_get_tick, hi_get_tick64, hi_get_milli_seconds, and hi_get_seconds operations. The system 19 * time is calculated starting from kernel startup and cannot be modified through APIs. 20 CNcomment:hi_get_tick, hi_get_tick64,hi_get_milli_seconds, hi_get_seconds操作的系统时间, 21 系统时间从kernel启动开始计时,不可以通过接口进行修改。CNend 22 * @li The hi_get_real_time and hi_set_real_time APIs are about real-time operations. The real time is calculated 23 * starting from kernel startup and can be modified by hi_set_real_time.CNcomment:hi_get_real_time, 24 hi_set_real_time操作的是实时时间,实时时间从kernel启动开始计时,可以通过hi_set_real_time进行修改。CNend \n 25 * Author: Hisilicon \n 26 * Create: 2019-05-29 27 */ 28 29 /** 30 * @defgroup iot_time System Clock 31 * @ingroup osa 32 */ 33 #ifndef __HI_TIME_H__ 34 #define __HI_TIME_H__ 35 #include <hi_types_base.h> 36 37 /** 38 * @ingroup iot_time 39 * @brief Delay, in microseconds.CNcomment:延时,微秒级。CNend 40 * 41 * @par 描述: 42 * Delay operation implemented by software based on the system clock, blocking the CPU. 43 CNcomment:延时操作,阻塞CPU。CNend 44 * 45 * @attention This API cannot be used for a long time in an interrupt.CNcomment:不允许中断中使用。CNend 46 * 47 * @param us [IN] type #hi_u32,delay period (unit: microsecond). 48 CNcomment:延时时间(单位:μs)。CNend 49 * 50 * @retval None 51 * @par 依赖: 52 * @li hi_time.h:Describes system time APIs.CNcomment:文件包含系统时间相关接口。CNend 53 * @see None 54 */ 55 hi_void hi_udelay(hi_u32 us); 56 57 /** 58 * @ingroup iot_time 59 * @brief Obtains the tick value of the system (32-bit).CNcomment:获取系统tick值(32bit)。CNend 60 * 61 * @par 描述: 62 * Obtains the tick value of the system (32-bit).CNcomment:获取系统tick值(32bit)。CNend 63 * 64 * @attention None 65 * @param None 66 * 67 * @retval #hi_u32 Tick value of the system.CNcomment:系统tick值。CNend 68 * @par 依赖: 69 * @li hi_time.h:Describes system time APIs.CNcomment:文件包含系统时间相关接口。CNend 70 */ 71 hi_u32 hi_get_tick(hi_void); 72 73 /** 74 * @ingroup iot_time 75 * @brief Obtains the tick value of the system (64-bit).CNcomment:获取系统tick值(64bit)。CNend 76 * 77 * @par 描述: 78 * Obtains the tick value of the system (64-bit).CNcomment:获取系统tick值(64bit)。CNend 79 * 80 * @attention The hi_mdm_time.h file must be included where the API is called. Otherwise, the API is considered not 81 * declared, and the tick value is returned as an int type, resulting in a truncation error. 82 CNcomment:该接口调用处必须包含头文件hi_time.h,否则按照未声明接口处理,会将tick值当做int类型返回,产生截断错误。CNend 83 * @param None 84 * 85 * @retval #hi_u64 Tick value of the system.CNcomment:系统tick值。CNend 86 * @par 依赖: 87 * @li hi_time.h:Describes system time APIs.CNcomment:文件包含系统时间相关接口。CNend 88 */ 89 hi_u64 hi_get_tick64(hi_void); 90 91 /** 92 * @ingroup iot_time 93 * @brief Obtains the system time (unit: ms).CNcomment:获取系统时间(单位:ms)。CNend 94 * 95 * @par 描述: 96 * Obtains the system time (unit: ms).CNcomment:获取系统时间(单位:ms)。CNend 97 * 98 * @attention None 99 * @param None 100 * 101 * @retval #hi_u32 System time.CNcomment:系统时间。CNend 102 * @par 依赖: 103 * @li hi_time.h:Describes system time APIs.CNcomment:文件包含系统时间相关接口。CNend 104 */ 105 hi_u32 hi_get_milli_seconds(hi_void); 106 107 /** 108 * @ingroup iot_time 109 * @brief Obtains the system time (unit: s).CNcomment:获取系统时间(单位:s)。CNend 110 * 111 * @par 描述: 112 * Obtains the system time (unit: s).CNcomment:获取系统时间(单位:s)。CNend 113 * 114 * @attention None 115 * @param None 116 * 117 * @retval #hi_u32 System time.CNcomment:系统时间。CNend 118 * @retval #HI_ERR_FAILURE failed to be obtained. CNcomment:获取时间失败。CNend 119 * @par 依赖: 120 * @li hi_time.h:Describes system time APIs.CNcomment:文件包含系统时间相关接口。CNend 121 */ 122 hi_u32 hi_get_seconds(hi_void); 123 124 /** 125 * @ingroup iot_time 126 * @brief Obtains the system time (unit: us).CNcomment:获取系统时间(单位:us)。CNend 127 * 128 * @par 描述: 129 * Obtains the system time (unit: us).CNcomment:获取系统时间(单位:us)。CNend 130 * 131 * @attention None 132 * @param None 133 * 134 * @retval #hi_u64 System time.CNcomment:系统时间。CNend 135 * @retval #HI_ERR_FAILURE failed to be obtained. CNcomment:获取时间失败。CNend 136 * @par 依赖: 137 * @li hi_time.h:Describes system time APIs.CNcomment:文件包含系统时间相关接口。CNend 138 */ 139 hi_u64 hi_get_us(hi_void); 140 141 /** 142 * @ingroup iot_time 143 * @brief Obtains the real time of the system (unit: s).CNcomment:获取系统实时时间(单位:s)。CNend 144 * 145 * @par 描述: 146 * Obtains the real time of the system (unit: s).CNcomment:获取系统实时时间(单位:s)。CNend 147 * 148 * @attention None 149 * @param None 150 * 151 * @retval #hi_u32 Real time of the system.CNcomment: 系统实时时间。CNend 152 * @retval #HI_ERR_FAILURE failed to be obtained. CNcomment:获取时间失败。CNend 153 * @par 依赖: 154 * @li hi_time.h:Describes system time APIs.CNcomment:文件包含系统时间相关接口。CNend 155 */ 156 hi_u32 hi_get_real_time(hi_void); 157 158 /** 159 * @ingroup iot_time 160 * @brief Sets the real time of the system.CNcomment:设置系统实时时间。CNend 161 * 162 * @par 描述: 163 * Sets the real time of the system.CNcomment:设置系统实时时间。CNend 164 * 165 * @attention None 166 * @param seconds [IN] type #hi_u32,set the real time of the system to this value. 167 CNcomment:将系统实时时间设置为该值。CNend 168 * 169 * @retval #HI_ERR_SUCCESS Success. 170 * @retval #HI_ERR_FAILURE Failure. 171 * @par 依赖: 172 * @li hi_time.h:Describes system time APIs.CNcomment:文件包含系统时间相关接口。CNend 173 */ 174 hi_u32 hi_set_real_time(hi_u32 seconds); 175 176 extern hi_void_callback g_tick_callback; 177 178 /** 179 * @ingroup iot_time 180 * @brief Regiseter system tick callback.CNcomment:注册tick 中断响应回调函数。CNend 181 * 182 * @par 描述: 183 * Regiseter system tick callback, if callback is NULL, means cancel registration. 184 CNcomment:注册tick中断回调函数,如果回调函数为空,表示取消注册。CNend 185 * 186 * @attention 187 * @li cb should not excute in FLASH, must excute in RAM or ROM. u can specify BSP_RAM_TEXT_SECTION before func 188 to set func excute in RAM. 189 CNcomment:回调函数不能在FLASH中运行,必须放置在RAM或ROM中,可以通过在 190 函数名前添加BSP_RAM_TEXT_SECTION 冠头指定函数在RAM中运行。CNend 191 * @param cb [IN] type #hi_void_callback, callback in tick interrupt.CNcomment:tick中断的回调函数。CNend 192 * 193 * @retval #None 194 * @par 依赖: 195 * @li hi_time.h:Describes system time APIs.CNcomment:文件包含系统时间相关接口。CNend 196 */ 197 hi_void hi_tick_register_callback(hi_void_callback cb); 198 199 /** 200 * @ingroup iot_time 201 * @brief Convert milliseconds to ticks CNcomment:将毫秒转换为ticks。CNend 202 * 203 * @par 描述: 204 * Convert milliseconds to ticks,ms is greater than 10ms, ticks = ms / 10, 205 * otherwise see parameter include0 description. 206 CNcomment: 将milliseconds换算为ticks,ms大于10ms,ticks=ms/10。CNend 207 * 208 * @attention None 209 * @param ms [IN] type #hi_u32, milliseconds. 210 * @param include0 [IN] type #hi_bool, ms is 0, if include0 is HI_TRUE, return 0 tick,otherwise return 1 tick. 211 CNcomment:入参ms为0时,如果include0为HI_TRUE,换算结果为0;否则换算结果为1。CNend 212 * 213 * @retval #hi_u32 ticks time.CNcomment:ticks时间数 CNend 214 * @par 依赖: 215 * @li hi_time.h:Describes system time APIs.CNcomment:文件包含系统时间相关接口。CNend 216 */ 217 hi_u32 hi_ms2systick (hi_u32 ms, hi_bool include0); 218 219 #endif 220