主机时钟控制器提供主机时钟(MCK)的选择与分频。MCK为所有外设及存储控制器时钟。主机时钟由时钟发生器提供的时钟中选择,选择慢时钟则向整个器件提供一个慢时钟信号,选择主时钟会节省PLL功耗。主机时钟控制器由时钟选择器及预分频器组成,如图5所示。
图5 主机时钟控制器
通过写PMC_MCKR(主机时钟寄存器)的CSS域(时钟源选择)对主机时钟进行选择。预分频器分频因子为1到64之间2的幂,PMC_MCKR中的PRES域对预分频器编程。每次PMC_MCKR写入一个新的主机时钟,PMC_SR中的MCKRDY位清除。在主机时钟建立前它的值为0。然后,MCKRDY位被置位并能触发处理器中断。该特性在当高速时钟向低速时钟切换时,用来通知何时改变。
PMC是使处理器时钟控制器(PCK)执行处理器空闲模式。通过写系统时钟使能寄存器(PMC_SCER)及系统时钟禁用寄存器(PMC_SCDR)可使能或禁用处理器时钟,该时钟状态可在系统时钟状态寄存器(PMC_SCSR)中读取。处理器时钟在复位后使能并可通过任意使能中断自动重新使能。通过禁用处理器时钟进入处理器空闲模式,而处理器时钟可由任意使能的快速或普通中断重新使能,或由产品复位来使能。当处理器时钟禁用,当前指令在时钟停止前结束,但这不能防止数据由其它主机通过系统总线的传输。
USB源时钟为PLL输出。若使用USB,必须使用CKGR_PLLR中的USBDIV位编程,使PLL产生精度在±0.25%的48MHz、96MHz或192MHz信号。
当PLL输出稳定,即LOCK位置通过设置PMC_SCER中的UDP位将使能USB器件时钟,当该外设不使用时,可设置PMC_SCER中的UDP位以外节省功耗。UDP位可激活该时钟。USB器件端口需要48MHz信导及主机时钟,外设时钟控制器控制主机时钟。
图6 USB时钟控制器
外设时钟控制器用来控制每个内置外设时钟。通过对外设时钟使能(PMC_PCER)及外设时钟禁用(PMC_PCDR)寄存器来独立使能或禁用外设的主机时钟。在外设时钟状态寄存器(PMC_PCSR)中可读取外设时钟状态。当外设时钟禁用时,该时钟立即停止。外设时钟在复位后自动禁用。停止外设时,在禁用时钟前执行完最后一条指令,以避免数据出错或系统出错。
可编程时钟输出控制器控制外部引脚PCKx的3个输出信号,每个信号均可通过PMC_PCKx寄存器独立编程。通过写PMC_PCKx中的CSS域,PCKx可在慢时钟、PLL输出及主时钟间选择。每个输出信号可由1到64之间的2的幂进行分频,具体系数在PMC_PCKx中的PRES(预分频)域写入。通过在PCKx中PMC_SCER或PMC_SCDR位写入1来使能或禁用输出信号。工作的可编程时钟状态由PMC_SCSR(系统时钟状态寄存器)中的PCKx位给出。由于可编程时钟控制器不会管理当切换时钟时出现的脉冲,在配置变化前必须将可编程时钟禁用并在变化后重新使能。
使用PMC中的时钟需要按照一定的顺序进行编程,编程序列如下:
1. 使能主振荡器:
通过设置CKGR_MOR寄存器中的MOSCEN域来使能主震荡器。某些情况下定义一个启动时间是有利的,可通过在CKGR_MOR寄存器中的OSCOUNT域写入值实现。一旦该寄存器正确配置,用户必须等待PMC_SR寄存器中的MOSCS域置位。
2. 校验主振荡器频率(可选):
某些情况下用户需要精确测量主振荡器频率。测量通过CKGR_MCFR寄存器来完成。一旦CKGR_MCFR寄存器中的MAINRDY域置位,用户可读取CKGR_MCFR寄存器的MAINF域,它提供16个慢时钟周期中主时钟周期数。
3. 设置PLL与分频器:
PLL与分频器所需配置的参数均位于CKGR_PLLR寄存器。
DIV域用来控制分频器本身,取值范围为0到255,分频器输出是其输入除以DIV参数的结果。DIV参数默认值为0,表示分频器关闭。 雷达测距信号的RAM实现+源代码(3):http://www.youerw.com/tongxin/lunwen_2095.html