📄 pllset.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzhou ZHIYUAN electronics Co.,LTD.
**
** http://www.embedtools.com
**
**--------------File Info-------------------------------------------------------------------------------
** File Name: PLLSet.c
** Last modified Date: 2006-11-15
** Last Version: v1.0
** Description: Stellaris系列单片机PLL设置
**
**------------------------------------------------------------------------------------------------------
** Created By: Zhou Lishan
** Created date: 2006-11-15
** Version: v1.0
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Description:
**
********************************************************************************************************/
#define HWREG(x) (*((volatile unsigned long *)(x)))
#define SYSCTL_RIS 0x400fe050
#define SYSCTL_RCC 0x400fe060
#define SYSCTL_MISC 0x400fe058
#define SYSDIV 0x7 // 0x7, PLL时钟8分频,系统时钟为25MHz
#define XTAL 0xb // 0xb,使用6MHz晶体振
#define OSCSRC 00 // 使用主(外部)振荡器
void PLLSet(void)
{
unsigned long ulRCC ,ulDelay;
ulRCC = HWREG(SYSCTL_RCC); // 读取当前RCC寄存器的值
ulRCC |= 1 << 11; // 旁路PLL
ulRCC &= ~(1 << 22); // 不使用系统分频器
HWREG(SYSCTL_RCC) = ulRCC; // 写RCC寄存器
ulRCC = HWREG(SYSCTL_RCC);
ulRCC &= ~(3<<4); // 选择主振荡器作时钟
ulRCC &= ~(0xf<<6); // 设置晶振频率
ulRCC |= (XTAL<<6) ;
ulRCC &= ~(0xf<<23); // 设置分频系数
ulRCC |= (SYSDIV <<23) ;
ulRCC &=~(1<<13); // PLL 上电
ulRCC &=~(1<<12); // PLL使能输出
HWREG(SYSCTL_RCC) = ulRCC; // 写RCC寄存器
for(ulDelay = 32768; ulDelay > 0; ulDelay--)// 如果XTAL值不更新,PLL值不会再次锁定,
{ // 也即不会产生PLL锁定标记
if((HWREG(SYSCTL_RIS)&(1<<6))) // 等待PLL锁定
{
HWREG(SYSCTL_MISC) = 1<<6; // 清PLL锁定位
break;
}
}
HWREG(SYSCTL_RCC) |= 1 << 22; // 使用系统分频器
HWREG(SYSCTL_RCC) &= ~(1<<11); // PLL输出到系统时钟
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -