为什么工程配置时设置损失频率为0和1时50MHZ

微波实验-频谱分测量_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
微波实验-频谱分测量
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢当前位置: >
设一个32位微处理器配有16位的外部数据总线,若时钟频率为50MHz,总线传输的最短周期为4个时钟周期,则总线的最大数据传输率是()。
A.12.5MB/s
所属学科:
试题类型:客观题
所属知识点:
试题分数:1.0 分
暂未组卷。
暂无学习笔记。
&&&&&&&&&&&&&&&希赛网 版权所有 & &&LPC1114时钟配置
要让 正常工作,首先要对它的时钟源进行配置。LPC1114的最高工作频率为50MHz,因此给它的主时钟频率最大不能超过50MHz。实际上,通常都是使用频率较低的晶振,以降低外部 ,然后再通过内部倍频的方式把主时钟频率提高。根据管方手册给出的数据,外部晶振的频率范围是1MHz~25MHz,一般情况下使用12MHz晶振,然后内部进行4倍频,主时钟工作频率为48MHz。
要对LPC1114的时钟进行配置,必须要了解它的时钟结构,先来看一下它的时钟结构图,如下图所示。
首先来看主时钟,给主时钟(main clock)提供选择有4个源,分别是:内部RC振荡器、未倍频之前的PLL时钟、内部看门狗时钟、经过PLL倍频之后的时钟。由对主时钟源选择寄存器(MAINCLKSEL)的操作来进行选择,同一时刻只能选择一种时钟做为主时钟。下面就给出MAINCLKSEL寄存器的位结构(要注意,因为LPC1114是32位的,所以所有的寄存器都是32位的),如下表所示。
内部RC振荡器
PLL倍频之前的时钟
内部看门狗时钟
PLL倍频之后的时钟
前面说过,一般情况下CPU内部都是要进行倍频的,因此大多数时候该寄存器的值都会选择11(0x03),执行语句“SYSCON-&MAINCLKSEL=0x”就可以了。
接下来看系统PLL时钟,PLL即是频率锁相环的意思,PLL的功能很多,有兴趣的可自行参考其它资料,这里主要利用它来实现倍频的功能。从上图中可以看出,供给PLL选择的有2个源,一个是片内RC振荡器,另一个是。由对系统PLL时钟选择寄存器(SYSPLLCLKSEL)的操作来进行选择,同一时刻只能选择一种时钟做为输入时钟。下面给出SYSPLLCLKSEL寄存器的位结构,如下表所示。
内部RC振荡器
晶体振荡器
一般情况下,为了提高时钟精度都会选择01(0x01),以选择外部晶体振荡器做为时钟输入。执行语句“SYSCON-&SYSPLLCLKSEL=0x”就可以了。
在时钟结构图中还可以看出,主时钟分成6路供给不同的模块。其中一路主时钟经过系统时钟(SYSAHBCLKDIV)后做为系统时钟,提供给AHB。在LPC1114中,只有通用输入输出端口(GPIO)需要AHB。为了给不同速度的模块(如内核、存储器、APB等)提供时钟,需要对SYSAHBCLKDIV寄存器进行操作,以对主时钟进行分频。下面给出SYSAHBCLKDIV寄存器的位结构,如下表所示。
关闭系统时钟
从表中可以看出,分频的最大值是255分频。一般情况下,系统的默认值是1,即为AHB提供不分频的主时钟,也可执行语句“SYSCON-&SYSAHBCLKDIV=0x”来实现。剩余5个模块(SPI0、UART、SPI1、WDT、CLKOUT)的时钟也像系统时钟一样由主时钟来分频,只不过它们默认的分频值为0,即默认不提供时钟,也就是说剩余的5个模块默认状态下不工作,需要的时候再通过程序来打开,以降。
由上述可见,居于Cotex-M0内核的CPU由于强化了,所以在一般情况下要使用该类型的CPU,首要的任务就是为其配置正确的时钟。下面就来讨论一下如何通过程序来配置LPC1114的时钟。
先给出一个时钟初始化的函数,如下:
void SysCLK_config(void)
LPC_SYSCON-&PDRUNCFG &= ~(1 && 5); //给系统振荡器上电
LPC_SYSCON-&SYSOSCCTRL = 0x; //系统振荡器未,1~12MHz输入
for (i = 0; i & 200; i++) __nop(); //延时等待振荡器稳定
LPC_SYSCON-&SYSPLLCLKSEL = 0x; //PLL输入选择外部晶体振荡
LPC_SYSCON-&SYSPLLCLKUEN = 0x00;
LPC_SYSCON-&SYSPLLCLKUEN = 0x01; //先写0后写1更新时钟源
while (!(LPC_SYSCON-&SYSPLLCLKUEN & 0x01)); //等待更新完成
LPC_SYSCON-&SYSPLLCTRL = 0x; //M=4、P=2,倍频后的时钟为48MHz
LPC_SYSCON-&PDRUNCFG &= ~(1 && 7); //给PLL上电
while (!(LPC_SYSCON-&SYSPLLSTAT & 0x01)); //等待PLL锁定
LPC_SYSCON-&MAINCLKSEL = 0x; //主时钟选择PLL倍频后的时钟
LPC_SYSCON-&MAINCLKUEN = 0x00;
LPC_SYSCON-&MAINCLKUEN = 0x01; //先写0后写1更新时钟源
while (!(LPC_SYSCON-&MAINCLKUEN & 0x01)); //等待更新完成
LPC_SYSCON-&SYSAHBCLKDIV = 0x; //AHB为1分频,AHB时钟为48MHz
LPC_SYSCON-&SYSAHBCLKCTRL |= (1&&6); //使能GPIO时钟
如果使用的是12MHz的外部晶振,该函数执行完后,LPC1114的时钟被设置成为主时钟48MHz,AHB时钟48MHz,输入输出端口(GPIO)时钟使能的状态。
在上述程序中,PLL输入选择寄存器(SYSPLLCLKSEL),主时钟选择寄存器(MAINCLKSEL),AHB分频选择寄存器(SYSAHBCLKDIV)均在前面讨论过,下面来看一下没讨论过的寄存器。先看“掉电配置寄存器(PDRUNCFG)”,下表是它的位结构。
IRCOUT_PD(IRC振荡器输出掉电)
IRC_PD(IRC振荡器掉电)
FLASH_PD(Flash掉电)
BOD_PD(BOD掉电)
ADC_PD(ADC掉电)
SYSOSC_PD(系统振荡器掉电)
WDTOSC_PD(看门狗振荡器掉电)
SYSPLL_PD(系统PLL掉电)
从表中可以看出,系统振荡器和系统PLL在默认情况下是掉电的,也就是说默认它们不处于工作状态,要让它们工作就必须给它们置0上电。所以要通过执行语句“SYSCON-&PDRUNCFG &= ~(1 && 5)”和“SYSCON-&PDRUNCFG &= ~(1 && 7)”来把SYSOSC和SYSPLL置0。
接下来看“系统振荡器控制寄存器(SYSOSCCTRL)”,下表是它的位结构。
BYPASS(旁路系统振荡器)
FREQRANGE(低振荡器确定频率范围)
从表中可以看出,如果要让系统振荡器工作,则其第0位就应该选择0,即不被旁路,只有在从外部直接输入振荡信号的情况下才会选择旁路(比如使用)。第1位用于选择外部晶振的频率范围,使用12MHz时该位选择0。执行语句“SYSCON-&SYSOSCCTRL = 0x”就可以实现上述配置,但实际上复位后的值就是该配置,也可不执行该语句。
从上述程序中还可以看出,在配置了时钟后(无论是PLL时钟还是主时钟),都需要更新一下才能正常工作。而更新的操作则根据管方手册,必须要给相应的允许寄存器“toggle”一下(即先向其写0再紧接着写1)。“系统PLL时钟源更新允许寄存器(SYSPLLCLKUEN)”和“主时钟源更新允许寄存器(MAINCLKUEN)”的位结构是一样的,下表是MAINCLKUEN寄存器的位结构。
ENA(允许主时钟源更新)
更新时钟源
在主时钟源及PLL时钟源更改后,要紧接着及时更新相应的允许寄存器才能让其正常工作。此外还要注意一点,“toggle”后需要查询相应的允许寄存器是否已更新,若没有就需要等待直到其更新为止(例如在更新PLL时钟源更新允许寄存器SYSPLLCLKUEN后要执行语句“while (!(LPC_SYSCON-&SYSPLLCLKUEN & 0x01));”,以等待其更新完成)。
接下来看一下PLL的配置,要让PLL对输入时钟进行倍频或分频,就要配置“系统倍频控制寄存器(SYSPLLCTRL)”,下表是该寄存器的位结构。
MSEL(反馈分频器的值,分频器的值M是MSEL+1)
PSEL(后分频器的值,分频器的值为2×P)
保留,不能写1
PLL的输出频率要符合下面的公式。
Fclkout为PLL的输出频率,Fclkin为外部晶振的频率,FCCO的值必须在156MHz ~320MHz之间,M为倍频的倍数,P值要符合要求。若以12MHz的晶振做为输入,系统主时钟要为48MHz,则M=4(MSEL=0011),P的值只能取2(PSEL=01)才能满足公式要求。因此寄存器SYSPLLCTRL的值应该为1),所以要配置此项只需要执行语句“SYSCON-&SYSPLLCTRL = 0x”就可以了。
在改变了PLL的倍频之后,需要查询“倍频状态寄存器(SYSPLLSTAT)”,看PLL锁定了没有,若没有就需要等待直到其锁定为止(执行语句“while (!(LPC_SYSCON-&SYSPLLSTAT & 0x01));”)。下面是“倍频状态寄存器(SYSPLLSTAT)”的位结构。
LOCK(PLL锁定状态)
CPU要对GPIO进行操作,就必须给GPIO时钟信号,即需要使能GPIO的时钟。在默认情况下GPIO时钟是允许的,也可以对“系统AHB时钟控制寄存器(SYSAHBCLKCTRL)”中相应的位进行操作来选择允许时钟,下面是该寄存器的位结构。
SYS(允许AHB时钟,只读)
ROM(允许ROM时钟)
RAM(允许RAM时钟)
FLASHREG(允许flash寄存器接口时钟)
FLASHARRAY(允许flash阵列存取时钟)
I2C(允许I2C时钟)
GPIO(允许GPIO时钟)
CT16B0(允许16位计数/定时器0时钟)
CT16B1(允许16位计数/定时器1时钟)
CT32B0(允许32位计数/定时器0时钟)
CT32B1(允许32位计数/定时器1时钟)
SSP0(允许SPI0时钟)
UART(允许UART时钟)
ADC(允许ADC时钟)
WDT(允许WDT时钟)
IOCON(允许IO配置模块时钟)
SSP1(允许SPI1时钟)
从表中可以看出,第6项就是“通用输入输出端口”的时钟配置项,执行语句“SYSCON-&SYSAHBCLKCTRL |= (1&&6)”就可以开启GPIO的时钟。在打开了GPIO的时钟后,就可以使用P0~P3端口了。
上述的时钟配置程序是最基本的,也是必须的,因此在任何程序开始前,都应该先调用该时钟配置函数,以对LPC1114进行基本的时钟配置,为后续程序提供保障。
原文链接:
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
今日搜狐热点Hello FPGA! IP核之PLL——输出任意指定频率的信号
Hello FPGA! IP核之PLL——输出任意指定频率的信号
科技梦想达人
1、PLL锁相环路是一种反馈控制电路,简称锁相环(Phase Locked Loop,PLL)。锁相环的特点是:利用外部输入的参考信号,控制环路内部振荡信号的频率和相位。因锁相环可以实现输出信号频率对输入信号频率的自动跟踪,所以锁相环通常用于闭环跟踪电路。锁相环在工作的过程中,当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住,这就是锁相环名称的由来。2、IP核之PLL的创建——输出一路为10MHz,另一路为20MHz的信号。1)新建一个名为Verilog_IP_PLL的工程:2)【Tools】——【MegaWizard Plug-In Manger】3)第一个选项是创建一个IP核,第二个选项是编辑一个已经创建好的IP核,第三个选项是复制一个创建好的IP核。选择第一个,点击【Next&】。4)选择I/O下的ALTPLL IP核,将其命名为PLL,并且选择创建的IP核代码为Verilog HDL,点击【Next&】。5)将输入时钟修改为50MHz,点击【Next&】。6)去掉areset和locked两个信号,在左侧的框图中,只剩下了一个输入时钟inclk0和一个输出时钟c0,然后一路狂点击【Next&】,直接来到我们的Output Clocks页面。当然,也可以直接点击Output Clocks标签,直接跳到该页面。7)在该页面中,指定c0输出时钟为10MHz,相位偏移为0,占空比为50%。点击【Next&】。8)在该页面中,使能c1时钟信号,将c1的时钟设置为20MHz,相位偏移为0,占空比为50%。点击【Finish】进入最后的总结页面。9)勾选PLL_inst.v,然后点击【Finish】完成整个IP核的创建。10)在工程中我们需要打开PLL_inst.v,然后进行引用。11)编写TOP文件,将LED1赋值给c0,LED2赋值给c1。12)接下来编译工程、配置工程,给信号分配管脚,最后下载到开发板中进行验证。但是,我们只看到LED1、LED2常亮,这是因为10MHz、20MHz频率太高了,要想验证,可以使用ModelSim软件仿真PLL IP核,或者使用VWM仿真,或者使用SignalTap II软件调试PLL IP核。3、使用ModelSim软件仿真PLL IP核可以看到,LED1周期为100ns,频率为10MHz;LED2为50ns,频率为20MHz。也就是说,PLL IP核工作是正常的。4、使用VWM仿真PLL IP核5、使用SignalTap II软件调试PLL IP核1)首先我们在Quartus II 软件中创建一个SignalTap II 调试文件,在SignalTap II 调试文件中,我们利用节点发现器将RST_N、LED1、LED2添加至节点列表中,将LED1设置为上升沿出发,配置采样时钟为CLK_50M,采样深度设置为2K。2)设置完成之后,重新编译工程,通过SignalTap II页面,将.sof文件下载到开发板,然后点击SignalTap II页面中的开始调试按钮。3)从上图中,我们可以看出,LED1和LED2信号明显是有问题的,和我们仿真出来的波形是不一样的。我们这里怀疑有可能是50MHz的采样频率不够造成的,所以我们利用PLL IP核的c2端口输出一个频率为300MHz的时钟信号,然后我们又声明了一个LED3,将LED3赋值给c2端口。然后我们编译工程,在SignalTap II页面中将CLK_50M信号更换为LED3,再一次进行编译,编译完成之后,进行调试。从上图中可以看出,此时LED1、LED2输出波形是符合要求的。
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
科技梦想达人
百家号 最近更新:
简介: 通过图形、视频介绍最新科技信息
作者最新文章}

我要回帖

更多关于 损失频率为0和1时 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信