智能车制作

标题: 时钟频率问题 [打印本页]

作者: 6500s    时间: 2010-7-20 17:18
标题: 时钟频率问题
刚开始学s12单片机,对于其时钟频率存在问题。
Q:总共有多少种时钟频率及它们之间关系?(现已知外部晶振时钟、总线时钟、锁相环时钟)
作者: hwqdg    时间: 2010-7-20 19:55
本帖最后由 hwqdg 于 2010-7-20 19:59 编辑

在S12中,总线时钟来自锁相环时钟,锁相环时钟通过外部晶振倍频得到。
如在XS中:
当POSTDIV!=0时,fbus=fpll/2=fvco/(4*POSTDIV)=fosc*(SYNDIV+1)/(2*POSTDIV*(REFDIV+1))
当POSTDIV=0时, fbus=fpll/2=fvco/2=fosc*(SYNDIV+1)/(REFDIV+1)
作者: napoleon90    时间: 2010-8-16 20:20
我知道dg128的……
这是一段程序:
void MCUInit(void)
{
    //(1)禁止总中断
    DISABLE_INTERRUPTS;
    //(2)CLKSEL的第7位置0,选择系统时钟源为OSCCLK
      //在PLL程序执行前,内部总线频率=OSCCLK/2
      //clksel.7(PLL选择位)决定内部总线时钟来源
      //=O,BusClock=OSCCLK/2; =1,BusClock=PLLCLK/2
    //CLKSEL &= 0x7f;      //此时:BusClock=OSCCLK/2
    CLKSEL_PLLSEL=0;
    //(3)禁止PLL
    //PLLCTL &= 0xbf;//PLLCTL.6(pllon)设为0;先关闭PLL
    PLLCTL_PLLON=0;
    //(4)根据需要的时钟频率设置SYNR和REFDV寄存器
    //计算公式LLCLK=2*OSCCLK*((SYNR+1)/(REFDV+1))
    SYNR = 0x00;         //对PLLCLK增频的因子
    REFDV = 0x00;        //对PLLCLK分频的因子
        
    //(5)打开PLL
    PLLCTL |= (1<<6);    //PLLCTL.6(pllon)设为1;开PLL
    //(6)通过判断CRGFLG寄存器的LOCK位,确定PLL是否稳定
   // while ((CRGFLG&0x08) == 0x00);
   while(CRGFLG_LOCK==0);
    //(7)时钟频率稳定后,允许锁相环时钟源作为系统时钟源;
    CLKSEL |= (1<<7);    //本句执行后:BusClock=PLLCLK/2
    //(8)设置是否允许IRQ中断、是否允许看门狗
    INTCR &= 0xbf;       //IRQCR.6(IRQEN) =0禁止IRQ中断(默认开)
    COPCTL = 0x00;       //COPCTL.2-0(cr2:cr0) =000禁止看门狗
}
作者: napoleon90    时间: 2010-8-16 20:20
我知道dg128的……
这是一段程序:
void MCUInit(void)
{
    //(1)禁止总中断
    DISABLE_INTERRUPTS;
    //(2)CLKSEL的第7位置0,选择系统时钟源为OSCCLK
      //在PLL程序执行前,内部总线频率=OSCCLK/2
      //clksel.7(PLL选择位)决定内部总线时钟来源
      //=O,BusClock=OSCCLK/2; =1,BusClock=PLLCLK/2
    //CLKSEL &= 0x7f;      //此时:BusClock=OSCCLK/2
    CLKSEL_PLLSEL=0;
    //(3)禁止PLL
    //PLLCTL &= 0xbf;//PLLCTL.6(pllon)设为0;先关闭PLL
    PLLCTL_PLLON=0;
    //(4)根据需要的时钟频率设置SYNR和REFDV寄存器
    //计算公式LLCLK=2*OSCCLK*((SYNR+1)/(REFDV+1))
    SYNR = 0x00;         //对PLLCLK增频的因子
    REFDV = 0x00;        //对PLLCLK分频的因子
        
    //(5)打开PLL
    PLLCTL |= (1<<6);    //PLLCTL.6(pllon)设为1;开PLL
    //(6)通过判断CRGFLG寄存器的LOCK位,确定PLL是否稳定
   // while ((CRGFLG&0x08) == 0x00);
   while(CRGFLG_LOCK==0);
    //(7)时钟频率稳定后,允许锁相环时钟源作为系统时钟源;
    CLKSEL |= (1<<7);    //本句执行后:BusClock=PLLCLK/2
    //(8)设置是否允许IRQ中断、是否允许看门狗
    INTCR &= 0xbf;       //IRQCR.6(IRQEN) =0禁止IRQ中断(默认开)
    COPCTL = 0x00;       //COPCTL.2-0(cr2:cr0) =000禁止看门狗
}
作者: lwbwd    时间: 2012-4-10 17:23
hao
作者: 封号式寂寞    时间: 2012-5-20 15:11





欢迎光临 智能车制作 (http://www.znczz.com/) Powered by Discuz! X3.2