智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4579|回复: 5
打印 上一主题 下一主题

时钟频率问题

[复制链接]

2

主题

4

帖子

0

精华

注册会员

Rank: 2

积分
180
威望
231
贡献
39
兑换币
0
注册时间
2010-7-20
在线时间
4 小时
跳转到指定楼层
1#
发表于 2010-7-20 17:18:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
刚开始学s12单片机,对于其时钟频率存在问题。
Q:总共有多少种时钟频率及它们之间关系?(现已知外部晶振时钟、总线时钟、锁相环时钟)

1

主题

43

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1798
威望
235
贡献
1549
兑换币
4
注册时间
2008-5-29
在线时间
7 小时
2#
发表于 2010-7-20 19:55:34 | 只看该作者
本帖最后由 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)
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
477
威望
218
贡献
247
兑换币
20
注册时间
2010-8-16
在线时间
6 小时
3#
发表于 2010-8-16 20:20:23 | 只看该作者
我知道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禁止看门狗
}
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
477
威望
218
贡献
247
兑换币
20
注册时间
2010-8-16
在线时间
6 小时
4#
发表于 2010-8-16 20:20:27 | 只看该作者
我知道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禁止看门狗
}
回复 支持 反对

使用道具 举报

0

主题

32

帖子

0

精华

高级会员

Rank: 4

积分
570
威望
380
贡献
90
兑换币
0
注册时间
2012-2-25
在线时间
50 小时
毕业学校
山东大学
5#
发表于 2012-4-10 17:23:46 | 只看该作者
hao
回复 支持 反对

使用道具 举报

5

主题

560

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3867

优秀会员奖章活跃会员奖章在线王奖章论坛元老奖章

威望
2373
贡献
182
兑换币
711
注册时间
2012-4-15
在线时间
656 小时
6#
发表于 2012-5-20 15:11:07 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-29 20:28 , Processed in 0.167840 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表