第十四屆智能車培訓 PLL鎖相環
阿新 • • 發佈:2018-09-22
技術分享 新的 tps 等待 技術 穩定 20M 最大 com
什麽是鎖相環?
PLL(Phase Locked Loop): 為鎖相回路或鎖相環,用來統一整合時脈訊號,使高頻器件正常工作,如內存的存取資料等。PLL用於振蕩器中的反饋技術。 許多電子設備要正常工作,通常需要外部的輸入信號與內部的振蕩信號同步。一般的晶振由於工藝與成本原因,做不到很高的頻率,而在需要高頻應用時,由相應的器件VCO,實現轉成高頻,但並不穩定,故利用鎖相環路就可以實現穩定且高頻的時脈沖訊號。
鎖相環主要作用:
單片機使用鎖相環(PLL)功能能夠獲得更高的總線頻率,這對於需要提高單片機運行速度的場合非常必要。
鎖相環相關寄存器簡介:
1、CRG時鐘合成寄存器(SYNR)
該寄存器低6位有效,有效值0~63
2、時鐘分頻寄存器(REFDV)
該寄存器有效位為寄存器的低4位,有效值為0~15
3、時鐘選擇寄存器(CLKSEL)
PLLSEL置1:Bus Clock = PLLCLK / 2 置0:Bus Clock = OSCCLK / 2)
設置鎖相環計算方法
配置鎖相環的主要目的是為了得到新的總線時鐘,其配置主要依據下面的三個公式:
Fosc系統總線時鐘頻率
Fpll鎖相環時鐘頻率
Fbus總線時鐘頻率
配置流程:
1. CLKSEL=0X00; // 在CLKSEL最高位為0時才能設置其他寄存器
2. 設置相關參數 SYNR ( 時鐘合成寄存器 ) REFDY ( 時鐘分頻寄存器 )
3. 等待 PLL 穩定 該部分用到的寄存器 CRGFLG_LOCK 當 CRGFLG_LOCK=1 表示時鐘頻率已經穩定
4、CLKSEL=0x80 ;//使用PLL時鐘
例程代碼:
void PLL_Init(void) { CLKSEL=0; //時鐘選擇寄存器的最高位為0 Bus Clock(總線時鐘)= OSCCLK / 2) // 為1 Bus Clock(總線時鐘)= PLLCLK / 2) // 在CLKSEL最高位為0時才能設置其他寄存器 SYNR=0x44;//時鐘合成寄存器 0100 0100 因低六位有效所以最大為63 REFDV=0x81;//時鐘分頻寄存器 1000 0001因低四位有效所以最大為15 外部晶振fosc=8M,BUS clock=20M _asm(nop); //空操作 _asm(nop); while(!CRGFLG_LOCK==1); //當CRGFLG_LOCK!=1時 //CRGFLG_LOCK=1 表示時鐘頻率已經穩定 CLKSEL=0X80; //時鐘選擇寄存器的最高位 // 在CLKSEL最高位設置為1其他寄存器不允許設置 }
void PLL(void) { SYNR=0x01; //時鐘主頻:PLL clock = 2*OSC CLOCK*(1+SYNR)/(1+REFDV) REFDV=0x00; // PLL clock = 32MHz = 2* 8 * 2 / 1 while(!(CRGFLG_LOCK==1)); //等待晶振穩定 CLKSEL_PLLSEL=1; //對時鐘主頻/2得到 //總線時鐘:BUS CLOCK = PLL CLOCK / 2 //BUS CLOCK =16MHz = 32 /2 } //ECT模塊的輸出比較功能設置 //通道0
//根據元件的工作頻率選擇單片機合適的主頻率 //system clock 8MHZ(系統時鐘) void PLL(void) //設定總線頻率 (超頻) { CLKSEL=0x00; //初始化PLL前先使用外部晶振(晶振時鐘) SYNR=0x01; //時鐘主頻:PLL clock = 2*OSC CLOCK*(1+SYNR)/(1+REFDV) REFDV=0x00; //got 32 MHZ = 2*8*2/1 while(!(CRGFLG_LOCK==1)); //等待晶振穩定(時鐘校正同步) CLKSEL_PLLSEL=1;//(CLKSEL=0x80;) //BUS CLOCK 16 MHZ = PLL CLOCK / 2 (選定鎖相環時鐘)(PLLSEL置1:Bus Clock = PLLCLK / 2) }
第十四屆智能車培訓 PLL鎖相環