搜索
bottom↓
回复: 23

飞思卡尔单片机(MC9S12XS128)系列之1-系统时钟的设置

[复制链接]

出0入0汤圆

发表于 2011-8-11 15:42:41 | 显示全部楼层 |阅读模式
作者     :fire
时间地点 :2009 年于广州
开发平台 :MC9S12XS128最小系统(龙丘出品)
编译环境 :Freescale CodeWarrier 4.7

写在前面的话->:
单片机要工作的话要具备一些基本条件,其中一条就是要有稳定的同步信号。在飞思卡尔 S12 这款单片机中 这个同步信号像其他单片机一样也是由 外部晶振来提供的。但与传统 51 单片机不同的是 S12 里面集成了 PLL (锁相环) 倍频电路,它可以把外部晶振的频率超到一定之后再提供给单片机,做为系统时钟。并且这个 PLL 电路是可以软件编程的。所以在对 S12 这款单片机进行软件编程时,首先就要配置系统的时钟。假如没有配置好系统时钟的话就像人没有了心脏一样,接下来单片机具体在干什么事就只有它知道。

配置系统时钟的步骤如下:
1、失能系统 PLL   
2、打开 PLL 电路
3、计算频率
   要改变频率只要修改 SYNR、REFDV、POSTDIV 这三个寄存器的值即可。具体怎么修改,改成多大可参考
   datasheet,MC9S12XS128RMV1.pdf 这个 PDF 文档(文档是英文的),里面有具体的公式。以下给出常用的
   配置。
   /*----------40M----------*/
   SYNR =0xc0 | 0x04; REFDV=0xc0 | 0x01; POSTDIV=0x00;
   /*----------48M----------*/
   SYNR =0xc0 | 0x05; REFDV=0xc0 | 0x01; POSTDIV=0x00;
   /*----------64M----------*/
   SYNR =0xc0 | 0x07; REFDV=0xc0 | 0x01; POSTDIV=0x00;
4、等待 PLL 输出频率稳定
5、使能系统 PLL

实验的目的:学会 MC9S12XS128 这款单片机系统时钟的配置很 GPIO 的使用。

/********************************代码实现*************************************/
#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"

/*--------函数原型声明-------------------------**/
void SetBusCLK_48M(void);
void DE_48M_ms(int ms);
/*----------------------------------------------*/
/*--------主函数中 8路LED以200ms的间隔闪烁-------*/
void main(void)
{
  byte i = 0;
  DisableInterrupts;
  SetBusCLK_48M();
  
  DDRB = 0XFF;     //PB口设置为输出
  PORTB = 0XFF;    //PB口初始化输出高电平
  
  for(;;)
  {
     for(i=0;i<8;i++)
     {
         PORTB &= ~(1<<i);    //LED ON
         DE_48M_ms(200);
         PORTB |= (1<<i);     //LED OFF
         DE_48M_ms(200);
     }
  }
}







/*-----------------配置系统时钟------------------*/   
void SetBusCLK_48M(void)
{   
    CLKSEL = 0X00;   //disengage PLL to system
    PLLCTL_PLLON = 1;  //turn on PLL
    SYNR = 0xc0 | 0x05;                        
    REFDV = 0xc0 | 0x01;
    POSTDIV = 0x00;         //pllclock=2*osc*(1+SYNR)/(1+REFDV)=80MHz;
    _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;
}
/*-----------------ms 级延时---------------------*/
void DE_48M_ms(int ms)  
{
    int ii,jj;
    if (ms<1) ms=1;
        for(ii=0;ii<ms;ii++)
            for(jj=0;jj<4006;jj++);  //48MHz--1ms            
}
/*---------------end of file----------------------*/

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2011-8-11 15:43:59 | 显示全部楼层
沙发自己坐,希望能通过审核。

出0入0汤圆

发表于 2011-8-16 22:48:56 | 显示全部楼层
审核通过  表示祝贺

出0入0汤圆

发表于 2011-8-16 23:49:49 | 显示全部楼层
呵呵,组合通过了……顶一下

出0入0汤圆

 楼主| 发表于 2011-8-20 18:51:30 | 显示全部楼层
回复【2楼】jetimchen
-----------------------------------------------------------------------

恩,大家多多交流

出0入0汤圆

发表于 2011-8-20 19:44:37 | 显示全部楼层
参加过飞思卡尔智能车的路过

出0入0汤圆

发表于 2011-9-21 17:57:11 | 显示全部楼层
呵呵呵  可以借鉴

出0入0汤圆

发表于 2011-11-15 12:38:53 | 显示全部楼层
做个标记

出0入0汤圆

发表于 2011-11-24 13:21:30 | 显示全部楼层
学习一下来

出0入0汤圆

发表于 2011-11-26 15:15:18 | 显示全部楼层
好!希望多分享。

出0入0汤圆

发表于 2011-11-26 19:40:02 | 显示全部楼层
路过。

出0入0汤圆

发表于 2011-11-28 12:00:45 | 显示全部楼层
回复【楼主位】fire 野火
-----------------------------------------------------------------------

/*----------40M----------*/
   SYNR =0xc0 | 0x04; REFDV=0xc0 | 0x01; POSTDIV=0x00;
   /*----------48M----------*/
   SYNR =0xc0 | 0x05; REFDV=0xc0 | 0x01; POSTDIV=0x00;
   /*----------64M----------*/
   SYNR =0xc0 | 0x07; REFDV=0xc0 | 0x01; POSTDIV=0x00;  
强悍!非常不错!

出0入0汤圆

发表于 2012-1-2 15:53:28 | 显示全部楼层
/*----------40M----------*/  
   SYNR =0xc0 | 0x04; REFDV=0xc0 | 0x01; POSTDIV=0x00;  
   /*----------48M----------*/  
   SYNR =0xc0 | 0x05; REFDV=0xc0 | 0x01; POSTDIV=0x00;  
   /*----------64M----------*/  
   SYNR =0xc0 | 0x07; REFDV=0xc0 | 0x01; POSTDIV=0x00;   
这个为什么这么写,这么计算啊?好像与文档说的不一样。

出0入0汤圆

发表于 2012-1-6 13:58:02 | 显示全部楼层
我记得好像超频是有个限度的,楼主是否给出?不然很会误导人的,我记得NE64好像是25M

出0入0汤圆

发表于 2012-1-7 13:39:59 | 显示全部楼层
好东西

出0入0汤圆

发表于 2012-2-10 17:10:49 | 显示全部楼层
学习了,谢谢

出0入0汤圆

发表于 2012-4-20 20:56:46 | 显示全部楼层
延时子程序受教了

出0入0汤圆

发表于 2012-6-5 22:12:12 | 显示全部楼层
嗯,我也准备用这款芯片

出0入0汤圆

发表于 2012-8-21 14:01:11 | 显示全部楼层
谢谢,正在找一些飞思卡尔的资料

出0入0汤圆

发表于 2016-4-27 20:38:09 | 显示全部楼层
几年前比赛用过,现在又要用了

出0入0汤圆

发表于 2018-12-20 16:27:17 | 显示全部楼层
     楼主配置为系统时钟后,还需要配置工作模式嘛?我用的飞思卡尔MC9S12ZVM,程序带仿真器的时候运行是正常的,但是程序不带仿真器,单独跑,跑不起来。

晶振,电源,复位信号都是正常的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-14 18:12

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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