LM3S1138入門7,PLL(鎖相環(huán))設(shè)置系統(tǒng)時(shí)鐘
掃描二維碼
隨時(shí)隨地手機(jī)看文章
程序運(yùn)行后,先設(shè)置LDO電壓為2.75V,要點(diǎn)是:必須首先設(shè)置LDO電壓為2.75V,切記!然后配置PLL輸出為50MHz,作為系統(tǒng)時(shí)鐘。
采用PLL后,CPU運(yùn)行速度大大加快,但功耗也會(huì)明顯增大。因此在低功耗應(yīng)用場合要限制PLL的使用。
主函數(shù):
#include "LED.H"
#include
#include
#include
#include
#include
#include
// 將較長的標(biāo)識(shí)符定義成較短的形式
#define SysCtlPeriEnable SysCtlPeripheralEnable
#define SysCtlPeriDisable SysCtlPeripheralDisable
#define GPIOPinTypeIn GPIOPinTypeGPIOInput
#define GPIOPinTypeOut GPIOPinTypeGPIOOutput
// 定義KEY
#define KEY_PERIPH SYSCTL_PERIPH_GPIOG
#define KEY_PORT GPIO_PORTG_BASE
#define KEY_PIN GPIO_PIN_5
// 防止JTAG失效
void JTAG_Wait(void)
{
SysCtlPeriEnable(KEY_PERIPH); // 使能KEY所在的GPIO端口
GPIOPinTypeIn(KEY_PORT , KEY_PIN); // 設(shè)置KEY所在管腳為輸入
if ( GPIOPinRead(KEY_PORT , KEY_PIN) == 0x00 ) // 如果復(fù)位時(shí)按下KEY,則進(jìn)入
{
for (;;); // 死循環(huán),以等待JTAG連接
}
SysCtlPeriDisable(KEY_PERIPH); // 禁止KEY所在的GPIO端口
}
// 定義全局的系統(tǒng)時(shí)鐘變量
unsigned long TheSysClock = 12000000UL;
// 延時(shí)
void Delay(unsigned long ulVal)
{
while ( --ulVal != 0 );
}
// 系統(tǒng)初始化
void SystemInit(void)
{
SysCtlLDOSet(SYSCTL_LDO_2_75V); // 配置PLL前需將LDO電壓設(shè)置為2.75V
SysCtlClockSet(SYSCTL_USE_PLL | // 系統(tǒng)時(shí)鐘設(shè)置,采用PLL
SYSCTL_OSC_MAIN | // 主振蕩器
SYSCTL_XTAL_6MHZ | // 外接6MHz晶振
SYSCTL_SYSDIV_4); // 分頻結(jié)果為50MHz
TheSysClock = SysCtlClockGet(); // 獲取系統(tǒng)時(shí)鐘,單位:Hz
LED_Init(LED2 | LED3); // LED初始化
}
int main(void)
{
JTAG_Wait(); // 防止JTAG失效,重要!
SystemInit(); // 系統(tǒng)初始化
LED_On(LED2); // 點(diǎn)亮LED2
LED_Off(LED3); // 熄滅LED3
for (;;)
{
LED_Toggle(LED2 | LED3);
Delay(150 * (TheSysClock / 4000)); // 延時(shí)約150ms
}
}