您的位置: OpenADSP社区论坛 -> Blackfin专区 -> 新手上路 -> BF592技术支持专区 -> BF592处理器应用设计3-PLL详解
本帖共有653个阅读者
发表帖子 发表投票 回复主题
BF592处理器应用设计3-PLL详解
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
楼主信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线
BF592处理器应用设计3-PLL详解

BF592的PLL使用

1. PLL功能介绍

PLL(Phase Locked Loop)是ADSP-BF592的内核和时钟设置的机制,叫做锁相环。在写每个程序前,首先需要配置PLL,通过PLL配置当前处理器工作的内核和系统时钟。

PLL电路、设置输入和结果输出如图:

上传的图片
  20127271353652.jpg [ 17.43 KB 380×172 ] (缩略时请点击查看原图)

 

输入时钟送给BF592后,通过DF设置是否对输入时钟分频,然后将根据MSEL的值对时钟进行倍频,倍频后将时钟送给VCO,由VCO根据设置的分频系数,分出内核时钟和系统时钟。

上传的图片
  201272713535052.jpg [ 19.36 KB 281×178 ] (缩略时请点击查看原图)

 

MSEL占用6Bit,最大可设置64倍倍频。通常情况下,该倍频频率不要超过芯片允许的最大频率。

上传的图片
  201272713544552.jpg [ 25.28 KB 432×149 ] (缩略时请点击查看原图)

 




我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/7/27 13:54:59
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
1信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

内核时钟分频系数占2Bit,最大可设置8倍分频,当为00时,内核时钟等于VCO时钟。设置的内核时钟不要超过芯片允许的最高频率。

上传的图片
  201272713564752.jpg [ 41.35 KB 437×260 ] (缩略时请点击查看原图)

 

系统时钟分频系数占4bit,最大进行15倍的分频。设置的系统时钟不要超过133MHz。

2. PLL寄存器说明



寄存器

功能

PLL_DIV

PLL分频寄存器,设置系统时钟和内核时钟分频系数

PLL_CTL

PLL控制寄存器,设置VCO倍频系数和一些控制开关

PLL_STAT

PLL状态寄存器,获取芯片当前工作的状态

PLL_LOCKCNT

PLL计数器,用于设置计数时钟

3. 代码分析

上传的图片
  20127271359952.jpg [ 87.07 KB 548×385 ] (缩略时请点击查看原图)

 

配置完PLL后,系统必须将系统设置为空闲后,系统再一次唤醒后,设置的值才会生效。

4. 代码实现功能

代码实现了将内核时钟配置为16倍倍频,将系统时钟配置为4倍分频。板卡上输入时钟为25MHz,所以VCO时钟配置后为25*16 =400MHz,内核时钟没有做分频,所以内核时钟等于VCO时钟,也为400MHz,系统时钟为400/4=100MHz

注意:BF592有两种内核时钟规格的芯片,即:200MHz400MHzADSP-EDU-BF592上使用的是400M的芯片,所以内核配置成400M,如果使用的是200MHz,内核时钟配置不可以大于200MHz


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/7/27 13:57:49
尊贵身份标志
OpenADSP(管理员)
OpenADSP
头衔:社区公民
帮派:无帮无派
帖数:5187
金钱:34761
积分:6369
注册时间:2011/6/7
2信息 | 留言 | Email | 主页 | 编辑 | 管理 | 离线

5. 本章知识要点

1) #include<cdefBF592-A.h>#include <ccblkfn.h>  #说明这是个预处理命令(在编译之前进行的处理),include 是文件包含命令。C 语言的预处理主要有三个方面的内容:

1-宏定义

2-文件包含

3-条件编译

Blackfin所有的头文件都在安装目录下能找到:C:\Program Files\Analog Devices\VisualDSP 5.0\Blackfin\include

cdefBF592-A.h这个文件里又包含了cdefBF59x_base.h,而cdefBF59x_base.h又包含了defBF59x_base.h,从defBF59x_base.h 的内容可以看到,头文件主要定义了端口和特殊功能寄存器的物理地址,包含这个头文件后,我们在程序中就可以直接使用定义过的标识符。如果需要对*pPLL_DIV进行操作,因为*pPLL_DIV的寄存器地址是0xFFC00004,我们不需要了解BF592具体内部结构和地址,直接针对*pPLL_DIV 进行操作,单片机内部就会对0xFFC00004这个地址操作,*pPLL_DIV =pssel;语句的作用是直接将pssel这个值写到0xFFC00004地址中,根据不同程序实现的功能不一样,我们需要添加更多的头文件,以后的在例子程序中用到了我们会再做介绍。

2) main()函数。C 程序最大的特点就是所有的程序都是用函数来装配的。main()称之为主函数,是所有程序运行的入口。其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用的是有参函数,则参数在调用时传递。一个程序有且只有一个 main 函数。

3) // /* */ 2种符号表示注释,注释不是程序,不影响程序结果,注释是给程序员看的,可以通过注释了解程序的意图,尤其在程序庞大时,注释尤为重要,如果没有注释,一段时间后,自己写的程序自己都看不懂了。所以养成一个好的习惯,写程序的时候及时注释。上述 2 种注释符号的区别如下,//后面的语句都为注释,换行后无效,/* */中间的内容皆为注释,换行有效。上述样例中开头的描述使用了/* */注释,而程序中各个语句后面的注释使用了// 。这个注释可以根据个人喜好和习惯,并没有具体要求。


我是OP...
等级:管理员 参考IP地址:*.*.*.*
2012/7/27 14:01:26
Powered by OpenADSP Copyright © 2010 www.Openadsp.com. All rights reserved.154338 Call, 1 Queries, Processed in 0.031250 second(s),