2025年LPC2148的时钟配置

LPC2148的时钟配置1 时钟结构 Fosc 是外部晶振时钟 Fcco 是 PLL 倍频之后的时钟 CCLK 是 PLL 输出时钟 也是处理器的运行时钟 PLL0 是处理器运行和 UART0 使用 PLL1 是 USB 使用 要求必须 48MHz

大家好,我是讯享网,很高兴认识大家。

1,时钟结构


讯享网

Fosc是外部晶振时钟;

Fcco是PLL倍频之后的时钟;

CCLK是PLL输出时钟,也是处理器的运行时钟;

PLL0 是处理器运行和UART0使用

PLL1是USB使用,要求必须48MHz,要求外部晶振时钟必须是12MHz,16MHz,24MHz

M、P的值是配置寄存器中的值加1;

2,PLL时钟配置

新建工程之后,在启动文件cr_startup_lpc21.s  中,默认对PLL和外部设备时钟进行了配置

 #ifdef PLL_INIT .set PLL, SYSCTRL+0x40 .set PLLCON_OFFSET, 0x0 .set PLLCFG_OFFSET, 0x4 .set PLLSTAT_OFFSET, 0x8 .set PLLFEED_OFFSET, 0xC .set PLOCK, (1<<10) //lock bit inside PLLSTAT .set SET_PLLCFG_MUL3, 0x2 .set SET_PLLCFG_MUL4, 0x3 .set SET_PLLCFG_MUL5, 0x4 .set SET_PLLCFG_MUL6, 0x5 .set SET_PLLCFG_DIV1, (0x0<<4) .set SET_PLLCFG_DIV2, (0x1<<4) .set SET_PLLCFG_DIV4, (0x2<<4) .set SET_PLLCFG_DIV8, (0x3<<4) .set PLLCFG_INIT_VAL, SET_PLLCFG_MUL6 | SET_PLLCFG_DIV1 .set SET_PLLCON_ENABLE, 1 .set SET_PLLCON_CONNECT, 2 /* * Setup the PLL */ LDR R0,=PLL MOV R1,#0xAA MOV R2,#0x55 MOV R3,#PLLCFG_INIT_VAL STR R3,[R0,#PLLCFG_OFFSET] MOV R3,#SET_PLLCON_ENABLE STR R3,[R0,#PLLCON_OFFSET] STR R1,[R0,#PLLFEED_OFFSET] STR R2,[R0,#PLLFEED_OFFSET] // Wait for the loop to lock 1: LDR R3,[R0,#PLLSTAT_OFFSET] ANDS R3,R3,#PLOCK BEQ 1b // Now swap the cpu clock to the PLL MOV R3,#(SET_PLLCON_ENABLE | SET_PLLCON_CONNECT) STR R3,[R0,#PLLCON_OFFSET] STR R1,[R0,#PLLFEED_OFFSET] STR R2,[R0,#PLLFEED_OFFSET] #endif 

讯享网

通过代码.set    PLLCFG_INIT_VAL,    SET_PLLCFG_MUL6 | SET_PLLCFG_DIV1

可以得知M = 6;P = 1;

CCLK = M * Fosc = 6 * 12 = 72MHz;

3,APB divider外设时钟(PCLK)配置

APB分频器确定处理器时钟(CCLK)和外围设备使用的时钟(PCLK)之间的关系。APB分隔符有两个目的。首先是通过APB总线为外设提供所需的PCLK,以便它们能够以为ARM处理器选择的速度运行。为了实现这一点,APB总线可以被减慢到处理器时钟速率的一半或四分之一。因为APB总线必须在通电时正常工作(如果APB分频器控制寄存器驻留在APB总线上,它的时间不能改变),重置时的默认条件是APB总线以四分之一的速度运行。APB分频器的第二个目的是,当应用程序不需要任何外围设备以全处理器速率运行时,允许节省电力。APB分频器相对于振荡器和处理器时钟的连接如图12所示。因为APB分隔符已连接到PLL输出,所以PLL在空闲模式下仍然保持活动状态(如果它正在运行)。

 也就是说PCLK是由CCLK分频得到的,分频值由APBDIV确定。

00  处理器时钟四分之一; 01 与处理器时钟相同 10 处理器适中的一半; 11  保留,不影响;

在启动文件cr_startup_lpc21.s  中,默认配置如下

讯享网 #ifdef VPB_INIT /* * Setup the VPB/APB Peripheral bus clock */ .set VPBDIV_OFFSET, 0xc0 .set VPBDIV, SYSCTRL+VPBDIV_OFFSET .set VPBDIV_INIT_VAL, 1 LDR R0,=VPBDIV LDR R1,=VPBDIV_INIT_VAL STR R1,[R0] #endif

由上文件可知APBDIV的值为1,与处理器时钟相同,即72MHz。

举例将CCLK设置为60MHz,PCLK设置为30MHz;修改cr_startup_lpc21.s中的内容

 

 

CCLK = M * Fosc = 5 * 12 = 60MHz;

PCLK = CCLK / 2 = 30MHz;

小讯
上一篇 2025-03-28 19:04
下一篇 2025-01-08 09:08

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/120509.html