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

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

谢谢提前

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

嗨wisilica,

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

由于MT_dialog

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

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

这些是细节,已经在代码中了:
/** \brief访问System Timer (SysTick)的结构类型。
*/
类型定义结构体

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

/* Memory mapping of Cortex-M0 Hardware */
#define SCS_BASE (0xE000E000UL) /*!<系统控制空间基地地址*/
#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */
#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */
#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */

#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无效
****************************************************************************************
*/
Void 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);//设置基于1MHz时钟的systick超时
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
离线
最后看到:1个月2天前
工作人员
加入:2015-06-08 34
你好,

你好,

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

由于MT_dialog

nzbackpackers
离线
最后看到:4年1个月前
加入:2015-05-15十七19
没错,这是个好主意

的确如此,这是一个指出睡眠问题的好主意。但是,我们没有使用sleep, systick的最大优点是它不会被中断中断作为硬件计数器。也许这对原始查询不合适。