1 / 8
文档名称:

时钟与分频2.docx

格式:docx   大小:20KB   页数:8页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

时钟与分频2.docx

上传人:zhuwo11 2022/10/5 文件大小:20 KB

下载得到文件列表

时钟与分频2.docx

文档介绍

文档介绍:该【时钟与分频2 】是由【zhuwo11】上传分享,文档一共【8】页,该文档可以免费在线阅读,需要了解更多关于【时钟与分频2 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。FCLK,HCLK,andPCLK(S3C2410)

文章说明:calmarrow(lqm)原创,《S3C2410完全文章弓I自:
clock部分比较容易,现在按照datasheet的思路梳理一下。
一、对clock的基本认识
第七部分是“clock&powermanagement”,总结如下:
1s3c2410的clock&powermanagement模块包含三个部分:clockcontrol、usbcontrol、powercontrol。现在的关注点是clockcontrol。
2、s3c2410有两个pll(phaselockedloop,锁相环,在高频中学过,可以实现倍频,s3c2410的高频就是由此电路产生的)。其中一个是MPLL,M即为main,用来产生三种时钟信号:Fclk(给CPU核供给时钟信号,我们所说的s3c2410的cpu主频为200MHz,就是指的这个时钟信号,相应的,1/Fclk即为cpu时钟周期)、Hclk(为AHBbusperipherals供给时钟信号,AHB为advancedhigh-performancebus)、Pclk(为APBbusperipherals供给时钟信号,APB为advancedperipheralsbus)。在这里,需要了解一下AMBAsystemarchitecture了。。简单的说,AMBA是一种协议,这种协议已经称为片上组织通信的事实上的标准(thedefactostandardforon-chipfabriccommunication)。
下面给出英文描述:
TheAMBAprotocolisanopenstandard,on-chipbusspecificationthatdetailsastategyfortheinterconnectionandmanagementoffunctionalblocksthatmakesupasystem-on-chip(SoC).Itfacilitates"right-first-time"developmentofembeddedprocessorswithoneormoreCPU/.
需要知道的是,AMBA总线是ARM提出的一种解决方案,它并非唯一的规范,但是因为ARM的广泛使用,AMBA总线也就成为了事实上的规范了。现在AMBA总线最新为AMBA3specifiedtion版本,包括AMBA3AXIInterface、AMBA3AHBInterface、AMBA3APBInterface、AMBA3ATBInterface。而s3c2410还只能支持AMBA2specification,这个版本包含AMBA2AHBInterface、AMBA2APBInterface。也就是在s3c2410的框图中看到的两种总线接口。需要注意的是,这两种总线所连的外设是有区别的。AHB总线连接高速外设,低速外设则通过APB总线互连。显然,对不同总线上的外设,应该使用不同的时钟信号,AHB总线对应Hclk,APB总线对应Pclk。那么事先就应该弄清楚,每条总线对应的外设有那些,这样在设置好时钟信号后,对应外设的初始化的值就要依此而确定了。
AHBbus上的外设有LCDcontroller(CONT代表controller控
制器)、USBHostCONTExtMasterNandCONT和nandflashbootloader、busCONT、interruptCONT、powermanagement、memoryCONT
(sram/nor/sdram等)o
APBbus上的外设有UART、USBdevic^SDI/MMC、WatchDogTimer、busCONT、spi、iic、iis、gpio、rtc、adc、timer/pwmo
3、主时钟源来自外部晶振或者外部时钟。复位后,MPLL虽然默认启动,但是如果不向MPLLC0N中写入value,那么外部晶振直接作为系统时钟。EDUKIT-III的外部晶振有两个,一是用于系统时钟,为12MHz;一个用于RTC,。以前实验没有向MPLLC0N写入数值,所以系统时钟都是12MHz。从这里也可以发现一个问题,如果外部晶振开始没有焊上,那么系统是无法正常启动的。因为按照上述规则,复位后还没有写入MPLLC0N,这时又没有可以使用的时钟源,所以不会启动。也就是硬件完成后,这个12MHz的晶振是一定要焊上的,才能进行后续的硬件测试工作。
、clock设置的步骤
首先应该读懂下一段
Power-OnReset(XTIpll)
Figure7-4showstheclockbehaviorduringthe
power-
OSC(XTIpll)clock
thePLLstartstooperateaccordingtothedef
,PLLiscommonlyknowntobeunstableaf
power-onreset,soFinisfeddirectlytoFCLKinsteadoftheMpll(PLLoutput)
PLLCONregisterafterreset,theusershouldwritethesamevalueintoPLLCONregisterbysoftware.
(Mpll)immediatelyafterlocktime.
这个主要是基于PLL的特点。简单的描述就是,上电复位后,几个ms后晶振起振。当OSC时钟信号稳定之后,nRESET电平拉高(这是硬件自动检测过程)。这个时候,PLL开始按照默认的PLL配置开始工作,但是特殊性就在于PLL在上电复位后开始是不稳定的,所以s3c2410设计为把Fin在上电复位后直接作为Fclk,这是MPLL是不起作用的。如果要想是MPLL起作用,那么方法就是写入MPLLC0N寄存器值,然后等待LOCKTIME时间后,新的Fclk开始工作。下面把这些步骤分来来描述,软件步骤部分结合程序进行。
1、 上电几个ms后,晶振输出稳定。Fclk二晶振频率。nRESET恢复高电平后,cpu开始执行指令,这完全是硬件动作,不需要软件设置。
2、 第一步软件工作:设置PMSdividercontrol,也就是设置MPLLCON寄存器。
关于PMS,可以看Figure7-,其实有
一定的规则,并非你想要的每个Fclk频率都可以得到。官方推荐了一个表PLLVALUESELECTIONTABLE,要按照这个进行。否则的话,就需要自己按照公式推算,但是mizi公司并不保证你的设置是合适的。所以,如果想要工作在200MHz,还是按照vivi的推荐值即可。
***@stepl:setPMSdividercontrol
movrl,#CLK_CTL_BASE
ldrr2,二vMPLLC0N_200
strr2,[r1,#oMPLLCON]
其中,MDIV=0x5c,PDIV=0x04,SDIV=(Fclk)=
(mXFin)/(pX(2八s))【m二MDIV+8,p=PDIV+2,s=SDIV】
3、第二步软件工作:设置CLKDIVN。
这一步是设置分频系数,即Fclk为cpu主频,Hclk由Fclk分频得到,Pclk由Hclk分频得到。假设Hclk是Fclk的二分频,Pclk是Hclk的二分频,那么分频系数比就是Fclk:Hclk:Pclk=1:2:,总线时钟周期为10ns。Pclk为50MHz。
***@step2:changeclockdivider
movr1,#CLK_CTL_BASE
movr2,#vCLKDIVN
strr2,[r1,#oCLKDIVN]
4、第三步软件工作:CLKDIVN的补充设置
to
IfHDIVN=1,theCPUbusmodehastobechangedfromthefastbusmodetheasynchronousbusmodeusingfollowinginstruetions
MMU_SetAsyncBusMode
mrepl5,0,r0,c1,c0,0orrr0,r0,#Rl_nF:OR:R1_iAmcrp15,0,r0,c1,c0,0
IfHDIVN=1andtheCPUbusmodeisthefastbusmode,
看了上段话,只需要翻译出来就可以了。
***@FCLK:HCLK=1:2
.macroMMU_SetAsyncBusMode
mrcp15
0,r0,cl
c0,0
orr
r0
r0
#(R1
_iA
|Rl_nF)
mcr
p15
0
r0
cl
c0,0
.endm
***@step3:setasynchronousbusmode
MMU_SetAsyncBusMode
5、第四步软件工作:等待locktime时间,让新的Fclk生效
***@step4:staylocktime
movr1,#CLK_CTL_BASE
ldrr2,二vLOCKTIME
strr2,[r1,#oLOCKTIME]
6、对外设的影响
在这个实验中,主要是有两个需要改变,一个外设是UART,—个外设是SDRAM。
UART,它是接在APB总线上,所以对应的时钟信号为Pclk,现在为50MHz。如果想要设置波特率为115200bps,那么根据公式UBRDIV0=(int)(PCLK/(bps*16))-1计算,应该为26。如果放到程序中,那么应该注意形式。具体如下:
UBRDIV0=((int)(PCLK/16./UART_BAUD_RATE)-1);
SDRAM,主要的影响因素为刷新频率。前面在SDRAM中没有具体分析,现在可以详细说明。使用了两片HY57V561620CT-H,查看手册其刷新频率为8192refreshcycles/64ms所以刷新周期64ms/8192=。看寄存器REFRESH的各个位的设置情况:
・REFEN[23]:开启自动模式,设为1
・TREFMD[22]:设为Autorefresh模式,设为0
•Trp[21:20]:看看RASprechargeTime,查看SDRAM手册,发现-H系列此参数至少为20ns,现在Hclk对应的时钟周期为10ns,所以至少应该为2个clock。可以设为00
•Tsrc:SemiRowCycleTime,也就是RASCycleTime,至少
65ms,,按照可选值,应该设置为11
•Refresh[10:0]:
公式refreshperiod=(2八11-refresh_count+1)/Hclk,由此推导出refresh_count=2八11+1-refreshperiod*Hclk。带入数值,计算得出1268=0x04f4,这个数值要用四舍五入,减少误差。
•其余的保留值,均设置为0
由此得出该寄存器的值应该为0x008c04f4。