8. システムクロック

8. システムクロック

8.1 クロックブロック図

図8.1.1 クロックシステムと構造

Clock_diagram

元のクロックFoscとして内部クロックまたは外部クロックを選択し、PLLを乗算して高周波クロックFpllを生成します。最後に、システムクロックFsysとUSBモジュールFusb4xのクロックを得るために、2組の周波数変換器が使用されます。

システムクロックFsysは、CH559の各モジュールに直接またはクロックゲーティング後に供給されます。各モジュールは同時に動作する必要はありません。消費電力を抑えるために、スリープ制御レジスタを設定することで、動作する必要のないモジュールのクロックを無効にすることができます。

8.2 レジスタ概要

表8.2.1 クロック制御レジスタ一覧

名前アドレス詳細リセット値
CLOCK_CFGB3hシステムクロック構成レジスタ98h
PLL_CFGB2hPLLクロック構成レジスタD8h

システムクロック構成レジスタ(CLOCK_CFG), セーフモードでのみ書き込み可能:

ビット名前アクセス概要リセット値
7bOSC_EN_INTRW内部クロック発振器が有効
1: 内部クロック発振器を有効にし、内部クロックを選択します。
0: 内部クロック発振器を無効にして、外部水晶発振器を選択します。
1
6bOSC_EN_XTRW外部水晶振動子が有効
1: P4.6/P4.7端子をXI/XOとして使用し、発振が有効になります。XI/XO間には水晶またはセラミックの外付け発振器が必要です。
0: 外部発振器が無効
0
5bWDOG_IF_TOR0ウォッチドッグタイマ割り込みフラグビット
1: タイマオーバーフロー信号による割り込みが発生していることを示します。
0: 割り込みがないことを示します。
このビットは、ウォッチドッグ・カウント・レジスタ WDOG_COUNT がリロードされたとき、または対応する割込みサービス・ルーチンに入ると自動的にクリアされます。
0
[4:0]MASK_SYS_CK_DIVRWシステムクロック分周率。値が00000bの場合は100000bを意味します。 11000b

PLLクロック制御レジスタ(PLL_CFG), セーフモードでのみ書き込み可能:

ビット名前アクセス概要リセット値
[7:5]MASK_USB_4X_DIVRWUSBクロックの分周率。値が000bの場合は1000bを意味します。110b
[4:0]MASK_PLL_MULTRWPLL基準クロック乗算器11000b

8.3 クロック設定

CH559チップは電源投入後、デフォルトで内部クロックを使用します。内部クロック周波数は12MHzです。内部クロックと外部水晶発振器のクロックはCLOCK_CFGで選択できます。外部水晶発振器をオフにすると、XI端子とXO端子をP4.6、P4.7の通常のI/Oポートとして使用することができます。

クロックを外部から水晶発振器で供給する場合は、水晶をXI端子とXO端子の間に接続し、発振用コンデンサをXI端子とXO端子にそれぞれGNDに接続します。外部から直接クロック信号を入力する場合は、ピン入力、XO端子はフローティング。

  • オリジナルクロック周波数 Fosc = bOSC_EN_INT? 12MHz: Fxt
  • PLL周波数 Fpll = Fosc * (PLL_CFG & MASK_PLL_MULT)
  • USBクロック分周率 Kusb = (PLL_CFG & MASK_USB_4X_DIV) » 5
  • USBクロック周波数 Fusb4x = Fpll / (Kusb? Kusb: 8)
  • システムクロック分周率 Ksys = CLOCK_CFG & MASK_SYS_CK_DIV
  • システム周波数 Fsys = Fpll / (Ksys? Ksys: 32)
  • リセット直後, Fosc = 12MHz, Fpll = 288MHz, Fusb4x = 48MHz, Fsys = 12MHz.

クロックを供給するために外部の水晶発振器に切り替える:

  1. セーフモードに入る、ステップ1 SAFE_MOD = 55h; ステップ2 SAFE_MOD = AAh
  2. bit-or操作でCLOCK_CFGのbOSC_EN_XTを設定する。その他のビットは変更しません。水晶発振器が有効
  3. 数ミリ秒の遅延、およそ 5mS~10mS, 水晶発振器が安定して動作するのを待ちます
  4. 再びセーフモードに入る、ステップ1 SAFE_MOD = 55h; ステップ2 SAFE_MOD = AAh
  5. CLOCK_CFGのbOSC_EN_INTをビットアンド演算で0にクリアする。他のビットは変更しません。外部クロックに切り替える
  6. セーフモードを出る。SAFE_MOD に任意の値を書き込み、セーフモードを終了させます

システムクロックを変更する手順は以下の通りです:

  1. セーフモードの有効期間を超えて計算処理が長くなりすぎないようにPLL_CFG, CLOCK_CFGの値を事前に計算しておく
  2. セーフモードに入る, ステップ1 SAFE_MOD = 55h; ステップ2 SAFE_MOD = AAh
  3. 新しい値をPLL_CFGに書き込む
  4. 新しい値をCLOCK_CFGに書き込む
  5. セーフモードを出る, SAFE_MOD に任意の値を書き込み、セーフモードを終了させます

備考:

  1. PLL周波数Fpllは24MHz~350MHzの周波数範囲を超えないことを推奨します
  2. 低いシステムクロック周波数のFsysを優先的に使用することで、システムの動的消費電力を削減し、動作温度範囲を広げることができます
  3. USBモジュールを使用する場合、Fusb4xは48MHzに調整する必要があります.
  4. 外部水晶の切り替えとシステムの主周波数の変更は、独立した2つの操作です。両方を同時に必要とする場合は、以下の2つのケースに分けることをお勧めします:
    1. 外部水晶の周波数が13MHzを超えない場合は、まず外部水晶に切り替えてから、システムの主周波数を変更します
    2. 外部水晶振動子の周波数が13MHz以上の場合。最初にPLL_CFGレジスタのPLL基準クロック逓倍係数を減らしてPLL周波数Fpllオーバーフローを回避する。その後、外部水晶に切り替えて、最後にシステムのメイン周波数を変更するか、またはPLL_CFGを変更することができます。同時に、システムクロックを変更します