8. システムクロック
8.1 クロックブロック図
図8.1.1 クロックシステムと構造
元のクロックFoscとして内部クロックまたは外部クロックを選択し、PLLを乗算して高周波クロックFpllを生成します。最後に、システムクロックFsysとUSBモジュールFusb4xのクロックを得るために、2組の周波数変換器が使用されます。
システムクロックFsysは、CH559の各モジュールに直接またはクロックゲーティング後に供給されます。各モジュールは同時に動作する必要はありません。消費電力を抑えるために、スリープ制御レジスタを設定することで、動作する必要のないモジュールのクロックを無効にすることができます。
8.2 レジスタ概要
表8.2.1 クロック制御レジスタ一覧
名前 | アドレス | 詳細 | リセット値 |
---|---|---|---|
CLOCK_CFG | B3h | システムクロック構成レジスタ | 98h |
PLL_CFG | B2h | PLLクロック構成レジスタ | D8h |
システムクロック構成レジスタ(CLOCK_CFG), セーフモードでのみ書き込み可能:
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
7 | bOSC_EN_INT | RW | 内部クロック発振器が有効 1: 内部クロック発振器を有効にし、内部クロックを選択します。 0: 内部クロック発振器を無効にして、外部水晶発振器を選択します。 | 1 |
6 | bOSC_EN_XT | RW | 外部水晶振動子が有効 1: P4.6/P4.7端子をXI/XOとして使用し、発振が有効になります。XI/XO間には水晶またはセラミックの外付け発振器が必要です。 0: 外部発振器が無効 | 0 |
5 | bWDOG_IF_TO | R0 | ウォッチドッグタイマ割り込みフラグビット 1: タイマオーバーフロー信号による割り込みが発生していることを示します。 0: 割り込みがないことを示します。 このビットは、ウォッチドッグ・カウント・レジスタ WDOG_COUNT がリロードされたとき、または対応する割込みサービス・ルーチンに入ると自動的にクリアされます。 | 0 |
[4:0] | MASK_SYS_CK_DIV | RW | システムクロック分周率。値が00000bの場合は100000bを意味します。 | 11000b |
PLLクロック制御レジスタ(PLL_CFG), セーフモードでのみ書き込み可能:
ビット | 名前 | アクセス | 概要 | リセット値 |
---|---|---|---|---|
[7:5] | MASK_USB_4X_DIV | RW | USBクロックの分周率。値が000bの場合は1000bを意味します。 | 110b |
[4:0] | MASK_PLL_MULT | RW | PLL基準クロック乗算器 | 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 SAFE_MOD = 55h; ステップ2 SAFE_MOD = AAh
- bit-or操作でCLOCK_CFGのbOSC_EN_XTを設定する。その他のビットは変更しません。水晶発振器が有効
- 数ミリ秒の遅延、およそ 5mS~10mS, 水晶発振器が安定して動作するのを待ちます
- 再びセーフモードに入る、ステップ1 SAFE_MOD = 55h; ステップ2 SAFE_MOD = AAh
- CLOCK_CFGのbOSC_EN_INTをビットアンド演算で0にクリアする。他のビットは変更しません。外部クロックに切り替える
- セーフモードを出る。SAFE_MOD に任意の値を書き込み、セーフモードを終了させます
システムクロックを変更する手順は以下の通りです:
- セーフモードの有効期間を超えて計算処理が長くなりすぎないようにPLL_CFG, CLOCK_CFGの値を事前に計算しておく
- セーフモードに入る, ステップ1 SAFE_MOD = 55h; ステップ2 SAFE_MOD = AAh
- 新しい値をPLL_CFGに書き込む
- 新しい値をCLOCK_CFGに書き込む
- セーフモードを出る, SAFE_MOD に任意の値を書き込み、セーフモードを終了させます
備考:
- PLL周波数Fpllは24MHz~350MHzの周波数範囲を超えないことを推奨します
- 低いシステムクロック周波数のFsysを優先的に使用することで、システムの動的消費電力を削減し、動作温度範囲を広げることができます
- USBモジュールを使用する場合、Fusb4xは48MHzに調整する必要があります.
- 外部水晶の切り替えとシステムの主周波数の変更は、独立した2つの操作です。両方を同時に必要とする場合は、以下の2つのケースに分けることをお勧めします:
- 外部水晶の周波数が13MHzを超えない場合は、まず外部水晶に切り替えてから、システムの主周波数を変更します
- 外部水晶振動子の周波数が13MHz以上の場合。最初にPLL_CFGレジスタのPLL基準クロック逓倍係数を減らしてPLL周波数Fpllオーバーフローを回避する。その後、外部水晶に切り替えて、最後にシステムのメイン周波数を変更するか、またはPLL_CFGを変更することができます。同時に、システムクロックを変更します