查看: 2552|回复: 5

[求助] KL02Z 如何设置FEE模式?

[复制链接]
  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
    发表于 2016-7-30 17:31:13 | 显示全部楼层 |阅读模式
    本帖最后由 足球爱好者 于 2016-7-30 17:33 编辑

    我想参考例程写了一个,然后用uart测试(在默认FEI模式下能正常工作),发现不成功。找了好久问题,都没找到。
    FEE的配置要求如图:
    我想的配置路线:蓝线所示


    我的配置过程大概:1、先配置OSC,选择板子的8M外部晶振。 2、配置MCG2相关   3、配置MG4,使得FLL倍频数为1280     4、配置MCG1相关,设置分频数为256。
      目的是8M外部晶振 先分频256到FLL,再倍频1280,得到MCGOUTCLOCK=40M。

    现象:配置MCG2的 MCG_C2_EREFS0(0)时,程序卡在配置程序的  while(!(MCG->S & MCG_S_OSCINIT0_MASK )){}
              MCG_C2_EREFS0(1)(看了网上的一些例程),配置程序能走完,但串口发送的是乱码,明显配置不对。
              MCG2 的 EREFS0 的两个选项有啥区别?
             


    最后想问问就是为啥子不成功,头好大。路过的版友知道的支援一下!!!

    程序:

    主程序简单,就不发了

    MCG配置程序:
    //使用外部时钟源
    void fei_fee(unsigned int external_clock)
    {
      unsigned char temp_reg;
      //1、选择外部时钟源,并且在STOP模式下继续开启
      OSC0->CR = OSC_CR_ERCLKEN_MASK | OSC_CR_EREFSTEN_MASK;

      //2、 configure the MCG_C2 register
      /* the RANGE value is determined by the external frequency.
         Since the RANGE parameter affects the FRDIV divide value  
        it still needs to be set correctly even if the oscillator is not being used
      */
      temp_reg = MCG->C2;
      temp_reg &= ~(MCG_C2_RANGE0_MASK | MCG_C2_HGO0_MASK | MCG_C2_EREFS0_MASK);
      //选择外部时钟为8M,而FLL范围为31.25 to 39.0625 kHz,则FRDIV范围为204.8~256
      temp_reg |= (MCG_C2_EREFS0(1)| MCG_C2_RANGE0(1) | MCG_C2_HGO0(1));
      MCG->C2 = temp_reg;


      //2、 configure the MCG_C4 register
       temp_reg = MCG->C4;
      /*MCG_C4的DMX32和DRST_DRS共同决定了FLL的倍频数*/
      temp_reg &= ~(MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK);
      //1 与 0 ——>倍频数为1280,
      temp_reg |= (MCG_C4_DRST_DRS(1) | MCG_C4_DMX32(0));  
      MCG->C4 = temp_reg;

      // Select external oscilator and Reference Divider and clear IREFS to start ext osc
    // If IRCLK is required it must be enabled outside of this driver, existing state will be maintained
    // CLKS=0, FRDIV=frdiv_val, IREFS=0, IRCLKEN=0, IREFSTEN=0
      temp_reg = MCG->C1;
      temp_reg &= ~(MCG_C1_CLKS_MASK | MCG_C1_FRDIV_MASK | MCG_C1_IREFS_MASK);
      // 此时FRDIV=256
      temp_reg |= (MCG_C1_CLKS(0) | MCG_C1_FRDIV(3)| MCG_C1_IREFS(0));
      MCG->C1 = temp_reg;

      while(!(MCG->S & MCG_S_OSCINIT0_MASK )){}
      while(MCG->S & MCG_S_IREFST_MASK ){}
      while(MCG->S & MCG_S_CLKST_MASK){}

      //此时MCGOUTCLOCK=(8M/256)*1280=40M

    }



    串口配置程序:
    void UATR0_Init(uint32_t UART_BaudRate,uint8_t Priority)
    {
      uint32_t uartClkSrcFreq;
      uint8_t temp;
      uint16_t sbr;

      //打开时钟

      //选择时钟源(MCGFLLCLK clock)
      SIM->SOPT2 |=1<<26;        
      //打开串口时钟
    SIM->SCGC4|=1<<10;        
      //打开TX RX引脚端口时钟

      //TX RX 引脚配置 第二中模式跟外部中断有关
      PORTB->CR[1]|=0x02<<8;
      PORTB->CR[2]|=0x02<<8;

      //配置UART0前先禁止其收发
      UART0->C2 &= ~(UART0_C2_TE_MASK | UART0_C2_RE_MASK);

      //设置波特率
       //计算SBR值        
      uartClkSrcFreq=CLOCK_GetFreq(kCLOCK_McgFllClk);
      sbr = (uint16_t)((uartClkSrcFreq)/(UART_BaudRate * 16));
      //将计算好的SBR值得高位写进寄存器
      temp = UART0->BDH & ~UART0_BDH_SBR_MASK;  
       UART0->BDH = temp | (uint8_t)(sbr >> 8);

      //将SBR低八位值写进寄存器  
      UART0->BDL = (uint8_t)sbr;
      //使能UART0接收中断
      UART0->C2 |= UART0_C2_RIE_MASK;
      //5、使能TX RX
      UART0->C2 |= (UART0_C2_TE_MASK | UART0_C2_RE_MASK );


      NVIC_EnableIRQ(UART0_IRQn);     //使能中断
      NVIC_SetPriority(UART0_IRQn,Priority); //设置中断优先级
    }


    我知道答案 目前已有5人回答

    蓝线所示

    蓝线所示

    MCG2

    MCG2
    捕获.PNG
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
     楼主| 发表于 2016-7-30 17:34:47 | 显示全部楼层
    自己先顶顶。路过的版友,绑定一下
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    0

    新手上路

    Rank: 1

    积分
    8
    最后登录
    2016-7-30
    发表于 2016-7-30 18:51:48 | 显示全部楼层
    bucun,woxihuan
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
     楼主| 发表于 2016-8-1 09:29:41 | 显示全部楼层

    谢谢捧场
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-10-25 10:29
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    15

    主题

    81

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    272
    最后登录
    2019-6-10
     楼主| 发表于 2016-8-1 09:30:22 | 显示全部楼层
    万能的版友,求支援
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    712

    主题

    6371

    帖子

    0

    超级版主

    Rank: 8Rank: 8

    积分
    24858
    最后登录
    2025-7-17
    发表于 2016-8-1 10:33:28 | 显示全部楼层
    楼主可以使用附件文档,里面有各种时钟模式配置供参考 Attachment.zip (7.26 KB, 下载次数: 10)
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-18 14:04 , Processed in 0.101164 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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