0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

中科芯CKS32K148 MCU SCG時(shí)鐘工作頻率范圍和寄存器設(shè)置

中科芯MCU ? 來源:中科芯MCU ? 2024-12-09 14:55 ? 次閱讀

MCU微課堂

CKS32K148 SCG(二)

第四十九期 2024.12.6

六、SCG時(shí)鐘工作頻率范圍

接第四十五期的SCG介紹,下文對(duì)SCG時(shí)鐘工作頻率范圍、寄存器設(shè)置等進(jìn)行詳細(xì)闡述。

在不同的工作模式下,系統(tǒng)對(duì)于不同的內(nèi)部時(shí)鐘存在安全工作頻率范圍的限制,以保證系統(tǒng)的正常工作。下表為SCG內(nèi)部時(shí)鐘在不同工作模式下的安全工作頻率范圍匯總。

表1 SCG內(nèi)部時(shí)鐘安全工作頻率

09014c28-b3b4-11ef-93f3-92fbcf53809c.png

七、SCG寄存器配置

在前文中,已經(jīng)對(duì)SCG時(shí)鐘進(jìn)行了整體介紹,下面以RUN模式下配置SPLL為系統(tǒng)時(shí)鐘源為例,對(duì)時(shí)鐘配置的具體方法進(jìn)行講解。

0948fc12-b3b4-11ef-93f3-92fbcf53809c.png

圖5 SYSCLK生成流程

在RUN模式下選擇SPLL作為系統(tǒng)時(shí)鐘源時(shí),應(yīng)對(duì)SPLL時(shí)鐘進(jìn)行相關(guān)使能操作,同時(shí)應(yīng)保證SPLL的輸出信號(hào)頻率在正常工作頻率90~160MHz范圍內(nèi)。在對(duì)SPLL的配置中,有兩個(gè)較為重要的寄存器,分別是SCG_SPLLCSR和SCG_SPLLCFG。

0974e156-b3b4-11ef-93f3-92fbcf53809c.png

圖6 SCG_SPLLCSR寄存器

在SCG_SPLLCSR寄存器中,我們應(yīng)重點(diǎn)關(guān)注如下幾位:

099d58ac-b3b4-11ef-93f3-92fbcf53809c.png

圖7 SPLL系統(tǒng)時(shí)鐘選擇與有效位

09b142a4-b3b4-11ef-93f3-92fbcf53809c.png

圖8 SPLL時(shí)鐘使能位

09d2be66-b3b4-11ef-93f3-92fbcf53809c.png

圖9 SCG_SPLLCFG寄存器

在SCG_SPLLCFG寄存器中,我們應(yīng)關(guān)注如下兩位:

0a026684-b3b4-11ef-93f3-92fbcf53809c.png

圖10 SPLL倍頻系數(shù)位

0a0cb6a2-b3b4-11ef-93f3-92fbcf53809c.png

圖11 SPLL分頻系數(shù)位

可知,SPLL對(duì)參考時(shí)鐘信號(hào)能夠進(jìn)行16~47倍頻和最大8分頻。

由于SPLL以SOSC作為參考時(shí)鐘源,還應(yīng)在寄存器SCG_SOSCCSR中對(duì)SOSC時(shí)鐘使能。

0a2897be-b3b4-11ef-93f3-92fbcf53809c.png

圖12 SCG_SOSCCSR寄存器

SCG_SOSCCSR寄存器中,SOSC時(shí)鐘使能的相關(guān)位如下:

0a601752-b3b4-11ef-93f3-92fbcf53809c.png

圖13 SOSC時(shí)鐘有效位

0a76edba-b3b4-11ef-93f3-92fbcf53809c.png

圖14 SOSC時(shí)鐘使能位

在完成上述時(shí)鐘配置后,在寄存器SCG_RCCR中配置RUN模式下的系統(tǒng)時(shí)鐘源。

0a85950e-b3b4-11ef-93f3-92fbcf53809c.png

圖15 SCG_RCCR寄存器

0a9e35a0-b3b4-11ef-93f3-92fbcf53809c.png

圖16 系統(tǒng)時(shí)鐘源選擇位

除SPLL時(shí)鐘外,還應(yīng)保證生成的內(nèi)部時(shí)鐘SYS_CLK、BUS_CLK和FLASH_CLK工作在安全頻率范圍內(nèi)。下圖為系統(tǒng)時(shí)鐘源信號(hào)(紫色)生成內(nèi)部時(shí)鐘信號(hào)的流程圖。

0acfee7e-b3b4-11ef-93f3-92fbcf53809c.png

圖17 內(nèi)部時(shí)鐘生成流程

生成的內(nèi)部時(shí)鐘信號(hào)頻率由寄存器SCG_RCCR中如下相關(guān)位調(diào)控:

0af8afc6-b3b4-11ef-93f3-92fbcf53809c.png

圖18 內(nèi)核時(shí)鐘分頻位

0b193d86-b3b4-11ef-93f3-92fbcf53809c.png

圖19 總線時(shí)鐘分頻位

0b430d96-b3b4-11ef-93f3-92fbcf53809c.png

圖20 FLASH時(shí)鐘分頻位

八、SCG結(jié)構(gòu)體初始化

在標(biāo)準(zhǔn)庫中,所有時(shí)鐘的初始化均可通過CLOCK_DRV_Init()實(shí)現(xiàn):

CLOCK_DRV_Init(&clockMan1_InitConfig0);

其中使用的參數(shù)結(jié)構(gòu)體指針clockMan1_InitConfig0,其結(jié)構(gòu)體類型為clock_manager_user_config_t,結(jié)構(gòu)體定義如下:

typedef struct

{

scg_config_t scgConfig; /*!< SCG Clock configuration. ?????*/

sim_clock_config_t simConfig; /*!< SIM Clock configuration. ?????*/

pcc_config_t pccConfig; /*!< PCC Clock configuration. ?????*/

pmc_config_t pmcConfig; /*!< PMC Clock configuration. ?????*/

} clock_manager_user_config_t;

需要注意的是,由于SCG相關(guān)時(shí)鐘的配置僅需在第一個(gè)成員結(jié)構(gòu)體scgConfig中進(jìn)行,對(duì)于其余的成員結(jié)構(gòu)體的使用本文中將不進(jìn)行介紹。

SCG的初始化結(jié)構(gòu)體類型為scg_config_t,下面是相關(guān)結(jié)構(gòu)體的定義:

typedef struct

{

scg_sirc_config_t sircConfig; /*!< Slow internal reference clock configuration.*/

scg_firc_config_t fircConfig; /*!< Fast internal reference clock configuration. */

scg_sosc_config_t soscConfig; /*!< System oscillator configuration. ???????*/

scg_spll_config_t spllConfig; /*!< System Phase locked loop configuration. ?*/

scg_rtc_config_t rtcConfig; /*!< Real Time Clock configuration. ????????*/

scg_clockout_config_t clockOutConfig; /*!< SCG ClockOut Configuration. ??????????*/

scg_clock_mode_config_t clockModeConfig; /*!< SCG Clock Mode Configuration. ???????*/

} scg_config_t;

在本文中,我們需要使用上述結(jié)構(gòu)體中的成員結(jié)構(gòu)體soscConfig、spllConfig以及clockModeConfig完成對(duì)內(nèi)部時(shí)鐘輸出的配置。

對(duì)于SOSC時(shí)鐘,初始化結(jié)構(gòu)體類型為scg_sosc_config_t,結(jié)構(gòu)體定義如下:

typedef struct

{

uint32_t freq; /*!< System OSC frequency. ?*/

scg_sosc_monitor_mode_t monitorMode; /*!< System OSC Clock monitor mode. ?*/

scg_sosc_ext_ref_t extRef; /*!< System OSC External Reference Select.*/

scg_sosc_gain_t gain; /*!< System OSC high-gain operation. */

scg_sosc_range_t range; /*!< System OSC frequency range. ?*/

scg_async_clock_div_t div1; /*!< Asynchronous peripheral source. ?*/

scg_async_clock_div_t div2; /*!< Asynchronous peripheral source. ?*/

bool enableInStop; /*!< System OSC is enable or not in stop mode. */

bool enableInLowPower; /*!< System OSC is enable or not in low power mode.*/

bool locked; /*!< System OSC Control Register can be written. */

bool initialize; /*!< Initialize or not the System OSC module.*/

} scg_sosc_config_t;

該結(jié)構(gòu)體中共有11個(gè)成員變量,我們僅需配置其中的第1、4、5和11號(hào)變量即可完成對(duì)SOSC時(shí)鐘的使能,其功能分別如下:

變量一freq:應(yīng)配置為當(dāng)前SOSC使用的時(shí)鐘源頻率。

變量四gain:用于控制晶振操作的功耗模式,可選高增益或低增益。

變量五range:用于為OSC選擇頻率范圍,作為SPLL的時(shí)鐘源,本文中SOSC只能選擇高頻率范圍。

變量十一initialize:用于對(duì)SOSC時(shí)鐘進(jìn)行使能,決定了時(shí)鐘是否有效。

對(duì)于SPLL時(shí)鐘,初始化結(jié)構(gòu)體類型為scg_spll_config_t,結(jié)構(gòu)體定義如下:

typedef struct

{

scg_spll_monitor_mode_t monitorMode; /*!< Clock monitor mode selected. ?*/

uint8_t prediv; /*!< PLL reference clock divider. ?*/

uint8_t mult; /*!< System PLL multiplier. ?*/

uint8_t src; /*!< System PLL source. ?*/

scg_async_clock_div_t div1; /*!< Asynchronous peripheral source.*/

scg_async_clock_div_t div2; /*!< Asynchronous peripheral source.*/

bool enableInStop; /*!< System PLL clock is enable or not in stop mode. */

bool locked; /*!< System PLL Control Register can be written. */

bool initialize; /*!< Initialize or not the System PLL module. */

} scg_spll_config_t;

該結(jié)構(gòu)體中共有9個(gè)成員變量,我們需配置其中的第2、3、4和9號(hào)變量以完成對(duì)SPLL時(shí)鐘的使能以及輸出頻率調(diào)控,其功能分別如下:

變量二prediv:用于配置SPLL參考時(shí)鐘頻率的分頻系數(shù)。

變量三mult:用于配置SPLL參考時(shí)鐘頻率的乘法因子。

變量四src:用于配置SPLL的輸入時(shí)鐘源,在本文中僅能選擇參考時(shí)鐘SOSC作為時(shí)鐘源。

變量九initialize:用于對(duì)SPLL時(shí)鐘進(jìn)行使能,決定了時(shí)鐘是否有效。

對(duì)于RUN模式下的內(nèi)部時(shí)鐘配置,初始化結(jié)構(gòu)體類型為scg_system_clock_config_t,結(jié)構(gòu)體定義如下:

typedef struct

{

scg_system_clock_div_t divSlow; /*!< Slow clock divider. */

scg_system_clock_div_t divBus; /*!< BUS clock divider.*/

scg_system_clock_div_t divCore; /*!< Core clock divider. */

scg_system_clock_src_t src; /*!< System clock source. */

} scg_system_clock_config_t;

該結(jié)構(gòu)體中共有4個(gè)成員變量,其功能分別如下:

變量一divSlow:用于控制FLASH時(shí)鐘分頻比。

變量二divBus:用于控制總線時(shí)鐘分頻比。

變量三divCore:用于控制內(nèi)核時(shí)鐘分頻比。

變量四src:用于在運(yùn)行模式下,選擇產(chǎn)生系統(tǒng)時(shí)鐘的時(shí)鐘源。

九、時(shí)鐘配置代碼

依據(jù)前文中對(duì)寄存器與SCG時(shí)鐘結(jié)構(gòu)體的基本介紹,即可在函數(shù)CLOCK_DRV_Init()中對(duì)系統(tǒng)時(shí)鐘進(jìn)行相關(guān)配置。本文以SPLL為時(shí)鐘源,配置輸出56MHz的SYSCLK、28MHz的BUSCLK以及14MHz的FLASHCLK。相關(guān)結(jié)構(gòu)體代碼如下:

clock_manager_user_config_t clockMan1_InitConfig0 =

{

.scgConfig =

{

.soscConfig =

{

.initialize = true,

.freq = 8000000U, /* System Oscillator frequency: 8MHz */

.extRef = SCG_SOSC_REF_OSC, /* Internal oscillator of OSC requested. */

.range = SCG_SOSC_RANGE_HIGH, /* High frequency range selected for the crystal oscillator of 8 MHz to 40 MHz. */

},

.spllConfig =

{

.initialize = true,

.prediv = (uint8_t)SCG_SPLL_CLOCK_PREDIV_BY_1,/* Divided by 1 */

.mult = (uint8_t)SCG_SPLL_CLOCK_MULTIPLY_BY_28,/* Multiply Factor is 28*/

.src = 0U,/*Clock Source SOSC*/

},

.clockModeConfig =

{

.initialize = true,

.rccrConfig =

{

.src = SCG_SYSTEM_CLOCK_SRC_SYS_PLL,/* System PLL */

.divCore = SCG_SYSTEM_CLOCK_DIV_BY_2,/* Core Clock Divider: divided by 2 */

.divBus = SCG_SYSTEM_CLOCK_DIV_BY_2,/* Bus Clock Divider: divided by 2 */

.divSlow = SCG_SYSTEM_CLOCK_DIV_BY_4,/* Slow Clock Divider: divided by 4 */

},

}

}

};

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    146

    文章

    17148

    瀏覽量

    351181
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120348
  • 時(shí)鐘
    +關(guān)注

    關(guān)注

    10

    文章

    1733

    瀏覽量

    131478

原文標(biāo)題:MCU微課堂|CKS32K148 SCG(二)

文章出處:【微信號(hào):中科芯MCU,微信公眾號(hào):中科芯MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    MCU微課堂|CKS32F4xx系列產(chǎn)品時(shí)鐘配置

    作為MCU運(yùn)行的基礎(chǔ),時(shí)鐘是單片機(jī)各個(gè)模塊工作時(shí)序的最小時(shí)間單位,推動(dòng)單片機(jī)的各指令執(zhí)行,是MCU選型的一個(gè)重要指標(biāo)。CKS32F4xx系列
    發(fā)表于 12-12 10:17 ?843次閱讀

    請(qǐng)問FS32K148HAT0MLQR 的 SCG_SIRCDIV[2:0]中有什么東西嗎?

    FS32K148HAT0MLQR 的 SCG_SIRCDIV[2:0]中有什么東西嗎?
    發(fā)表于 03-28 08:15

    Si443x-寄存器設(shè)置

    Si443x-寄存器設(shè)置
    發(fā)表于 03-30 17:10 ?4次下載

    STM32 BSRR BRR ODR寄存器詳情解析

    BSRR 和 BRR 都是 STM32 系列 MCU 中 GPIO 的寄存器。 BSRR 稱為端口位設(shè)置/清楚寄存器,BRR稱為端口位**寄存器
    發(fā)表于 11-13 09:54 ?1.2w次閱讀

    AD轉(zhuǎn)換寄存器設(shè)置

    AD轉(zhuǎn)換寄存器設(shè)置AD轉(zhuǎn)換寄存器設(shè)置AD轉(zhuǎn)換寄存器設(shè)置
    發(fā)表于 11-10 17:36 ?16次下載
    AD轉(zhuǎn)換<b class='flag-5'>寄存器</b><b class='flag-5'>設(shè)置</b>

    C語言訪問MCU寄存器

    C語言訪問MCU寄存器問題由來://下面這行代碼的意思是直接操作0X020C4068這個(gè)寄存器//具體寄存器的作用是通過手冊(cè)得到的#define CCM_CCGR0 *((volati
    發(fā)表于 10-25 13:21 ?3次下載
    C語言訪問<b class='flag-5'>MCU</b><b class='flag-5'>寄存器</b>

    STM32學(xué)習(xí)筆記(2)——寄存器

    。計(jì)算機(jī)領(lǐng)域,包括通用寄存器、專用寄存器和控制寄存器。寄存器擁有非常高的讀寫速度,所以在寄存器之間的數(shù)據(jù)傳送非???。我們一般控制其中的控制
    發(fā)表于 12-08 17:36 ?18次下載
    STM32學(xué)習(xí)筆記(2)——<b class='flag-5'>寄存器</b>

    中科推出面向CKS32位MCU的編程調(diào)試工具

    隨著中科MCU在市場(chǎng)上越來越多的被應(yīng)用,為了更好的支持客戶在使用中科32位MCU芯片時(shí)的仿真
    的頭像 發(fā)表于 12-26 15:21 ?2227次閱讀

    16位寄存器數(shù)據(jù)范圍 32位寄存器數(shù)據(jù)范圍 數(shù)據(jù)寄存器多少位怎么算

    在單片機(jī)編程中,32 位寄存器常用于存儲(chǔ)較大的整數(shù)或用于進(jìn)行計(jì)數(shù)、計(jì)時(shí)等操作。需要注意的是,有些單片機(jī)的寄存器可能會(huì)在數(shù)據(jù)范圍上有所不同,具體使用時(shí)需要查看相關(guān)單片機(jī)的技術(shù)手冊(cè)或數(shù)據(jù)手冊(cè)。
    發(fā)表于 03-31 18:00 ?1.1w次閱讀

    如何改變spi的時(shí)鐘頻率?

    ,選擇合適的分頻。 2. 配置寄存器:根據(jù)所選的時(shí)鐘源和分頻,配置SPI控制寄存器中的位。有些MCU
    的頭像 發(fā)表于 06-03 16:36 ?3639次閱讀

    中科CKS32F103RBT6在智能家居系統(tǒng)中的應(yīng)用

    中科CKS32F103RBT6在智能家居系統(tǒng)中的應(yīng)用
    的頭像 發(fā)表于 10-30 18:23 ?630次閱讀
    <b class='flag-5'>中科</b><b class='flag-5'>芯</b><b class='flag-5'>CKS</b>32F103RBT6在智能家居系統(tǒng)中的應(yīng)用

    中科CKS32F103CBT6在無人機(jī)飛控系統(tǒng)中的應(yīng)用

    中科CKS32F103CBT6在無人機(jī)飛控系統(tǒng)中的應(yīng)用
    的頭像 發(fā)表于 09-28 16:05 ?1615次閱讀
    <b class='flag-5'>中科</b><b class='flag-5'>芯</b><b class='flag-5'>CKS</b>32F103CBT6在無人機(jī)飛控系統(tǒng)中的應(yīng)用

    中科與IAR共建生態(tài)合作,IAR集成開發(fā)環(huán)境全面支持CKS32系列MCU

    IAR Embedded Workbench集成開發(fā)環(huán)境一直是全球眾多開發(fā)者首選的嵌入式軟件開發(fā)解決方案之一。這一強(qiáng)大的工具套件已全面支持中科CKS32系列MCU,為開發(fā)者提供了無與
    的頭像 發(fā)表于 10-18 16:00 ?649次閱讀
    <b class='flag-5'>中科</b><b class='flag-5'>芯</b>與IAR共建生態(tài)合作,IAR集成開發(fā)環(huán)境全面支持<b class='flag-5'>CKS</b>32系列<b class='flag-5'>MCU</b>

    中科與IAR共建生態(tài)合作,IAR集成開發(fā)環(huán)境全面支持CKS32系列MCU

    來源:IAR 嵌入式開發(fā)軟件和服務(wù)的全球領(lǐng)導(dǎo)者IAR近日宣布,與中科集成電路有限公司(以下簡(jiǎn)稱中科)達(dá)成生態(tài)合作,IAR已全面支持CKS
    的頭像 發(fā)表于 10-20 10:30 ?538次閱讀

    CPSR寄存器和APSR寄存器的組成

    程序狀態(tài)寄存器的作用就是反映處理的狀態(tài)信息。在程序運(yùn)行期間我們可以通過查看程序狀態(tài)寄存器的狀態(tài)位來進(jìn)行程序的分支跳轉(zhuǎn)處理,或者我們可以設(shè)置程序狀態(tài)
    的頭像 發(fā)表于 10-20 11:38 ?4629次閱讀
    CPSR<b class='flag-5'>寄存器</b>和APSR<b class='flag-5'>寄存器</b>的組成