微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 常用xs128超频代码

常用xs128超频代码

时间:10-02 整理:3721RD 点击:

#include <hidef.h>      /* common defines and macros */

#include <MC9S12XS128.h>     /* derivative information */

#pragma LINK_INFO DERIVATIVE "mc9s12xs128"

void delayms(int ms)

{  

   int ii,jj;

   if (ms<1) ms=1;

   for(ii=0;ii<ms;ii++)

     for(jj=0;jj<3338;jj++);    //40MHz--1ms     

}

void SetBusCLK_16M(void)

{  

    CLKSEL=0X00;    // disengage PLL to system

    PLLCTL_PLLON=1;   // turn on PLL

    SYNR=0x00 | 0x01;  // VCOFRQ[7:6];SYNdiv[5:0]

                        // fVCO= 2*fOSC*(SYNdiv + 1)/(REFdiv + 1)

                        // fPLL= fVCO/(2 × POSTdiv)

                        // fBUS= fPLL/2

                        // VCOCLK Frequency Ranges  VCOFRQ[7:6]

                        // 32MHz <= fVCO <= 48MHz    00

                        // 48MHz <  fVCO <= 80MHz    01

                        // Reserved                  10

                        // 80MHz <  fVCO <= 120MHz   11   

    REFDV=0x80 | 0x01;  // REFFRQ[7:6];REFdiv[5:0]

                        // fREF=fOSC/(REFdiv + 1)

                        // REFCLK Frequency Ranges  REFFRQ[7:6]

                        // 1MHz <= fREF <=  2MHz       00

                        // 2MHz <  fREF <=  6MHz       01

                        // 6MHz <  fREF <= 12MHz       10

                        // fREF >  12MHz               11                        

                        // pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;

    POSTdiv=0x00;       // 4:0, fPLL= fVCO/(2xPOSTdiv)

                        // If POSTdiv = $00 then fPLL is identical to fVCO (divide by one).

    _asm(nop);          // BUS CLOCK=16M

    _asm(nop);

    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;

    CLKSEL_PLLSEL =1;          //engage PLL to system;

}

void SetBusCLK_32M(void)

{  

    CLKSEL=0X00;    // disengage PLL to system

    PLLCTL_PLLON=1;   // turn on PLL

    SYNR =0x40 | 0x03;  // pllclock=2*osc*(1+SYNR)/(1+REFDV)=64MHz;                     

    REFDV=0x80 | 0x01;

    POSTdiv=0x00;

    _asm(nop);          // BUS CLOCK=32M

    _asm(nop);

    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;

    CLKSEL_PLLSEL =1;          //engage PLL to system;

}

void SetBusCLK_40M(void)

{  

    CLKSEL=0X00;    //disengage PLL to system

    PLLCTL_PLLON=1;   //turn on PLL

    SYNR =0xc0 | 0x04;                       

    REFDV=0x80 | 0x01;

    POSTdiv=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;

    _asm(nop);          //BUS CLOCK=40M

    _asm(nop);

    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;

    CLKSEL_PLLSEL =1;          //engage PLL to system;

}

void SetBusCLK_48M(void)

{  

    CLKSEL=0X00;    //disengage PLL to system

    PLLCTL_PLLON=1;   //turn on PLL

    SYNR =0xc0 | 0x05;                       

    REFDV=0x80 | 0x01;

    POSTdiv=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=96MHz;

    _asm(nop);          //BUS CLOCK=48M

    _asm(nop);

    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;

    CLKSEL_PLLSEL =1;          //engage PLL to system;

}

void SetBusCLK_64M(void)

{  

    CLKSEL=0X00;    //disengage PLL to system

    PLLCTL_PLLON=1;   //turn on PLL

    SYNR =0xc0 | 0x07;                       

    REFDV=0x80 | 0x01;

    POSTdiv=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=128MHz;

    _asm(nop);          //BUS CLOCK=64M

    _asm(nop);

    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;

    CLKSEL_PLLSEL =1;          //engage PLL to system;

}

void SetBusCLK_80M(void)

{  

    CLKSEL=0X00;    //disengage PLL to system

    PLLCTL_PLLON=1;   //turn on PLL

    SYNR =0xc0 | 0x09;                       

    REFDV=0x80 | 0x01;

    POSTdiv=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz;

    _asm(nop);          //BUS CLOCK=80M

    _asm(nop);

    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;

    CLKSEL_PLLSEL =1;          //engage PLL to system;

}

void SetBusCLK_88M(void)

{  

    CLKSEL=0X00;    //disengage PLL to system

    PLLCTL_PLLON=1;   //turn on PLL

    SYNR =0xc0 | 0x0a;                       

    REFDV=0x80 | 0x01;

    POSTdiv=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=176MHz;

    _asm(nop);          //BUS CLOCK=88M

    _asm(nop);

    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;

    CLKSEL_PLLSEL =1;          //engage PLL to system;

}

void SetBusCLK_96M(void)

{  

    CLKSEL=0X00;    //disengage PLL to system

    PLLCTL_PLLON=1;   //turn on PLL

    SYNR =0xc0 | 0x0b;                       

    REFDV=0x80 | 0x01;

    POSTdiv=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=192MHz;

    _asm(nop);          //BUS CLOCK=96M

    _asm(nop);

    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;

    CLKSEL_PLLSEL =1;          //engage PLL to system;

}

void SetBusCLK_104M(void)

{  

    CLKSEL=0X00;    //disengage PLL to system

    PLLCTL_PLLON=1;   //turn on PLL

    SYNR =0xc0 | 0x0c;                       

    REFDV=0x80 | 0x01;

    POSTdiv=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=208MHz;

    _asm(nop);          //BUS CLOCK=104M

    _asm(nop);

    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;

    CLKSEL_PLLSEL =1;          //engage PLL to system;

}

void SetBusCLK_120M(void)

{  

    CLKSEL=0X00;    //disengage PLL to system

    PLLCTL_PLLON=1;   //turn on PLL

    SYNR =0xc0 | 0x0d;                       

    REFDV=0x80 | 0x01;

    POSTdiv=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=240MHz;

    _asm(nop);          //BUS CLOCK=120M

    _asm(nop);

    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;

    CLKSEL_PLLSEL =1;          //engage PLL to system;

}

void main(void) {

  /* put your own code here */

  unsigned char LedCnt=0;

  SetBusCLK_96M();    // 此处选择待设定的总线频率

  DDRB=0xff;

  DDRA=0x01;

  PORTA=0XFE;

  PORTB=0XFE;

  EnableInterrupts;

  for(;;) {  

    LedCnt=(LedCnt>0XFE?0:++LedCnt);

    delayms(500);   // 修改延时以修改数据发送频率

   

    //低电平灯亮用这句,注释掉下面那句

    PORTB=~LedCnt;         // 测试清华版系统板

    PORTA_PA0=~PORTA_PA0;  // 测试龙丘最小系统板

    //PORTB_BIT7=~PORTB_BIT7;

    //高电平灯亮用这句,注释掉上面那句  

    //PORTB=LedCnt;

  } /* wait forever */

  /* please make sure that you never leave this function */

}


好东西  学习学习

谢谢小编分享!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top