5个帖子/ 0新
最后一篇
Wisilica.
离线
最后一次露面:11个月3周前
加入:2015-03-17 08:16
时钟蜱虫

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

提前致谢

设备:
mt_dialog.
离线
最后一次露面:3个月3周前
职员
加入:2015-06-08 11:34
嗨Wisilica,

嗨Wisilica,

不,没有其他寄存器,保持计数,您正在读取的一个是重置堆栈后重置的主要基础时间参考计数器。

谢谢mt_dialog.

nzbackpackers.
离线
最后一次露面:4年3个月前
加入:2015-05-15 17:19
ARM Cortex-M0:Systick,AN

ARM Cortex-M0:Systick,假设它正在运行的递增24位硬件计数器。如果您停止了Systick,请再次启动它虽然要注意其他功能可能取决于Systick,所以我强烈建议永远不会停止或确实更改当前的重新加载值。
携带这种知识,试试以下内容:
#include“systick.h”
蜱虫= systick_value();

这些是详细信息,这些详细信息已在代码中:
/ ** \简短的结构类型访问系统计时器(Systick)。
* /
typedef struct.
{
__IO UINT32_T CTRL;/ *!<偏移:0x000(R / W)Systick控制和状态寄存器* /
__IO UINT32_T负载;/ *!<偏移:0x004(R / W)Systick重载值寄存器* /
__IO UINT32_T VAL;/ *!<偏移:0x008(R / W)Systick电流值寄存器* /
__i uint32_t calib;/ *!<偏移:0x00c(r /)systick校准寄存器* /
} systick_type;

/ * Cortex-M0硬件的内存映射* /
#define scs_base(0xe000e000ul)/ *!<系统控制空间基数地址* /
#define systick_base(scs_base + 0x0010ul)/ *!#define nvic_base(scs_base + 0x0100ul)/ *!#define scb_base(scs_base + 0x0d00ul)/ *!<系统控制块基地地址* /

#define scb((scb_type *)scb_base)/ *!#define systick((systick_type *)systick_base)/ *!#define nvic((nvic_type *)nvic_base)/ *!除非你知道副作用,否则不要这样做:
systick-> val = 0;/ *加载Systick计数器值* /
/ **
****************************************************************************************
* @brief函数读取计时器的当前值
*
* @param [in] void
*
* @return计时器的当前值
****************************************************************************************
* /
Uint32_t systick_value(void)
{
返回getbits32(&systick-> val,systick_val_current_msk);
}

如果systick没有运行..
/ **
****************************************************************************************
* @brief函数启动systick计时器
*
* @param [in] usec倒计时的持续时间
* @param [in]异常设置为true以在计时器倒计时生成异常
*到0,假不为
*
* @return void.
****************************************************************************************
* /
void systick_start(uint32_t usec,uint8_t例外)
{
setbits32(&systick-> ctrl,systick_ctrl_enable_msk,0);//禁用Systick.
setbits32(&systick-> load,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.
离线
最后一次露面:3个月3周前
职员
加入:2015-06-08 11:34
你好,

你好,

如果设备处于睡眠模式,则不会运行Systick,最终您将无法计算您睡觉的时间。它只是由ARM处理器提供的额外计数器,您将无法获得设备的运行时间。

谢谢mt_dialog.

nzbackpackers.
离线
最后一次露面:4年3个月前
加入:2015-05-15 17:19
非常好,还有一个好主意

相当如此,有一个好主意指出睡眠问题。然而,我们不使用睡眠,并且Systick的巨大优势是它不会被中断是硬件柜台的中断。也许这不适合原始查询。