钟表的滴答声

5个职位/ 0个新
最后发表
wisilica
离线
最后看到:1年4天前
加入:2015-03-17 08:16
钟表的滴答声

嗨,对话框中,
我需要在应用程序执行的任何时刻读取时钟滴答声。我的应用程序涉及到GAP角色切换,因此我从API获得的时钟时间lld_evt_time_get ()重置每次我发出GAPM_RESET_CMD.还有其他的来源来读取时钟滴答声吗?

谢谢提前

设备:
MT_dialog
离线
最后看到:4个月4天前
工作人员
加入:2015-06-08 34
嗨wisilica,

嗨wisilica,

不,没有其他寄存器保持计数,你正在读取的是主基本时间参考计数器,它在你重置堆栈后重置。

由于MT_dialog

nzbackpackers
离线
最后看到:4年4个月前
加入:2015-05-15十七19
ARM Cortex-M0: Systick, an

ARM Cortex-M0: Systick,一个递增的24位硬件计数器,假设它正在运行。如果您停止了Systick,只需重新启动它,尽管注意其他功能可能依赖于Systick,所以我强烈建议永远不要停止或更改当前的重新加载值。
有了这些知识,试试下面的方法:
# include“systick.h”
蜱现在= systick_value();

这些是细节,它们已经在代码中:
/** \brief结构类型访问系统计时器(SysTick)。
*/
类型定义结构体

__IO uint32_t CTRL;/*!< Offset: 0x000 (R/W) SysTick Control and Status Register */的偏移量
__IO uint32_t负载;/*!< Offset: 0x004 (R/W) SysTick Reload Value Register */的值
__IO uint32_t VAL;/*!< Offset: 0x008 (R/W) SysTick当前值寄存器*/
__I uint32_t CALIB;/*!< Offset: 0x00C (R/) SysTick校准寄存器*/
} SysTick_Type;

/* Cortex-M0硬件的内存映射*/
#define SCS_BASE (0xE000E000UL) /*!<系统控制空间基地地址*/
#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick基地地址*/
#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC基地地址*/
#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!<系统控制块基地地址*/

#define SCB ((SCB_Type *) SCB_BASE) /*!< SCB配置结构*/
#define SysTick ((SysTick_Type *) SysTick_BASE) /*!< SysTick配置结构体*/
#define NVIC ((NVIC_Type *) NVIC_BASE) /*!< NVIC配置结构体*/
除非你知道副作用,否则不要这样做:
SysTick - > VAL = 0;/*加载SysTick计数器值*/
/**
****************************************************************************************
* @brief用于读取定时器的当前值

* @param[在]无效

返回计时器的当前值
****************************************************************************************
*/
uint32_t systick_value(空白)

返回GetBits32 (&SysTick - > VAL SysTick_VAL_CURRENT_Msk);

如果Systick不运行…
/**
****************************************************************************************
* @brief启动SysTick定时器

* @param[in] usec倒计时持续时间
* @param[in] exception设置为TRUE,当计时器倒计时时产生一个异常
*到0,FALSE不到

* @return无效
****************************************************************************************
*/
无效systick_start(uint32_t usec, uint8_t exception)

SetBits32 (&SysTick - > CTRL SysTick_CTRL_ENABLE_Msk 0);/ /禁用systick
SetBits32 (&SysTick - >加载、SysTick_LOAD_RELOAD_Msk usec-1);//设置systick timeout based on 1MHz clock
SetBits32 (&SysTick - > VAL SysTick_VAL_CURRENT_Msk 0);//清除当前值寄存器和COUNTFLAG为0
SetBits32 (&SysTick - > CTRL, SysTick_CTRL_TICKINT_Msk除外);//生成或不生成SysTick异常
SetBits32 (&SysTick - > CTRL SysTick_CTRL_CLKSOURCE_Msk 0);//使用1 MHz的参考时钟频率
SetBits32 (&SysTick - > CTRL SysTick_CTRL_ENABLE_Msk 1);/ /启用systick

MT_dialog
离线
最后看到:4个月4天前
工作人员
加入:2015-06-08 34
你好,

你好,

如果设备处于睡眠模式,系统杆就不会运行,最终你将无法计算自己睡眠的时间。这只是ARM处理器提供的一个额外的计数器,你将无法获得设备的操作时间。

由于MT_dialog

nzbackpackers
离线
最后看到:4年4个月前
加入:2015-05-15十七19
确实如此,而且是个好主意

确实如此,这是一个指出睡眠问题的好主意。然而,我们不使用sleep,而系统棒的最大优势是它不会被作为硬件计数器的中断所中断。也许这不适用于最初的查询。