zynq网络时钟控制寄存器_SylixOS 基于ZYNQ的时钟频率修改详解

本文档详细介绍了如何在ZYNQ7000平台上修改时钟频率,包括四个步骤:解锁寄存器、设置PLL倍频和配置参数、旁路模式转换及软件重启、重新锁定寄存器。提供了具体的代码实现,涉及读写SLCR相关寄存器,以及PLL的频率设置参数。
摘要由CSDN通过智能技术生成

概述

本文档以ZYNQ7000平台为例,详细介绍如何去修改ZYNQ的时钟频率。

时钟频率修改流程

ZYNQ7000的时钟频率修改流程,如图 2.1所示。具体步骤如下:

步骤一:解除ZYNQ7000的寄存器写锁定;

步骤二:向对应寄存器写入我们需要设置的PLL倍频值和PLL配置参数;

步骤三:进行PLL的旁路模式转换和软件重启,使我们刚刚设置的PLL倍频值和PLL配置参数生效;

步骤四:重新使寄存器处于写锁定状态。

图2.1 ZYNQ7000的时钟频率修改流程图

ZYNQ7000的ARM_PLL_CLK时钟频率修改的具体的代码实现如程序清单 2.1所示。不同平台的解除和锁定写锁定的方式可能不同,对于ZYNQ7000平台,需要写入0xDF0D到SLCR_UNLOCK寄存器解除写锁定,写入0x767B到SLCR_LOCK寄存器可以使相关寄存器的写操作无效。

程序清单21 ZYNQ7000的时钟频率修改代码/*********************************************************************************************************

** 函数名称: zynqPllFeedBackSet

** 功能描述: zynq的ARM_PLL_CLK时钟倍频设置

** 输 入  : NONE

** 输 出  : NONE

** 返  回  : NONE

*********************************************************************************************************/

VOID  zynqPllFeedBackSet (VOID)

{

UINT32  uiClkCtrl;

UINT32  uiFeedBackDiv;

UINT32  uiNum;

uiNum = read32(ZYNQ_SLCR + SLCR_LOCKSTA);

if (0 != uiNum) {

write32(SLCR_UNLOCK_MAGIC, ZYNQ_SLCR + SLCR_UNLOCK);             /*  写入0xDF0D,解除写锁定      */

uiNum = 0;

}

/*

* 设置ARM_PLL的倍频值

*/

uiClkCtrl      = read32(ZYNQ_SLCR + ARM_PLL_CTL);

uiFeedBackDiv  = uiClkCtrl &~ XZYNQ_SLCR_ARM_PLL_CTRL_PLL_FDIV_MASK;

uiFeedBackDiv |= (SLCR_FEED_BACK_DIV_VALUE <

write32(uiFeedBackDiv, ZYNQ_SLCR + ARM_PLL_CTL);

/*

* 设置ARM_PLL的配置参数

*/

uiClkCtrl      = read32(ZYNQ_SLCR + ARM_PLL_CTL);

write32(SLCR_ARM_PLL_CFG, ZYNQ_SLCR + ARM_CLK_CFG);

/*

* 进行PLL的旁路模式转换和软件重启,使我们刚刚设置的PLL倍频值和PLL配置参数生效

*/

write32(SLCR_ARM_PLL_CTRL_BYPASS_FORCE | uiClkCtrl, ZYNQ_SLCR + ARM_PLL_CTL);

write32(SLCR_ARM_PLL_CTRL_RESET | uiClkCtrl, ZYNQ_SLCR + ARM_PLL_CTL);

read32(ZYNQ_SLCR + PLL_STATUS);

write32(uiClkCtrl &~ SLCR_ARM_PLL_CTRL_RESET, ZYNQ_SLCR + ARM_PLL_CTL);

write32(uiClkCtrl &~ SLCR_ARM_PLL_CTRL_BYPASS_FORCE, ZYNQ_SLCR + ARM_PLL_CTL);

if (0 == uiNum) {

write32(SLCR_LOCK_MAGIC, ZYNQ_SLCR + SLCR_LOCK);                /*  写入0x760B,打开写锁定      */

uiNum = 1;

}

}

PLL的频率设置

ZYNQ7000的时钟频率设置的参数列表,如图 3.1所示。其中PLL_FDIV为PLL的倍频值,PLL CP、PLL RES、LOCK CNT为PLL的配置参数。

图3.1 PLL频率的参数设置列表

免责声明

内部交流文档,仅针对ZNYQ相关平台,若发现相关错误或者建议,请及时联系文档创建者进行修订和更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值