打印
[学习笔记]

【AC7811开发板试用活动】5. 时钟说明

[复制链接]
592|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pq113_6|  楼主 | 2019-11-7 14:26 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
时钟源有3路:高速内部时钟(HSI)、低速内部时钟(LSI)、外部高速时钟(HSE)。
1.      HSI:
内部 RC 振荡器,8MHz,可以提供给所有的模块
2.      LSI:
内部低速RC振荡器,32KHz,仅提供给RTCWDGSPM(系统电源管理)
3.      HSE:
外部晶体振荡器,4MHz-30MHz,一般选择8MHz。没有提供给SPM,所以如果要使用SPM则需要使能LSI
当使用HSE时,分3种情况,第一种是使用外部晶体振荡器,第二种是使用外部时钟源,即通过OSC_IN脚输入时钟源,第三种是使用外部时钟源且不使用内部的PLL电路。下图中路径1对应第一、二种情况,路径2对应第三种情况。
对应的代码如下,其中SetXOSCClock对应HSE的第二种情况,SetHSEClock对应HSE的第一种情况,SetHSEBYPClock对应HSE的第三种情况。
void SetSysClock(void)
{
#if AC78XX_CLOCK_SRC == IC_CLOCK_SRC_XOSC
   SetXOSCClock();
#elif AC78XX_CLOCK_SRC == IC_CLOCK_SRC_HSI
   SetHSIClock();
#elif AC78XX_CLOCK_SRC == IC_CLOCK_SRC_HSE
   SetHSEClock();
#else
   SetHSEBYPClock();
#endif
}
如何使能LSI没找到说明。
系统时钟SYSCLK
输入频率:支持 4 ~ 30Mhz
PREDIV:有效值1/2/4PLL 输入频率推荐值不小于 8MPLL输入频率 = 输入频率 /  PREDIV,所以不建议用8M以下的晶体?)
FBKDIV:推荐值为 72, 80, 96,128, 144, 160, 192
VCOVCO = 输入频率 * FBKDIV/ PREDIVVCO 的频率范围是 0.5~1.5GHz
POSDIV:有效值1/2/4VCO 频率除以 POSDIV 不能高于 400MHz
PLLCLK_DIV:有效值1-16,程序并没有设置,默认为1API函数为voidCKGEN_SetPllDiv(uint8_t div),参数范围为0-15
SYSCLK_DIV:有效值1/2/4/8/16/64/128/256/512
以使用外部晶体为例
void SetHSEClock(void)
{
   SPM_EnableXOSC(1);                                                               //使能外部频率源
   CKGEN_SetPLLReference(PLL_REF_EXTERNAL_OSC);   //PLL输入源为外部晶振
   CKGEN_SetPllPrevDiv(PLL_PREDIV);                                    //设置PREDIV
   CKGEN_SetPllPostDiv(PLL_POSDIV);                                    //设置POSDIV
   CKGEN_SetPllFeedbackDiv(PLL_FBKDIV);                           //设置FBKDIV
   SPM_EnablePLL(1);                                                                   //使能PLL
   CKGEN_SetSysclkDiv(SYSCLK_DIV);                                      //设置SYSCLK_DIV
   CKGEN_SetSysclkSrc(SYSCLK_SRC_PLL_OUTPUT);           //选择PLL作为系统时钟源
}
目前官方例程的配置SYSCLK96MHz
AHB时钟(高级高性能总线时钟):
AHB时钟提供给内核(CM3的意思应该是内核)/DMA/SPIn/GPIO/CRC/eflash/sflash/CANn
文档和代码中并没有找到AHB_DIV的配置,估计是AHB_DIV=1,即AHB的频率等于SYSCLK。当前配置为96MHz
APB时钟(高级外设总线时钟)
APB时钟提供给UARTn/LIN/TIMER/ACMP/IICn/PWMn/PWDT/CTU/ADCAPB时钟的源是AHB时钟,设置APB_DIVAPI函数是void CKGEN_SetAPBClockDivider(APBCLK_DIVIDERdiv) ,分频参数范围1/ 2/4/8/16。现在的设置是2,即APB的频率为48MHz
注意:各个模块的频率源可能是可以复选的,具体看应用。比如SPI的频率源可以是AHB,也可以是APB(注意,文档和代码中并没有找到配置SPI时钟源的说明,看代码只能用APB时钟作为SPI的时钟源)

使用特权

评论回复

相关帖子

沙发
condition| | 2019-11-11 20:00 | 只看该作者
楼主很厉害啊!好多篇测评贴

使用特权

评论回复
板凳
consumption| | 2019-11-17 17:52 | 只看该作者
感谢楼主详细的分析说明

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

284

帖子

2

粉丝