CN / EN
CN / EN

提问

获得支持

您的项目私密技术问题如需获得一对一支持,请点击下方联系我们。

获取系统当前的tick滴答计数时间。 GR551x

已解决

137****com

2022-09-03 15:30

芯片:GR5515IGND

SDK:GR551x_SDK_V1.7.0


问题:如何读取系统运行的滴答计数值?比如程序自从上电运行开始,有没有一个定时器或者滴答计数器,以1ms的周期进行计数?

0收藏

0赞成

最佳答案

Ping

汇顶员工
2022-09-05 16:02

1. 如果是FreeRTOS系统,可以参考FreeROS.h文件定义的接口;

#define portTICK_RATE_MS portTICK_PERIOD_MS

2. 获取系统Tick,可以使用以下函数获取,并自行转换为ms,示例如下

#define APP_TIMER_TICKS_TO_US(x) ((x) * 1000000.0f / sys_lpclk_get())

#define APP_TIMER_GET_CURRENT_TICKS(x) hal_pwr_get_timer_current_value(PWR_TIMER_TYPE_SLP_TIMER, (x))

/**
 ****************************************************************************************
 * @brief  Get the current value of specified timer.
 * @note   Only available on GR5515_C and later versions.
 * @param[in]  timer_type: This parameter can be one of the following values:
 *         @arg @ref PWR_TIMER_TYPE_CAL_TIMER
 *         @arg @ref PWR_TIMER_TYPE_AON_WDT
 *         @arg @ref PWR_TIMER_TYPE_SLP_TIMER
 *         @arg @ref PWR_TIMER_TYPE_CAL_ALARM
 * @param[out] p_value: Pointer to an integer storing current value
 * @retval ::HAL_OK: Operation is OK.
 * @retval ::HAL_ERROR: Parameter error or operation not supported.
 * @retval ::HAL_BUSY: Driver is busy.
 * @retval ::HAL_TIMEOUT: Timeout occurred.
 ****************************************************************************************
 */
hal_status_t hal_pwr_get_timer_current_value(uint32_t timer_type, uint32_t *p_value);


0条评论

1赞成

0收藏

您的评论

Darren

2022-09-09 14:56

你好;

请问你的工程使用的是FreeRTOS系统还是裸机系统?

如果使用的是FreeRTOS系统,那么FreeRTOS有标准的API接口获取当前的tick数值:

TickType_t xTaskGetTickCount( void );TickType_t xTaskGetTickCountFromISR( void )

另外也可以基于RTC实现上述功能,但需要外部焊接32768晶振,并且需要初始化相应的模块,相关初始化可参考projects\peripheral_app\rtc,初始化完成后,可调用接口hal_pwr_get_timer_current_value(PWR_TIMER_TYPE_CAL_TIMER, (x)) 获取原始的RTC数据,然后换算成转换为ms

1条评论

1赞成

0收藏

您的评论

159***663

2022-09-09 14:22

#define HR_TIMER_GET_CURRENT_TICKS(x) hal_pwr_get_timer_current_value(PWR_TIMER_TYPE_SLP_TIMER, (x))


uint32_t RTC_GetCounter(void)

{

uint32_t ui32ALMLow = 0, ui32ALMUp = 0;

hal_status_t result = 0;

result = HR_TIMER_GET_CURRENT_TICKS(&ui32ALMLow);

APP_LOG_INFO("RTC_GetCounter:result=0xx,ui32ALMLow=%d",result,ui32ALMLow);

return ui32ALMLow;

}

RTC_GetCounter:result=0x00,ui32ALMLow=779


运行结果返回是 0 ,获取的值一直是 779 ,这个值一直没有变化!

这种调用方法是否对?

是否还需要调用别的接口?

1条评论

0赞成

0收藏

您的评论

登录后可回答问题,请 注册

我们时刻倾听您的声音
联系销售

扫描关注公众号

打开微信,使用“扫一扫”即可关注