[Kinetis] KEAZ1284外部时钟配置为16M

[复制链接]
2452|2
 楼主| sltian09 发表于 2015-8-18 23:19 | 显示全部楼层 |阅读模式
版主、给位大神,
1、KEAZ11284的开发板TRK-KEA 的外部时钟是8M的,现在我们做产品是的时候需要16M的时钟,最后BUS_CLK用到40M,请问在官方的历程中如何更改;
2、以下是我自己配的外部时钟选用FLL模式,但未能实现:

void Clk_Init()

{
        OSC->CR  = 0x96;
        ICS->C2  = 0x00;                                                
        while ((OSC->CR  & OSC_CR_OSCINIT_MASK) == 0); /* waiting until oscillator is ready */
        ICS->C1  = 0x20;
}

请版主以及各路大神帮忙给小弟分析一下原因,不甚感激!!
FSL_TICS_Jeremy 发表于 2015-8-19 09:17 | 显示全部楼层
请参考此分享的代码,完成从FEI到FEE的转换
  1. /*****************************************************************************//*!
  2.    +FUNCTION----------------------------------------------------------------
  3.    * [url=home.php?mod=space&uid=42490]@function[/url] name: FEI_to_FEE
  4.    *
  5.    * [url=home.php?mod=space&uid=247401]@brief[/url] change clock from FEI mode to FEE mode and divide clock by 2
  6.    *        
  7.    * @param  none
  8.    *
  9.    * [url=home.php?mod=space&uid=266161]@return[/url] none
  10.    *
  11.    * [url=home.php?mod=space&uid=72445]@[/url] Pass/ Fail criteria: none
  12.    *****************************************************************************/
  13. void FEI_to_FEE(void)
  14. {
  15.         /* assume external crystal is 8Mhz or 4MHz
  16.          *
  17.          */
  18.         /* enable OSC with high gain, high range and select oscillator output as OSCOUT
  19.          *
  20.          */
  21.         OSC_CR = OSC_CR_OSCEN_MASK
  22.         | OSC_CR_OSCSTEN_MASK         /* enable stop */
  23. #if defined(CRYST_HIGH_GAIN)
  24.         |  OSC_CR_HGO_MASK                 /* Rs must be added and be large up to 200K */
  25. #endif
  26. #if  (EXT_CLK_CRYST >=4000)
  27.         | OSC_CR_RANGE_MASK
  28. #endif       
  29.         | OSC_CR_OSCOS_MASK;                /* for crystal only */
  30. #if defined(IAR)        
  31.         asm(
  32.                 "nop \n"
  33.                 "nop \n"
  34.         );
  35. #elif defined(__MWERKS__)
  36.         asm{
  37.                 nop
  38.                 nop
  39. };        
  40. #endif        
  41.         /* wait for OSC to be initialized
  42.          *
  43.          */
  44.         while(!(OSC_CR & OSC_CR_OSCINIT_MASK));
  45.        
  46.         /* divide down external clock frequency to be within 31.25K to 39.0625K
  47.          *
  48.          */

  49.   #if (EXT_CLK_CRYST == 8000)||        (EXT_CLK_CRYST == 10000)
  50.           /* 8MHz */
  51.          ICS_C1 = ICS_C1 & ~(ICS_C1_RDIV_MASK) | ICS_C1_RDIV(3);        /* now the divided frequency is 8000/256 = 31.25K */
  52.   #elif (EXT_CLK_CRYST == 4000)
  53.           /* 4MHz */
  54.          ICS_C1 = ICS_C1 & ~(ICS_C1_RDIV_MASK) | ICS_C1_RDIV(2);        /* now the divided frequency is 4000/128 = 31.25K */       
  55.   #elif (EXT_CLK_CRYST == 16000)       
  56.           /* 16MHz */
  57.          ICS_C1 = ICS_C1 & ~(ICS_C1_RDIV_MASK) | ICS_C1_RDIV(4);        /* now the divided frequency is 16000/512 = 31.25K */
  58.          
  59.   #elif (EXT_CLK_CRYST == 20000)
  60.           /* 20MHz */
  61.           ICS_C1 = ICS_C1 & ~(ICS_C1_RDIV_MASK) | ICS_C1_RDIV(4);        /* now the divided frequency is 20000/512 = 39.0625K */
  62.          
  63.   #elif (EXT_CLK_CRYST == 32)
  64.           ICS_C1 = ICS_C1 & ~(ICS_C1_RDIV_MASK);
  65.   #else
  66.           #error "Error: crystal value not supported!\n";
  67.   #endif

  68.         /* change FLL reference clock to external clock */
  69.         ICS_C1 =  ICS_C1 & ~ICS_C1_IREFS_MASK;
  70.          
  71.        
  72.         /* wait for the reference clock to be changed to external */
  73. #if defined(IAR)        
  74.         asm(
  75.                 "nop \n"
  76.                 "nop \n"
  77.         );
  78. #elif defined(__MWERKS__)
  79.         asm{
  80.                 nop
  81.                 nop
  82. };        
  83. #endif        
  84.         while(ICS_S & ICS_S_IREFST_MASK);
  85.        
  86.         /* wait for FLL to lock */
  87.         while(!(ICS_S & ICS_S_LOCK_MASK));
  88.                
  89.         /* now FLL output clock is 31.25K*512*2 = 32MHz
  90.          *
  91.          */
  92.         if(((ICS_C2 & ICS_C2_BDIV_MASK)>>5) != 1)
  93.         {
  94.                 ICS_C2 = (ICS_C2 & ~(ICS_C2_BDIV_MASK)) | ICS_C2_BDIV(1);
  95.         }
  96.         /* now system/bus clock is the target frequency
  97.          *
  98.          */
  99.         /* clear Loss of lock sticky bit */
  100.         ICS_S |= ICS_S_LOLS_MASK;       
  101. }


 楼主| sltian09 发表于 2015-8-22 10:34 | 显示全部楼层
谢谢版主,我已经解决了!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

70

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部