原创 Blackfin的技术文章和教学视频连载9:PLL和EBIU-1

2014-7-31 10:04 805 7 7 分类: 处理器与DSP 文集: Blackfin的技术文章和教学视频连载

    上篇比较详细的讲了一下GPIO跟中断,这篇打算说一说PLL和EBIU。

 
    先说PLL吧,PLL是什么?全称Phase Locked Loop,是ADSP-BF53x 的内核和时钟设置的机制,叫做锁相环。我们通过PLL 配置当前处理器工作的内核和系统时钟。所以这个非常关键。
 
    PLL 机制如下图:
 
20140730100025595.jpg
 
    输入时钟送给 ADSP-BF53x 后,通过DF 设置是否对输入时钟分频,然后将根据MSEL 的值对时钟进行倍频,倍频后将时钟送给VCO,由VCO 根据设置的分频系数,分出内核时钟和系统时钟。
 
    20140730100315687.jpg
 
    MSEL 占用6Bit,最大可设置64 倍倍频。通常情况下,该倍频频率不要超过芯片允许的最大频率。
 
20140730100352227.jpg
 
    内核时钟分频系数占 2Bit,最大可设置8 倍分频,当为00 时,内核时钟等于VCO 时钟。设置的内核时钟原则上不要超过芯片允许的最高频率。当然也是有很多猛人玩超频的,这取决于你对自己硬件设计的强烈自信,官方不允许!
 
20140730100517621.jpg
 
    系统时钟分频系数占 4bit,最大进行15 倍的分频。设置的系统时钟不要超过133MHz。
 
    接口寄存器说明:
 
    寄存器            功能
    PLL_DIV           PLL分频寄存器,设置系统时钟和内核时钟分频系数
    PLL_CTL           PLL控制寄存器,设置VCO 倍频系数和一些控制开关
    PLL_STAT PLL      状态寄存器,获取芯片当前工作的状态
    PLL_LOCKCNT       PLL 计数器,用于设置计数时钟
 
    下面来个例子代码分析一下,会容易理解了:
 
*pPLL_DIV = pssel; //设置系统时钟分频系数,内核不做分频
asm("ssync;"); //系统同步
new_PLL_CTL = (pmsel & 0x3f) << 9; //将VCO 倍频系数移位至需设置的位置
*pSIC_IWR |= 0xffffffff; //将系统中断唤醒使能
if (new_PLL_CTL != *pPLL_CTL) //判断是否已经配置过倍频系数
{
*pPLL_CTL = new_PLL_CTL; //配置倍频系数
asm("ssync;"); //系统同步
asm("idle;"); //将处理器设置为空闲
}
 
    配置完PLL 后,系统必须将系统设置为空闲后,系统再一次唤醒后,设置的值才会生效。
 
    当然,OP还是会上传一个完整的例程来诠释这个PLL。这个例程代码就实现了将内核时钟配置为 16 倍倍频,将系统时钟配置为4 倍分频。板卡上输入时钟为25MHz,所以VCO时钟配置后为25*16 =400MHz,内核时钟没有做分频,所以内核时钟等于VCO 时钟,也为400MHz,系统时钟为400/3=100MHz。
 
    运行代码后,处理器的内核时钟会运行在 400MHz,系统时钟运行在100MHz。
 
    例程源码的百度云盘下载: 链接: http://pan.baidu.com/s/1dDAHim9 密码: 0h3e
 
    PS:下一篇的EBIU讲完后,统一贴这2章的教学视频,录到一起了。
 
dsp
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条