ICSモジュール(Internal Clock Source Module)

【概略】

ICS(Internal Clock Source Module)は各種クロック生成するモジュールです。ブロック図を参照して解説します。
ICSのメイン出力はICSOUTです。このクロック信号に基づいて、CPUクロックおよびバス・クロックが生成されます。
CPUクロック周波数はICSOUT周波数と等しく、バス・クロック周波数はICSOUT の1/2 です。
外部オシレータを必要とせずに最大20MHZのクロックを生成します。
9ビットの周波数補正レジスタTRIM,FTRIMにより16MHzから20MHzまでの設定が可能で、更に分周器により1/2/4/8に分周して自由なクロック周波数設定ができます。
デバッカーの中には周波数を指定するとデバッカー自身がターゲットマイコンのTRIM・FTRIMを操作して調整する機能を持つ物もあります。
また、デバイスの中には工場で内部基準クロックを31.25kHzにする最適値をFlashメモリに書き込んだ物もあります。(QG,SHなど)
外部発振は32kHzから38.4kHz、または1MHzから16MHzの水晶振動子、セラミック振動子、レゾネータ、等を接続できます。
また外部クロック入力として直接クロックを入力する事もできます。
時計など厳密な周波数と安定度が必要な場合を除き、内部クロックで十分なクロックモジュールになっています。

ICSは以下の4つのモジュールから構成されています。
FLL Frequency-Locked Loop        (周波数ロックループモジュール)
IRC Internal Reference Clock Generator (内部基準発振器モジュール)
    Clock Select Logic           (クロック選択ロジックモジュール)
    External oscillator            (外部基準クロックオシレータモジュール)

各モジュールの動作は図の左側に表記されたレジスタにより制御されます。レジスタにより制御方法についてはICS関連レジスタの項を見てください。

【FLL】周波数ロックループモジュール

FLLモジュールはクロックセレクタ、分周器、DCO(Digital Control Oscillato)、フィルターから構成されています。
FLL
の動作は、フェーズ・ロック・ループ(PLL)とよく似ていますが、PLL が基準クロックとDCOクロック間の位相差に基づいて出力を調整するのに対して、FLLDCOクロックの回数と基準クロックを比較して調整を行います。
FLLは、基準クロックの1周期のDCOクロック・エッジ数をカウントします。
たとえば逓倍比が512 の場合、FLLは基準クロックの各立ち上がりエッジ間でDCOの512の立ち上がりエッジをカウントします。
FLLはほとんどがデジタル・ロジックで実装されるため、PLL で一般的に必要とされる外部フィルタ部品は使用しません。

入力基準クロック周波数を31.25kHzとし、分周器の設定とFLL出力周波数の関係を下表に示します。(QGなど)
分周比 1/1 1/2 1/4 1/8 1/16 1/32 1/64 1/128
出力周波数=
31.25kHz×分周比×512
16MHz 8MHz 4MHz 2MHz 1MHz 500kHz 250kHz 125kHz
入力基準クロック周波数を39.0625とし、分周期の設定とFLL出力周波数の関係を下表に示します。
分周比 1/1 1/2 1/4 1/8 1/16 1/32 1/64 1/128
出力周波数=
39.0625kHz×分周比×512
20MHz 10MHz 5MHz 2.5MHz 1.25MHz 625kHz 312.5kHz 156.25kHz

(SHなど)
分周比 1/1 1/2 1/4 1/8 1/16 1/32 1/64 1/128
出力周波数=
31.25kHz×分周比×1024
32MHz 16MHz 8MHz 4MHz 2MHz 1MHz 500kHz 250kHz

分周比 1/1 1/2 1/4 1/8 1/16 1/32 1/64 1/128
出力周波数=
39.0525kHz×分周比×1024
40MHz 20MHz 10MHz 5MHz 2.5MHz 1.25MHz 625kHz 312.5kHz

【IRC】内部基準発振器モジュール

IRC内部基準発振器モジュールは、FLLの基準クロックまたはCPU/ バス・クロックの直接ソースとして使用できる、トリミングの可能な内部基準クロック発振器です。
トリミング用のキャパシタや抵抗などの外部部品は必要ありません。
IRCのトリミングにはICSTRM レジスタの9 ビット値を使用し、通常の分解能はトリミング前のIRC周波数の0.1% です。
このIRCは、31.25kHz〜39.0625kHzの周波数範囲でトリミングが可能です。
したがって、FLLを基準として使用する場合は、0.1%の分解能により8MHz 〜 10NHz の範囲でバス周波数を設定できます。
トリミング後の周波数の変位は、標準で+0.5 〜 -1%、最大で± 2% です。モジュロタイマーとタイマー(TPM/PWM)が選択できる固定周波数クロックは出力に1/2分周が有りますので最高でも内部基準クロックの1/2です。
時計等を作る場合は31.250kHzを内部基準発信周波数に設定すると250kHz(4uS)や125kHz(8uS)のタイマーで正確な基準を作る事が出来ます。
8uSを125回カウントすれば1mS。1mSを1000回カウントすれば1秒になります。
内部基準クロックが31.25kHzの場合、固定周波数クロック= 31.25kHz/2 = 15.125kHzです。

【Clock Select Logic】クロック選択ロジックモジュール

クロック選択ロジックは、ICSモジュールの出力としてFLL、外部基準クロック、または内部基準クロックの出力選択を行います。
また、出力を1、2、4、8 で分周して出力クロック周波数を低減するためのクロック分周回路を内蔵します。

分周比 1/1 1/2 1/4 1/8
ICSOUT周波数 16MHz 8MHz 4MHz 2MHz

【External oscillator】外部基準クロックオシレータモジュール

外部基準クロックオシレータは、3 つの外部クロック・ソースを1 つに結合したモジュールです。
・32kHz〜38.4 kHzの水晶またはレゾネータで使用する低周波数オシレータ。RANGレジスタをLow Freq設定で使用します。
・1MHz〜16MHzの水晶またはレゾネータで使用する高周波数オシレータ。RANGレジスタはHigh freq設定で使用します。

オシレータ動作モード(HGOレジスタ)
動作モード 周波数
Hi gain 1〜16MHz
Low power 1〜8MHz

この2 つのオシレータは、クロック信号を生成するためのXTAL とEXTAL の2 本のピンを使用します。
・外部クロック信号をMCU に直接入力する外部クロック・モードがあります。
このモードではEXTAL ピンだけを使い、XTAL ピンは汎用I/O として使用できます。

FLL
モジュールを使わない設定では1MHz〜16MHzまでの水晶またはレゾネータを使用できます。
FLLモジュールを使う設定では、1MHz〜5MHzまでの水晶またはレゾネータを使用できます。
この場合の外部基準クロック周波数より高い周波数でMCUを動作させることができます。
但し、FLLフィルタモジュールに入力される周波数は31.25kHz〜39.06kHzでなければなりません。
FLLモジュールの分周器を使って分周し、この範囲に入るように設定してください。
5MHz/128×512=20MHz
4MHz/128×512=16MHz

外部基準クロック1MHzとし、分周器の設定とFLL出力周波数の関係を下表に示します。
分周比 1/1 1/2 1/4 1/8 1/16 1/32 1/64 1/128
出力周波数=
1MHz×分周比×512
-- -- -- -- 32MHz 16MHz 8MHz 4MHz

 ICS関連レジスタ

以下の4つのレジスタがICS設定に関連します。

7 6 5 4 3 2 1 0
ICSC1 CLKS RDIV IREFS IRCLKEN IREFSTEN
ICSC2 BDIV RANGE HGO LP EREFS ERCLKEN EREFSTEN
ICSTRM TRIM
ICSSC - - - - CLKST OSCINIT FTRIM



【ICSC1】ICS制御レジスタ1
7 6 5 4 3 2 1 0
ICSC1 CLKS RDIV IREFS IRCLKEN IREFSTEN
R/W R/W R/W R/W R/W R/W
RESET 0 0 0 0 0 1 0 0

記述例
/***** クロック設定 *****/
ICSC1 = 0x04;       // Int-clk 8MHz

bit 7-6[CLKS]バスクロックソース選択ビット(Clock Source Select)
クロック選択ロジックモジュールの入力を選択します。
00=FLLモジュール出力を選択する。
01=FLLモジュールをバイパスし、内部基準クロックを選択する。
10=FLLモジュールをバイパスし、外部基準クロックを選択する。
11=予約済み。デフォルトの00になります。

記述例
/***** クロック設定 *****/
ICSC1_CLKS = 0;       // FLLモード使用
bit 5-3[RDIV]基準クロック分周比選択ビット(Reference Divider)
FLLモジュールに入力する基準クロックの分周比を選択します。
000=分周しない。
001=1/2に分周する。
010=1/4に分周する。
011=1/8に分周する。
100=1/16に分周する。
101=1/32に分周する。
110=1/64に分周する。
111=1/128に分周する。

記述例
/***** クロック設定 *****/
ICSC1_RDIV = 0;       // バスクロック8MHz
bit 2[IREFS]内部基準クロック選択ビット(Internal Reference Select)
FLLモジュールに入力する基準クロックを選択します。
1=内部基準クロックを選択する。
0=外部基準クロックを選択する。

記述例
/***** クロック設定 *****/
ICSC1_IREFS = 1;       // 内部基準クロック
bit 1[IRCLKEN]内部基準クロックのイネーブルビット(Internal Reference Clock Enable)
HCS08QG8/4にICSIRCLKは実装されていません。
ICSIRCLKとしてRTCリアルタイムカウンターに内部クロックを出力するか選択します。
1=ICSIRCLKをアクティブにする。
0=ICSIRCLKをアクティブにしない。

記述例
/***** クロック設定 *****/
ICSC1_IRCLKEN = 0;       // ICSIRCLKをアクティブにしない
bit 0[IREFSTEN]ストップモード時の内部基準クロックの動作選択ビット(Internal Reference Stop Enable)
ICSモジュールがストップモードに移行するときに内部基準クロックを動作させたままにするか選択します。
1=ICSモジュールが内部基準クロックで動作している場合、ストップモードでも内部基準クロックを出力します。
0=ストップモードでは内部基準クロックを停止する。

記述例
/***** クロック設定 *****/
ICSC1_IREFSTEN = 0;       // ストップモードでは内部基準クロックを停止

【ICSC2】ICS制御レジスタ2

7 6 5 4 3 2 1 0
ICSC2 BDIV RANGE HGO LP EREFS ERCLKEN EREFSTEN
R/W R/W R/W R/W R/W R/W R/W R/W R/W
RESET 0 1 0 0 0 0 0 0
記述例
/***** クロック設定 *****/
ICSC2_HGO = 0x30;       // Xtal osc 12MHz
bit 7-6[BDIV]バス周波数分周比選択ビット(Bus Frequency Divider)
クロック選択ロジックモジュール出力(ICSOUT)の分周器の分周比を選択します。
CPUクロック/BUSクロックの周波数はこの分周比で決定されます。
00=分周しない。
01=1/2に分周する
10=1/4に分周する。
11=1/8に分周する。

記述例
/***** クロック設定 *****/
ICSC2_BDIV = 1;       // Bus clk 4MHz
bit 5[RANGE]周波数範囲選択ビット(Frequency Range Select)
外部基準クロックオシレータの周波数範囲を選択します。
1=高周波数設定を選択する。(1MHz〜16MHz)
0=低周波数設定を選択する。(32kHz〜38.4 kHz)

記述例
/***** クロック設定 *****/
ICSC2_RANGE = 0;       // Xtal osc 12MHz
bit 4[HGO]ハイゲインオシレータ選択ビット(High Gain Oscillator Select)
外部基準クロックオシレータの動作モード設定します。
発振周波数と消費電力(?)および、オシレータの起動時間に影響があります。
1=ハイゲインモードに設定する。(1MHz〜16MHz)
0=ローゲイン(低電力)モードに設定する。(1MHz〜8MHz)

記述例
/***** クロック設定 *****/
ICSC2_HGO = 1;       // Xtal osc 12MHz
bit 3[LP]低電力選択ビット(Low Power Select)
FLLモジュールをバイパスして使用するとき、FLLモジュールを停止して消費電力を低減するか選択します。
1=FLLバイパスした時、FLLを停止する。BDMがアクティブの場合を除く。
0=FLLバイパスした時、FLLを停止しない。

記述例
/***** クロック設定 *****/
ICSC2_LP = 0;       // FLL Stop
bit 2[EREFS]外部基準選択ビット(External Reference Select)
外部基準クロックをOSC(水晶発振子、レゾネータ)か外部クロック入力か選択します。
1=OSC(水晶発振子、レゾネータ)モードを選択する。
0=外部クロックモードを選択する。EXTAL端子に入力されるクロックを外部基準クロックとする。

記述例
/***** クロック設定 *****/
ICSC2_EREFS = 0;       // Xtal osc 12MHz
bit 1[ERCLKEN]外部基準クロックイネーブルビット(External Reference Enable)
ブロック図のICSERCLKに外部基準クロックを出力するか選択します。HCS08QG8/4にICSERCLKは実装されていません。
1=ICSERCLKに外部基準クロックを出力する。
0=ICSERCLKに外部基準クロックを出力しない。

記述例
/***** クロック設定 *****/
ICSC2_ERCLKEN = 0;       // ICSERCLKに外部基準クロックを出力しない
bit 0[EREFSTEN]外部基準クロックストップイネーブルビット(External Reference Stop Enable)
ICSモジュールがストップモードに移行するとき、外部基準クロックを動作したままにするか選択します。
1=ストップモード移行前に外部基準クロックを動作したままにする。
0=ストップモードでは外部基準クロックを停止する。

記述例
/***** クロック設定 *****/
ICSC2_EREFSTEN = 0;       // ストップモードでは外部基準クロックを停止

【ICSTRM】ICSトリムレジスタ

7 6 5 4 3 2 1 0
ICSTRM TRIM
R/W R/W R/W R/W R/W R/W R/W R/W R/W
RESET u u u u u u u u
POR 1 0 0 0 0 0 0 0
(POR = Power On Reset)
u は不変
bit 7-0[TRIM]ICSトリム設定ビット
IRC内部基準発振器の発振周波数を制御します。
制御範囲は31.25kHz〜39.06kHzです。FLLモジュールで512逓倍する事で16MHz〜20MHzまで設定可能です。
TRIMの数値を大きくすると発振周波数は高くなります。
トリムは9ビット中の上位8ビットです。ICSSCレジスタに微調整用の1ビットFTRIMレジスタがあります。

記述例

/***** TRIM設定 *****/
ICSTRM = 0xA5;      // 内臓基準クロックのトリム設定
ICSSC_FTRIM = 1;     // 内臓基準クロックのファイントリム設定

【ICSSC】ICSステータス/制御レジスタ

 7   6   5   4   3   2  1 0
ICSSC 0 0 0 IREFST CLKST OSCINT FTRIM
R/W R R R R R R R R/W
RESET 0 0 0 1 0 0 0 u
POR 0 0 0 1 0 0 0 0
POR = Power On Reset)
u は不変      
bit 7-5[-]予約済み(クリアされている必要があります。)
クリアされている必要があります。
bit 4[IREFST]インターナルリファレンスステータス(Internal Reference Status)
HCS08QG8/4にIREFSTは実装されていません。
IREFST
は選択されたクロックソース(内部/外部)を表示します。
IREFSレジスタに書き込んで内部クロックと外部クロックを切り替えてもクロックドメインとの内部同期のため、直ちには切り替わりません。
1 = 内部基準クロックで動作中
0 = 外部基準クロックで動作中

記述例

/***** クロック設定 *****/
setReg8(ICSC1, 0x06);    /* Initialization of the ICS control register 1 */
setReg8(ICSC2, 0x40);    /* Initialization of the ICS control register 2 */
while(!
ICSSC_IREFST) {    /* Wait until the source of reference clock is internal clock */
}

bit 3-2[CLKST]クロックモードステータスビット(Clock Mode Status)
ICSC1レジスタCLKSで選択したクロックモードを示します。
00=FLLモジュール出力を選択。
01=FLLモジュールをバイパスし、内部基準クロックを選択。
10=FLLモジュールをバイパスし、外部基準クロックを選択。
11=予約済み。

記述例
/***** クロック設定 *****/
ICSSC_CLKST = 0;       // FLL
bit 1[OSCINT]OSC初期化ステータスビット(OSC Initialization)
外部基準クロックオシレータの初期化完了を示します。
1=外部基準クロックオシレータの初期化が完了した。
0=ERCLKENまたはEREFSがクリアされた。

while(!ICSSC_OSCINT) {    /* Wait until the external oscillator clock have completed */
}
bit 0[FTRIM]ICSファイントリムビット(ICS Fine Trim)
ICSTRMの下位1ビットです。微調整するための最小単位です。
1=内部基準発振器の周波数を最小単位だけ高くする。
0=内部基準発振器を微調整しない。

記述例
/***** TRIM設定 *****/
ICSTRM = 0xA5;      // 内臓基準クロックのトリム設定
ICSSC_FTRIM = 1;     // 内臓基準クロックのファイントリム設定

TOP BACK NEXT