数値制御オシレータ(NCOx)モジュールは、インクリ メント値を加算する事で生じるオーバーフローを使っ て入力周波数を分周するタイマです。単純なカウンタ 駆動のタイマに比べてこの加算による方法が有利な点 は、分周器の値によって分周の分解能が変化しない事 です。NCOxが最も効果を発揮するのは、周波数の精 度と、固定デューティサイクルにおける細かい分解能 が必要なアプリケーションです。
NCOxは以下の特長があります。
• 16ビット インクリメント機能
• 固定デューティ サイクル(FDC)モード
• パルス周波数(PF)モード
• 出力パルス幅制御
• 複数のクロック入力ソース
• 出力の極性制御
• 割り込み機能
図 20-1に、NCOxモジュールの概略ブロック図を示し ます。
PIC10(L)F320/322
DS41585A_JP - p.130
Prelimina ry
2012 Microchip Technology Inc.図 20-1: 数値制御オシレータ(NCOx)モジュールの概略ブロック図
NxEN LC1OUT
HFINTOSC NCO1CLK
2 NxCKS<1:0>
Note 1: インクリメント レジスタは、はじめにNCOxモジュールを無効にする事なく値を変更できるようにダブルバッファ構成を採用しています。
ここでは参考のために示しています。このバッファにはユーザはアクセスできません。
(1)
FOSC 10
00 01 11
Increment
Buffer
Accumulator
Overflow NCOx Clock
D Q
Q
S Q
R Q
To NxOUT bit 16
20
20
Interrupt event
Set NCOxIF flag
NxPOL
NCOx Clock
0 1
NxPFM
To CLC and CWG modules
Ripple Counter Reset
NxPWS<2:0>
3 16
NCOx NxOE
TRIS Control
2012 Microchip Technology Inc.
Preliminary
DS41585A_JP - p.131PIC10(L)F320/322
20.1 NCOx の動作
NCOx は、固定値をアキュムレータに繰り返し加算す る事で動作します。加算は入力クロックレートで実行 されます。アキュムレータは周期的にオーバーフロー してキャリーを発生します。これがNCOx の生(raw) 出力です。これによって、実質的に加算値とアキュム レータの最大値の比率によって入力クロック周波数が 分周されます。式 20-1を参照してください。
NCOx出力をパルスストレッチまたはフリップフロップ のトグルによってさらに変調する事も可能です。変調さ れたNCOx出力は、チップ内部の他の周辺機能と、必要 に応じてピン出力に分配されます。アキュムレータの オーバーフローは割り込みも発生させます。
NCOx 出力は瞬時周波数を発生させ、これが不確定性 を招く恐れがあります。この出力は、瞬時周波数を平 均化 して不 確定性 を低減 する 処理を 受信側 の回路 (CWGまたは外部の共振コンバータ回路) に委ねてい ます。
20.1.1 NCOxのクロック源
NCOxでは、以下のクロック源を使用できます。
• HFINTOSC
• FOSC
• LC1OUT
• NCO1CLKピン
NCOxクロック源は、NCOxCLKレジスタのNxCKS<1:0>
ビットで選択します。
20.1.2 アキュムレータ
アキュムレータは 20 ビットのレジスタです。アキュ ムレータへの読み書きは、以下の3つのレジスタで行 います。
• NCOxACCL
• NCOxACCH
• NCOxACCU
20.1.3 加算器
NCOx の加算器はフルアダーです。選択されている クロック源とは非同期で動作します。入力クロックの 立ち上がりエッジで、前回の加算結果とインクリメン ト値の和がアキュムレータ値を上書きします。
20.1.4 インクリメント レジスタ
インクリメント値は、2つの8ビットレジスタに格納 され、16ビットのインクリメントが可能です。2つの レジスタは以下の通りです(LSB、MSBの順)。
• NCOxINCL
• NCOxINCH
いずれのレジスタも読み書き可能です。インクリメン ト レジスタは、はじめにNCOxモジュールを無効にす る事なく値を変更できるようにダブルバッファ構成を 採用しています。
モジュールを無効にするとバッファへの読み込みはた だちに実行されます。上位レジスタへの書き込みをは じめに行う必要があります。なぜなら、その後の下位 のインクリメント レジスタへの書き込みを実行した 後に、バッファがNCOx動作に同期して読み込まれる からです。
式 20-1:
Note: インクリメント バッファ レジスタにはユー
ザはアクセスできません。
F
OVERFLOWNCO Clock Frequency Increment Value
2
n---=
n =
アキュムレータの幅(ビット)PIC10(L)F320/322
20.2 固定デューティ サイクル (FDC) モード
固定デューティサイクル(FDC)モードでは、アキュ ムレータがオーバーフローするたびに出力がトグル します。インクリメント値が一定の場合、これにより 50% のデューティ サイクルが得られます。詳細は 図 20-2を参照してください。
FDCモードは、NCOxCONレジスタのNxPFMビット をクリアする事で選択します。
20.3 パルス周波数 (PF) モード
パルス周波数(PF)モードでは、アキュムレータがオー バーフローするたびに、1 クロック周期以上の期間、
出力がアクティブになります。詳細は、セクション 20.3.1「出力パルス幅制御」を参照してください。
クロック期間が終了すると、出力は非アクティブ状態 に戻ります。これによって、パルス出力が得られます。
出力がアクティブになるのは、オーバーフロー イベン ト 直 後 の ク ロ ッ ク 立 ち 上 が り エ ッ ジ で す。詳細は 図20-2を参照してください。
アクティブと非アクティブ状態の値は、NCOxCON レジスタの極性ビットNxPOLによって決まります。
PF モードは、NCOxCONレジスタのNxPFMビット をセットする事で選択します。
20.3.1 出力パルス幅制御
PF モードの動作では、出力のアクティブ状態の期間 を複数のクロック周期幅によって変更できます。パル ス幅はNCOxCLKレジスタのNxPWS<2:0>ビットで 選択します。
選択したパルス幅がアキュムレータのオーバーフロー の時間枠よりも大きい場合、NCOx動作は定義されま せん。
20.4 出力の極性制御
NCOx モ ジ ュ ー ル の 最 終 段 は 出 力 極 性 段 で す。
NCOxCONレジスタのNxPOLビットで出力の極性を
選択します。割り込みを有効にした状態で極性を変更 すると、出力の遷移によって割り込みが発生します。
NCOxの出力は、ソースコードまたは他の周辺機能に よ っ て チ ッ プ 内 部 で 使 用 で き ま す。そ れ に は、
NCOxCONレジスタのNxOUTビット(読み出し専用) を読み出します。
2012 Microchip Technology Inc.
Prelimina ry
DS41585A_JP - p.133PIC10(L)F320/322
図 20-2: FDC出力モードの動作図
Clock Source NCOx Increment Value
NCOx Value
Accumulator 0000h 4000h FC000h 0000h 4000h 8000h 0000h 4000h 8000h C000h
4000h
1 0000h
Overflow
Event Interrupt
NCOx Output FDC Mode
NCOx Output PF Mode NCOxPWS = 000
NCOx Output NCOxPWS = 001 PF Mode
FC000h 8000h
PIC10(L)F320/322
20.5 割り込み
アキュムレータがオーバーフローすると、PIR1 レジ スタのNCOx割り込みフラグビットNCOxIF がセッ トされます。この割り込みイベントを有効にするに は、以下のビットをセットする必要があります。
• NCOxCONレジスタのNxENビット
• PIE1レジスタのNCOxIEビット
• INTCONレジスタのPEIEビット
• INTCONレジスタのGIEビット
割り込みは、割り込みサービスルーチンで NCOxIF ビットをクリアする事によって、ソフトウェアで解除 する必要があります。
20.6 リセットの効果
NCOxレジスタはいずれもリセットによって0にクリ アされます。
20.7 スリープ中の動作
NCO モジュールはシステムクロックから独立して動 作します。選択されているクロック源がアクティブで あれば、スリープ中でも動作を続けます。
NCOモジュールが有効で、クロック源としてHFINTOSC
を選択している場合、システムクロック源にかかわら
ず、HFINTOSCはスリープ中でもアクティブ状態を維
持します。
言い換えれば、システムクロックと NCOクロック源
の両方にHFINTOSCを選択しており、NCOが有効の
場合、CPUはスリープ時にアイドル状態に移行します が、NCOは動作を継続してHFINTOSCはアクティブ 状態を維持します。
このような状況は、スリープ中の消費電流に直接影響 を与えます。
2012 Microchip Technology Inc.
Preliminary
DS41585A_JP - p.135PIC10(L)F320/322
20.8 NCOx 制御レジスタ
レジスタ 20-2: NCOxCLK: NCOx入力クロック制御レジスタ レジスタ 20-1: NCOxCON: NCOx制御レジスタ
R/W-0/0 R/W-0/0 R-0/0 R/W-0/0 U-0 U-0 U-0 R/W-0/0
NxEN NxOE NxOUT NxPOL — — — NxPFM
bit 7 bit 0
凡例:
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
u = ビットは不変 x = ビットは未知 -n/n = PORおよびBOR時の値/その他の全てのリセット時の値
「1」 = ビットはセット 「0」 = ビットはクリア
bit 7 NxEN: NCOxイネーブルビット
1 = NCOxモジュールを有効にする
0 = NCOxモジュールを無効にする
bit 6 NxOE: NCOx出力イネーブルビット
1 = NCOx出力ピンを有効にする
0 = NCOx出力ピンを無効にする
bit 5 NxOUT: NCOx出力ビット
1 = NCOx出力がHighである 0 = NCOx出力がLowである
bit 4 NxPOL: NCOx極性ビット
1 = NCOx出力信号をアクティブHighにする 0 = NCOx出力信号をアクティブLowにする
bit 3-1 未実装: 「0」として読み出し
bit 0 NxPFM: NCOxパルス周波数モードビット
1 = NCOxをパルス周波数モードで動作させる
0 = NCOxを固定デューティ サイクル モードで動作させる
R/W-0/0 R/W-0/0 R/W-0/0 U-0 U-0 U-0 R/W-0/0 R/W-0/0
NxPWS<2:0> — — — NxCKS<1:0>
bit 7 bit 0
凡例:
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
u = ビットは不変 x = ビットは未知 -n/n = PORおよびBOR時の値/その他の全てのリセット時の値
「1」 = ビットはセット 「0」 = ビットはクリア
bit 7-5 NxPWS<2:0>: NCOx出力パルス幅選択ビット(1, 2) 111 = NCOxクロック128周期
110 = NCOxクロック64周期 101 = NCOxクロック32周期 100 = NCOxクロック16周期 011 = NCOxクロック8周期 010 = NCOxクロック4周期 001 = NCOxクロック2周期 000 = NCOxクロック1周期
bit 4-2 未実装: 「0」として読み出し
bit 1-0 NxCKS<1:0>: NCOxクロック源選択ビット 11 = NCO1CLK
10 = LC1OUT 01 = FOSC
00 = HFINTOSC (16 MHz)
Note 1: NxPWSが適用されるのはパルス周波数モードによる動作の場合のみです。
2: NCOxパルス幅がNCOxのオーバーフロー周期よりも長い場合、動作は未定義の状態です。
PIC10(L)F320/322
レジスタ 20-3: NCOxACCL: NCOxアキュムレータ レジスタ - 下位バイト
レジスタ 20-4: NCOxACCH: NCOxアキュムレータ レジスタ - 上位バイト
レジスタ 20-5: NCOxACCU: NCOxアキュムレータ レジスタ - 最上位バイト
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 NCOxACC<7:0>
bit 7 bit 0
凡例:
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
u = ビットは不変 x = ビットは未知 -n/n = PORおよびBOR時の値/その他の全てのリセット
時の値
「1」 = ビットはセット 「0」 = ビットはクリア
bit 7-0 NCOxACC<7:0>: NCOxアキュムレータ、下位バイト
Note 1: NxPWSが適用されるのはパルス周波数モードによる動作の場合のみです。
2: NCOxパルス幅がNCOxのオーバーフロー周期よりも長い場合、動作は未定義の状態です。
R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
NCOxACC<15:8>
bit 7 bit 0
凡例:
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
u = ビットは不変 x = ビットは未知 -n/n = PORおよびBOR時の値/その他の全てのリセット
時の値
「1」 = ビットはセット 「0」 = ビットはクリア
bit 7-0 NCOxACC<15:8>: NCOxアキュムレータ、上位バイト
U-0 U-0 U-0 U-0 R/W-0/0 R/W-0/0 R/W-0/0 R/W-0/0
— — — — NCOxACC<19:16>
bit 7 bit 0
凡例:
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
u = ビットは不変 x = ビットは未知 -n/n = PORおよびBOR時の値/その他の全てのリセット 時の値
「1」 = ビットはセット 「0」 = ビットはクリア
bit 7-4 未実装: 「0」として読み出し
bit 3-0 NCOxACC<19:16>: NCOxアキュムレータ、最上位バイト