历史上的今天
今天是:2025年04月17日(星期四)
2020年04月17日 | 关于ARM时钟体系的寄存器配置
2020-04-17 来源:eefocus
一:时钟来源体系
时钟配置决定了一个芯片的时钟来源,CPU的工作频率,内存控制器的时钟频率等等,从结果来看,寄存器控制出了三个时钟路线,FCLK、HCLK和PCLK;FCLK——供给CPU使用,HCLK—— AHB总线供给内存控制器,中断控制器等使用;PCLK—— APB 总线供给uart,I2C等使用;三个时钟的频率依次由高到底;三个时钟频率的比例可分为如下:

由图可看出,时钟频率的比例由HDIVN与PDIVN寄存器控制,这两个寄存器属于CLKDIVN 中的;那么FCLK的来源又是哪呢?

由时钟产生模块图表可以看出CLKCNTL寄存器的控制来源于MPLL,所以FCLK的时钟来源于MPLL,那么MPLL是由谁控制的呢?

可以看出锁相环通过倍频产生MPLL,而PMS是分别在MPLLCON寄存器的相应的位上。下面的图是手册推荐设置的值:

二:时钟逻辑
虽然看似只要配置两个寄存器就可以把ARM时钟配置完全了,但是实际上当然没有想象的那么简单。你想想CPU在工作的时候每时每刻都需要正常的频率值,当你在程序中把对应的寄存器配置好,程序载入这些配置的时候,CPU已经工作在某种一上电的默认值上了。所以这时候CPU要在默认的频率的工作状态下读取相应的寄存器切换到新的频率中,那这时候该怎么切换:要切换多长时间,切换的顺序是怎样的;

幸运的是内部切换的复杂逻辑不需要我们控制,我们只需要在PMS设置后将PLL Lock-time时间设置好就行了,因为在这段时间内PLL的工作是不稳定的,要等这么一段时间PLL输出的频率稳定后,CPU就会工作在新的FCLK中。需要注意的是,在这段时间里PLL一直处于锁定状态。
所以在编写程序的时候:
1:设置锁定时间
2:设置分频器CLKDIVN寄存器
3:设置MPLLCON寄存器PMS
注:因为若HDIVN != 0 要使CPU工作在异步模式;所以4:还要设置CPU的工作模式。
PS:在编程过程中发现当我不是最后设置PMS寄存器的时候总是失败,初步推断是设置PMS寄存器以后处于锁相状态,在往里设置CLKDIVN的值时会无效。
史海拾趣
|
最近移植bsp发现wince5.0的DM9000A驱动有问题!现在在这个和大家讨论讨论! 首先dm9000大部分驱动是官方的,下面就是一些细节的研究、我首先讲讲我的平台情况。 1.SD0~SD15 -------- LDATA0~LDATA15 数据线和 ...… 查看全部问答> |
|
各位高人! 我现在遇到这样一个问题!lcd驱动在uboot和kernel中使用了不同的buffer,从而导致了在进入kernel中lcd驱动时出现 lcd屏有个短暂的颜色渐变。为了消除这个bug。就想让uboot和kernel使用同一块内存。 1)下面是我的做法: & ...… 查看全部问答> |
|
//########################################################################### // // FILE: Example_281xSci_FFDLB.c // // TITLE: DSP281x Device SCI FIFO Digital Loop Back Test. // // ASSUMPTIONS: // ...… 查看全部问答> |
|
#include \"msp430x54x.h\" #include #include #include #include \"PIN_DEF.H\" #define FLL_FACTOR 749 &nbs ...… 查看全部问答> |
|
【解密08】基于51单片机的无线遥控坦克DIY 之 图片欣赏 前面介绍了很多专业内容,估计大家看的有些不耐烦了,今天换换口味,欣赏一下我们拍摄的照片,之前一直有朋友反映视频看的不是很清楚,很多细节没有看到,今天给大家上几张图,我们也正在翻录新的视频,希望能做的更好 ...… 查看全部问答> |
|
各位好,变量定义如下: char xdata ziku[] = {...} _at_ 0x0020; unsigned xdata int shuzu[] = {...}; unsigned xdata long ack; 求教:下面那两个未指定固定位置的xdata类型变量在编译的时候是否会和上面被指定固定位置的变量重叠呢?谢谢… 查看全部问答> |




