搜索
bottom↓
回复: 28

KE02 IAR 怎么配置系统时钟(已解决)

[复制链接]

出0入0汤圆

发表于 2014-1-3 15:31:58 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_ZJJ 于 2014-1-28 11:10 编辑

本人小白,看来半天KE02的datasheet,结果没办法啊,感觉不如ST的直观易懂。
datasheet里面有关于时钟配置的描述,可根本没给出计算方法(也可能是我没找到)。
以下面这段代码为例:

Example: 20.5.1.1 FEI mode initialization routine
/* the following code segment demonstrates setting ICS to FEI mode generating 36MHz bus*/
ICS_C2 = 0x00; /*BDIV=0, no prescalar
ICS_C1 = 0x04; /* internal reference clock to FLL */
ICS_C3 = TRIM_VALUE_35.15625KHZ; /* FLL output 36MHz */
/* the following code segment demonstrates setting ICS to FEI mode generating 4.5MHz bus*/
ICS_C2 = 0x60; /*BDIV=3, prescalar = 8 */
ICS_C1 = 0x04; /* internal reference clock to FLL */
ICS_C3 = TRIM_VALUE_35.15625KHZ; /* FLL output 4.5MHz */

通过设置ICS_C2和ICS_C3来设置FLL output ,再看ICS_C3的描述(见图片),我看了半天不知道FLL output 4.5MHz和 FLL output 36MHz 是怎么计算出来的。
有哪位大神知道?

谁能系统的讲一下KE02的时钟应用啊,能有例程最好。

以上有错误的地方还请各位原谅我是个小白吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。

出0入0汤圆

发表于 2014-1-3 16:06:58 | 显示全部楼层
你好,欢迎你的提问,我来回答这个问题。
首先,我给你讲一下时钟系统,根据系统图走,你会觉得很容易理解,KE02的时钟系统是很简单的,因为只有FLL,没有PLL。系统图如下:



就拿你说的例子为例,
FEI 模式,指的是FLL使能,FLL的时钟来源为内部时钟。
1:
/* the following code segment demonstrates setting ICS to FEI mode generating 36MHz bus*/
ICS_C2 = 0x00; /*BDIV=0, no prescalar
ICS_C1 = 0x04; /* internal reference clock to FLL */
ICS_C3 = TRIM_VALUE_35.15625KHZ; /* FLL output 36MHz */
这段配置的计算为:
ICSOUTCLK=35.15625KHZ *1024 =36MHZ

2:
/* the following code segment demonstrates setting ICS to FEI mode generating 4.5MHz bus*/
ICS_C2 = 0x60; /*BDIV=3, prescalar = 8 */
ICS_C1 = 0x04; /* internal reference clock to FLL */
ICS_C3 = TRIM_VALUE_35.15625KHZ; /* FLL output 4.5MHz */

同样是FEI模式,
则这段配置的计算为:
ICSOUTCLK=35.15625KHZ *1024/8 =4.5MHZ

您理解了吗?
如果还有不理解的地方,欢迎提问!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-1-3 16:35:23 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-1-3 16:06
你好,欢迎你的提问,我来回答这个问题。
首先,我给你讲一下时钟系统,根据系统图走,你会觉得很容易理解 ...

ICS_C3寄存器用来配置TRIM:ICS_C3= TRIM_VALUE_35.15625KHZ;这句中
把TRIM_VALUE_35.15625KHZ 这个数值写入寄存器,那么又是怎么计算得出 IRC = 35.15625khz呢?

出0入0汤圆

发表于 2014-1-3 16:37:45 | 显示全部楼层
ln08136207 发表于 2014-1-3 16:35
ICS_C3寄存器用来配置TRIM:ICS_C3= TRIM_VALUE_35.15625KHZ;这句中
把TRIM_VALUE_35.15625KHZ 这个数值 ...

这个值是芯片内部自动trim的,你只要根据你自己的要求推一下就知道自己要多少了。
只要这个值在31.25-39.0625KHZ之间就行。

出0入0汤圆

 楼主| 发表于 2014-1-3 16:49:09 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-1-3 16:37
这个值是芯片内部自动trim的,你只要根据你自己的要求推一下就知道自己要多少了。
只要这个值在31.25-39. ...

比如说,我想要用内部的时钟得到系统时钟为20Mhz,那么假设设置ICS_C2为2分频,即FLL的输出需要达到40Mhz,同样设置ICS_C1为1024倍,
那么我要怎么计算出应该给ICS_C3的赋什么值?
我找不到计算方法,或许是我理解错误

出0入0汤圆

发表于 2014-1-3 16:55:50 | 显示全部楼层
ln08136207 发表于 2014-1-3 16:49
比如说,我想要用内部的时钟得到系统时钟为20Mhz,那么假设设置ICS_C2为2分频,即FLL的输出需要达到40Mhz, ...

那你就倒推啊:40M/1024=39.0625Khz。

出0入0汤圆

 楼主| 发表于 2014-1-3 16:58:23 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-1-3 16:55
那你就倒推啊:40M/1024=39.0625Khz。

我能计算出来是39.0625Khz,可这个值是可以直接写进ICS_C3这个寄存器吗?给寄存器赋浮点数?

出0入0汤圆

发表于 2014-1-3 17:04:56 | 显示全部楼层
ln08136207 发表于 2014-1-3 16:58
我能计算出来是39.0625Khz,可这个值是可以直接写进ICS_C3这个寄存器吗?给寄存器赋浮点数? ...

稍等,我给你找点资料!

出0入0汤圆

发表于 2014-1-3 17:37:39 | 显示全部楼层
请查看这个帖子中:http://www.amobbs.com/thread-5557128-1-1.html
时钟上篇,在第3页讲如何trim。

出0入0汤圆

 楼主| 发表于 2014-1-4 13:35:55 | 显示全部楼层
本帖最后由 ln08136207 于 2014-1-4 13:38 编辑
FSL_TICS_ZJJ 发表于 2014-1-3 17:37
请查看这个帖子中:http://www.amobbs.com/thread-5557128-1-1.html
时钟上篇,在第3页讲如何trim。 ...


这个文档我看过了,里面讲的是用CodeWarriror10.3配置的,并没有给出计算的方法,也没有讲用户自己怎么用代码去配置?难道用IAR 和J-LINK没办法进行时钟配置?

出0入0汤圆

 楼主| 发表于 2014-1-6 09:03:19 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-1-3 17:37
请查看这个帖子中:http://www.amobbs.com/thread-5557128-1-1.html
时钟上篇,在第3页讲如何trim。 ...

还没上班?

出0入0汤圆

发表于 2014-1-6 10:09:23 | 显示全部楼层

上班啦,哈哈!
还有一个办法可以计算的,你稍等下,上次下班急,没来得及回你。
待会我在我板子上再检查一遍,确保可以执行,然后把方法告诉你。
稍等哈!

出0入0汤圆

 楼主| 发表于 2014-1-6 16:08:19 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-1-6 10:09
上班啦,哈哈!
还有一个办法可以计算的,你稍等下,上次下班急,没来得及回你。
待会我在我板子上再检查 ...

老大,测试好了吗?
你先把计算方法告诉我也行啊

出0入0汤圆

发表于 2014-1-6 17:39:33 | 显示全部楼层
本帖最后由 FSL_TICS_ZJJ 于 2014-1-7 13:07 编辑
ln08136207 发表于 2014-1-6 16:08
老大,测试好了吗?
你先把计算方法告诉我也行啊


不好意思,回复你回复迟了
你需要这样做。
1,读出你的ICS_C3的值,这个值对应的就是31.25khz,我读出来是0x80。
2,SCTRIM的每个位(步长)就等于31.25K*0.002=0.0625.
3,算你想要的频率需要增加多少个步长。
4,加上你读的ICS_C3的值就是你的目标trim值。
C3变大则频率变小,即周期变长。
C3变小则频率变大,即周期减小。

OK,然后你就把这个值填到ICS_C3中。
你可以试试了。

出0入0汤圆

 楼主| 发表于 2014-1-7 15:07:43 | 显示全部楼层
本帖最后由 ln08136207 于 2014-1-7 15:11 编辑
FSL_TICS_ZJJ 发表于 2014-1-6 17:39
不好意思,回复你回复迟了
你需要这样做。
1,读出你的ICS_C3的值,这个值对应的就是31.25khz,我读出来 ...


谢谢freescale FAE 的支持,经过测试,这个方法不能准确的得到期望的值,IRC是一个闭环设计,每个芯片的RC都不一样,用户自己用代码调整,无法做到闭环调整,所以精度达不到。
建议使用出厂校正的31.25KHZ,这样系统时钟最高可以达到16MHZ.

经过测试,使用内部时钟,经过FLL得到16Mhz的主频,配置RTC,使能中断,在中断中翻转IO口(频率1KHZ),经过示波器观察发现,实际的翻转一次大概994us,即有6us的误差,
对比datasheet,内部时钟的精度为1.5%,是不是意味着,这个误差在设计误差之内?

出0入0汤圆

发表于 2014-1-7 17:25:19 | 显示全部楼层
ln08136207 发表于 2014-1-7 15:07
谢谢freescale FAE 的支持,经过测试,这个方法不能准确的得到期望的值,IRC是一个闭环设计,每个芯片的RC都 ...

这个计算方法还是有点问题,我这边也在测试。
回头我找到准确方法再告诉您!

出0入0汤圆

发表于 2014-1-7 17:27:07 | 显示全部楼层
ln08136207 发表于 2014-1-7 15:07
谢谢freescale FAE 的支持,经过测试,这个方法不能准确的得到期望的值,IRC是一个闭环设计,每个芯片的RC都 ...

先给你一篇应用笔记,你可以先看看。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-8-1 07:59:52 | 显示全部楼层
好东西 mark一下

出0入0汤圆

发表于 2014-8-27 15:10:44 | 显示全部楼层
好资料正在看这个。

出0入0汤圆

发表于 2014-11-3 11:03:52 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-1-6 17:39
不好意思,回复你回复迟了
你需要这样做。
1,读出你的ICS_C3的值,这个值对应的就是31.25khz,我读出来 ...

我用KE02开发板实验了一下,读到的初值是0x8D,
那么要想得到40M的主频,应该是40M/1024=39.0625KHz
那么步长应该要加 (39.0625-31.25)/0.0625=125个步长,16进制即0x7D,
所以ICS_C3应该赋值为0x10。
而我实际用IO口翻转测试频率非常不稳定啊。

出0入0汤圆

发表于 2014-11-4 17:55:34 | 显示全部楼层
很好的时钟实践操作帖 MARK

出0入0汤圆

发表于 2014-11-11 14:33:26 | 显示全部楼层
了解一下

出0入0汤圆

发表于 2014-11-11 14:56:38 | 显示全部楼层
tianyime 发表于 2014-11-3 11:03
我用KE02开发板实验了一下,读到的初值是0x8D,
那么要想得到40M的主频,应该是40M/1024=39.0625KHz
那么 ...

这样按步长算是有问题的,如果你的FRDM-KE02的板子,你可以直接用PEtrim到39.0625Khz
具体方法看这个贴子:http://www.amobbs.com/thread-5569833-1-1.html

出0入0汤圆

发表于 2014-12-11 16:35:03 | 显示全部楼层
本帖最后由 彼岸花开@ 于 2014-12-11 16:36 编辑
FSL_TICS_ZJJ 发表于 2014-1-3 16:06
你好,欢迎你的提问,我来回答这个问题。
首先,我给你讲一下时钟系统,根据系统图走,你会觉得很容易理解 ...


你好
1、那个1024 是怎么个回事呢。能指出在文档的哪里吗?
2、 KE02_SC 设置的BUS_CLK 是多少呢
3、BUS_CLK 是在这里设置的吗?
  1. void FEI_to_FEE(void)
  2. {
  3.         /* assume external crystal is 8Mhz or 4MHz
  4.          *
  5.          */
  6.         /* enable OSC with high gain, high range and select oscillator output as OSCOUT
  7.          *
  8.          */
  9.         OSC_CR = OSC_CR_OSCEN_MASK
  10.         | OSC_CR_OSCSTEN_MASK         /* enable stop */
  11. #if defined(CRYST_HIGH_GAIN)
  12.         |  OSC_CR_HGO_MASK                 /* Rs must be added and be large up to 200K */
  13. #endif
  14. #if  (EXT_CLK_CRYST >=4000)
  15.         | OSC_CR_RANGE_MASK
  16. #endif       
  17.         | OSC_CR_OSCOS_MASK;                /* for crystal only */
  18. #if defined(IAR)        
  19.         asm(
  20.                 "nop \n"
  21.                 "nop \n"
  22.         );
  23. #elif defined(__MWERKS__)
  24.         asm{
  25.                 nop
  26.                 nop
  27. };        
  28. #endif        
  29.         /* wait for OSC to be initialized
  30.          *
  31.          */
  32.         while(!(OSC_CR & OSC_CR_OSCINIT_MASK));
  33.        
  34.         /* divide down external clock frequency to be within 31.25K to 39.0625K
  35.          *
  36.          */

  37.   #if (EXT_CLK_CRYST == 8000)||        (EXT_CLK_CRYST == 10000)
  38.           /* 8MHz */
  39.          ICS_C1 = ICS_C1 & ~(ICS_C1_RDIV_MASK) | ICS_C1_RDIV(3);        /* now the divided frequency is 8000/256 = 31.25K */
  40.   #elif (EXT_CLK_CRYST == 4000)
  41.           /* 4MHz */
  42.          ICS_C1 = ICS_C1 & ~(ICS_C1_RDIV_MASK) | ICS_C1_RDIV(2);        /* now the divided frequency is 4000/128 = 31.25K */       
  43.   #elif (EXT_CLK_CRYST == 16000)       
  44.           /* 16MHz */
  45.          ICS_C1 = ICS_C1 & ~(ICS_C1_RDIV_MASK) | ICS_C1_RDIV(4);        /* now the divided frequency is 16000/512 = 31.25K */
  46.          
  47.   #elif (EXT_CLK_CRYST == 20000)
  48.           /* 20MHz */
  49.           ICS_C1 = ICS_C1 & ~(ICS_C1_RDIV_MASK) | ICS_C1_RDIV(4);        /* now the divided frequency is 20000/512 = 39.0625K */
  50.          
  51.   #elif (EXT_CLK_CRYST == 32)
  52.           ICS_C1 = ICS_C1 & ~(ICS_C1_RDIV_MASK);
  53.   #else
  54.           #error "Error: crystal value not supported!\n";
  55.   #endif

  56.         /* change FLL reference clock to external clock */
  57.         ICS_C1 =  ICS_C1 & ~ICS_C1_IREFS_MASK;
  58.          
  59.        
  60.         /* wait for the reference clock to be changed to external */
  61. #if defined(IAR)        
  62.         asm(
  63.                 "nop \n"
  64.                 "nop \n"
  65.         );
  66. #elif defined(__MWERKS__)
  67.         asm{
  68.                 nop
  69.                 nop
  70. };        
  71. #endif        
  72.         while(ICS_S & ICS_S_IREFST_MASK);
  73.        
  74.         /* wait for FLL to lock */
  75.         while(!(ICS_S & ICS_S_LOCK_MASK));
  76.                
  77. [color=Red]        /* now FLL output clock is 31.25K*512*2 = 32MHz                                                                //这里提示32MHZ 是怎么来的呢
  78.          *                                                                                                                                        
  79.          */[/color]
  80.         if(((ICS_C2 & ICS_C2_BDIV_MASK)>>5) != 1)
  81.         {
  82.                 ICS_C2 = (ICS_C2 & ~(ICS_C2_BDIV_MASK)) | ICS_C2_BDIV(1);
  83.         }
  84.         /* now system/bus clock is the target frequency
  85.          *
  86.          */
  87.         /* clear Loss of lock sticky bit */
  88.         ICS_S |= ICS_S_LOLS_MASK;       
  89. }
复制代码

出100入101汤圆

发表于 2014-12-11 16:45:28 | 显示全部楼层
彼岸花开@ 发表于 2014-12-11 16:35
你好
1、那个1024 是怎么个回事呢。能指出在文档的哪里吗?
2、 KE02_SC 设置的BUS_CLK 是多少呢

1024是用设置倍频的。看6楼回复。

出0入0汤圆

发表于 2014-12-11 16:46:27 | 显示全部楼层
fengyunyu 发表于 2014-12-11 16:45
1024是用设置倍频的。看6楼回复。

文档那页呢。

出100入101汤圆

发表于 2014-12-11 16:51:07 | 显示全部楼层

39.0625Khz是内部振荡器频率,这个前面回复中有配置过程。要通过PLL电路得到40m的主频,则倍频需要设为1024。哪页就不知道了,自己找找。

出0入0汤圆

发表于 2014-12-11 16:53:48 | 显示全部楼层
fengyunyu 发表于 2014-12-11 16:51
39.0625Khz是内部振荡器频率,这个前面回复中有配置过程。要通过PLL电路得到40m的主频,则倍频需要设为10 ...

我看这个KE02_SC使用的是外部时钟。。。好像不用去配置ics_s3这个。。
我在仔细看看文档、

出0入0汤圆

发表于 2014-12-11 17:11:08 | 显示全部楼层
fengyunyu 发表于 2014-12-11 16:51
39.0625Khz是内部振荡器频率,这个前面回复中有配置过程。要通过PLL电路得到40m的主频,则倍频需要设为10 ...


这段是提示FLL超频1024倍吗?有点读不明白。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

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

本版积分规则

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

GMT+8, 2024-9-27 07:26

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

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