关于Timer0 ON计数器和指令周期的问题

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
5个职位/ 0个新职位
最后发表
bemoon
离线
最后看到:1个月1个星期前
加入:2017-07-19并表达
关于Timer0 ON计数器和指令周期的问题

这就跟你问声好!
为了验证Timer0的工作机制,我设计了一个DA14580的Timer0 ON计数器的测试。

定时器0的初始化是:

#定义PWM_HIGH 7

set_tmr_enable (CLK_PER_REG_TMR_ENABLED);
set_tmr_div (CLK_PER_REG_TMR_DIV_1);
timer0_init (TIM0_CLK_FAST PWM_MODE_ONE TIM0_CLK_NO_DIV);

time0on = ((PWM_HIGH+1) * 2)*1 -1;//在计数器上使timer0 =高+低
timer0_set (time0on PWM_HIGH PWM_HIGH);

timer0_start ();

我得到一个1Mhz的PWM0和PWM1和一个1Mhz的计数器中断请求。

On计数器测试是:

注册uint16 i, j, k;
i = *(volatile uint16*)(TIMER0_ON_REG);
j = *(volatile uint16*)(TIMER0_ON_REG);
k = *(volatile uint16*)(TIMER0_ON_REG);

i,j,k在获得TIMER0_ON_REG值后通过UART输出。
然后我得到了结果:
我= 0003
j = 0000
k = 000 d

Keil给出了上述代码段的ASM代码:

155: i = *(volatile uint16*)(TIMER0_ON_REG);
0x20000BCC 4826 LDR r0,[pc,#152];@0x20000C68
0x20000BCE 8845 LDRH r5,[r0,#0x02]
j = *(volatile uint16*)(TIMER0_ON_REG);
0x20000BD0 8846 LDRH r6,[r0,#0x02]
57: k = *(volatile uint16*)(TIMER0_ON_REG);
158:
159:
0x20000BD2 8847 LDRH r7,[r0,#0x02]

CPU的运行顺序如下:
1 .load Timer0 ON Counter Register's Address to R0
2.将Timer0 ON计数器值加载到R5 (i);
3.将Timer0 ON计数器值加载到R6 (j);
4.将Timer0 ON计数器值加载到R7 (k);

根据ARM Cortex-M0指令总结,LDRH需要2个时钟周期。
我的问题是,如果R5(i)得到' 0003',在2个时钟周期后,R6(j)应该得到'0001',同样的原因,R7(k)喊得到'000F'。
测试设计有问题吗?或者对Timer0有什么误解吗?

我附上了整个计划。请验证一下。谢谢!

设备:
bemoon
离线
最后看到:1个月1个星期前
加入:2017-07-19并表达
数据表显示计时器0

数据表显示定时器0连接到APB总线,并通过APB桥与AHB总线通信。
ARM Cortex M文档显示:
对于HCLK等于PCLK的系统,如果没有APB从站的错误响应,则每个RW的最小周期数为:
当REGISTER_RDATA为1时,三个HCLK周期。
当REGISTER_RDATA为0时,两个HCLK周期。

因此,TIMER0_ON_REG上的LDRH指令需要3个时钟周期。
我说的对吗?

PM_Dialog
离线
最后看到:2天3小时前
工作人员
加入:2018-02-08 11:03
嗨bemoon,

嗨bemoon,

是的,你说得对。根据ARM Cortex M0指令集,当REGISTER_RDATA (Verilog参数)设置为0时,APB访问的延迟会降低。这导致从APB奴隶的读取数据,PRDATA,直接输出到AHB读取数据输出,HRDATA,并减少等待状态,除了门计数。默认情况下,REGISTER_RDATA参数设置为1,以包含注册阶段。因此,当REGISTER_RDATA为1时,你将有3个HCLK周期,当REGISTER_RDATA为0时,你将有2个HCLK周期

谢谢,PM_Dialog

bemoon
离线
最后看到:1个月1个星期前
加入:2017-07-19并表达
谢谢你的回复。

谢谢你的回复。
REGISTER_RDATA是一个Verilog参数,这意味着它影响了该IC的RTL设计,终端用户没有机会更改它。
因此DA14580必须花费至少3 HCLK才能访问APB总线设备。
这是对的吗?
再次感谢!

PM_Dialog
离线
最后看到:2天3小时前
工作人员
加入:2018-02-08 11:03
嗨bemoon,

嗨bemoon,

如果REGISTER_RDATA为1,则需要至少3个HCLK才能访问APB总线设备。

谢谢,PM_Dialog