2034250_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2034250_ja-JP

2034250_ja-JP

[RTD400 MCAL 3] K312 MCUクロックシステム構成

【RTD400 MCAL 3】K312 MCUクロックシステム構成

1. アブストラクト

本ドキュメントでは、K3チップMCALのMCUでクロックシステムを構成する方法について説明します。この話題は以前LLDを行っていたときにはいつも軽視されがちでした。というのも、K3のクロックシステムは非常に単純で、内部高速・低速クロックソース、外部高速・低速クロックソース、PLL逓倍率、そして各種コア周辺モジュールで共有するだけだからです。K3のRMでは、規則を枠組み化するためにいくつかの選択肢まで用意されています。LLDの観点、特にS32DS CT設定の観点から見ると、さらに簡潔かつ明瞭です。以下にCTの図を示します。

kerryzhou_0-1737807670859.png

図1


kerryzhou_1-1737807677834.png

図2

このようなクロックシステムを使用すると、数回タップして入力するだけでコードを生成できます。しかし、LLD は自由すぎるため、MCAL では問題が発生することがよくあります。そこで、私はこの MCAL MCU のクロックシステム全体を理解するために時間を費やすことにしました。この記事では、K312を例として説明します。他のK3シリーズも似ています。

2. クロックシステムの理論と構成

2.1 K312クロックシステム

RMのクロック章を参照すると、システム全体のブロック図を確認できます。


kerryzhou_2-1737807691162.png

図3

このブロック図は各部の状況を明確に示しています。クロックソースは4つあります。

内部高速クロック FIRC:48MHz、±5% 誤差、最大起動時間 25μs

内部低速クロック SIRC: 32KHz、±10% 誤差、最大起動時間 3ms

外部高速クロックFXOSC:8~40MHz、起動安定化時間はFXOSC_CTRL[EOCV] × 128

外部低速クロックSXOSC:32.768KHz、起動安定時間SXOSC_CTRL[EOCV]×128

One PLL: input 8-40MHZ, VOC output 640M-1280Mhz, PLL_PHIn_CLK output 25-480MHz.

MUX_0: Output CORE_CLK, AIPS_PLAT_CLK, AIPS_SLOW_CLK, HSE_CLK, DCM_CLK

MUX_1: システムタイマSTM0_CLK出力

MUX_3: FLEXCAN0-2クロックを出力

MUX_4: FLEXCAN3-5クロック出力

MUX_5: CLKOUT_STANDBY出力

MUX_6: 出力 CLKOUT_RUN

MUX_11: 出力 TRACE_CLK

RTC_CLK: RTC クロック

2.1.1PLL

PLLの観点では、逓倍率がどの値に関係しているかを知る必要があり、次の式で計算できます。


kerryzhou_3-1737807699042.png

図4

整数の場合、上図の赤枠で示された方法が一般的であり、この記事でもその方法を使用して設定します。

PLL_PHIは最終的にPLLから出力されるクロックで、他のMUXで選択するために対応するMCへ供給されます。

2.1.2MUX_0システム

詳細なMUX_0システムはRMから確認できます。


kerryzhou_4-1737807714498.png

図5

ご覧のとおり、MUX_0のクロックソースはPLLまたは内部FIRCの2種類です。

その後、コアクロックは後で生成できます。AIPS_PLAT_CLK、AIPS_SLOW_CLK、HSE_CLK、DCM_CLK。

では、生成されるクロックの具体的な周波数はいくつでしょうか。原則として各モジュールに対応する最大クロックを満たせますが、K3シリーズはさらにいくつかのオプション推奨を提示しています。例えばK312ではRUN時にオプションBモードの使用が推奨されており、とりわけHSEクロックは通常、このオプション推奨を厳格に満たす必要があります。

2.1.3MUX_6クロック出力

チップ内の該当クロック状況を確認するために、CLKOUTピン経由で対応クロックを出力できます。CLKOUTピンは複数のクロックソース選択に対応しています。具体的な状況は以下のとおりです。


kerryzhou_5-1737807720158.png

図6

図中の黄色で示した内容がK312のCLKOUT_RUNでサポートされるものです。クロック構成後、対応するクロックを選択して出力が設定と一致しているかをテストします。

2.1.4option B推奨ソリューション

本記事では、K312でoption BのクロックをEB上で構成します。


kerryzhou_6-1737807735724.png

図7

2.2 EB設定

まず、新しいK312 EBプロジェクトを作成します。具体的な作成方法については前回の記事を参照してください。

[S32K3 Tools Part] RTDの既存MCALデモを他のK3チップへ移植する方法

本記事では、RTD400 MCALに基づくMCUモジュールに対応するクロック構成に焦点を当てます。MCUを構成するには、参考資料として次の2つのドキュメントを参照する必要があります:

C:\NXP\SW32K3_S32M27x_RTD_R21-11_4.0.0\eclipse\plugins\Mcu_TS_T40D34M40I0R0\doc:RTD_MCU_UM.pdfとRTD_MCU_IM.pdf

設定方法が分からない場合は、ドキュメントで推奨されるデフォルト値に従うだけで問題ありません。

次の図はMCUの概要を示します。主に構成するモジュールは次の3つのコンポーネントです。

全般、McuClockSettingConfig、McuModeSettingConf


kerryzhou_7-1737807749313.png

図8

2.2.1 一般設定

図8に加えて、内部および外部の高速・低速クロック制御とPLL制御を有効にし、対応するAPIおよび水晶発振器周波数を追加する必要があります。これを有効にしないと、その後の対応する設定を行うことができません。


kerryzhou_8-1737807754646.png

図9

2.2.2 McuClockSettingConfig 構成

ここはMCUクロック設定の中核部分で、クロックソース、PLL、各種MUX条件を含みます。

まず、クロック構成を追加する必要があります。


kerryzhou_9-1737807770429.png

図10

クリックすると詳細設定が表示されます。


kerryzhou_10-1737807778011.png

図11

全部で17項目あります。オプション1と6はデフォルト設定のままで構いません。ボードに外部スロークロック水晶発振器5が接続されていないため、これは設定しません。残りは実際の状況に応じて設定してください。以下で順に説明します。

2.2.2.1 McuFIRC構成

内部高速クロック、48MHz:


kerryzhou_11-1737807791866.png

図12

2.2.2.2 McuSIRC構成

内部スロークロック32kHz


kerryzhou_12-1737807801198.png

図 13

2.2.2.3 McuFXOSC 構成

外部水晶発振器16MHzは、実際の接続状況に応じて入力してください。


kerryzhou_13-1737807813718.png

図 14

2.2.2.4 McuCgm0ClockMux0 構成

Mux0の設定では、コアクロック、AIPS_PLAT_CLK、AIPS_SLOW_CLK、HSE、DCM_CLKを構成し、option Bの要件を満たすようにし、クロックはPLL_PHI0_CLKから供給されます。実際に設定する際は、まずPLLクロックを設定して正しいPLL_PHI0_CLKおよびPLL_PHI1_CLKを出力させます。


kerryzhou_14-1737807826426.png

図15

2.2.2.5 McuCgm0ClockMux1 構成

kerryzhou_15-1737807916728.png

図 16

必要なモジュールのクロックソースに応じて設定できます。

2.2.2.6 McuCgm0ClockMux3 構成

FLEXCAN0〜2モジュールのクロックソースを設定します。


kerryzhou_16-1737807926938.png

図17

2.2.2.7 McuCgm0ClockMux4 構成

FLEXCAN3〜5モジュールのクロックソースを設定します。


kerryzhou_17-1737807941602.png

図18

2.2.2.8 McuCgm0ClockMux5 構成

CLKOUT_STANBYモジュールのクロックソースを設定します。


kerryzhou_18-1737807946406.png

図 19

2.2.2.9 McuCgm0ClockMux6 構成

CLKOUT_RUNモジュールのクロックソースを設定します。


kerryzhou_19-1737807964974.png

図20

2.2.2.10 McuCgm0ClockMux11 構成

TRACE_CLKモジュールのクロックソースを設定します。


kerryzhou_20-1737807973402.png

図21

2.2.2.11 McuRtcClockSelect設定

RTCモジュールのクロックソースを設定します。


kerryzhou_21-1737807987068.png

図 22

2.2.2.12 McuPLL構成

PLLモジュールのクロックソースを設定します。


kerryzhou_22-1737807991862.png

図23

2.2.2.13 McuClockReferencePoint 構成

周辺モジュールの基準クロックおよびクロックソース選択インターフェースを設定します。


kerryzhou_23-1737808007938.png

図24

これでクロック設定は完了です。

検証のためには、CLKOUT_RUN 出力を使用して、対応するクロックをピン PTD10 に出力して確認することができます。

2.2.3 McuModeSettingConf 構成

McuのMcuModeSettingConf→McuPeripheralで、使用したいペリフェラルを有効にする必要があります。


kerryzhou_24-1737808019153.png

図25

2.2.4 PORT構成

内部クロックをCLKOUT_RUNに出力する必要があるため、K312のPTD10 MSCR106をチェックし、以下のようにPORTピンを追加します。


kerryzhou_25-1737808030584.png

図26

3. テスト結果

次に、S32K312-EVBボード上でEBのCLKOUT_RUNのクロックソースを変更し、クロックが設定に一致するかをテストします。

一般的に使用されるMCU関連ドライバは次のとおりです。


kerryzhou_26-1737808035339.png

図27

システム起動時のMCU初期化の呼び出し順序は以下のとおりです。

1). Mcu_Init()

2). Mcu_InitClock()

3)Mcu_GetPllStatus() ‒ PLLがロックするまで

4). Mcu_DistributePllClock()

5). Mcu_SetMode()

6). Mcu_InitRamSection() - 必要な場合

対応するmainコードは次のとおりです。

#include "Mcu.h"
#include "Mcu_Cfg.h"
#include "Port.h"
#include "Dio.h"
#include "Port_Cfg.h"
#include "Platform.h"
void TestDelay(uint32 delay);
void TestDelay(uint32 delay)
{
    static volatile uint32 DelayTimer = 0;
    while(DelayTimer < delay)
    {
        DelayTimer++;
    }
    DelayTimer = 0;
}

/**
* @brief        Main function of the example
* @details      Initialize the used drivers and uses the Icu
*               and Dio drivers to toggle a LED on a push button
*/
int main(void)
{
    uint8 count = 0U;
    uint8 u8TimeOut = 100U;

    /* Initialize the Mcu driver */
#if (MCU_PRECOMPILE_SUPPORT == STD_ON)
    Mcu_Init(NULL_PTR);
#elif (MCU_PRECOMPILE_SUPPORT == STD_OFF)
    Mcu_Init(&Mcu_Config_VS_0);
#endif /* (MCU_PRECOMPILE_SUPPORT == STD_ON) */

    /* Initialize the clock tree and apply PLL as system clock */
    Mcu_InitClock(McuClockSettingConfig_0);

#if (MCU_NO_PLL == STD_OFF)
    while ( MCU_PLL_LOCKED != Mcu_GetPllStatus() )
    {

    }

    Mcu_DistributePllClock();
#endif

    /* Apply a mode configuration */
    Mcu_SetMode(McuModeSettingConf_0);

    /* Initialize all pins using the Port driver */
    Port_Init(NULL_PTR);
    /* Initialize Platform driver */
    Platform_Init(NULL_PTR);

    while (count++ < 10)
    {
        Dio_WriteChannel(DioConf_DioChannel_Digital_Output_LED_Q172, STD_HIGH);
        Dio_WriteChannel(DioConf_DioChannel_Digital_Output_LED_Q257, STD_HIGH);
        TestDelay(5000000);
        Dio_WriteChannel(DioConf_DioChannel_Digital_Output_LED_Q172, STD_LOW);
        Dio_WriteChannel(DioConf_DioChannel_Digital_Output_LED_Q257, STD_LOW);
        TestDelay(5000000);
    }

//    Exit_Example(TRUE);

    return (0U);
}


#ifdef __cplusplus
}
#endif

3.1 CLKOUT FIRC_CLK DIV2


kerryzhou_27-1737808056154.png

図28

FIRC の元の 48Mhz クロックが 2 で分周され、24Mhz のクロック波形が得られることが確認でき、これは正しいです!

3.2 CLKOUT SIRC_CLK DIV2


kerryzhou_28-1737808060208.png

図29

SIRCの元の32kHzクロックが2分周され、16kHzのクロック波形が得られていることが確認でき、正しいことが分かります。

3.3 CLKOUT FXOSC_CLK DIV10


kerryzhou_29-1737808075509.png

図30

FXOSCの元の16MHzクロックは10で分割され、1.6MHzのクロック波形が得られることがわかります。

3.4 CLKOUT PLLPH0 CLK DIV10


kerryzhou_30-1737808081217.png

図31

PLLPH0 の元の 120MHz クロックが 10 で分割され、12MHz のクロック波形が得られ、正しいことが確認できます。

3.5 CLKOUT コア CLK DIV10


kerryzhou_31-1737808094772.png

図32

COREの元の120MHzクロックが10分周され、12MHzのクロック波形が得られていることが確認でき、正しいことが分かります。

3.6 CLKOUT PLLPH1 CLK DIV4


kerryzhou_32-1737808099268.png

図33

PLLPH1の元の48MHzクロックが4分周され、12MHzのクロック波形が得られていることが確認できます。

3.7 CLKOUT HSE CLK DIV10


kerryzhou_33-1737808116460.png

図 34

HSEの元の60Mhzクロックが10で分周され、6Mhzのクロック波形が得られていることが確認でき、正しいです。

3.8 CLKOUT AIPS_PLAT CLK DIV10


kerryzhou_34-1737808124117.png

図 35

AIPS_PLAT_CLKの元の60MHzクロックが10分周され、6MHzのクロック波形が得られていることが確認でき、正しいことが分かります。

3.9 CLKOUT AIPS_SLOW CLK DIV10


kerryzhou_35-1737808132759.png

図 36

AIPS_SLOW_CLKの元の30MHzクロックが10分周され、3MHzのクロック波形が得られていることが確認でき、正しいことが分かります。


タグ(1)
評価なし
バージョン履歴
最終更新日:
‎01-05-2026 04:17 AM
更新者: