问一个比较小白的问题,AN335x里面一些接口时钟参数,如GPIO、GPMC等默认的时钟是多少?请注明手册的页码
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
问一个比较小白的问题,AN335x里面一些接口时钟参数,如GPIO、GPMC等默认的时钟是多少?请注明手册的页码
这个接口的时钟参数,不是一成不变的,是可以配置的,所以要看你使用的系统配置。
如果你是想知道当前系统某些模块使用的时钟频率,还是需要你清楚模块时钟怎么配的:
1. 一般每个模块的章节都会有一个描述clock信号源以及最大频率的介绍。以GPMC为例,在TRM 7.1.2.2章节,这里可以知道模块时钟源用的是哪个。然后后面寄存器章节部分,一般有一个设置分频的地方,比如GPMC_CONFIG1_0的bit【1-0】,时钟源除以这个分频值就知道当前使用的clock频率了。如果不是简单分频的话,一般在当前章的clock小节中,会有比较详细的描述。(TRM:http://www.ti.com/lit/ug/spruh73k/spruh73k.pdf)
2. 关于时钟源的部分,在PRCM部分描述的很详细了。一般时钟源是固定的,具体的,你看TRM 8.1.6.6 ~8.1.6.10,每一节都有一张表。
所以还是建议你先理解一下最终时钟是怎么算出来的,而不是简单的要别人告诉你一个数值,这样,后面在改配置的时候才能得心应手。
谢谢你详细的回答,在AM335x_starterware里面有一些简单的delay函数,这些delay依靠的时钟是谁,是内部的A8,还是其他的?
我推测应该使用的是Timer吧,AM335x上有8个可用的Timer。
追一下代码看看那个delay的函数是怎么实现的。
delay(int count){
while(count--);
}
例子里面是delay(5000000)去控制led,用肉眼去看有4、5秒钟左右,我现在不知道什么时钟去数的这个延迟。
希望能解开这个困惑,虽然精确计时还是会用Timer的
这个就是个空循环,是通过指令周期进行一个时延。不是精准的计时方式。只是为了加一个时延而已。
如果是用Linux,可以直接调用driver层的各种时延函数来实现。
如果你用的CPU当前工作在1G主频的话,一条指令周期理论上是1ns。
但在你实际计算的时候还需要考虑到系统loading,从DDR中读取所需要的时间等等,所以很难用这种方式来做准确的延时。
不跑系统,就是裸跑,总该有个大致的数值,写delay是怎么粗略估计的?
因为ARM核内部有cache和流水线,因此很难用指令周期去估算延时。这个裸跑的延时就是通过消耗无效指令的方式粗略做下delay,具体时间其实可以通过示波器测量一下
这个delay,一方面是前面steven提到的估计,但是这个也是不准的,例如说有中断来的时候,这个delay就没谱了。