基础时钟源
器件有2个时钟源可供使用:
■ 内部振荡器(IOSC):内部振荡器是片内时钟源。 它不需要使用任何外部元件。 内部振荡器的
频率是12 MHz ± 30%。 不依赖精确时钟源的应用可以使用这个时钟源来降低系统成本。
■ 主振荡器:主振荡器用下面的其中一种方法来提供一个频率精确的时钟源:OSC0输入管脚连接
一个外部单端时钟源或在OSC0输入和OSC1输出管脚之间连接一个外部晶体。 允许的晶体值取决
于主振荡器是否用作PLL的时钟参考源。 如果主振荡器用作PLL的时钟参考源,那么支持的晶体
频率范围为3.579545 MHz~8.192 MHz (3.579545 MHz和8.192 MHz包含在内)。 如果没有使
用PLL,则支持的晶体频率在1 MHz和8.192 MHz之间。 单端时钟源的范围从DC到器件的指定速
率之间。
内部系统时钟(sysclk)来自 2个时钟源以及内部PLL输出和4分频的内部振荡器 (3 MHz ± 30%)。
PLL时钟基准的频率必须在3.579545 MHz 到 8.192 MHz 的范围之内(3.579545MHz、8.192MHz
和 16.384MHz 包括在内)。
几乎所有的时钟控制都是由运行模式时钟配置(RCC)寄存器提供的。
外设模块由系统时钟信号驱动,可以被编程为使能/禁能。ADC时钟信号被自动向下分频为16.67 MHz ,
以满足ADC操作的要求。 PWM时钟信号是系统时钟的同步分频,从而提供带有更大范围的PWM电路。
在这里我想说的是为什么用PLL,我想说白了就是想提高运行速度,就是超频超到50MHZ,其实平时6MHZ
就够用
说PLL就不得不说PLL的分频值
系统时钟分频值
指定使用哪个分频值来从PLL输出产生系统时钟。
PLL VCO的频率是200 MHz。
值分频值(BYPASS=1) 频率(BYPASS=0)
0x0 保留保留
0x1 /2 保留
0x2 /3 保留
0x3 /4 50 MHz
0x4 /5 40 MHz
0x5 /6 33.33 MHz
0x6 /7 28.57 MHz
0x7 /8 25 MHz
0x8 /9 22.22 MHz
0x9 /10 20 MHz
0xA /11 18.18 MHz
0xB /12 16.67 MHz
0xC /13 15.38 MHz
0xD /14 14.29 MHz
0xE /15 13.33 MHz
0xF /16 12.5 MHz(默认)
下面的例子我选4分频就是50MHZ
顺便说下我这个实例,这个老好了,直接从LED灯看到各种主频的变化
我用的是LED5就是那个红灯,
刚开始是慢四,然后快六,然后特快
好像提前过年一样,呵呵
少费话,上程
#include <LM3Sxxx.H>
#define LED 0x01
unsigned char ddd ;
void uit(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_6MHZ);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_0 |GPIO_PIN_1 );
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0,0x00);
}
void LED_Toggle(void)
{
if(ddd == 0)
{
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0,LED);
ddd = 0x01;
}
else
{
GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0,0x00);
ddd = 0x00;
}
}
// 延时
void Delay(unsigned long ulVal)
{
while ( --ulVal != 0 );
}
// LED闪烁usTimes次
void LED_Flash( unsigned short usTimes)
{
unsigned short n = 2 * usTimes;
do
{
LED_Toggle();
Delay(200000UL);
} while ( --n != 0 ); //循环
}
// 防止JTAG失效
void jtagWait(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); // 使能KEY所在的GPIO端口
GPIOPinTypeGPIOInput(GPIO_PORTC_BASE,GPIO_PIN_4); // 设置KEY所在管脚为输入
if (GPIOPinRead(GPIO_PORTC_BASE,GPIO_PIN_4) == 0x00) // 若复位时按下KEY,则进入
{
while(1); // 死循环,以等待JTAG连接
}
SysCtlPeripheralDisable(SYSCTL_PERIPH_GPIOC); // 禁止KEY所在的GPIO端口
}
int main(void)
{
jtagWait(); // 防止JTAG失效,重要!
uit(); // LED初始化
for (;;)
{
SysCtlClockSet(SYSCTL_USE_OSC | // 系统时钟设置,采用振荡器
SYSCTL_OSC_MAIN | // 主振荡器
SYSCTL_XTAL_6MHZ | // 外接6MHz晶体
SYSCTL_SYSDIV_3); // 3分频
LED_Flash(4);
SysCtlClockSet(SYSCTL_USE_OSC | // 系统时钟设置,采用振荡器
SYSCTL_OSC_INT | // 内部振荡器(12MHz±30%)
SYSCTL_SYSDIV_2); // 2分频
LED_Flash(6);
SysCtlLDOSet(SYSCTL_LDO_2_75V); //配置PLL前需将LDO电压设置为2.75V
SysCtlClockSet(SYSCTL_USE_PLL | // 系统时钟设置,采用PLL
SYSCTL_OSC_MAIN | // 主振荡器
SYSCTL_XTAL_6MHZ | // 外接6MHz晶振
SYSCTL_SYSDIV_4); // 分频结果为50MHz
LED_Flash(6);
}
}
这个把相应库文件包含到LIB就行,图如下,没有什么要修。S文件地非常方便运行
myPLL.zip
(1.09 KB, 下载次数: 55)