がれすたさんのDIY日記

電子回路、Python、組み込みシステム開発、自作エフェクターを語るblog

MIMXRT10xx series dcd table Tips part2

前回は解釈の仕方を書いたので今回はクロックに絞って全容をつらつら書く感じ。
ぶっちゃけ前回の記事で必要なことは書いたのでこれは読みたい人が読んでくれればいい。そんなmini tips的なやつ

本記事の環境は以下の通りです。

  • MIMXRT1050-EVK
  • SDK ver 2.5

クロックの設定

DCD tableを先頭から見ていくとdcd tableの0x09 ~ 0x57 bytes でクロック設定をしている。

dcd byte reg address reg name value
0x09~0x0F 0x400FC068 CCM_CCGR0 0xFFFFFFFF
0x10~0x17 0x400FC06C CCM_CCGR1 0xFFFFFFFF
0x18~0x1F 0x400FC070 CCM_CCGR2 0xFFFFFFFF
0x20~0x27 0x400FC074 CCM_CCGR3 0xFFFFFFFF
0x28~0x2F 0x400FC078 CCM_CCGR4 0xFFFFFFFF
0x30~0x37 0x400FC07C CCM_CCGR5 0xFFFFFFFF
0x38~0x3F 0x400FC080 CCM_CCGR6 0xFFFFFFFF
0x40~0x47 0x400D8030 CCM_ANALOG_PLL_SYS 0x00002001
0x48~0x4F 0x400D8100 CCM_ANALOG_PFD_528 0x001D0000
0x50~0x57 0x400FC014 CCM_CBCDR 0x00010D40

DCD tableにおけるクロックの設定を書きだすとこんな感じ

そしてこのTipで操作するクロックを示すとこんな感じ

f:id:gsmcustomeffects:20190301020411p:plain
本記事で操作する部分を示した図

CCM_CCGR(CCM Clock Gating Register)

CCM_CCGR0~CCM_CCGR6はクロックゲートレジスタのことで各モジュールのクロックを個別にON/OFFできる。
モジュールごとに2bit設けられてて設定値による効果は以下の画像の通り

f:id:gsmcustomeffects:20190228004604p:plain
Clock Activity Description

MIMXRT10xxの場合ペリフェラルが大量にあるので少し大変だがDCDでは全部ONにしているみたい。
except STOP modeとあるのでSTOPモード以外でクロックはONである。

CCM_ANALOG_PLL_SYS(Analog System PLL Control Register)

次にCCM_ANALOG_PLL_SYSの部分を見ていく

f:id:gsmcustomeffects:20190228020449p:plain
CCM_ANALOG_PLL_SYS
f:id:gsmcustomeffects:20190228020624p:plain
CCM_ANALOG_PLL_SYSn field descriptions

DCDtableにおけるセット値は0x00002001である。

ビットごとに分解してみていくと

BYPASSビットが0なのでPLLのバイパスはしないすなわちPLLを使用する設定。
BYPASS_CLK_SRCが00なので24MHzオシレータを使用する。
ENABLEが1なのでPLL出力が有効
DIV_SELECTが1なのでFout=Fref*22となる。

ここでCCM_ANALOG_PLL_SYS_NUMおよびDENOMというレジスタがあるがノーケアのためPOR(Power On Reset)初期値が使われFref * (22+(0/18))となり結局528MHzとなる。

この項で操作してるモジュールを示すとこんな感じ

f:id:gsmcustomeffects:20190301025840p:plain
CCM_ANALOG_PLL_SYS関連モジュール

CCM_ANALOG_PFD_528(528MHz Clock (PLL2) Phase Fractional Divider Control Register)

次にCCM_ANALOG_PFD_528を見ていく
PFDクロック生成のための設定をするレジスタで、fractional dividerの設定などができる。

bitごとの概要を以下の画像に示す。

f:id:gsmcustomeffects:20190301011808p:plain
CCM_ANALOG_PFD_528n register definition

PFDx_CLKGATEは1でOFF,0でON
PFDx_STABLEはread only bitで診断専用ビット。fractional dividerが有効になると値が反転する。
PFDx_FRACはfractional dividerの値

528*18/PFDx_FRAC where PFDx_FRAC is in the range 12-35.とあるので12~35の値を入れればいい

DCDtableにおけるセット値は0x001D0000であるためPFD2の部分をセットしてることになる。

field name[bit] set value description
PFD2_CLKGATE[23] 0b0 PFD2の有効
PFD2_STABLE[22] 0b0 read onlyのため関係ない
PFD2_FRAC[21-16] 0b011101 PFDx_FRAC =29

これで 528*18/29 = 327.72[MHz]となる。

CCM_CBCDR(CCM Bus Clock Divider Register)

最後にCCM Bus Clock Divider Registerについてである。
SEMCモジュールに一番近い部分のブロックでありクロックセレクトおよび分周器の設定が可能

f:id:gsmcustomeffects:20190301212223p:plain
CCM_CBCDR field descriptions


見たところ7種類ぐらい設定できるとこがある。
操作可能な部分を図で示すと以下の画像のようになる。

赤で示した部分がコア関連のクロック設定。
青で示す部分がSEMC関連。

f:id:gsmcustomeffects:20190301212508p:plain
CCM_CBCDRで操作可能なモジュール

DCD tableにおける設定値は0x00010D40となっている。

これもビットごとに分解して見ていこう

field name[bit] set value description
Reserved[31-30] 0b00 none
PERIPH_CLK2_PODF[29-27] 0b000 000なのでdivide by 1
Reserved[26] 0b0 none
PERIPH_CLK_SEL[25] 0b0 0なのでpre_periph_clk_selをセレクト
Reserved[24-19] 0b000000 none
SEMC_PODF[18-16] 0b001 001なのでdivide by 2
AHB_PODF[12-10] 0b011 011なのでdivide by 4
IPG_PODF[9-8] 0b01 01なのでdivide by 2
SEMC_ALT_CLK_SEL[7] 0b0 0なのでPLL2 PFD2がSEMC root clockとして使われる
SEMC_CLK_SEL[6] 0b1 1なのでSEMC alternative clock がSEMC clock root
Reserved[5-0] 0b000000 none

ここで上のほうは無視するとしてSEMCを見ていきます。
SEMC_ALT_CLK_SELでPLL2 PFD2、SEMC_CLK_SELでSEMC alternative clockとあるのでこのように選ばれます。

f:id:gsmcustomeffects:20190301230521p:plain
セレクターの動き

SEMC_PODFがdivide by 2なので327.72/2 = 163.86MHzとなる。
SEMCのスペックは166MHzなのでほぼ最大値でセットされるということがわかる。

f:id:gsmcustomeffects:20190301230336p:plain
SEMCのスペック

これでクロックの設定は終了。
冒頭にあるようにそのまま全容をつらつら書きましたがいかがでしたか?

正直起動関連部分なのでこういうのは公式が書いてほしいものですが
本記事で少しでも力になれれば幸いという感じです。

もちろんDCDは1000byte近くあるのでこの後にピン設定などが続きますので今後はそれを書いていこうと思います。

memo

クロックのPower modeには

  • RUN mode
  • WAIT mode
  • STOP mode

がある

詳細についてはリファレンスマニュアルのChapter 13 Clock Controller Module (CCM)を参照

ref

MIMXRT1050のリファレンスマニュアルの

  • Chapter 13 Clock Controller Module (CCM)
  • Chapter 23 External Memory Controllers
  • Chapter 24 Smart External Memory Controller