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

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

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

定时器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;// make timer0 on counter = high + low
timer0_set (time0on PWM_HIGH PWM_HIGH);

timer0_start ();

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

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代码:

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

CPU的运行顺序如下:
1 .加载定时器0 ON计数器寄存器的地址到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周8小时前
加入:2017-07-19并表达
数据表显示定时器0

数据表显示,Timer 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小时54分钟前
工作人员
加入:2018-02-08 11:03
嗨bemoon,

嗨bemoon,

是的,你说得对。根据ARM Cortex M0指令集,当REGISTER_RDATA (Verilog参数)设置为0时,可以减少APB访问的延迟。这导致从APB slave的读数据(PRDATA)直接输出到AHB读数据输出(HRDATA),减少了等待状态和门计数。默认情况下,REGISTER_RDATA参数设置为1,包括一个注册阶段。因此,当REGISTER_RDATA为1时,您将有3个HCLK循环,当REGISTER_RDATA为0时,您将有2个HCLK循环

谢谢,PM_Dialog

bemoon
离线
最后看到:1周8小时前
加入:2017-07-19并表达
感谢您的回复。

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

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

嗨bemoon,

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

谢谢,PM_Dialog