时钟问题



使用12Mhz晶振如何设置RCC和RCC2,SysCtlClockSet()使Sysclock为80Mhz,

使用内部16Mhz时钟又应该怎么设置呢?

  •    SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_12MHZ);

       如果没有程序上设置器件时钟,那么片子上电默认使用的就是内部16MHz时钟,所以如果要使用内部16MHz时钟,只需要将上面的SysCtlClockSet()注释掉即可!

  • 这样配置之后System clock 不是80Mhz

  • 你可以用SysCtlClockGet()来查看一下系统时钟到底是多少

  • PLL工作在400MHz频率下,在输出分频应用前先被2分频,即200MHz。但如果DIV400 位置1时,使用400MHzPLL输出。

    我们要设置RCC2 = 1,此时RCC域被忽略。

    置位RCC2中DIV400 ,这样可使SYSDIV2和SYSDIV2LSB构成一个7位的分频值来使用400MHz的频率输出。此时分频值为((SYSDIV2 << 1) | SYSDIV2)+ 1。

    SYSDIV2位 = 0x2,系统时钟分频值2。

    SYSDIV2LSB = 0。这样分频值为5 = (((0x2<<1)| 0x0) + 1)

    USBPWRDN = 0,USB PLL工作正常

    PWRDN2 = 0,PLL工作正常,

    BYPASS2 = 0,系统时钟是被SYSDIV2规定的分频值分频的PLL时钟。

    OSCSRC2 = 0,使用主振荡器

    这样RCC2的值为0xC1000000

    利用TI提供干的API,应该是SysCtlClockSet(SYSCTL_SYSDIV_2_5| SYSCTL_USE_PLL | SYSCTL_XTAL_12MHZ |  SYSCTL_OSC_MAIN);

    你说设置后的频率不是80MHz,不知道你是怎么调试的,我用9B96的开发板和9b90的评估板测试没有问题。

    或者你可是试一下提高LDO输出电压SysCtlLDOSet(SYSCTL_LDO_2_75V);然后再看看频率为多少

  • 什么都不设置默认使用内部16MHz时钟,另外9B96内部还有一个PIOSC(精确内部振荡器)。

    使用内部时钟时也可以使用PLL,然后分频得到所需要的时钟频率。

    这样也可以得到80MHz的时钟频率

    SysCtlClockSet(SYSCTL_SYSDIV_2_5| SYSCTL_USE_PLL |  SYSCTL_OSC_INT);

  • 其实你可以尝试更改SysCtlClockSet的参数来看对系统时钟的影响。

    即便设置错误导致MCU挂起,也可以通过LM Flash Programmer修复,不用担心片子废掉。

  • 谢谢,硬件原理我看懂的,就是硬件函数库感觉TI的说明不是很清楚(也许是刚刚接触TI的芯片和它的硬件函数库),按照大家的建议实现了80MHz的系统时钟。我没有用开发板,自己做的最小系统。

    谢谢!