嵌入式软件工程师&&太极拳
全部博文(548)
分类: 嵌入式
2012-05-16 09:30:49
先看时钟的产生:
首先,9g20有时钟产生器有以下三部分组成,通过引脚连到芯片上:
一个慢时钟晶体振荡器,可产生32,768 Hz的频率。
一个慢时钟RC振荡器。
一个住振荡器。
这三个振荡器,在芯片内产生四大种时钟,
一,MCK(主时钟),它为所有的片内外围设备和存储器控制器提供时钟信号 ;对于片内外设,为了节省电能,用户可以选择性的关闭和打开其对应的时钟,因为每个外设时钟可控制。方法是通过寄存器PMC_PCER和PMC_PCDR中的相关位。状态可已在PMC_PCSR中查到。当复位后,外设默认关闭。
二,PCK(处理器时钟),为处理器正常工作提供时钟信号,可通过寄存器(PMC_SCDR)关闭这个时钟,从而使处理器进入空闲模式(Idle).可被各种中断激活。PCK与MCK的关系是,通过一个除法器,从MCK中产生了PCK。
三,USB 源时钟,这个时钟是由PLLB输出产生的(它们之间的关系请看下图)。如果要用USB,用户必须对PLL进行编程,让其产生一个48MHZ到96MHZ之间的频率。因为PLL的频率特别大。这个通过CKGR_PLLKB中的USBDIV位设置。
四,可编程时钟输出控制器PCKx.(芯片引脚两个信号,共外界用)。
另外,处理器有几种工作模式,正常模式,空闲模式,慢时钟模式,睡眠模式。正常模式下,所有外设.ARM核电源都打开,耗电最大。空闲模式下,ARM核电源关闭,外设正常工作。慢时钟模式下,主震荡器和PLL都关闭,所有设备由外部慢时钟供电。睡眠模式,关掉所有电源,只唤醒电路在工作。
需要说明的一点事,PLL 的功能主要是成倍放大震荡器产生的频率。
AT91SAM9G20 时钟设置步骤:
1,激活主频发生器
在CKGR_MOR寄存器里面的MOSCEN,是主频发生器能用。在OSCOUNT 里可以设置启动时间。一旦这个被设置,则必须等待PMC_RG里的MOSCS被设置。
2,检查主频发生器频率
在CLGR_MKFR里设读MAINF.
3. 设置PLLA和PLLB
PLLA : 在CKGR_PLLAR,除法器的输出是其输入除于DIVA. 默认DIVA设成0,代表除法器不能用。OUTA选择PLLA输出频率的范围。MULA是PLLA倍率。0代表关闭PLLA.否则,其输出等于输入频率乘以(MULA+1). PLLACOUNT指定慢时钟的循环次数。要在MPC_SR中LOCKA设置之前,CKGR_PLLAB被写入之后。一旦CKGR_PLLA被写入,LOCKA位在六个慢时钟后被设置。
PLLB:和A一样的。
4, 主时钟和处理器时钟
在PMC_MCKR寄存器中配置,CSS被用来选择主频和处理器时钟源,分频器(Prescaler)的输出频率是时钟源除以PRES中的参数,如果PRES被设成1,主时钟和处理器时钟都是慢时钟。MDIV(0,1,2,3)字段被用来控制主频除法器,主频的输出是主频和处理器分频器除以(1,2,4,6)。如果MADIV和PDIV被设置成0 ,表明处理器频率等于主频。一旦PMC_MCKR寄存器被写入,用户必须等待PMC_SR中MCKRDY位被设置。
注意几个名词:
Master Clock, Processor Clock , Programmable clocks
下面介绍一下电源管理中各个寄存器的用法:
1, 系统时钟使能寄存器 PMC_SCER
可以设置处理器时钟PCK, USB时钟,可编程时钟PCKx的禁止或使能。
2, 系统时钟状态寄存器 PMC_SCSR
可以查看各个时钟的状态,即是否被设置。
3, 外设时钟使能寄存器 PMC_PCER
禁止或使能各个外设的时钟,0是不影响,1是使能。其中对应的30位分别对应如下表:
4, 外设时钟使禁止寄存器 PMC_PCDR
禁止各个外设的时钟,0是不影响,1是禁止。
5, 主震荡器使能寄存器 CKGR_MOR
可以设置三个参数,一,使能或禁止主震荡器,二,是否忽略主震荡器,三,主震荡器的启动时间,一般为慢时钟8倍个周期。
6, 主频发生器使能寄存器 CKGR_MCFR
设置主时钟的周期。
7,锁相环寄存器A CKGR_PLLAR
一, 可以设置锁相环稳定之前的周期数(慢时钟);二,输出频率的范围,数据手册有
数值;三,设置乘法因子和除法因子。
8, 锁相环寄存器B CKGR_PLLBR
和A一样,多了一个USBDIV
9,主时钟寄存器 PMC_MCKR
可以设置这样几个参数:选择时钟,MDIV(主频因子), PDIV(处理器频率因子)。
10,可编程时钟 PMC_PCKx
可编程时钟,从这个寄存器里面可以选择可编程时钟选择哪个时钟源。即CSS.
11,电源中断禁止使能寄存器 PMC_IDR (与之对应的是PMC_IER)
可以禁止掉主震荡器,锁相环等的中断功能。
12,电源管理状态寄存器 PMC_SR
为只读寄存器,从中可以读出主震荡器,PLLA,PLLB, MCKRDY等状态。
13,电源管理屏蔽寄存器 PMC_IMR
分别可以屏蔽掉,主振荡器状态中断屏蔽功能,PLLA(B)锁定中断屏蔽功能,主时钟准备中断屏蔽功能,和可编程时钟准备中断屏蔽功能。
14,PMC_PLLICPR
这个寄存器是为了优化时钟设置的,里面所设参数为固定值。看数据手册。