TMS320F2802x_Piccolo系列DSC原理及应用 下载本文

图 2.8 时钟寄存器(XCLK) 表 2.7 时钟寄存器(XCLK)的域描述

保留。 XCLKIN源选择位:这个位选择XCLKIN输入源。 GPIO38是XCLKIN输入源(这也是JTAG端口的TCK源)。 GPIO19是XCLKIN输入源。 5-2 保留 保留 0-0 XCLKOUTDIV XCLKOUT分频比:这两个位选择XCLKOUT 频率相对于SYSCLKOUT的比率。比率是: 00 XCLKOUT = SYSCLKOUT/4 01 XCLKOUT = SYSCLKOUT/2 10 XCLKOUT = SYSCLKOUT 11 XCLKOUT = Off (1) XCLK寄存器的XCLKINSEL位由XRS输入信号来复位。 2.2.3 配置器件时钟域

位 15-7 6 域 保留 XCLKINSEL 值 0 1 描述(1) CLKCTL寄存器用来选择时钟源,也用来配置时钟故障期间器件的行为。

图 2.9 时钟控制(CLKCTL)寄存器 表 2.8 时钟控制寄存器(CLKCTL)的域描述

位 15 域 NMIRESETSEL 值 0 1 描述 NMI复位选择位:该位在检测到一个缺少时钟条件时直接产生MCLKRS信号和使用NMIRS复位两者之间进行选择: 没有任何延迟地直接驱动MCLKRS(复位时的默认状态)。 NMI看门狗复位(NMIRS)启动MCLKRS。 注:不管作何选择,都会产生CLOCKFAIL信号。

续上表

位 域 值 17

描述

14 XTALOSCOFF 13 XCLKINOFF 0 1 0 1 12 WDHALTI 0 1 11 INTOSC2HALTI 0 1 0 1 10 INTOSC2OFF 9 INTOSC1HALTI 0 1 8 INTOSC1OFF 0 1 晶体振荡器关闭位:如果晶体振荡器不使用,可以使用该位将其关闭。 晶体振荡器开启(复位时的默认状态)。 晶体振荡器关闭。 XCLKIN关闭位:该位关闭外部XCLKIN振荡器输入 XCLKIN振荡器输入启用(复位时的默认状态)。 XCLKIN振荡器输入关闭。 注:你需要通过XCLK寄存器的XCLKINSEL位选择XCLKIN 的GPIO引脚。更详细的信息请见XCLK寄存器的描述。如果使用XCLKIN,XTALOSCOFF就必须置位。 看门狗停机模式忽略位:该位选择是否通过停机模式自动开启/关闭看门狗。这个特性可以在停机模式有效时用来允许所选的WDCLK源继续计时看门狗。这可以允许看门狗周期性地唤醒器件。 看门狗自动通过停机模式开启/关闭(复位时的默认状态)。 看门狗忽略停机模式。 内部振荡器2 停机模式忽略位:该位选择是否通过停机模式自动开启/关闭内部振荡器2。这个特性可以在停机模式有效时用来允许内部振荡器继续计时。这将使能器件更快地从停机模式中唤醒。 内部振荡器2自动通过停机模式开启/关闭(复位时的默认状态)。 内部振荡器2忽略停机模式。 内部振荡器2关闭位:该位关闭振荡器2 内部振荡器2开启(复位时的默认状态)。 内部振荡器2关闭。如果内部振荡器2不被使用,用户可以使用该位将其关闭。这个选择不受缺少时钟检测电路影响。 内部振荡器1 停机模式忽略位:该位选择是否通过停机模式自动开启/关闭内部振荡器1。 内部振荡器1自动通过停机模式开启/关闭(复位时的默认状态)。 内部振荡器1忽略停机模式。这个特性可以在停机模式有效时用来允许内部振荡器继续计时。这将使能器件更快地从停机模式中唤醒。 内部振荡器1关闭位:该位关闭振荡器1 内部振荡器1开启(复位时的默认状态)。 内部振荡器1关闭。如果内部振荡器1不被使18

用,用户可以使用该位将其关闭。这个选择不受缺少时钟检测电路影响。

续上表

位 域 值 7-5 TMR2CLKPRESCALE 000 001 010 011 100 101 110 111 4-3 TMR2CLKSRCSEL 00 01 10 11 描述 CPU Timer2时钟预分频值:这些位为所选的CPU Timer2时钟源选择预分频值。这个选择不受缺少时钟检测电路影响。 /1(复位时的默认状态) /2 /4 /8 /16 保留 保留 保留 CPU Timer2时钟源选择位:该位为CPU Timer2选择时钟源 选择SYSCLKOUT(复位时的默认状态,绕过预分频器)。 选择外部振荡器(XOR输出)。 选择内部振荡器1。 选择内部振荡器2。这个选择不受缺少时钟检测电路影响。 看门狗时钟源选择位:该位选择看门狗的时钟源。在XRS为低时和XRS变为高之后,默认选择内部振荡器1。用户需要在初始化过程中选择外部振荡器或内部振荡器2。如果缺少时钟检测电路检测到缺少时钟,那么该位被强制为0,并选择内部振荡器1。用户更改该位不影响PLLCR值。 选择内部振荡器1(复位时的默认状态)。 选择外部振荡器或内部振荡器2。 振荡器2时钟源选择位:这个位用来在内部振荡器2或外部振荡器两者之间作选择。这个选择不受缺少时钟检测电路影响。 选择外部振荡器(复位时的默认状态)。 选择内部振荡器2。 振荡器时钟源选择位。这个位选择振荡器的时钟源。在XRS为低时和XRS变为高之后,默认选择内部振荡器1。用户需要在19

2 WDCLKSRCSEL 0 1 1 OSCCLKSRC2SEL 0 1 0 OSCCLKSRCSEL

初始化过程中选择外部振荡器或内部振荡器2。只要用户使用这些位来改变时钟源,PLLCR寄存器将被自动强制为零。这阻止了潜在的PLL过冲。然后,用户必须写PLLCR寄存器来配置合适的分频比。如果必要,用户也可以使用PLLLOCKPRD寄存器来配置PLL锁定周期以缩短锁定时间。如果缺少时钟检测电路检测到缺少时钟,那么这个位被自动强制为0,并选择内部振荡器1作为时钟。PLLCR寄存器也将自动强制为0来防止所有潜在的过冲。 选择内部振荡器1(复位时的默认状态)。 选择外部振荡器或内部振荡器2。注:如果用户希望使用振荡器2或外部振荡器来计时CPU,必须应该先配置这个位,然后再写OSCCLKSRCSEL位。 ? 在没有外部时钟的情况下切换到INTOSC2 在没有外部时钟、时钟从INTOSC1切换到INTOSC2的情况下,为了使器件能够正常工作,应用代码需要先向CLKCTL寄存器的XTALOSCOFF和XCLKINOFF位写入1。这样来告知时钟切换电路没有外部时钟。只有这么做之后,OSCCLKSRCSEL和OSCCLKSRC2SEL位才能被写入。注意,这个序列应该分成以下两次写操作:

第一次写 → CLKCTL.XTALOSCOFF = 1和CLKCTL.XCLKINOFF = 1 第二次写 → CLKCTL.OSCCLKLSRCSEL = 1和CLKCTL.OSCCLKSRC2SEL = 1

第二次写不应当更改XTALOSCOFF和XCLKINOFF位的值。如果使用了德州仪器(TI)提供的DSP28头文件(SPRC823),就可以利用下面的一段代码来达成时钟切换:

SysCtrlRegs.CLKCTL.all = 0x6000; // 设置XTALOSCOFF=1 & XCLKINOFF=1 SysCtrlRegs.CLKCTL.all = 0x6003; // 设置OSCCLKLSRCSEL=1 & OSCCLKSRC2SEL=1

作为头文件一部分的系统初始化文件(DSP2802x_SysCtrl.c)还包含切换到不同时钟源的函数。如果在没有写XTALOSCOFF和XCLKINOFF位的情况下尝试从INTOSC1切换到INTOSC2,由于没有外部时钟源(即使选择了合适的时钟源之后),将会检测到缺少时钟。PLL将被清零,器件将自动清除MCLKSTS位并切换回INTOSC1。

2.2.4 基于PLL的时钟模块

0 1 20