C言語

クロック発生回路を制御するレジスタの設定

今回は、クロックに関するレジスタを設定していきます。基本的に、オプション・バイトで設定した、高速オンチップ・オシレーターの32MHzで他に変更の必要なものはないのですが、明示的に設定するとクロックがどのような設定になっているかがわかるので、設定を行います。

クロックを制御するレジスタ

簡単ではありますが、クロックを制御するレジスタについて、簡単ではありますが、説明していきます。

クロック動作モード制御レジスタ(CMC)

X1/P121, X2/EXCLK/P122端子およびXT1/P123, XT2/EXCLKS/P124端子の動作モード(入力ポート、X1発振、外部クロック入力)の選択と,XT1発振モード選択(低消費発振、通常発振、超低消費発振)と、X1クロック発振周波数制御を選択するレジスタです。外部クロックを使用する場合は、別途設定が必要です。

今回は、高速オンチップ・オシレータのみを使用するため、初期値のままでよいです。

システム・クロック制御レジスタ(CKC)

CPUや、タイマ・アレイ・ユニット、A/Dコンバータなどの制御に使用するクロック(CPU/周辺ハードウエア・クロック)に、メイン・システム・クロックか、サブシステム・クロックのどちらを使うか選択します。
また、メイン・システム・クロックに高速オンチップ・オシレータか高速システムクロック(X1発振)のどちらを使うか選択します。

今回は、高速オンチップ・オシレータのみを使用するため、初期値のままでよいです。

クロック動作ステータス制御レジスタ(CSC)

高速システムクロック(X1発振)、サブシステムクロック(XT1発振)高速オンチップ・オシレータの動作を開始するか停止するかを選択します。

今回は、高速オンチップ・オシレータのみを使用するため、初期値のままでよいです。

発振安定時間カウンタ状態レジスタ(OSTC)

X1発振に切り替えるときに、発振が安定するまで待ち時間を確認するときに使用します。X1クロック発振が開始したときにカウントを開始するので、それこからどのくらい経過したかを確認します。

発振安定時間選択レジスタ(OSTS)

X1発振の安定時間を選択します。

サブシステム・クロック供給モード制御レジスタ(OSMC)

不要な周辺機能へのクロックを停止することにより消費電力を抑えます。
STOPモード時、および、サブシステム・クロックでCPU動作中のHALTモード時のクロック供給許可するか、RTC、12ビット・インターバル・タイマ以外の周辺機能のクロック供給を停止するかを選択します。また、RTC、12ビット・インターバル・タイマ、タイマRJの動作クロックを、サブシステム・クロックにするか、低速オンチップ・オシレータにするかを選択します。

今回、STOPモード、サブシステム・クロックは特に使用しないので、初期値のままとします。

高速オンチップ・オシレータ周波数選択レジスタ(HOCODIV)

オプション・バイトで設定した高速オンチップ・オシレータ周波数を変更します。

今回は、オプション・バイトの設定値から変更しないため、初期値のままでよいです。

高速オンチップ・オシレータ・トリミング・レジスタ(HIOTRM)

高速オンチップ・オシレータの精度補正を行います。

すみません、使用したことがないため、紹介のみで、今回も補正することはないと思います。

クロック設定の実装

「RL78G14_init.c」ファイルに、クロック初期化関数を用意します。
このファイルは、ロボットカー用IOポート設定、タイマ設定で使用したファイルです。そのファイルに次の実装内容を追加します。

省略
static void RL78G14_init_clock( void );  //今回追加箇所
static void RL78G14_init_IO_Port( void );
省略
//↓今回追加箇所
#define RL78G14_INIT_CMC     (0x00)
#define RL78G14_INIT_CKC     (0x00)
#define RL78G14_INIT_CSC     (0xC0)
#define RL78G14_INIT_OSMC    (0x00)
//↑今回追加箇所
void hdwinit( void )
{
    PIOR0 = RL78G14_INIT_PIOR0;
    PIOR1 = RL78G14_INIT_PIOR1;
    RL78G14_init_clock();        //今回追加箇所
    RL78G14_init_IO_Port();
    RL78G14_init_Timer();
}
//↓今回追加箇所
static void RL78G14_init_clock( void )
{
    CMC = RL78G14_INIT_CMC;
    CSC = RL78G14_INIT_CSC;
    CKC = RL78G14_INIT_CKC;
    OSMC = RL78G14_INIT_OSMC;
}
//↑今回追加箇所
省略

高速オンチップ・オシレータを使用し、オプション・バイトの動作クロック設定から変更はないため、クロック発生回路に関するレジスタはすべて初期値のままです。
発振安定時間カウンタ状態レジスタ(OSTC )、発振安定時間選択レジスタ(OSTS)は、X1発振はしないため、設定の必要がないことが明確なため、設定は行わないこととします。
高速オンチップ・オシレータ周波数選択レジスタ(HOCODIV)は、周波数はオプション・バイトから変更がないため、設定は行いません。
高速オンチップ・オシレータ・トリミング・レジスタ(HIOTRM)も、補正しないため、設定のひつようがないことが明確なので設定は行いません。

このため、それ以外のクロック発生回路のレジスタの設定のみを行いました。

すべて初期値のままなので、設定の必要はありませんが、今回は、高速オンチップ・オシレータを使用することを明確にするため、あえて設定しました。
また、クロック発生回路のレジスタはマイコン動作の基本となる設定の一つなので、知っておくとよいと思います。

クロック発生回路のレジスタの初期設定の実装は以上となります。

-C言語