RM新时代网站-首页

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

MCU微課堂

CKS32K148 SCG(二)

第四十九期 2024.12.6

六、SCG時鐘工作頻率范圍

接第四十五期的SCG介紹,下文對SCG時鐘工作頻率范圍、寄存器設置等進行詳細闡述。

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

表1 SCG內部時鐘安全工作頻率

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

七、SCG寄存器配置

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

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

圖5 SYSCLK生成流程

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

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

圖6 SCG_SPLLCSR寄存器

在SCG_SPLLCSR寄存器中,我們應重點關注如下幾位:

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

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

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

圖8 SPLL時鐘使能位

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

圖9 SCG_SPLLCFG寄存器

在SCG_SPLLCFG寄存器中,我們應關注如下兩位:

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

圖10 SPLL倍頻系數位

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

圖11 SPLL分頻系數位

可知,SPLL對參考時鐘信號能夠進行16~47倍頻和最大8分頻。

由于SPLL以SOSC作為參考時鐘源,還應在寄存器SCG_SOSCCSR中對SOSC時鐘使能。

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

圖12 SCG_SOSCCSR寄存器

SCG_SOSCCSR寄存器中,SOSC時鐘使能的相關位如下:

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

圖13 SOSC時鐘有效位

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

圖14 SOSC時鐘使能位

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

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

圖15 SCG_RCCR寄存器

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

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

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

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

圖17 內部時鐘生成流程

生成的內部時鐘信號頻率由寄存器SCG_RCCR中如下相關位調控:

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

圖18 內核時鐘分頻位

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

圖19 總線時鐘分頻位

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

圖20 FLASH時鐘分頻位

八、SCG結構體初始化

在標準庫中,所有時鐘的初始化均可通過CLOCK_DRV_Init()實現(xiàn):

CLOCK_DRV_Init(&clockMan1_InitConfig0);

其中使用的參數結構體指針clockMan1_InitConfig0,其結構體類型為clock_manager_user_config_t,結構體定義如下:

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相關時鐘的配置僅需在第一個成員結構體scgConfig中進行,對于其余的成員結構體的使用本文中將不進行介紹。

SCG的初始化結構體類型為scg_config_t,下面是相關結構體的定義:

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;

在本文中,我們需要使用上述結構體中的成員結構體soscConfig、spllConfig以及clockModeConfig完成對內部時鐘輸出的配置。

對于SOSC時鐘,初始化結構體類型為scg_sosc_config_t,結構體定義如下:

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;

該結構體中共有11個成員變量,我們僅需配置其中的第1、4、5和11號變量即可完成對SOSC時鐘的使能,其功能分別如下:

變量一freq:應配置為當前SOSC使用的時鐘源頻率。

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

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

變量十一initialize:用于對SOSC時鐘進行使能,決定了時鐘是否有效。

對于SPLL時鐘,初始化結構體類型為scg_spll_config_t,結構體定義如下:

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;

該結構體中共有9個成員變量,我們需配置其中的第2、3、4和9號變量以完成對SPLL時鐘的使能以及輸出頻率調控,其功能分別如下:

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

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

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

變量九initialize:用于對SPLL時鐘進行使能,決定了時鐘是否有效。

對于RUN模式下的內部時鐘配置,初始化結構體類型為scg_system_clock_config_t,結構體定義如下:

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;

該結構體中共有4個成員變量,其功能分別如下:

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

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

變量三divCore:用于控制內核時鐘分頻比。

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

九、時鐘配置代碼

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

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 */

},

}

}

};

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

    關注

    146

    文章

    17123

    瀏覽量

    350973
  • 寄存器
    +關注

    關注

    31

    文章

    5336

    瀏覽量

    120224
  • 時鐘
    +關注

    關注

    10

    文章

    1733

    瀏覽量

    131446

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

文章出處:【微信號:中科芯MCU,微信公眾號:中科芯MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    MCU微課堂|CKS32F4xx系列產品時鐘配置

    作為MCU運行的基礎,時鐘是單片機各個模塊工作時序的最小時間單位,推動單片機的各指令執(zhí)行,是MCU選型的一個重要指標。CKS32F4xx系列
    發(fā)表于 12-12 10:17 ?829次閱讀

    請問FS32K148HAT0MLQR 的 SCG_SIRCDIV[2:0]中有什么東西嗎?

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

    Si443x-寄存器設置

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

    STM32 BSRR BRR ODR寄存器詳情解析

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

    AD轉換寄存器設置

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

    C語言訪問MCU寄存器

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

    STM32學習筆記(2)——寄存器

    。計算機領域,包括通用寄存器、專用寄存器和控制寄存器。寄存器擁有非常高的讀寫速度,所以在寄存器之間的數據傳送非??臁N覀円话憧刂破渲械目刂?/div>
    發(fā)表于 12-08 17:36 ?18次下載
    STM32學習筆記(2)——<b class='flag-5'>寄存器</b>

    中科推出面向CKS32位MCU的編程調試工具

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

    16位寄存器數據范圍 32位寄存器數據范圍 數據寄存器多少位怎么算

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

    如何改變spi的時鐘頻率?

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

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

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

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

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

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

    IAR Embedded Workbench集成開發(fā)環(huán)境一直是全球眾多開發(fā)者首選的嵌入式軟件開發(fā)解決方案之一。這一強大的工具套件已全面支持中科CKS32系列MCU,為開發(fā)者提供了無與
    的頭像 發(fā)表于 10-18 16:00 ?646次閱讀
    <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ā)軟件和服務的全球領導者IAR近日宣布,與中科集成電路有限公司(以下簡稱中科)達成生態(tài)合作,IAR已全面支持CKS
    的頭像 發(fā)表于 10-20 10:30 ?529次閱讀

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

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