EUSARTを試してみようとしたのですが、オシレータモジュールが理解できてないと始まらないことに気付いたのでメモしておきます。
参考資料はEUSARTと同じデータシート日本語版(P15~P27)です。こちら
PDFファイルへの直リンクですが実際に使用される場合は、メーカーのページから最新版をダウンロードして下さい。
ブロック図
レジスタ
CONFIG1Hの既定値:0010 0111
システムクロックの選択
OSCCONレジスタのSCSビットによって以下のクロック源のいずれかを選択する。
・プライマリ外部オシレータ
・セカンダリ外部オシレータ
・内部オシレータ
既定状態のSCSビットは、システムクロックとして、CONFIG1HのFOSCビットで定義するオシレータを選択する。
システムクロックはSCSビットがソフトウェアによって変更されない限り、常にFOSCビットによって定義される。
システムクロックとして内部オシレータを選択した場合、OSCCONレジスタのIRCFビットおよびOSCTUNEレジスタのINTSRCビットによってLFINTOSCまたはHFINTOSCのいずれかが選択される。
IRCF<2:0>=000かつINTSRCビットがクリアされていると、システムクロックとしてLFINTOSCが選択される。
これ以外のIRCFビットとINTSRCビットの組み合わせではHFINTOSCが選択される。
プライマリ外部オシレータ 省略
セカンダリ外部オシレータ 省略
内部オシレータ
以下の2つの独立したオシレータがある。
・LFINTOSC 低周波内部オシレータ
・HFINTOSC 高周波内部オシレータ
LFINTOSC
31kHzの内部クロック源。
以下の回路のクロック源として使用する。
・パワーアップタイマ
・ウォッチドッグタイマ
・フェイルセーフクロックモニタ
以下の条件のいずれか1つが真の場合に有効になる。
・パワーアップタイマが有効(PWRTEN=0)
・ウォッチドッグタイマが有効(WDTEN=1)
・ウォッチドッグタイマがソフトウェアによって有効にされた場合(WDTEN=0かつSWDTEN=1)
・フェイルセーフクロックモニタが有効(FCMEM=1)
・SCS1=1かつIRCF<2:0>=000かつINTSRC=0
・FOSC<3:0>が内部オシレータをプライマリクロックとして選択し、さらにIRCF<2:0>=000かつINTSRC=0の場合
・IESO=1(2段階起動)かつIRCF<2:0>=000かつINTSRC=0の場合
HFINTOSC
16MHzで動作するように工場出荷時に校正済みの高精度オシレータ。
出力は、ポストスケーラとマルチプレクサに接続されている。
OSCCONレジスタのIRCF<2:0>ビットによって、8つの周波数から1つを選択する。
HFINTOSCで使用できる周波数は以下の通り。
16MHz,8MHz,4MHz,2MHz,1MHz(リセット後の既定値),500kHz,250kHz,31kHz
OSCCONレジスタのHFIOFSビットは、HFINTOSCの動作が安定しているかどうかを示す。
HFINTOSCオシレータの周波数として31kHzを選択するには、IRCF<2:0>=000に設定し、さらにOSCTUNEレジスタのINTSRCビットをセットする必要がある。INTSRCビットをクリアすると、システムクロックはLFINTOSCから供給される。
HFINTOSCの周波数は、OSCTUNEレジスタによってさらに調整できる。詳細はレジスタ2-3参照
HFINTOSCは、以下の条件のいずれか1つが真の場合に有効になる。
・SCS1=1かつIRCF<2:0>≠000
・SCS1=1かつIRCF<2:0>=000かつINTSRC=1
・FOSC<3:0>が内部オシレータをプライマリクロックとして選択し、さらに
IRCF<2:0>≠000 または
IRCF<2:0>=000 かつ INTSRC=1
・IESO=1(2段階起動)かつ
IRCF<2:0>≠000 または
IRCF<2:0>=000 かつ INTSRC=1
・FCMEM=1(フェイルセーフクロックモニタ使用)
かつ
IRCF<2:0>≠000 または
IRCF<2:0>=000 かつ INTSRC=1
オシレータ起動タイマ 省略
クロックの切り換え 省略
4xPLL周波数マルチプライヤ
PLL回路は、低周波外部オシレータを使用するか、HFINTOSCを32MHzで動作させる必要のあるユーザー向けのオプション。
入力周波数4~12MHzに対して設計されている。
CONFIG1HのPLLENビットおよびOSCTUNEレジスタのSPLLENビットによって制御される。
PLLENビットをセットするとPLLが有効になり、PLLENビットをクリアするとソフトウェア制御になる。
CPUクロック分周器
同じクロック源を共用していながら、システムクロックだけをロースピード/フルスピードUSBモジュールのクロックよりも低速で駆動する事ができる。
CPUクロック分周器を適用できるのは、CONFIG1HのFOSCビットが定義するオシレータだけ。
CONFIG1LのCPUDIVビットによって以下のように設定される。
・USBモジュールと同じクロック速度
・USBモジュールの半分のクロック速度
・USBモジュールの1/3のクロック速度
・USBモジュールの1/4のクロック速度
USB動作
USBモジュールは以下の2つのモードで動作するよに設計されている。
・ロースピード
・フルスピード
USBの仕様によって決まるタイミング要件からUSBモジュールにはプライマリ外部オシレータが必要になる。
CONFIG1HのFOSCビットは、周波数6/12/48MHzの外部クロック(EC)大電力モードまたはHSモードに設定する。
ロースピード動作
ロースピード動作では、USBモジュールに6MHzのクロックが必要。
6MHzのクロックを発生するには、以下の2つのオシレータモードしか使用できない。
・EC大電力モード
・HSモード
USBをロースピードで動作させるには、CPUクロック周波数を24MHz以下にする必要がある(6MHzが最適)。
24MHzよりも高い周波数を使用する場合、14命令サイクル以上のファームウェア遅延が必要。
フルスピード動作
フルスピード動作では、USBモジュールに48MHzのクロックが必要。
48MHzのクロックを生成するには、以下の2つのオシレータモードしか使用できない。
・EC大電力モード
・HSモード
2段階起動モード 省略
フェイルセーフクロックモニタ 省略