历史上的今天
返回首页

历史上的今天

今天是:2024年08月26日(星期一)

正在发生

2021年08月26日 | 飞思卡尔Kinetis 60(K60)时钟系统分析

2021-08-26 来源:eefocus

前段时间学习了飞思卡尔K60芯片的时钟系统,对它的时钟系统有了个大致的了解,这里把自己的理解写下来分享一下,以备以后参考。

飞思卡尔 Kinetis系列是飞思卡尔推出的基于ARM CORTEX-M4为核心的微控制器。


1.飞思卡尔K60时钟系统

     

    飞思卡尔K60时钟系统如上图所示,可以发现器件的源时钟源一共有4个:

    ①内部参考时钟源,包括 Fast IRC和 slow IRC (IRC--Internal Reference Clock)

    ②外部参考时钟源,只一个EXTAL管脚作为时钟输入,这个可以使用有源晶体振荡器来实现

    ③外部晶体谐振器,使用EXTAL和XTAL两个管脚来输入

    ④外部32K RTC 谐振器,用于实时时钟的时钟输入

    在图中可以看到,要为系统提供时钟信号,关键是要最终生成 MCGOUTCLK 输出。MCGOUTCLK 再经过分频便可以提供Core/system clocks、Bus clock、FlexBus clock和Flash clock。MCGOUTCLK 的产生有3个途径:

    ①由内部参考时钟源 Fast IRC 直接提供,这个时钟源集成在芯片的内部(包括Slow IRC),频率是2M

    ②由 FLL 或者 PLL 模块来提供

    ③由外部时钟来直接提供,包括外部参考时钟源(1个管脚输入)、外部晶体谐振器经内部OSC logic产生的XTAL_CLK 和 RTC OSC logic 的时钟输出。

    一般情况下,MCGOUTCLK 是由PLL或者FLL倍频来产生的,飞思卡尔官方的例程最终是由PLL模块来产生。图中可以看到PLL模块的时钟输入是OSCCLK或者RTC OSC logic。我的板子以外部参考时钟源提供PLL时钟,最终经PLL倍频产生MCGOUTCLK。即 EXTAL-->PLL模块-->MCGOUTCLK.


2.关于时钟模式

   从图中可以看到,该芯片一共包含8种工作时钟模式,外加Stop模式。系统在RESET后直接进入默认的FEI模式。图中,F--FLL、P--PLL、E--Enable或者EXTAL(外部时钟)、B--Bypass(旁路)、I--Internal(内部参考时钟)、L--Low Power.

·FLL 启用、内部参考时钟(FEI), 内部参考时钟提供FLL的时钟,FLL驱动MCGOUT

·FLL 启用、外部参考时钟(FEE), 外部参考时钟提供FLL的时钟,FLL驱动MCGOUT

·FLL 旁路、内部参考时钟(FBI),FLL虽然在运作但由内部时钟参考源驱动MCGOUT 

·FLL 旁路、外部参考时钟(FBE),FLL虽然在运作但由外部时钟参考源驱动MCGOUT 

·PLL 旁路、外部参考时钟(PBE),PLL虽然在运作但由外部时钟参考源驱动MCGOUT 

·PLL 启用、外部参考时钟(PEE),外部参考时钟提供PLL的时钟,PLL驱动MCGOUT

·BLPI FLL和PLL都禁用,内部时钟参考源驱动MCGOUT

·BLPE FLL和PLL都禁用,外部时钟参考源驱动MCGOUT

 

由于系统在重启后默认进入FEI模式,我们的目标是要跳到PEE模式,所以要涉及到模式的转化。图中由FEI到PEE是不能直接跳转的,必须经由其他模式来转换。


3.官方具体的例子

来源于飞思卡尔官方srcdriversmcgmcg.c

  1. unsigned char pll_init(unsigned char clk_option, unsigned char crystal_val)

  2. {

  3.   unsigned char pll_freq;


  4.   if (clk_option > 3) {return 0;} //return 0 if one of the available options is not selected

  5.   if (crystal_val > 15) {return 1;} // return 1 if one of the available crystal options is not available

  6. //This assumes that the MCG is in default FEI mode out of reset.


  7. // First move to FBE mode

  8. #if (defined(K60_CLK) || defined(ASB817))

  9.      MCG_C2 = 0;

  10. #else

  11. // Enable external oscillator, RANGE=2, HGO=1, EREFS=1, LP=0, IRCS=0

  12.     MCG_C2 = MCG_C2_RANGE(2) | MCG_C2_HGO_MASK | MCG_C2_EREFS_MASK;

  13. #endif


  14. // after initialization of oscillator release latched state of oscillator and GPIO

  15.     SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;

  16.     LLWU_CS |= LLWU_CS_ACKISO_MASK;

  17.   

  18. // Select external oscilator and Reference Divider and clear IREFS to start ext osc

  19. // CLKS=2, FRDIV=3, IREFS=0, IRCLKEN=0, IREFSTEN=0

  20.   MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);


  21.   /* if we aren't using an osc input we don't need to wait for the osc to init */

  22. #if (!defined(K60_CLK) && !defined(ASB817))

  23.     while (!(MCG_S & MCG_S_OSCINIT_MASK)){}; // wait for oscillator to initialize

  24. #endif


  25.   while (MCG_S & MCG_S_IREFST_MASK){}; // wait for Reference clock Status bit to clear


  26.   while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2){}; // Wait for clock status bits to show clock source is ext ref clk


  27. // Now in FBE


  28. #if (defined(K60_CLK))

  29.    //MCG_C5 = MCG_C5_PRDIV(0x18);

  30.    MCG_C5 = MCG_C5_PRDIV(0x18); //基频2M 外部时钟源是50M时, 50/25=2M

  31. #else

  32. // Configure PLL Ref Divider, PLLCLKEN=0, PLLSTEN=0, PRDIV=5

  33. // The crystal frequency is used to select the PRDIV value. Only even frequency crystals are supported

  34. // that will produce a 2MHz reference clock to the PLL.

  35.   MCG_C5 = MCG_C5_PRDIV(crystal_val); // Set PLL ref divider to match the crystal used

  36. #endif


  37.   // Ensure MCG_C6 is at the reset default of 0. LOLIE disabled, PLL disabled, clk monitor disabled, PLL VCO divider is clear

  38.   MCG_C6 = 0x0;

  39. // Select the PLL VCO divider and system clock dividers depending on clocking option

  40.   switch (clk_option) {

  41.     case 0:

  42.       // Set system options dividers

  43.       //MCG=PLL, core = MCG, bus = MCG, FlexBus = MCG, Flash clock= MCG/2

  44.       set_sys_dividers(0,0,0,1);

  45.       // Set the VCO divider and enable the PLL for 50MHz, LOLIE=0, PLLS=1, CME=0, VDIV=1

  46.       MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(1); //VDIV = 1 (x25)

  47.       pll_freq = 50;

  48.       break;

  49.    case 1:

  50.       // Set system options dividers

  51.       //MCG=PLL, core = MCG, bus = MCG/2, FlexBus = MCG/2, Flash clock= MCG/4

  52.      set_sys_dividers(0,1,1,3);

  53.       // Set the VCO divider and enable the PLL for 100MHz, LOLIE=0, PLLS=1, CME=0, VDIV=26

  54.       MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(26); //VDIV = 26 (x50) 

  55.       pll_freq = 100;

  56.       break;

  57.     case 2:

  58.       // Set system options dividers

  59.       //MCG=PLL, core = MCG, bus = MCG/2, FlexBus = MCG/2, Flash clock= MCG/4

  60.       set_sys_dividers(0,1,1,3);

  61.       // Set the VCO divider and enable the PLL for 96MHz, LOLIE=0, PLLS=1, CME=0, VDIV=24

  62.       MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(24); //VDIV = 24 (x48)

  63.       pll_freq = 96;

  64.       break;

  65.    case 3:

  66.       // Set system options dividers

  67.       //MCG=PLL, core = MCG, bus = MCG, FlexBus = MCG, Flash clock= MCG/2

  68.       set_sys_dividers(0,0,0,1);

  69.       // Set the VCO divider and enable the PLL for 48MHz, LOLIE=0, PLLS=1, CME=0, VDIV=0

  70.       MCG_C6 = MCG_C6_PLLS_MASK; //VDIV = 0 (x24)

  71.       pll_freq = 48;

  72.       break;

  73.   }

  74.   while (!(MCG_S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set


  75.   while (!(MCG_S & MCG_S_LOCK_MASK)){}; // Wait for LOCK bit to set


  76. // Now running PBE Mode


  77. // Transition into PEE by setting CLKS to 0

  78. // CLKS=0, FRDIV=3, IREFS=0, IRCLKEN=0, IREFSTEN=0

  79.   MCG_C1 &= ~MCG_C1_CLKS_MASK;


  80. // Wait for clock status bits to update

  81.   while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){};


  82. // Now running PEE Mode


  83. return pll_freq;

  84. } //pll_init



推荐阅读

史海拾趣

方向电子公司的发展小趣事

机顶盒,全称为数字视频变换盒,是连接电视机与外部信号源的关键设备,具有高度的专业性和广泛的应用性。从广义上讲,凡是能与电视机连接并处理音视频信号的网络终端设备均可视为机顶盒。它不仅能够接收来自有线电缆、卫星天线、宽带网络及地面广播的数字电视信号,还能通过内置的解码器将这些信号转换为电视机可识别的格式,从而呈现出高清乃至4K的超高清画质,大大提升了观看体验。

机顶盒不仅限于基本的电视信号接收功能,还集成了多种增值服务。例如,它提供电子节目指南,让用户轻松查找和预约节目;支持因特网网页浏览,实现网络购物、在线视频观看、游戏娱乐等多元化互动体验。随着智能化技术的发展,现代机顶盒还融入了语音助手、智能推荐等功能,进一步提升了用户的操作便捷性和内容个性化程度。

在技术层面,机顶盒的发展日新月异,不断向高清化、智能化方向迈进。5G技术的应用更是为机顶盒带来了更快的传输速度和更低的延迟,为用户提供了更为流畅的观影体验。此外,虚拟现实和增强现实技术的融入,也为机顶盒的未来发展打开了新的想象空间,将为用户带来更为沉浸式和互动式的观影享受。

综上所述,机顶盒作为现代家庭娱乐的重要组成部分,不仅极大地丰富了人们的电视观看体验,还通过不断的技术创新和服务升级,满足着用户日益多样化的需求。

兆易创新(GigaDevice)公司的发展小趣事

对于热电偶隔离缓冲放大电路,网友可能会有多种问题,以下是一些常见问题及其回答:

一、技术问题

  1. 什么是热电偶隔离缓冲放大电路?
    • 回答:热电偶隔离缓冲放大电路是一种专门用于热电偶信号处理的电路,它能够将热电偶产生的微弱电压信号进行放大,并通过隔离技术消除干扰信号,确保信号的准确性和稳定性。这种电路通常包括放大器和隔离器两部分,放大器用于增强信号,而隔离器则用于隔离输入和输出之间的电气连接,防止噪声和干扰的传递。
  2. 为什么需要热电偶信号的隔离和缓冲?
    • 回答:热电偶信号通常非常微弱,且易受到环境噪声和电磁干扰的影响。隔离可以切断输入和输出之间的直接电气连接,防止噪声和干扰信号进入测量系统,提高测量的准确性和可靠性。缓冲则可以减小负载对热电偶信号的影响,保护热电偶免受损坏,并稳定信号输出。
  3. 如何选择适合的热电偶隔离缓冲放大电路?
    • 回答:选择适合的热电偶隔离缓冲放大电路时,需要考虑多个因素,包括热电偶的类型、测量范围、精度要求、工作环境等。此外,还需要关注电路的输入阻抗、输出阻抗、增益稳定性、噪声水平等性能指标,以确保电路能够满足实际应用的需求。

二、实际应用问题

  1. 热电偶隔离缓冲放大电路在工业现场的应用有哪些?
    • 回答:热电偶隔离缓冲放大电路在工业现场有广泛的应用,如温度测量、温度控制、热处理过程监控等。它们可以用于测量各种高温、低温环境下的温度,并通过与控制器、记录仪等设备配合使用,实现对温度的精确控制和记录。
  2. 如何安装和调试热电偶隔离缓冲放大电路?
    • 回答:安装和调试热电偶隔离缓冲放大电路时,需要按照产品说明书的要求进行操作。一般来说,需要先将热电偶与电路的输入端正确连接,然后调整电路的增益、零点等参数,使输出信号符合实际应用的需求。在调试过程中,需要注意观察电路的输出信号是否稳定、准确,并检查是否有噪声和干扰信号的存在。
  3. 热电偶隔离缓冲放大电路的维护和保养有哪些注意事项?
    • 回答:热电偶隔离缓冲放大电路的维护和保养非常重要,可以延长电路的使用寿命并保证其性能稳定。在使用过程中,需要定期检查电路的接线是否牢固、元器件是否损坏、输出信号是否准确等。如果发现异常情况,应及时处理并更换损坏的元器件。此外,还需要注意保持电路的清洁和干燥,避免灰尘和水分进入电路内部导致故障。

三、其他问题

  1. 热电偶隔离缓冲放大电路的成本如何?
    • 回答:热电偶隔离缓冲放大电路的成本因产品型号、性能指标和生产厂家等因素而异。一般来说,高精度、高稳定性的电路成本会相对较高。在选择电路时,需要根据实际需求和预算进行综合考虑。
  2. 热电偶隔离缓冲放大电路的发展趋势是什么?
    • 回答:随着工业自动化和智能化的发展,热电偶隔离缓冲放大电路也在不断向高精度、高稳定性、高集成度方向发展。未来,这种电路可能会采用更先进的集成电路技术和信号处理技术,提高测量精度和抗干扰能力,并降低成本和功耗。同时,随着物联网技术的发展,热电偶隔离缓冲放大电路也可能会与无线通信技术相结合,实现远程监控和智能控制等功能。
AC Interface Inc公司的发展小趣事

随着国内市场的饱和,ABC Electronics Inc. 开始寻求国际化的发展道路。公司首先在欧洲设立了分支机构,通过参加国际电子展会、与欧洲企业建立合作伙伴关系等方式,逐步打开了欧洲市场。随后,公司又进军北美和亚洲市场,通过本地化运营和定制化服务,满足了不同国家和地区的需求。这一国际化战略不仅拓展了公司的市场份额,也提升了其品牌影响力。

Heimann Optoelectronics Gmbh公司的发展小趣事

Hei Inc Optoelectronic Division的崛起始于一次关键的技术创新。在2010年代初,随着光纤通信技术的快速发展,公司对光电子器件的研发投入不断加大。经过数年的努力,研发团队成功开发出了一种新型的高速光探测器,该探测器在灵敏度和响应速度上均远超市场同类产品。这一技术创新不仅为公司赢得了多项国际专利,还迅速吸引了全球通信巨头的关注,成为公司迅速发展的转折点。随着订单量的激增,Hei Inc Optoelectronic Division迅速扩大了生产规模,并在行业内建立了领先地位。

Calmos Systems Inc公司的发展小趣事

为了进一步扩大市场份额,Calmos Systems Inc公司积极寻求与行业内外的合作伙伴建立合作关系。公司与多家知名企业签订了战略合作协议,共同开发新产品、拓展新市场。同时,公司还积极参加各类行业展会和交流活动,与业内同行进行深入交流,了解行业动态和发展趋势。通过这些努力,公司的品牌知名度和影响力不断提升,为公司的长期发展打下了坚实的基础。

Base Two (2) Systems公司的发展小趣事

Base Two (2) Systems深知技术创新的重要性,因此不断加大对研发的投入。公司引进了一批高端研发人才和先进设备,为研发团队提供了强有力的支持。在研发团队的努力下,公司不断推出新产品,并对现有产品进行升级改进,以满足市场的不断变化和客户的多样化需求。

问答坊 | AI 解惑

ZT:一个技术人员悟到的管理秘诀

我在原来的公司做的时候,就注意观察公司在管理上的成功和失败的经验教训,并在网络上找很多关于管理的文章。     管理上有很多故事,让我领悟到管理就是设计一个合理的机制。          故事之一:分粥          分粥的故 ...…

查看全部问答>

驱动加载出错

我写了个驱动程序,编译没错,但是insmod的时候就出现 moduletest: please compile with -fno-common insmod: cannot insert `moduletest.ko\': Invalid module format (-1): Exec format error的错误,不知道为什么,求高手指教. 源码如下: #inclu ...…

查看全部问答>

在linux 的内核态中能访问 tty 终端吗?

tty 终端是给用户层访问的文件,那如果我在linux驱动里要访问tty终端,这可行吗?应该怎么做呢?…

查看全部问答>

美资闪存公司Sr. AE职位(服务器环境的底层软件开发背景)

美资闪存公司Sr. AE职位(服务器环境的底层软件开发背景) JD如下,最重要的是服务器环境下的底层软件开发经验,如Driver、BIOS等,熟悉C或汇编。其他plus的要求:对于Linux内核了解,懂得内核级的内存管理及相应改进,以适应和开展服务器环境下Fla ...…

查看全部问答>

s3c2440 for wince4.2 的 eboot启动时出现的网络端口问题,高手请进给解答一下。

启动后,DNW出现下列打印信息: WinCE NAND Boot v1.00 Jun 11 2007 11:50:13 Start Eboot... Start Launch...0 Microsoft Windows CE Ethernet Bootloader Common Library Version 1.0 Built Mar 13 2003 23:05:42 Microsoft Windows CE SMD ...…

查看全部问答>

stm32f103ze的I2C不行

程序代码如下: 初始化后寄存器如下:起始地址是0x40005800 00000001     00000024  00004000 00000000 00000000    00000000   00000000 00000708 00000035 我不喜欢用提供的函数, ...…

查看全部问答>

请教2407数据区与程序存储区的问题!谢谢

我用2407做一个液晶显示,因为有存放大量字符数据的常量数组,我把这些数组定义为const unsigned char 类型。cmd文件如下: -o LCD.out - stack 60 MEMORY {     PAGE 0:    /* Program Memory */      & ...…

查看全部问答>

新手提问--想学ARM但是不知道先学ARM7或ARM9好还是先学STM32好--有51和avr经验

想学ARM但是不知道先学ARM7或ARM9好还是先学STM32好。我现在一直在用的是51和AVR。…

查看全部问答>

知道一些MOS管的选择方法

        我们知道, MOS管最常见的应用可能是电源中的开关元件,此外,它们对电源输出也大有裨益。服务器和通信设备等应用一般都配置有多个并行电源,以支持N+1 冗余与持续工作 (图1)。各并行电源平均分担负载,确保 ...…

查看全部问答>