pic18fx525/x620 data sheet -...
TRANSCRIPT
2010 Microchip Technology Inc. Preliminary DS41350D_JP
PIC18F/LF1XK50データシート
20ピンUSBフラッシュ
マイクロコントローラ
nanoWatt XLPテクノロジ対応
ご注意:この日本語版ドキュメントは、参考資料としてご使用の上、 新情報につきましては、必ず英語版オリジナルをご参照いただきますようお願いします。
マイクロチップ社製デバイスのコード保護機能について以下の点にご注意ください。
• マイクロチップ社製品は、該当するマイクロチップ社データシートに記載の仕様を満たしています。
• マイクロチップ社では、通常の条件ならびに仕様に従って使用した場合、マイクロチップ社製品のセキュリティ レベルは、
現在市場に流通している同種製品の中でも も高度であると考えています。
• しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解では、こうした手法
はマイクロチップ社データシートにある動作仕様書以外の方法でマイクロチップ社製品を使用する事になります。このような
行為は知的所有権の侵害に該当する可能性が非常に高いと言えます。
• マイクロチップ社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。
• マイクロチップ社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コー
ド保護機能とは、マイクロチップ社が製品を「解読不能」として保証するものではありません。
コード保護機能は常に進歩しています。マイクロチップ社では、常に製品のコード保護機能の改善に取り組んでいます。マイクロ
チップ社のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはそ
の他の著作物に不正なアクセスを受けた場合、デジタル ミレニアム著作権法の定めるところにより損害賠償訴訟を起こす権利があ
ります。
本書に記載されているデバイス アプリケーション等に関す
る情報は、ユーザの便宜のためにのみ提供されているもので
あり、更新によって無効とされる事があります。お客様のア
プリケーションが仕様を満たす事を保証する責任は、お客様
にあります。マイクロチップ社は、明示的、暗黙的、書面、
口頭、法定のいずれであるかを問わず、本書に記載されてい
る情報に関して、状態、品質、性能、商品性、特定目的への
適合性をはじめとする、いかなる類の表明も保証も行いませ
ん。マイクロチップ社は、本書の情報およびその使用に起因
する一切の責任を否認します。マイクロチップ社の明示的な
書面による承認なしに、生命維持装置あるいは生命安全用途
にマイクロチップ社の製品を使用する事は全て購入者のリス
クとし、また購入者はこれによって発生したあらゆる損害、
クレーム、訴訟、費用に関して、マイクロチップ社は擁護さ
れ、免責され、損害をうけない事に同意するものとします。
暗黙的あるいは明示的を問わず、マイクロチップ社が知的財
産権を保有しているライセンスは一切譲渡されません。
DS41350D_JP - p. 2 Prelimin
商標
マイクロチップ社の名称と Microchip ロゴ、dsPIC、
KEELOQ、KEELOQ ロゴ、MPLAB、PIC、PICmicro、PICSTART、PIC32 ロゴ、rfPIC、UNI/O は、米国およびその
他の国におけるマイクロチップ・テクノロジー社の登録商標
です。
FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、MXDEV、MXLAB、SEEVAL、Embedded Control Solutions Company は、米国におけるマイクロチッ
プ・テクノロジー社の登録商標です。
Analog-for-the-Digital Age、Application Maestro、CodeGuard、dsPICDEM、dsPICDEM.net、dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、MPASM、MPLAB Certified ロゴ、MPLIB、MPLINK、mTouch、Octopus、Omniscient Code Generation、PICC、
PICC-18、PICDEM、PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、Total Endurance、TSHARC、
UniWinDriver、WiperLock、ZENA は、米国およびその他の
国におけるマイクロチップ・テクノロジー社の商標です。
SQTP は、米国におけるマイクロチップ・テクノロジー社の
サービス マークです。
その他、本書に記載されている商標は各社に帰属します。
© 2010, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved.
本書は再生紙を使用しています。
ISBN: 978-1-60932-380-6
マイクロチップ社では、Chandler および Tempe ( アリゾナ州 )、
ary 2010 Microchip Technology Inc.
Gresham ( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォルニア州とインドのデザイン センターが ISO/TS-16949:2002 認証を取得しています。マイクロチップ社の品質システム プロセスおよび手順は、PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、アナログ製品に採用されています。さらに、開発システムの設計と製造に関するマイクロチップ社の品質システムはISO 9001:2000 認証を取得しています。
PIC18F/LF1XK50nanoWatt XLP テクノロジ採用 20 ピン USB フラッシュ マイクロコントローラ
USB (Universal Serial Bus) 機能 : • USB V2.0 準拠の SIE• フルスピード(12 Mb/s)およびロースピード(1.5 Mb/s)• コントロール、インタラプト、アイソクロナス、 バルク転送をサポート
• 大16個(双方向8個)のエンドポイントをサポート• 256 バイトの USB 用デュアルアクセス RAM• D+/D- の入力変化割り込みにより、USB ホストへの
物理的接続を検出
高性能 RISC CPU: • C コンパイラ向けに 適化されたアーキテクチャ
- リエントラント コードを 適化するために設計された、オプションの拡張命令セット
- 256 バイトのデータ EEPROM- 大16 KBのリニアなプログラム メモリ アドレス構成
- 大768バイトのリニアなデータメモリ アドレス構成
• 優先度付きの割り込み• 8 x 8 シングルサイクル ハードウェア乗算器
柔軟なオシレータ構造 : • USBモジュールよりも低速でコアを駆動するための
CPU クロック分周器• 16 MHz の内部オシレータ ブロック :
- ソフトウェアによって選択可能な周波数 : 31 kHz~ 16 MHz
- PLL を併用する事で 31 kHz ~ 32 MHz の幅広いクロック速度に対応
- 周波数ドリフトを補償するユーザ調整機能• 4 種類の水晶振動子モード : 大 48 MHz• 外部クロックモード : 大 48 MHz• 4X PLL (Phase Lock Loop)• 32 kHz 動作の Timer1 によるセカンダリ オシレータ• フェイルセーフ クロック モニタ :
- プライマリまたはセカンダリ オシレータが停止した場合にも安全なシャットダウンが可能
• オシレータの 2 段階起動
特殊なマイクロコントローラ機能 :
• 5.5 V 動作 – PIC18F1XK50• 1.8 ~ 3.6 V 動作 – PIC18LF1XK50• ソフトウェア制御による自己プログラム可能• プログラム可能なブラウンアウト リセット (BOR)
- ソフトウェアによるイネーブルが可能なオプション• 拡張ウォッチドッグ タイマ (WDT)
- 周期をプログラム可能 : 4 ms ~ 131 s• 2 本のピンを使用する、3 V 単一電源インサーキットシリアル プログラミング (ICSP)
nanoWatt XLP による PIC18LF1XK50 の超低消費電力管理 : • スリープモード : 24 nA• ウォッチドッグ タイマ : 450 nA• Timer1 オシレータ : 790 nA @ 32 kHz
アナログ機能 :
• A/D コンバータ (ADC) モジュール : - 分解能 : 10 ビット、外部チャンネル数 : 9- 自動アクイジション機能- スリープ時も変換可能- 1.024 V の内部固定電圧リファレンス (FVR) チャンネル
- 独立した入力マルチプレクサ• デュアル アナログ コンパレータ
- レールツーレール動作- 独立した入力マルチプレクサ
• 電圧リファレンス モジュール : - 16段階のプログラム可能 (VDDに対する%を指定)- VREF ピンによる 2 つの 16 レベル電圧レンジ- 3 つのレベルにプログラム可能な固定電圧リファレンス (FVR)
• 内蔵の 3.2 V LDO レギュレータ – (PIC18F1XK50)
周辺機能の特長 : • 14 本の I/O ピンおよび 1 本の入力専用ピン :
- 高電流シンク / ソース : 25 mA/25 mA- 7 つのプログラム可能なウィーク プルアップ- 7 本のプログラム可能な状態変化割り込みピン- 3 つのプログラム可能な外部割り込み- プログラム可能なスルーレート
• 拡張キャプチャ/コンペア/PWM (ECCP)モジュール: - 1、2、3、4 ついずれかの PWM 出力- 選択可能な極性- プログラム可能なデッドタイム- 自動シャットダウンおよび自動再起動
• MSSP (Master Synchronous Serial Port)モジュール :- 3 線式 SPI (4 つのモードを全てサポート )- I2C™ マスタおよびスレーブモード ( スレーブモード アドレス マスキング )
• 拡張 USART (Enhanced Universal Synchronous Asynchronous Receiver Transmitter) モジュール :- RS-485、RS-232、LIN 2.0 をサポート- 内部オシレータによる RS-232 動作- 自動 baud レート検出- ブレークによる自動ウェイクアップ
• SR ラッチモード
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 3
PIC18F/LF1XK50
-
ピン配置図
ピン配置図
デバイス
プログラムメモリ データメモリ
I/O(1)
10ビ
ット
A/D
(チャ
ンネ
ル数
)(2)
ECCP(PWM)
MSSP
EU
SA
RT
コンパ
レー
タ
タイマ
8/16
ビッ
ト
USB
フラッ
シュ
(バイ
ト)
シングルワード命令数 S
RA
M(バイ
ト)
EEPROM( バイト )
SPI マスタI2C™
PIC18F13K50/PIC18LF13K50
8 K 4096 512(3) 256 15 11 1 Y Y 1 2 1/3 Y
PIC18F14K50/PIC18LF14K50
16 K 8192 768(3) 256 15 11 1 Y Y 1 2 1/3 Y
Note 1: 1 本は入力専用です。
2: 内部固定電圧リファレンス (FVR) とプログラマブル電圧リファレンス (CVREF) を含むチャンネル数です。
3: USB モジュールが使用するデュアルポート RAM を含むバイト数です。この RAM はデータメモリとしても使われます。
20-pin PDIP, SSOP, SOIC (300 MIL)
10
2
345
6
1
87
9
111213
141516
1920
1817
VDD
RA5/IOCA5/OSC1/CLKINRA4/AN3/IOCA3/OSC2/CLKOUT
RA3/IOCA3/MCLR/VPP
RC5/CCP1/P1A/T0CKIRC4/P1B/C12OUT/SRQ
RC3/AN7/P1C/C12IN3-/PGMRC6/AN8/SS/T13CKI/T1OSCI
RC7/AN9/SDO/T1OSCO
RB7/IOCB7/TX/CK
VSS
RA0/IOCA0/D+/PGDRA1/IOCA1/D-/PGCVUSBRC0/AN4/C12IN+/INT0/VREF+RC1/AN5/C12IN1-/INT1/VREF-RC2/AN6/P1D/C12IN2-/CVREF/INT2RB4/AN10/IOCB4/SDI/SDARB5/AN11/IOCB5/RX/DTRB6/IOCB6/SCK/SCLP
IC18
F/L
F1X
K5
0
20-pin QFN (5x5)
8 9
23
11415
16
10
11
6
1213
17181920
7
54
PIC18F1XK50/PIC18LF1XK50
RA3/MCLR/VPP
RC5/CCP1/P1A/T0CKIRC4/P1B/C12OUT/SRQ
RC3/AN7/P1C/C12IN3-/PGMRC6/AN8/SS/T13CKI/T1OSCI
RC
7/A
N9
/SD
O/T
1O
SC
OR
B7/
TX
/CK
RB
4/A
N10
/SD
I/S
DA
RB
5/A
N11
/RX
/DT
RB
6/S
CK
/SC
L
RC2/AN6/P1D/C12IN2-/CVREF/INT2RC1/AN1/C12IN1-/INT1/VREF-RC0/AN4/C12IN+/INT0/VREF+VUSBRA1/D-/PGC
RA
0/D
+/P
GD
Vss
VD
D
RA
4/A
N3
/OS
C2
/CL
KO
RA
5/O
SC
1/C
LK
I
DS41350D_JP - p. 4 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 1: PIC18F/LF1XK50 のピンアサイン概要
ピン
I/O
アナ
ログ
コンパ
レータ
基準
EC
CP
EU
SA
RT
MS
SP
タイマ
割り
込み
プル
アッ
プ
US
B
基本
19 RA0 IOCA0 D+ PGD
18 RA1 IOCA1 D- PGC
4 RA3(1) IOCA3 Y MCLR/VPP
3 RA4 AN3 IOCA4 Y OSC2/CLKOUT
2 RA5 IOCA5 Y OSC1/CLKIN
13 RB4 AN10 SDI/SDA IOCB4 Y
12 RB5 AN11 RX/DT IOCB5 Y
11 RB6 SCL/SCK IOCB6 Y
10 RB7 TX/CK IOCB7 Y
16 RC0 AN4 C12IN+ VREF+ INT0
15 RC1 AN5 C12IN1- VREF- INT1
14 RC2 AN6 C12IN2- CVREF P1D INT2
7 RC3 AN7 C12IN3- P1C PGM
6 RC4 C12OUT P1B SRQ
5 RC5 CCP1/P1A T0CKI
8 RC6 AN8 SS T13CKI/T1OSCI
9 RC7 AN9 SDO T1OSCO
17 VUSB
1 VDD
20 VSS
Note 1: 入力専用
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 5
PIC18F/LF1XK50
目次
1.0 デバイスの概要 ............................................................................................................................................................................ 92.0 オシレータ モジュール .............................................................................................................................................................. 153.0 メモリ構成 ................................................................................................................................................................................. 294.0 フラッシュ プログラムメモリ.................................................................................................................................................... 515.0 データ EEPROM メモリ ............................................................................................................................................................ 616.0 8 x 8 ハードウェア乗算器 .......................................................................................................................................................... 657.0 割り込み ..................................................................................................................................................................................... 678.0 低ドロップアウト (LDO) 電圧レギュレータ .............................................................................................................................. 819.0 I/O ポート ................................................................................................................................................................................... 8310.0 Timer0 モジュール ................................................................................................................................................................... 10111.0 Timer1 モジュール ................................................................................................................................................................... 10512.0 Timer2 モジュール ................................................................................................................................................................... 11113.0 Timer3 モジュール ................................................................................................................................................................... 11314.0 拡張キャプチャ / コンペア /PWM (ECCP) モジュール ............................................................................................................ 11715.0 マスタ同期シリアルポート (MSSP) モジュール ...................................................................................................................... 13916.0 拡張 USART (EUSART: Enhanced Universal Synchronous Asynchronous Receiver Transmitter)......................................... 18317.0 A/D コンバータ (ADC) モジュール........................................................................................................................................... 21118.0 コンパレータ モジュール ......................................................................................................................................................... 22519.0 電力管理モード ........................................................................................................................................................................ 23720.0 SR ラッチ................................................................................................................................................................................. 24321.0 電圧リファレンス..................................................................................................................................................................... 24722.0 USB (Universal Serial Bus) ...................................................................................................................................................... 25323.0 リセット ................................................................................................................................................................................... 27924.0 CPU の特殊機能 ....................................................................................................................................................................... 29325.0 命令セットの概要..................................................................................................................................................................... 31126.0 開発サポート ............................................................................................................................................................................ 36127.0 電気的仕様 ............................................................................................................................................................................... 36528.0 DC 特性と AC 特性のグラフと表 ............................................................................................................................................. 39929.0 パッケージ情報 ........................................................................................................................................................................ 401補遺 A: 改訂履歴 ............................................................................................................................................................................. 407補遺 B: デバイス間の違い ............................................................................................................................................................... 408索引 ................................................................................................................................................................................................... 409マイクロチップ社のウェブサイト ..................................................................................................................................................... 419お客様向け変更通知サービス ............................................................................................................................................................ 419お客様サポート .................................................................................................................................................................................. 419読者アンケート .................................................................................................................................................................................. 420製品識別システム .............................................................................................................................................................................. 421
DS41350D_JP - p. 6 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
大切なお客様へ
マイクロチップ社では、お客様にマイクロチップ社製品を効果的にお使いいただくために、わかりやすい文書を提供するよう努
めています。このため、弊社はお客様のニーズにさらに的確に応えられるように、出版物の改善を続けていきます。弊社は新刊、
更新版を発表する毎に内容の見直しと充実を図っています。
本書に関してご質問、ご意見をお持ちのお客様は、メールまたはファックスで弊社のマーケティング コミュニケーション部門に
ご連絡ください。メールアドレスは [email protected]、ファックス番号は 1-480-792-4150 ( 国際電話 ) です。
ファックスの場合には、本書の巻末に用意されている「読者アンケート」のページをご利用ください。お客様からのご感想をお
待ちしております。
新のデータシート
このデータシートの 新版を入手するには、以下のウェブサイトから登録手続きを行ってください。
http://www.microchip.com
各ページのフッタに記載されている文書番号をご覧になると、データシートのリビジョンを確認できます。文書番号の 後の文字がリビジョン番号です ( 例 : DS30000A は文書 DS30000 のリビジョン A)。
エラッタ
デバイスには、データシートとの動作上の微妙な相違点や推奨できる暫定的な対策を記したエラッタが存在する事があります。弊社では、デバイスや文書に関する問題を認識した時点でエラッタを発行します。エラッタには、該当するシリコンと文書のリビジョンを明記します。
特定のデバイスに関してエラッタの有無を確認するには、以下のいずれかをご利用ください。
• マイクロチップ社のウェブサイト : http://www.microchip.com• 寄のマイクロチップ社営業所 ( 終ページ参照 )• Microchip Corporate Literature Center ( 米国 - FAX: (480) 792-7277)営業所または米国の Microchip Corporate Literature Center にお問い合わせになる場合、ご使用のデバイス、シリコンのバージョン、データシートのバージョン ( 文書番号を含む ) をお伝えください。
お客様通知システム
マイクロチップ社のウェブサイト (www.microchip.com/cn) で登録手続きを行うと、マイクロチップ社の全ての製品に関する
新情報を受信できるようになります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 7
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 8 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
1.0 デバイスの概要
このデータシートには、以下のデバイスに固有の情報が記載されています。
このファミリは、全ての PIC18 マイクロコントローラに共通する、低価格で高い計算能力を持つという特長に加えて、高い書き換え耐性を実現したフラッシュ プログラム メモリを搭載しています。その他にも、PIC18F/LF1XK50ファミリには設計上の改良が加えられ、高い性能と低消費電力が求められる多くのアプリケーションに 適なマイクロコントローラに仕上がっています。
1.1 新しいコア機能
1.1.1 nanoWatt XLP テクノロジ
PIC18F/LF1XK50 ファミリの全デバイスは、動作時の消費電力を大幅に低減できる各種機能を搭載しています。主な機能は以下の通りです。
• 代替実行モード : 本コントローラのクロックをTimer1 ソースまたは内部オシレータ ブロックから駆動する事により、コード実行時の消費電力を大 90% 低減できます。
• 複数のアイドルモード : 本コントローラは、周辺モジュールをアクティブにしたまま、CPU コアを無効にして動作させる事ができます。この状態では消費電力がさらに低減され、通常動作時に必要な電力のわずか 4% になります。
• 動作中のモード切り換え : 電源管理モードは、動作中にユーザコードによって起動します。このためユーザは、ソフトウェア設計に省電力化のアイデアを組み込む事ができます。
• 主要モジュールの低消費電力化 : Timer1 とウォッチドッグ タイマの消費電力は 小限に抑えました。具体的な値は 27.0「電気的仕様」を参照してください。
1.1.2 複数のオシレータ オプションと機能
PIC18F/LF1XK50 ファミリは、全デバイスに 10 種類のオシレータ オプションを用意しており、アプリケーション ハードウェアを開発するユーザにとっては幅広い選択が可能となります。使用できるオプションは以下の通りです。
• 水晶 / セラミック振動子を用いる 4 種類の水晶振動子モード
• 外部クロックモード : 2 ピン ( オシレータ入力と4 分周クロック出力 ) または 1 ピン ( オシレータ入力、2 本目のピンは汎用 I/O として再アサイン )を選択可能
• 外部 RC オシレータモード : 外部クロックモードと同じピンオプションを選択可能
• 内部オシレータ ブロック : 16 MHz の HFINTOSCオシレータと 31 kHz の LFINTOSC オシレータがあり、これらを組み合わせる事で、31 kHz ~16 MHz で 8 通りの周波数を選択できます。このオプションを選択した場合に不要となる 2 本のオシレータピンは、汎用 I/O ピンとして使用できます。
• PLL (Phase Lock Loop) 周波数マルチプライヤ : 高速の水晶振動子モードと内部オシレータモードでは、PLL を使用して 大 48 MHz のクロック速度を実現できます。内部オシレータと PLL を使用した場合、31 kHz ~ 32 MHz という、広いレンジのクロック速度が得られます。しかも外付けの水晶振動子やクロック回路は不要です。
内部オシレータ ブロックは、クロック源としてだけでなく安定した基準クロック源としても使用でき、このファミリの動作信頼性をさらに高めます。
• フェイルセーフ クロック モニタ : このオプションでは、メイン クロック源を、LFINTOSC による基準信号に対して常時監視します。クロックに障害が発生すると、コントローラは内部オシレータ ブロックに切り換えられ、動作を継続するかアプリケーションを安全にシャットダウンする事ができます。
• 2 段階起動 : このオプションでは、パワーオン リセットまたはスリープモードからのウェイクアップ時に、プライマリ クロック源が使用可能になるまで内部オシレータをクロック源として使用します。
• PIC18F13K50 • PIC18F14K50
• PIC18LF13K50 • PIC18LF14K50
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 9
PIC18F/LF1XK50
1.2 その他の特殊機能
• メモリの書き換え耐性 : プログラムメモリおよびデータ EEPROM のフラッシュセルは数千回の消去 / 書き込みサイクルに対する耐性を備えています。プログラムメモリは 1 K サイクル、EEPROM は 100 K サイクルです。リフレッシュなしのデータ保持期間は控えめに見積もっても40 年以上です。
• 自己書き込み機能 : これらのデバイスは、内部ソフトウェアによって、デバイス自体のプログラムメモリ空間に書き込む事ができます。コード保護ブートブロックに格納されたブートローダ ルーチンを使用する事により、フィールドで自己更新が可能なアプリケーションの作成が可能です。
• 拡張命令セット : PIC18F/LF1XK50 ファミリでは、PIC18 命令セットにオプションの拡張命令を導入しました。8 つの新しい命令とインデックス付きアドレッシング モードです。これらの拡張命令は、もともと C 等の高級言語向けに開発されたリエントラント アプリケーション コードを 適化するために実装しました。
• 拡張 CCP モジュール : PWM モードでは、このモジュールはハーフブリッジおよびフルブリッジ ドライバを制御する 1 つ、2 つ、4 つのいずれかの変調信号を出力します。その他にも以下のような機能があります。
- 自動シャットダウン ― 割り込みやその他の条件により PWM 出力を無効にします。
- 自動再起動 ― 上記の条件がクリアされた後に出力を再度有効にします。
- 出力ステアリング ― 4つの出力のうちの1つまたは複数を有効にして PWM 信号を提供します。
• 拡張アドレサブル USART: このシリアル通信モジュールは標準的な RS-232 動作が可能であり、LIN バスプロトコルをサポートします。その他に強化された項目として、 baud レートの自動検出や、分解能を向上するための 16 ビットの baudレート ジェネレータがあります。
• 10 ビット A/D コンバータ : このモジュールはアクイジション時間をプログラムできる機能を搭載し、チャンネルを選択したり、サンプリング期間の終了を待たずに変換を開始したりできるため、コードのオーバーヘッドが低減されます。
• 拡張ウォッチドッグ タイマ (WDT): この拡張バージョンでは 16 ビットのポストスケーラを採用する事でタイムアウト時間のレンジが広がり、動作電圧および温度の全レンジで安定した動作が確保されます。タイムアウト時間の詳細は 27.0「電気的仕様」を参照してください。
1.3 ファミリに含まれる各製品の詳細
PIC18F/LF1XK50 ファミリのデバイスは 20 ピンパッケージで提供しております。図 1-1 に 2 つのグループのブロック図を示します。
デバイスは、以下の項目で 2 種類に大別されます。
1. フラッシュ プログラム メモリの容量 :
• 8 KB を搭載する PIC18F13K50/PIC18LF13K50
• 16 KB を搭載する PIC18F14K50/PIC18LF14K50
2. 内蔵 3.2 V LDO レギュレータの有無 : PIC18F13K50 と PIC18F14K50 に搭載
その他の機能はファミリ内の全デバイスで共通です。それらの機能を表 1-1 にまとめました。
表 1 と表 1-2 に全デバイスのピンと I/O を示します。
DS41350D_JP - p. 10 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 1-1: PIC18F/LF1XK50 (20 ピンデバイス ) の機能
機能 PIC18F13K50 PIC18LF13K50 PIC18F14K50 PIC18LF14K50
LDO レギュレータ あり なし あり なし
プログラムメモリ ( バイト ) 8K 16K
プログラムメモリ ( 命令 ) 4096 8192
データメモリ ( バイト ) 512 768
動作周波数 DC ~ 48 MHz
割り込み要因 30
I/O ポート ポート A、B、C
タイマ 4
拡張キャプチャ / コンペア /PWM モジュール 1
シリアル通信 MSSP、拡張 USART、USB
10 ビット A/D コンバータ モジュール 9 入力チャンネル
リセット ( および遅延 ) POR、BOR、RESET命令、スタックフル、スタック アンダーフロー、MCLR、WDT (PWRT、OST)
命令セット 75 命令、拡張命令セットを有効にした場合は 83 命令
パッケージ 20 ピン PDIP、SSOP、SOIC (300 mil)、QFN (5x5)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 11
PIC18F/LF1XK50
図 1-1: PIC18F/LF1XK50 のブロック図
InstructionDecode and
Control
PORTA
PORTB
PORTC
RA1RA0
Data Latch
Data Memory
Address Latch
Data Address<12>
12
AccessBSR FSR0FSR1FSR2
inc/declogic
Address
4 12 4
PCH PCL
PCLATH
8
31-Level Stack
Program Counter
PRODLPRODH
8 x 8 Multiply
8
BITOP88
ALU<8>
20
8
8
Table Pointer<21>
inc/dec logic
21
8
Data Bus<8>
Table Latch8
IR
12
3
ROM Latch
PCLATU
PCU
Note 1: RA3 を使用できるのは、MCLR 機能を無効にした場合のみです。
2: OSC1/CLKIN と OSC2/CLKOUT は、特定のオシレータモードにおいて、これらのピンをデジタル I/O として使用していない場合にのみ使用可能です。詳細は、2.0「オシレータ モジュール」を参照してください。
3: PIC18F13K50/PIC18F14K50 のみ
EUSARTComparator MSSP10-bit ADC
Timer2Timer1 Timer3Timer0
ECCP1
BORData
EEPROM
W
Instruction Bus <16>
STKPTR Bank
8
State machinecontrol signals
Decode
8
8
Power-upTimer
OscillatorStart-up Timer
Power-onReset
WatchdogTimer
OSC1(2)
OSC2(2)
VDD,
InternalOscillator
Fail-SafeClock Monitor
Precision
ReferenceBand GapVSS
MCLR(1)
Block
LFINTOSCOscillator
16 MHzOscillator
Single-SupplyProgramming
T1OSO
T1OSI
FVR
FVRFVR
CVREF
Address Latch
Program Memory
Data Latch
CVREF
RA3RA4RA5
RB4RB5RB6RB7
RC0RC1RC2RC3RC4RC5RC6RC7
(512/768 bytes)
VUSB USBModule
USB
LDO(3)
Regulator
DS41350D_JP - p. 12 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 1-2: PIC18F/LF1XK50 のピンと入出力の説明
ピン名ピン
番号
ピン
タイプ
バッファ
タイプ説明
RA0/D+/PGDRA0D+PGD
19I
I/OI/O
TTLXCVR
ST
デジタル入力
USB 差動入出力 (+)ICSP™ プログラミング データピン
RA1/D-/PGCRA1D-PGC
18I
I/OI/O
TTLXCVR
ST
デジタル入力
USB 差動入出力 (-)ICSP™ プログラミング クロックピン
RA3/MCLR/VPP
RA3MCLRVPP
4IIP
STST—
マスタクリア ( 入力 ) またはプログラミング電圧 ( 入力 )デジタル入力
アクティブ Low のマスタクリア ( 内部プルアップ付 )高電圧プログラミング入力
RA4/AN3/OSC2/CLKOUTRA4AN3OSC2
CLKOUT
3I/OIO
O
TTLAnalogXTAL
CMOS
デジタル I/OADC チャンネル 3オシレータ水晶振動子出力。水晶振動子またはセラミック
振動子に接続 ( 水晶振動子オシレータモードの場合 )RC モードの場合、OSC2 ピンは CLKOUT を出力します。
その周波数は OSC1 の 1/4 で、
これが命令サイクルの速度です。
RA5/OSC1/CLKINRA5OSC1
CLKIN
2I/OI
I
TTLXTAL
CMOS
デジタル I/ORC モードの場合はオシレータの
水晶振動子入力または外部クロック入力の ST バッファ。
その他の場合はアナログ
外部クロック源入力 常にピン機能 OSC1 に関連付け ( 関連する OSC1/CLKIN、OSC2、CLKOUT ピン参照 )
RB4/AN10/SDI/SDARB4AN10SDISDA
13I/OII
I/O
TTLAnalog
STST
デジタル I/OADC チャンネル 10SPI データ入力
I2C™ データ I/O
RB5/AN11/RX/DTRB5AN11RXDT
12I/OII
I/O
TLLAnalog
STST
デジタル I/OADC チャンネル 11EUSART 非同期受信
EUSART 同期データ ( 関連する RX/TX 参照 )
RB6/SCK/SCIRB6SCKSCI
11I/OI/OI/O
TLLSTST
デジタル I/OSPI モードの同期シリアルクロック入出力
I2C™ モードの同期シリアルクロック入出力
RB7/TX/CKRB7TXCK
10I/OO
I/O
TLLCMOS
ST
デジタル I/OEUSART 非同期送信
EUSART 同期クロック ( 関連する RX/DT 参照 )
凡例 : TTL = TTL 互換入力 CMOS = CMOS 互換入力または出力 ST = シュミットトリガ入力 I = 入力
O = 出力 P = 電源
XTAL= 水晶振動子オシレータ XCVR = USB 差動トランシーバ
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 13
PIC18F/LF1XK50
RC0/AN4/C12IN+/INT0/VREF+RC0AN4C12IN+INT0VREF+
16I/OIIII
STAnalogAnalog
STAnalog
デジタル I/OADC チャンネル 4コンパレータ C1 および C2 の非反転入力
外部割り込み 0コンパレータ基準電圧 (High) 入力
RC1/AN5/C12IN-/INT1/VREF-RC1AN5C12IN-INT1VREF-
15I/OIIII
STAnalogAnalog
STAnalog
デジタル I/OADC チャンネル 5コンパレータ C1 および C2 の非反転入力
外部割り込み 0コンパレータ基準電圧 (Low) 入力
RC2/AN6/P1D/C12IN2-/CVREF/INT2RC2AN6P1DC12IN2-CVREF
INT2
14I/OIOIOI
STAnalogCMOSAnalogAnalog
ST
デジタル I/OADC チャンネル 6拡張 CCP1 PWM 出力
コンパレータ C1 および C2 の反転入力
コンパレータの基準電圧出力
外部割り込み 0
RC3/AN7/P1C/C12IN3-/PGMRC3AN7P1CC12IN3-PGM
7I/OIOI
I/O
STAnalogCMOSAnalog
ST
デジタル I/OADC チャンネル 7拡張 CCP1 PWM 出力
コンパレータ C1 および C2 の反転入力
低電圧 ICSP プログラミングのイネーブルピン
RC4/P1B/C12OUT/SRQRC4P1BC12OUTSRQ
6I/OOOO
STCMOSCMOSCMOS
デジタル I/O拡張 CCP1 PWM 出力
コンパレータ C1 および C2 の出力
SR ラッチ出力
RC5/CCP1/P1A/T0CKIRC5CCP1P1AT0CKI
5I/OI/OOI
STST
CMOSST
デジタル I/Oキャプチャ 1 入力 / コンペア 1 出力 /PWM 1 出力
拡張 CCP1 PWM 出力
Timer0 外部クロック入力
RC6/AN8/SS/T13CKI/T1OSCIRC6AN8SST13CKIT1OSCI
8I/OIIII
STAnalog
TTLST
XTAL
デジタル I/OADC チャンネル 8SPI スレーブ選択入力
Timer0 および Timer3 外部クロック入力
Timer1 オシレータ入力
RC7/AN9/SDO/T1OSCORC7AN9SDOT1OSCO
9I/OIOO
STAnalogCMOSXTAL
デジタル I/OADC チャンネル 9SPI データ出力
Timer1 オシレータ出力
VSS 20 P — ロジックと I/O ピンのグランド リファレンス
VDD 1 P — ロジックと I/O ピンの正電源
VUSB 17 P — USB トランシーバの正電源
表 1-2: PIC18F/LF1XK50 のピンと入出力の説明 ( 続き )
ピン名ピン
番号
ピン
タイプ
バッファ
タイプ説明
凡例 : TTL = TTL 互換入力 CMOS = CMOS 互換入力または出力 ST = シュミットトリガ入力 I = 入力
O = 出力 P = 電源
XTAL= 水晶振動子オシレータ XCVR = USB 差動トランシーバ
DS41350D_JP - p. 14 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
2.0 オシレータ モジュール
2.1 概要
オシレータ モジュールは各種クロック源による駆動が可能です。様々なアプリケーションに適用可能であり、性能を 大限に高め、消費電力を 小限に抑えることが可能です。図 2-1 にオシレータ モジュールのブロック図を示します。
オシレータ モジュールの主な特長 :
• システムクロックの選択
- プライマリ外部オシレータ
- セカンダリ外部オシレータ
- 内部オシレータ
• オシレータ起動タイマ
• システムクロックの選択
• クロックの切り換え
• 4x PLL 周波数マルチプライヤ
• CPU クロック分周器
• USB 動作
- ロースピード
- フルスピード
• 2 段階起動モード
• フェイルセーフ クロック モニタ
2.2 システムクロックの選択
OSCCON レジスタの SCS ビットによって以下のクロック源のいずれかを選択します。
• プライマリ外部オシレータ
• セカンダリ外部オシレータ
• 内部オシレータ
表 2-1: システムクロックの選択
既定状態の SCS ビットは、システムクロックとして、コンフィグレーション レジスタ CONFIG1H の FOSCビットで定義するオシレータを選択します。システムクロックはSCSビットがソフトウェアによって変更されない限り、常に FOSC ビットによって定義されます。
システムクロックとして内部オシレータを選択した場合、OSCCONレジスタのIRCFビットおよびOSCTUNEレジスタの INTSRCビットによってLFINTOSCまたはHFINTOSC のいずれかが選択されます。IRCF<2:0> =000かつ INTSRC ビットがクリアされていると、システムクロックとして LFINTOSC が選択されます。これ以外の IRCF ビットと INTSRC ビットの組み合わせでは HFINTOSC が選択されます。
2.3 プライマリ外部オシレータ
プライマリ外部オシレータの動作モードを選択するには、コンフィグレーション レジスタ CONFIG1H のFOSC<3:0> ビットをセットします。オシレータは以下のモードに設定できます。
• LP: 低消費電力水晶振動子
• XT: 水晶 / セラミック振動子
• HS: 高速水晶振動子
• RC: 外部 RC オシレータ
• EC: 外部クロック
また消費電力を低減するために、ファームウェア制御によりプライマリ外部オシレータをシャットダウンする事ができます。
Note: 本書では全体を通してシステムクロックの周波数を FOSC と表記します。
コンフィグレーション 選択
SCS <1:0> システムクロック
1x 内部オシレータ
01 セカンダリ外部オシレータ
00( リセット後の既定値 )
FOSC<3:0> によって定義するオシレータ
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 15
PIC18F/LF1XK50
図 2-1: PIC® MCU のクロック源ブロック図
4 x PLL
FOSC<3:0>
OSC2
OSC1Sleep
CPU
Peripherals
IDLEN
Pos
tsca
ler
MU
X
MU
X
16 MHz
8 MHz
4 MHz
2 MHz
1 MHz
250 kHz
500 kHz
IRCF<2:0>
111
110
101
100
011
010
001
00031 kHz
31 kHzLFINTOSC
InternalOscillator
Block
ClockControl SCS<1:0> HFINTOSC
16 MHz
01
INTSRC
Primary
PIC18F/LF1XK50
Sleep
Sleep
System
Secondary
T1OSCENEnableOscillator
T1OSI
T1OSO
PCLKENPRI_SD
2
CPUDivider0
1
1
0
USBDIV
FOSC<3:0>
Low Speed USB
High Speed USB
PLLENSPLLEN
Oscillator
WatchdogTimer
Oscillator
Fail-SafeClock
Two-SpeedStart-up
Clock
00
1x
01
DS41350D_JP - p. 16 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
2.3.1 プライマリ外部オシレータのシャットダウン
プライマリ外部オシレータはソフトウェアによって有効 / 無効を切り換える事ができます。このソフトウェア制御を可能とするには、コンフィグレーション レジスタ CONFIG1H の PCLKEN ビットをセットします。PCLKEN ビットがセットされている場合、プライマリ外部オシレータはOSCCON2レジスタのPRI_SDビットによって制御されます。PRI_SD ビットがセットされるとプライマリ外部オシレータが有効になり、クリアされると無効になります。
2.3.2 LP、XT、HS オシレータモード
LP、XT、HS モードでは、水晶振動子またはセラミック振動子をOSC1とOSC2に接続します (図 2-2)。モードごとに内部インバータアンプのゲインが低 /中 /高に設定され、様々な種類や速度の振動子に対応します。
LP オシレータモードでは、内部インバータアンプのゲインが も低く設定されます。3 つのモードのうち消費電流が も少ないのが LP モードです。このモードは、音叉タイプの水晶等、駆動レベルの仕様が低い振動子に適しています。
XT オシレータモードでは、内部インバータアンプのゲインが中間に設定されます。消費電流も 3 つのモードの中間になります。このモードは、駆動レベルの仕様が中程度の振動子に適しています。
HS オシレータモードでは、内部インバータアンプのゲインが 大に設定されます。消費電流も 3 つのモードのうち 大になります。このモードは、駆動レベルの仕様が高い振動子に適しています。
図 2-2 と図 2-3 に、それぞれ水晶振動子とセラミック振動子を使用した代表的な回路を示します。
図 2-2: 水晶振動子による動作 (LP、XT、HSモード )
Note: ただし、プライマリ外部オシレータをシステムクロックに指定している場合はシャットダウンできません。オシレータをシャットダウンするには、システム クロック源がセカンダリ オシレータか内部オシレータのいずれかである必要があります。
Note 1: 水晶振動子の特性は、種類、パッケージ、メーカーにより異なります。仕様と推奨アプリケーションについてはメーカーのデータシートを参照してください。
2: アプリケーションで予測されるVDDと温度のレンジ全体でオシレータの性能を必ず検証してください。
3: オシレータ設計時の参考として、マイクロチップ社の以下のアプリケーション ノートを参照してください。
• AN826『水晶振動子の基礎と rfPIC®
と PIC® 向けの水晶振動子の選択』(DS00826)
• AN849『PIC® オシレータの基礎設計』(DS00849)
• AN943『PIC® オシレータの実用的解析と設計』(DS00943)
• AN949『オシレータの使い方』(DS00949)
Note 1: 駆動レベルの低い水晶振動子の場合、直列抵
抗 (RS) が必要になる場合があります。
2: RF の値は、選択したオシレータモードによっ
て異なります ( 通常は 2 ~ 10 M)。
C1
C2
Quartz
RS(1)
OSC1/CLKIN
RF(2) Sleep
To Internal Logic
PIC® MCU
Crystal
OSC2/CLKOUT
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 17
PIC18F/LF1XK50
図 2-3: セラミック振動子の動作(XT、HS モード )
2.3.3 外部 RC モード
外部 RC ( 抵抗 / コンデンサ ) モードでは、外付けの RC回路を使用します。クロック精度がそれほど必要ない場合、コストを 小限に抑えつつ、 も柔軟な周波数の選択が可能です。RC モードでは RC 回路を OSC1に接続するため、OSC2 を I/O または CLKOUT として設定できます。CLKOUT 機能はコンフィグレーションレジスタ CONFIG1H の FOSC ビットによって選択します。CLKOUT として設定した OSC2 ピンからは RCオシレータ周波数を4分周した周波数が出力されます。図 2-4 に、外部 RC モードの接続を示します。
図 2-4: 外部 RC モード
RC オシレータの周波数は、電源電圧、抵抗 (REXT)、コンデンサ (CEXT) の値および動作温度の関数です。これら以外にも以下のような要因がオシレータ周波数に影響を与えます。
• 入力しきい値電圧のばらつき
• 部品許容差
• パッケージングによるピン静電容量のばらつき
2.3.4 外部クロックモード
外部クロック (EC) モードでは、システム クロック源として外部で発生したロジックレベルのクロックを使用します。このモードで動作させる場合、外部クロック源を OSC1 に接続するため、OSC2 は I/O またはCLKOUT として設定できます。CLKOUT 機能はコンフィグレーション レジスタ CONFIG1H の FOSC ビットによって選択します。CLKOUT として設定したOSC2 ピンからは EC オシレータ周波数を 4 分周した周波数が出力されます。
EC モードでは 3 種類の電力設定が使用可能です。ECクロックの周波数レンジが既知の場合、適切な設定によりデバイスの IDD を低減できます。予測される ECクロックの周波数に幅がある場合、 大周波数に基づいて電力モードを選択します。
EC 低電力モード 0 – 250 kHz
EC 中電力モード 250 kHz – 4 MHz
EC 大電力モード 4 – 48 MHz
2.4 セカンダリ外部オシレータ
セカンダリ外部オシレータは、外付けの 32.768 kHz 水晶振動子を駆動するために設計されています。このオシレータの有効/無効は、T1CONレジスタのT1OSCENビットによって切り換えます。詳細は、11.0「Timer1モジュール」を参照してください。
Note 1: 駆動レベルの低いセラミック振動子の場合、直
列抵抗 (RS) が必要になる場合があります。
2: RF の値は、選択したオシレータモードによっ
て異なります ( 通常は 2 ~ 10 M)。
3: セラミック振動子を適切に動作させるために、
並列フィードバック抵抗 (RP) の追加が必要に
なる場合があります。
C1
C2 Ceramic RS (1)
OSC1/CLKIN
RF(2) Sleep
To Internal Logic
PIC® MCU
RP(3)
Resonator
OSC2/CLKOUT
OSC2/CLKOUT(1)
CEXT
REXT
PIC® MCU
OSC1/CLKIN
FOSC/4 or
InternalClock
VDD
VSS
推奨値 : 10 k REXT 100 kCEXT > 20 pF
Note 1: ピンの代替機能については、1.0「デバイスの
概要」の一覧表を参照してください。
2: 出力は RC と RCIO クロックモードで異なり
ます。
I/O(2)
DS41350D_JP - p. 18 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
2.5 内部オシレータ
内部オシレータ モジュールには、以下の 2 つの独立したオシレータがあります。
• LFINTOSC: 低周波内部オシレータ
• HFINTOSC: 高周波内部オシレータ
いずれのオシレータを動作させる場合も、OSC1 はI/O、OSC2 は I/O または CLKOUT のいずれかになります。CLKOUT 機能はコンフィグレーション レジスタ CONFIG1H の FOSC ビットによって選択します。OSC2 ピンを CLKOUT として設定した場合、OSC2 ピンの周波数は内部オシレータ周波数の 1/4 です。
2.5.1 LFINTOSC
低周波内部オシレータ (LFINTOSC) は 31 kHz の内部クロック源です。LFINTOSC オシレータは、以下の回路のクロック源として使用します。
• パワーアップ タイマ
• ウォッチドッグ タイマ
• フェイルセーフ クロック モニタ
LFINTOSC は、以下の条件のいずれか 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の場合
2.5.2 HFINTOSC
高周波内部オシレータ (HFINTOSC) は、16 MHz で動作するように工場出荷時に校正済みの高精度オシレータです。HFINTOSC の出力は、ポストスケーラとマルチプレクサに接続されています ( 図 2-1 参照 )。OSCCON レジスタの IRCF<2:0> ビットによって、8 つの周波数から 1 つを選択します。HFINTOSC で使用できる周波数は以下の通りです。
• 16 MHz
• 8 MHz
• 4 MHz
• 2 MHz
• 1 MHz ( リセット後の既定値 )• 500 kHz
• 250 kHz
• 31 kHz
OSCCON レジスタの HFIOFS ビットは、HFINTOSCの動作が安定しているかどうかを示します。
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の場合
Note 1: HFINTOSC オシレータの周波数として31 kHz を選択するには、IRCF<2:0> = 000に設定し、さらに OSCTUNE レジスタのINTSRC ビットをセットする必要があります。INTSRC ビットをクリアすると、システムクロックは LFINTOSC から供給されます。
2: HFINTOSC の周波数は、OSCTUNE レジスタによってさらに調整できます。詳細はレジスタ 2-3 を参照してください。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 19
PIC18F/LF1XK50
2.6 オシレータ制御
オシレータ制御レジスタ (OSCCON) (レジスタ 2-1)とオシレータ制御レジスタ2 (OSCCON2) (レジスタ 2-2)は、システムクロックと周波数の選択オプションを制御します。
レジスタ 2-1: OSCCON: オシレータ制御レジスタ
R/W-0 R/W-0 R/W-1 R/W-1 R-q R-0 R/W-0 R/W-0
IDLEN IRCF2 IRCF1 IRCF0 OSTS(1) HFIOFS SCS1 SCS0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し q = 条件による
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 IDLEN: アイドル イネーブル ビット1 = SLEEP命令によってデバイスがアイドルモードに移行0 = SLEEP命令によってデバイスがスリープモードに移行
bit 6-4 IRCF<2:0>: 内部オシレータ周波数選択ビット111 = 16 MHz110 = 8 MHz 101 = 4 MHz 100 = 2 MHz011 = 1 MHz(3)
010 = 500 kHz001 = 250 kHz000 = 31 kHz(2)
bit 3 OSTS: オシレータ起動タイムアウト ステータス ビット (1)
1 = デバイスは CONFIG1 レジスタの FOSC<2:0> が定義するクロックによって動作中0 = デバイスは内部オシレータ (HFINTOSC または LFINTOSC) によって動作中
bit 2 HFIOFS: HFINTOSC 周波数安定状態ビット 1 = HFINTOSC の周波数が安定している0 = HFINTOSC の周波数が安定していない
bit 1-0 SCS<1:0>: システムクロック選択ビット1x = 内部オシレータ ブロック01 = セカンダリ (Timer1) オシレータ00 = プライマリ クロック (CONFIG1H[FOSC<3:0>] によって決定 )
Note 1: リセット時の状態は、コンフィグレーション ビット IESO の状態によって異なります。2: クロック源は OSCTUNE レジスタの INTSRC ビットによって選択します ( 本文参照 )。3: リセット時の HFINTOSC の既定出力周波数
DS41350D_JP - p. 20 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 2-2: OSCCON2: オシレータ制御レジスタ 2
U-0 U-0 U-0 U-0 U-0 R/W-1 R/W-0 R-x
— — — — — PRI_SD HFIOFL LFIOFS
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し q = 条件による
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-3 未実装 : 「0」として読み出し
bit 2 PRI_SD: プライマリ オシレータ駆動回路シャットダウン ビット
1 = オシレータ駆動回路を ON0 = オシレータ駆動回路を OFF ( 消費電力ゼロ )
bit 1 HFIOFL: HFINTOSC 周波数ロック完了ビット
1 = HFINTOSC がロック状態0 = HFINTOSC はまだロックされていない
bit 0 LFIOFS: LFINTOSC 周波数安定状態ビット
1 = LFINTOSC は安定している0 = LFINTOSC は安定していない
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 21
PIC18F/LF1XK50
2.6.1 OSCTUNE レジスタ
HFINTOSCは工場出荷時に校正済みですが、OSCTUNEレジスタの TUN<5:0> ビットに書き込む事でソフトウェアによる調整が可能です ( レジスタ 2-3)。
TUN<5:0> の既定値は「000000」です。値は 6 ビットの 2 の補数です。
OSCTUNE レジスタを変更すると、HFINTOSC の周波数が変化しはじめます。周波数の変化は明示されませんが、変化中もコードの実行は継続します。
OSCTUNEはLFINTOSCの周波数には影響を与えません。パワーアップ タイマ (PWRT)、ウォッチドッグ タイマ (WDT)、フェイルセーフ クロック モニタ (FSCM)
等のクロック源LFINTOSCの周波数の影響を受ける機能や、周辺回路の動作は、周波数変化の影響を受けません。
OSCTUNE レジスタは INTSRC および SPLLEN ビットも実装しています。これらのビットは内部オシレータ ブロックの機能の一部を制御します。
INTSRC ビットは、31 kHz の周波数オプションが選択された場合、どの内部オシレータをクロック源とするかを選択します。詳細は、2.5.1「LFINTOSC」で解説します。
SPLLEN は周波数マルチプライヤの動作を制御するビットです。SPLLEN ビットの機能の詳細は、2.9「4xPLL 周波数マルチプライヤ」を参照してください。
レジスタ 2-3: OSCTUNE: オシレータ調整レジスタ
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
INTSRC SPLLEN TUN5 TUN4 TUN3 TUN2 TUN1 TUN0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 INTSRC: 内部オシレータ低周波ソース選択ビット
1 = 31.25 kHz のデバイスクロック、16 MHz の HFINTOSC ソースから生成 (512 分周回路が有効 )0 = 31 kHz のデバイスクロック、内部オシレータ LFINTOSC から直接生成
bit 6 SPLLEN: ソフトウェア制御による周波数マルチプライヤ PLL ビット
1 = PLL が有効 (HFINTOSC の 8 MHz 動作時のみ )0 = PLL が無効
bit 5-0 TUN<5:0>: 周波数調整ビット
011111 = 大周波数011110 = • • •000001 = 000000 = オシレータ モジュールは工場出荷時に校正された周波数で動作111111 = • • •100000 = 小周波数
DS41350D_JP - p. 22 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
2.7 オシレータ起動タイマ
プライマリ外部オシレータを LP、XT、HS モードに設定した場合、オシレータ起動タイマ (OST) が動作します。これはオシレータが確実に起動し、オシレータ モジュールに安定したクロックが供給されるようにするタイマです。OST は、OSC1 の発振を 1024 回カウントするとタイムアウトします。システムクロックがプライマリ外部オシレータに設定されている場合、OSTがタイムアウトするまでの期間はプログラム カウンタがインクリメントせず、プログラム実行は一時停止します。OST は、以下のイベント発生後にカウントを始めます。
• パワーオン リセット (POR)
• ブラウンアウト リセット (BOR)
• スリープからのウェイクアップ
• オシレータを ON
• パワーアップ タイマ (PWRT) のタイムアウト
外部オシレータの起動からコード実行までのレイテンシを 小限に抑えるには、2 段階起動モードを選択します。詳細は、2.12「2 段階起動モード」を参照してください。
2.8 クロックの切り換え
デバイスには、システム クロック源の変更によって生ずるクロックの「グリッチ」を防ぐ回路が搭載されています。この回路は、クロックを切り換える間システムクロックを短期間停止する事でグリッチを予防します。切り換え先のクロック源が安定していない場合( 例えば OST がカウント中 )、安定するまでデバイスは元のクロック源によって動作を続けます。クロック切り換えのタイミングは以下の通りです。
1. OSCCONレジスタのSCS<1:0>ビットが変わる。
2. 切り換え先のクロックの準備が整うまで、システムクロックは元のクロックで動作を続ける。
3. クロック切り換え回路は、新しいクロックの準備が整った時点から、元のクロックで連続する 2 つの立ち上がりエッジが検出されるのを待つ。
4. 元のクロックの次の立ち下がりエッジから、システムクロックを Low に保持する。
5. クロック切り換え回路は、さらに切り換え先のクロックの立ち上がりエッジを 2 回待つ。
6. 切り換え先のクロックの次の立ち下がりエッジで、システムクロックの Low 保持を解除し、切り換え先のクロックがシステムクロックを駆動しはじめる。
7. クロックの切り換えが完了する。
詳細は図 2-5 を参照してください。
図 2-5: クロック切り換えのタイミング
Old Clock
New Clock
IRCF <2:0>
System Clock
Start-up Time(1) Clock Sync Running
High Speed Low Speed
Select Old Select New
New Clk Ready
Low Speed High Speed
Old Clock
New Clock
IRCF <2:0>
System Clock
Start-up Time(1) Clock Sync Running
Select Old Select New
New Clk Ready
Note 1: Start-up Time は、外部クロックの TOST (1024 TOSC) と HSPLL モードの TPLL ( 約 2 ms) を含みます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 23
PIC18F/LF1XK50
表 2-2: クロック切り換えによる遅延の例
2.9 4x PLL 周波数マルチプライヤ
PLL ( 位相ロックループ ) 回路は、低周波外部オシレータを使用するか、HFINTOSC を 32 MHz で動作させる必要のあるユーザ向けのオプションです。この PLL は入力周波数 4 ~ 12 MHz に対して設計されています。PLL を有効にすると、入力周波数が 4 倍されます。この機能は高周波の水晶振動子によるEMIが懸念される場合に効果があります。
PLL は、コンフィグレーション レジスタ CONFIG1HのPLLENビットおよびOSCTUNEレジスタのSPLLENビットによって制御されます。PLLEN ビットをセットすると PLL が有効になり、PLLEN ビットをクリアするとソフトウェア制御になります。
表 2-3: PLL の設定
2.10 CPU クロック分周器
CPU クロック分周器を使用すると、同じクロック源を共用していながら、システムクロックだけをロースピード /フルスピードUSBモジュールのクロックよりも低速で駆動する事ができます。CPU クロック分周器を適用できるのは、コンフィグレーション レジスタCONFIG1H の FOSC ビットが定義するオシレータだけです。CPU クロック分周器は、コンフィグレーション レジスタ CONFIG1L の CPUDIV ビットによって 以下のように設定されます。
• USB モジュールと同じクロック速度
• USB モジュールの半分のクロック速度
• USB モジュールの 1/3 のクロック速度
• USB モジュールの 1/4 のクロック速度
CPU クロック分周器の詳細は、図 2-1 とレジスタ 24-1CONFIG1L を参照してください。
2.11 USB 動作
USBモジュールは以下の2つのモードで動作するように設計されています。
• ロースピード
• フルスピード
USB の仕様によって決まるタイミング要件から、USBモジュールにはプライマリ外部オシレータが必要になります。コンフィグレーション レジスタ CONFIG1Hの FOSC ビットは、周波数 6/12/48 MHz の外部クロック (EC) 大電力モードまたは HS モードに設定します。
2.11.1 ロースピード動作
ロースピード動作では、USB モジュールに 6 MHz のクロックが必要になります。6 MHz のクロックを発生するには、以下の 2 つのオシレータモードしか使用できません。
• EC 大電力モード
• HS モード
表 2-4 に、ロースピード動作時の推奨クロックモードを示します。
2.11.2 フルスピード動作
フルスピード動作では、USB モジュールに 48 MHz のクロックが必要です。48 MHz のクロックを生成するには、以下の 2 つのオシレータモードしか使用できません。
• EC 大電力モード
• HS モード
表 2-5 に、フルスピード動作時の推奨クロックモードを示します。
切り換え元 切り換え先 オシレータの遅延
スリープ /POR LFINTOSCHFINTOSC
オシレータのウォームアップ遅延(TWARM)
スリープ /POR LP、XT、HS 1024 クロックサイクル
スリープ /POR EC、RC 8 クロックサイクル
PLLEN SPLLEN PLL の状態
1 x PLL が有効
0 1 PLL が有効
0 0 PLL が無効
Note: HFINTOSC に対して PLL を適用できるのは、ポストスケーラを 8 MHz に設定し、コンフィグレーション レジスタCONFIG1H の FOSC<3:0> ビットによって内部オシレータ動作が選択されている場合です。
Note: USB をロースピードで動作させるには、CPU クロック周波数を 24 MHz 以下にする必要があります (6 MHz が 適 )。24 MHz よりも高い周波数を使用する場合、14 命令サイクル以上のファームウェア遅延が必要です。
DS41350D_JP - p. 24 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 2-4: ロースピード USB のクロック設定
表 2-5: フルスピード USB のクロック設定
クロックモード クロック周波数 USBDIV 4x PLL ON/OFF CPUDIV<1:0> システムクロック周波数(MHz)
EC 大電力 /HS
12 MHz 1
ON
00 48
01 24
10 16
11 12
OFF
00 12
01 6
10 4
11 3
6 MHz 0
ON
00 24
01 12
10 8
11 6
OFF
00 6
01 3
10 2
11 1.5
Note: 表 2-4 のシステムクロック周波数は、OSCCON レジスタのビット、SCS<1:0> = 00 の場合にのみ適用される値です。これらのビットを変更する事により、システムクロックを 31 kHz まで落とす事ができます。
クロックモード クロック周波数 4x PLL ON/OFF CPUDIV<1:0> システムクロック周波数(MHz)
EC 大電力 48 MHz OFF
00 48
01 24
10 16
11 12
EC 大電力 /HS 12 MHz ON
00 48
01 24
10 16
11 12
Note: 上記のシステムクロック周波数は、OSCCON レジスタのビット、SCS<1:0> = 00 の場合にのみ適用される値です。これらのビットを変更する事により、システムクロックを 31 kHz まで落とす事ができます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 25
PIC18F/LF1XK50
2.12 2 段階起動モード
2 段階起動モードは、オシレータ起動タイマ (OST) からコード実行までのレイテンシを 小限に抑える事で、さらなる消費電力低減を実現します。スリープモードを多用するアプリケーションでは、2 段階起動を使用する事で OST のタイムアウト待ちがなくなり、デバイス全体の消費電力が低減できます。
2 段階起動モードは、コンフィグレーション レジスタCONFIG1Hの IESOビットをセットすると有効になります。2 段階起動モードを有効に設定すると、プライマリ外部オシレータの OST がタイムアウトするまで、デバイスは内部オシレータを使用して命令を実行します。
システムクロックがプライマリ外部オシレータに設定され、オシレータが LP、XT、HS モードに設定されている場合、OST の期間はコードが実行されません。OST は発振を 1024 回カウントするまでプログラム実行を一時停止します。2 段階起動モードは、OST のカウント中に内部オシレータによって動作する事でコード実行の遅延を 低限に抑えます。OST のタイムアウト後、システムクロックはプライマリ外部オシレータに戻ります。
2 段階起動は、以下のイベント発生後にアクティブになります。
• パワーオン リセット (POR)
• パワーアップ タイマ (PWRT) ( 有効な場合 )
• スリープからのウェイクアップ
OSCCON レジスタの OSTS ビットには、デバイスが現在どのオシレータを使用して動作しているかが表示されます。OSTS ビットがセットされている場合、デバイスはコンフィグレーション レジスタ CONFIG1HのFOSCビットが定義するオシレータによって動作中です。OSTS ビットがクリアされている場合、内部オシレータによって動作しています。
2.13 フェイルセーフ クロック モニタ
フェイルセーフ クロック モニタ (FSCM) により、外部オシレータに障害が発生してもデバイスは動作を続ける事ができます。FSCM はオシレータ起動タイマ(OST) のタイムアウト後のあらゆる時点で発生するオシレータ障害を検出します。FSCM は、コンフィグレーション レジスタ CONFIG1H の FCMEN ビットをセットすると有効になります。FSCM は、全ての外部オシレータモード (LP、XT、HS、EC、RC) に適用できます。
図 2-6: FSCM のブロック図
2.13.1 フェイルセーフ検出
FSCM モジュールは、外部オシレータの障害を FSCMサンプルクロックと比較する事で検出します。サンプルクロックは LFINTOSC を 64 分周して生成します( 図 2-6 参照 )。障害検出ブロックにはラッチがあります。このラッチは、外部クロックの立ち下がりエッジでセットされ、 サンプルクロックの立ち上がりエッジでクリアされます。サンプルクロックの半サイクルが完了するまでにプライマリ クロックが Low にならないと、障害が発生したと見なされます。
2.13.2 フェイルセーフ動作
外部クロックに障害が発生すると、FSCM はデバイスクロックを内部クロック源に切り換え、PIR2 レジスタのビットフラグ OSCFIF をセットします。PIE2 レジスタの OSCFIE ビットがセットされている場合、OSCFIF フラグにより割り込みが生成されます。この割り込みによって、デバイスのファームウェアはクロック障害によって発生する問題を軽減する手順を実行できます。デバイスのファームウェアが外部オシレータを正常に再起動し、動作を再度外部に切り換えるまで、システムクロックは引き続き内部クロック源によって駆動されます。障害が発生したクロック源に自動的に復帰する事はありません。
FSCM が使用する内部クロック源は、OSCCON レジスタの IRCF<2:0> ビットによって決まります。従って、あらかじめ内部オシレータを設定しておく事ができます。
External
LFINTOSC÷ 64
S
R
Q
31 kHz(~32 s)
488 Hz(~2 ms)
Clock MonitorLatch
ClockFailure
Detected
Oscillator
Clock
Q
Sample Clock
DS41350D_JP - p. 26 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
2.13.3 フェイルセーフ状態の解除
フェイルセーフ状態は、以下のいずれかの方法によって解除できます。
• 全てのリセット
• OSCCON レジスタの SCS1 ビットのトグル
いずれの条件でも OST が再起動します。OST のカウント中、デバイスは OSCCON によって選択されたINTOSC による動作を続けます。OST がタイムアウトすると、フェイルセーフ状態が解除され、デバイスは外部クロック源に自動的に切り換わります。OSCFIFフラグがクリアされるまで、フェイルセーフ状態を解除する必要はありません。
2.13.4 リセットまたはスリープからのウェイクアップ
FSCMはオシレータ起動タイマ (OST)のタイムアウト後に発生するオシレータ障害を検出できるように設計されています。OST はスリープ後のウェイクアップお
よび全種類のリセット後に動作しますが、 EC またはRCクロックモードでは使用されません。これらのモードでは、リセットまたはウェイクアップの完了後ただちに FSCM がアクティブになります。FSCM が有効な場合、2 段階起動も有効です。従って、OST のカウント中デバイスは常時コードを実行します。
図 2-7: FSCM のタイミング チャート
表 2-6: クロック源に関連するレジスタの要約
Note: オシレータの起動時間には大きな幅があるため、オシレータの起動中 ( つまり、リセットまたはスリープ状態が完了するまで )はフェイルセーフ回路はアクティブになりません。適当な時間が経過したら、ユーザはOSCCONレジスタのOSTSビットを調べ、オシレータが起動してシステムクロックの切り換えが正常に完了している事を確認する必要があります。
レジスタ名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 リセット値の掲載ページ
CONFIG1H IESO FCMEN PCLKEN PLLEN FOSC3 FOSC2 FOSC1 FOSC0 296
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
OSCCON IDLEN IRCF2 IRCF1 IRCF0 OSTS HFIOFS SCS1 SCS0 288
OSCTUNE INTSRC SPLLEN TUN5 TUN4 TUN3 TUN2 TUN1 TUN0 290
PIE2 OSCFIE C1IE C2IE EEIE BCLIE USBIE TMR3IE — 290
PIR2 OSCFIF C1IF C2IF EEIF BCLIF USBIF TMR3IF — 290
T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 105
凡例 : x = 未知、u = 変化なし、– = 未実装 (「0」として読み出し )、 網掛けの部分はオシレータでは使用しません。Note 1: その他のリセット ( パワーアップ以外 ) には、通常動作中の MCLR リセットやウォッチドッグ タイマ リセット
があります。
OSCFIF
SystemClock
Output
Sample Clock
FailureDetected
OscillatorFailure
Note: 通常、システムクロックはサンプルクロックよりもはるかに高い周波数で動作します。上記の例では、図を
わかりやすくするために周波数比を小さくしてあります。
(Q)
Test Test Test
Clock Monitor Output
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 27
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 28 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
3.0 メモリ構成
PIC18 拡張マイクロコントローラは、以下の 3 種類のメモリを搭載しています。
• プログラムメモリ
• データ RAM
• データ EEPROM
ハーバード アーキテクチャのデバイスとして、データメモリとプログラムメモリは独立したバスを使用します。このため 2 つのメモリ空間に同時にアクセスできます。データ EEPROM には、一連の制御レジスタによってアドレスを指定してアクセスします。このため、実用上は一種の周辺デバイスと見なす事ができます。
フラッシュ プログラムメモリの動作の詳細は 4.0「フラッシュ プログラムメモリ」に記載されています。また、データ EEPROM については、別途 5.0「データEEPROM メモリ」で説明します。
3.1 プログラムメモリの構成
PIC18 マイクロコントローラには 21 ビットのプログラム カウンタが実装され、2 MB のプログラムメモリ空間に対してアドレスを指定できます。物理的に実装されたメモリの上限と 2 MB のアドレスの間のメモリ位置にアクセスすると、常に「0」(NOP 命令 ) が返されます。
このファミリに属するデバイスは、以下のプログラムメモリを搭載しています。
• PIC18F13K50: 8 KB のフラッシュメモリ、 大4,096 のシングルワード命令
• PIC18F14K50: 16 KB のフラッシュメモリ、 大8,192 のシングルワード命令
PIC18 には、1 つのリセットベクタと 2 つの割り込みベクタがあります。リセットベクタのアドレスは0000h、割り込みベクタのアドレスは 0008h と 0018hです。
図 3-1にPIC18F/LF1XK50のプログラムメモリ マップを示します。メモリブロックの詳細は、図 24-2 に示します。
図 3-1: PIC18F/LF1XK50 のプログラムメモリ マップとスタック
PC<20:0>
Stack Level 1
Stack Level 31
Reset Vector
Low Priority Interrupt Vector
CALL,RCALL,RETURNRETFIE,RETLW
21
0000h
0018h
High Priority Interrupt Vector 0008h
Use
r M
emor
y S
pace
1FFFFFh
4000h3FFFh
200000h
On-ChipProgram Memory
Read ‘0’
1FFFh
2000h
On-ChipProgram Memory
Read ‘0’
PIC18F14K50
PIC18F13K50
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 29
PIC18F/LF1XK50
3.1.1 プログラム カウンタ
プログラム カウンタ (PC) は、フェッチして実行する命令のアドレスを指定します。PC は 21 ビット幅で、3 つの独立した 8 ビット レジスタから構成されます。PCLレジスタと呼ばれる下位バイトは読み書き可能です。上位バイトの PCH レジスタには PC<15:8> のビットが含まれ、直接読み書きはできません。PCH レジスタは、PCLATH レジスタを介して更新します。 上位バイトは PCU と呼ばれます。このレジスタには、PC<20:16> のビットが含まれ、PCH と同様に直接読み書きする事はできません。PCUレジスタは、PCLATUレジスタを介して更新します。
PCL への書き込み動作を実行するたびに、PCLATH および PCLATU の内容がプログラム カウンタに転送されます。同様に、PCL からの読み出し動作を実行するたびに、プログラム カウンタの上位 2 バイトがPCLATH および PCLATU に転送されます。この機能は、計算によって PC をオフセットさせる場合に便利です (3.1.4.1「計算型 GOTO」参照 )。
PC はバイト単位でプログラムメモリのアドレスを指定します。ワード単位の命令と PC の間で不整合が生じないように、PCL の 下位ビット (LSb) は「0」に固定されています。従って、プログラムメモリ内の連続する命令に対して順にアドレスを指定していく場合、PC は 2 ずつインクリメントします。
CALL、RCALL、GOTO、プログラム分岐命令は、プログラム カウンタに直接書き込みます。これらの命令では、PCLATH や PCLATU の内容がプログラム カウンタに転送されません。
3.1.2 リターンアドレス スタック
リターンアドレス スタックは、任意の組み合わせのプログラムコールと割り込みに対して 大 31 個まで対応できます。CALL または RCALL 命令を実行するか、割り込みに対して肯定応答 (ACK) すると、スタックにPC の値がプッシュされます。RETURN、RETLW、RETFIE 命令を実行すると、スタックから PC の値がポップされます。PCLATU および PCLATH は、RETURN系命令または CALL 系命令のいずれからも影響を受けません。
スタックは、31 ワード x21 ビットの RAM、5 ビットのスタックポインタSTKPTRによって動作します。スタック空間は、プログラムおよびデータ空間のいずれにも属しません。スタックポインタは読み書き可能です。また、スタックの 上位 TOS (Top-of-Stack) に格納されているアドレスは、TOS 特殊ファイルレジスタを介して読み書きできます。スタックのデータは、これらのレジスタによってプッシュまたはポップできます。
CALL 系の命令を実行すると、スタックへのプッシュが実行されます。実際の動作は、まずスタックポインタがインクリメントされ、スタックポインタが指し示す位置に PC ( 既に CALLの次の命令を指しています )の内容が書き込まれます。RETURN 系の命令を実行すると、スタックからのポップが実行されます。実際の動作は、STKPTR が指し示す位置の内容が PC に転送されてからスタックポインタの値がデクリメントします。
全てのリセット動作は、スタックポインタを「00000」に初期化します。RAM 上にスタックポインタの値「00000」に対応する位置は存在しません。これは単なるリセット値です。スタックフルまたはオーバーフロー / アンダーフローの状態は、ステータスビットによって示します。
3.1.2.1 Top-of-Stack へのアクセス
リターンアドレス スタックの読み書きは 上位 (TOS)に対してのみ実行できます。STKPTR レジスタが指し示すスタック位置の内容は、3 つのレジスタセットTOSU:TOSH:TOSL に保持されます ( 図 3-2)。これにより、必要に応じてソフトウェア スタックを実装できます。CALL、RCALL、または割り込みの発生後、ソフトウェアは TOSU:TOSH:TOSL レジスタを読み出す事でプッシュされた値を取得できます。取得した値は、ユーザ定義のソフトウェア スタックに格納できます。リターンする時は、これらの値を TOSU:TOSH:TOSL に返します。
スタックにアクセスする場合、ユーザはグローバル割り込みイネーブルビットを無効にして、不慮のスタック破損を防ぐ必要があります。
図 3-2: リターンアドレス スタックと関連するレジスタ
00011001A34h
111111111011101
000100000100000
00010
Return Address Stack <20:0>
Top-of-Stack000D58h
TOSLTOSHTOSU34h1Ah00h
STKPTR<4:0>
Top-of-Stack Registers Stack Pointer
DS41350D_JP - p. 30 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
3.1.2.2 リターン スタックポインタ(STKPTR)
STKPTR レジスタ ( レジスタ 3-1) には、スタックポインタの値、STKFUL ( スタックフル ) ビット、STKUNF( スタック アンダーフロー) ビットが格納されます。スタックポインタが取る事のできる値は 0 ~ 31 です。スタックポインタは、値をスタックにプッシュする前にインクリメントされ、スタックからポップした後にデクリメントされます。リセットするとスタックポインタの値はゼロになります。スタックポインタの値は、ユーザによる読み書きが可能です。この機能は、リアルタイム オペレーティング システム(RTOS)におけるリターンスタックの管理に使用できます。
スタックに PC が 31 回プッシュされると ( その間、スタックから値を一切ポップしなかった場合 )、STKFULビットがセットされます。STKFUL ビットは、ソフトウェアまたは POR によってクリアされます。
スタックフルが発生した場合の動作は、コンフィグレーション ビットSTVREN (スタック オーバーフローリセット イネーブル ) の状態によって決まります ( デバイス コンフィグレーション ビットの詳細は 24.1「コンフィグレーション ビット」を参照してください )。STVREN がセットされている場合 ( 既定値 )、31 回目のプッシュが実行されると、(PC + 2) の値がスタックに格納され、STKFUL ビットのセット後、デバイスがリセットされます。STKFUL ビットはセットされたまま、スタックポインタはゼロにリセットされます。
一方、STVREN がクリアされている場合、31 回目のプッシュによって STKFUL ビットがセットされ、スタックポインタは 31 にインクリメントされます。その後は、プッシュ動作を実行しても 31 回目にプッシュされた値が上書きされる事はなく、STKPTR の値も 31に保たれます。
スタックが完全に空になるまでポップすると、次のポップでは PC にゼロが返され、STKUNF ビットがセットされます。スタックポインタの値はゼロのままです。STKUNF ビットは、ソフトウェアによってクリアされるか POR が発生するまで、セットされた状態を維持します。
3.1.2.3 PUSHおよび POP命令
Top-of-Stack (TOS) は読み書き可能であるため、通常のプログラム実行を妨げる事なく、スタックとの間で値をプッシュ / ポップできる機能があると便利です。PIC18 の命令セットには、ソフトウェアによるこのような TOS 操作を可能とする 2 つの命令、PUSHと POPがあります。これらの命令によって TOSU、TOSH、TOSL を変更して、スタックにデータまたはリターンアドレスを格納できます。
PUSH 命令は現在の PC の値をスタックにプッシュします。つまり、スタックポインタをインクリメントして、現在の PC の値をスタックに格納します。
POP命令はスタックポインタをデクリメントして、現在の TOS の値を破棄します。そして、破棄された値より前にスタックにプッシュされた値が、新たな TOSの値になります。
Note: アンダーフローが発生してPCに値ゼロが返されると、プログラムはリセットベクタに分岐します。分岐先でスタックの状態を確認して適切な措置を講ずる事ができます。この動作は特殊機能レジスタ(SFR) の内容には影響を与えない事から、リセットとは異なります。
レジスタ 3-1: STKPTR: スタックポインタ レジスタ
R/C-0 R/C-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
STKFUL(1) STKUNF(1) — SP4 SP3 SP2 SP1 SP0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット C = クリアのみ可能ビット
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 STKFUL: スタックフル フラグ ビット (1)
1 = スタックがフルまたはオーバーフローした 0 = スタックはフルではなく、オーバーフローもしていない
bit 6 STKUNF: スタック アンダーフロー フラグ ビット (1)
1 = スタック アンダーフローが発生した 0 = スタック アンダーフローは発生していない
bit 5 未実装ビット : 「0」として読み出し
bit 4-0 SP<4:0>: スタックポインタの位置を表すビット
Note 1: bit 7 と bit 6 は、ユーザ ソフトウェアまたは POR によってクリアされます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 31
PIC18F/LF1XK50
3.1.2.4 スタックフルおよびスタック アンダーフローによるリセット
スタック オーバーフローおよびスタック アンダーフロー状態によるデバイスのリセットは、コンフィグレーション レジスタCONFIG4LのSTVRENビットをセットすると有効になります。STVREN がセットされている場合、スタックフルまたはアンダーフローによってそれぞれSTKFULまたはSTKUNFビットがセットされたのち、デバイスがリセットされます。STVREN がクリアされている場合、スタックフルまたはアンダーフローによってそれぞれ STKFUL またはSTKUNF ビットがセットされますが、デバイスはリセットされません。STKFUL および STKUNF ビットは、ユーザ ソフトウェアまたはパワーオン リセットによってクリアされます。
3.1.3 高速レジスタスタック
ステータス、WREG、BSR の各レジスタには高速レジスタスタックが装備され、割り込み処理後の「高速リターン」機能を提供します。各レジスタのスタックは1 レベルの深さしかなく、読み出しも書き込みもできません。これらのスタックには、割り込みによってプロセッサ動作が分岐すると、対応するレジスタの現在値が格納されます。いずれの割り込み要因も値をスタックレジスタにプッシュします。その後、RETFIE,FAST命令によって割り込み処理から戻る際に、スタックレジスタ内の値は対応するレジスタに返されます。
低優先度および高優先度の割り込みが両方とも有効に設定されている場合、低優先度の割り込みからのリターンに対しては、スタックレジスタ動作の信頼性を確保できません。低優先度の割り込み処理中に高優先度の割り込みが発生した場合、低優先度割り込みがスタックレジスタに保存した値が上書きされてしまうためです。ユーザはこのような場合に備えて、低優先度割り込みが発生したら主要レジスタの値をソフトウェアによって保存しておく必要があります。
割り込みの優先度を使用しない場合、全ての割り込みからのリターンに高速レジスタスタックを使用できます。また、割り込みを一切使用しない場合でも、サブルーチン コールの終わりに高速レジスタスタックを使用してステータス、WREG、BSR の各レジスタの値をリストアできます。サブルーチン コールで高速レジスタスタックを使用するには、CALL label, FAST命令を実行してステータス レジスタ、WREG、BSR の値を高速レジスタスタックに保存する必要があります。その後、RETURN, FAST 命令を実行して、これらのレジスタの値を高速レジスタスタックからリストアします。
例 3-1 に、サブルーチンのコールおよびリターン時に高速レジスタスタックを使用するサンプルコードを示します。
例 3-1: 高速レジスタスタックを使用するサンプルコード
3.1.4 プログラムメモリ内のルックアップ テーブル
プログラミングにおいて、プログラムメモリ内にデータ構造、つまりルックアップ テーブルの作成が必要となる場合があります。PIC18 では、以下の 2 つの方法でルックアップ テーブルを実装できます。
• 計算型 GOTO
• テーブル読み出し
3.1.4.1 計算型 GOTO
計算型 GOTOは、プログラム カウンタにオフセット値を加算する事で実現します。例 3-2 にサンプルコードを示します。
ルックアップ テーブルは ADDWF PCL命令と、一連のRETLW nn命令によって構成します。W レジスタ(WREG) には、そのテーブルルーチンを呼び出す前に、テーブル内のオフセットを格納しておきます。呼び出されるルーチンの 初の命令は ADDWF PCLです。その次に実行される命令は、RETLW nn命令の中の 1 つで、呼び出し元の関数に値「nn」を返します。
WREG 内のオフセット値は、プログラム カウンタを進めるバイト数を表し、2 の倍数である必要があります (LSb = 0)。
この方法では、命令の各位置に 1 バイトのデータしか保存できず、リターンアドレス スタックに空きが必要です。
例 3-2: オフセット値を使用する計算型GOTO
3.1.4.2 テーブルへの読み書き
プログラムメモリ内にデータを保存する方法では、命令の各位置に 2 バイトのデータを保存できます。
テーブルへの読み書きを使用して、ルックアップ テーブルのデータをプログラムワード 1 つあたり 2 バイト保存できます。テーブルポインタ (TBLPTR) レジスタでバイトアドレスを指定し、テーブルラッチ (TABLAT)レジスタにプログラムメモリに対して読み書きするデータが格納されます。データはプログラムメモリの間で一度に 1 バイトずつ転送されます。
テーブルへの読み書きの動作は、4.1「テーブル読み出し / 書き込み」で詳しく説明します。
CALL SUB1, FAST ;STATUS, WREG, BSR;SAVED IN FAST REGISTER;STACK
SUB1
RETURN, FAST ;RESTORE VALUES SAVED;IN FAST REGISTER STACK
MOVF OFFSET, WCALL TABLE
ORG nn00hTABLE ADDWF PCL
RETLW nnhRETLW nnhRETLW nnh...
DS41350D_JP - p. 32 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
3.2 PIC18 の命令サイクル
3.2.1 クロック方式
マイクロコントローラへのクロック入力は、それが内部クロック源と外部クロック源のいずれから供給されたものであれ、内部で 4 分周されて 4 つのオーバーラップのない直角位相クロック (Q1、Q2、Q3、Q4) が生成されます。チップ内部では、Q1 ごとにプログラム カウンタがインクリメントされ、Q4 の期間にプログラムメモリから命令がフェッチされ、命令レジスタにラッチされます。次の Q1 から Q4 の期間に命令がデコードされ実行されます。図 3-3 にクロックと命令実行のフローを示します。
3.2.2 命令のフロー / パイプライン処理
「命令サイクル」は 4 つの Q サイクル Q1 ~ Q4 より構成されます。命令のフェッチと実行には、フェッチに1 命令サイクル、デコードと実行にもう 1 命令サイクルを使用するパイプライン方式が採用されています。パイプライン方式により、各命令は実効的には 1 サイクルで処理されます。命令がプログラム カウンタを変更する場合 (GOTO等 )、命令が完了するまでに 2 サイクル必要です ( 例 3-3)。
フェッチサイクルは Q1 のプログラム カウンタ (PC)のインクリメントから始まります。
実行サイクルでは、フェッチされた命令がサイクルQ1で命令レジスタ (IR) にラッチされます。続くサイクルQ2、Q3、Q4 で命令がデコードされ実行されます。データメモリからの読み出し ( オペランドの読み出し ) はQ2 で、データメモリへの書き込み ( 結果格納先への書き込み ) は Q4 で実行されます。
図 3-3: クロック /命令サイクル
例 3-3: 命令パイプライン フロー
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
OSC1
Q1
Q2
Q3
Q4
PC
OSC2/CLKOUT(RC mode)
PC PC + 2 PC + 4
Fetch INST (PC)Execute INST (PC – 2)
Fetch INST (PC + 2)Execute INST (PC)
Fetch INST (PC + 4)Execute INST (PC + 2)
InternalPhaseClock
プログラム分岐以外の全ての命令はシングルサイクルで完了します。プログラム分岐の場合、フェッチ済みの命令をパイプラインから「破棄」して新しい命令をフェッチ / 実行するため、2 サイクル必要です。
TCY0 TCY1 TCY2 TCY3 TCY4 TCY5
1. MOVLW 55h Fetch 1 Execute 1
2. MOVWF PORTB Fetch 2 Execute 2
3. BRA SUB_1 Fetch 3 Execute 3
4. BSF PORTA, BIT3 (Forced NOP) Fetch 4 Flush (NOP)
5. Instruction @ address SUB_1 Fetch SUB_1 Execute SUB_1
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 33
PIC18F/LF1XK50
3.2.3 プログラムメモリ内の命令
プログラムメモリのアドレスはバイト単位で指定します。命令は、2 バイトまたは 4 バイトのいずれかでプログラムメモリに格納されます。命令ワードの 下位バイト (LSB) は、必ずプログラムメモリ内の偶数アドレス位置 (LSb = 0) に保存されます。各命令の区切り方に不整合が生じないように、PC は 2 ずつインクリメントし、LSb からは常に「0」が読み出されます(3.1.1「プログラム カウンタ」参照 )。
図 3-4 に、プログラムメモリへの命令ワードの格納例を示します。
CALLおよび GOTO命令には、プログラムメモリの絶対アドレスが埋め込まれています。命令は全てワード境界に沿って格納されるため、これらの命令に含まれるデータもワードのアドレスです。ワードアドレスをPC<20:1> に書き込み、プログラムメモリ内のバイトアドレスにアクセスします。図 3-4 の Instruction 2 は、GOTO 0006hという命令がプログラムメモリ内にどのようにエンコードされるかを示します。相対アドレスオフセットをエンコードするプログラム分岐命令も同様に動作します。分岐命令に保存されるオフセット値は、PC をオフセットさせる量をシングルワード命令の数として表します。命令セットの詳細は、25.0「命令セットの概要」で説明します。
図 3-4: プログラムメモリ内の命令
3.2.4 2 ワード命令
標準の PIC18 命令セットには、4 つの 2 ワード命令があります。CALL、MOVFF、GOTO、LSFRです。いずれの命令も 2 ワード目の 上位 (MSb) の 4 ビットは常に
「1111」であり、残りの 12 ビットはリテラルデータ( 通常はデータメモリのアドレス ) を収めます。
2 ワード目の 上位 4 ビットの値「1111」は、特殊なNOP 動作を規定します。2 ワード命令が正常なシーケンスで実行された場合、1 ワード目の直後に 2 ワード
目のデータにアクセス、実行されます。しかし、何らかの理由で 1 ワード目がスキップされ、2 ワード目だけが実行された場合、NOPが実行されます。このような仕組みは、2 ワード命令の前に PC を変更する条件分岐命令が存在する場合に必要です。例 3-4 に、動作例を示します。
例 3-4: 2 ワード命令
Word AddressLSB = 1 LSB = 0
Program MemoryByte Locations
000000h000002h000004h000006h
Instruction 1: MOVLW 055h 0Fh 55h 000008hInstruction 2: GOTO 0006h EFh 03h 00000Ah
F0h 00h 00000ChInstruction 3: MOVFF 123h, 456h C1h 23h 00000Eh
F4h 56h 000010h000012h000014h
Note: 拡張命令セットの 2 ワード命令については、3.6「PIC18 命令の実行と拡張命令セット」を参照してください。
例 1:
オブジェクト コード ソースコード
0110 0110 0000 0000 TSTFSZ REG1 ; is RAM location 0?
1100 0001 0010 0011 MOVFF REG1, REG2 ; No, skip this word
1111 0100 0101 0110 ; Execute this word as a NOP
0010 0100 0000 0000 ADDWF REG3 ; continue code
例 2:
オブジェクト コード ソースコード
0110 0110 0000 0000 TSTFSZ REG1 ; is RAM location 0?
1100 0001 0010 0011 MOVFF REG1, REG2 ; Yes, execute this word
1111 0100 0101 0110 ; 2nd word of instruction
0010 0100 0000 0000 ADDWF REG3 ; continue code
DS41350D_JP - p. 34 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
3.3 データメモリの構成
PIC18 のデータメモリは SRAM として実装しています。データメモリの各レジスタは 12 ビットのアドレスを持ち、 大 4096 バイトのデータメモリを使用できます。メモリ空間は、それぞれが 256 バイトの 大16 個のバンクに分割されます。図 3-5 と図 3-6 に、PIC18F/LF1XK50 のデータメモリ構成を示します。
データメモリには特殊機能レジスタ (SFR)と汎用レジスタ (GPR) が含まれます。SFR はコントローラや周辺機能の制御やステータス表示に、GPR はデータの格納やユーザ アプリケーションの一時格納動作 ( スクラッチパッド動作 ) に使います。未実装のメモリ位置を読み出すと、常に「0」が返されます。
命令セットとアーキテクチャは、全てのバンク範囲に対応できます。直接、間接、インデックス付きのアドレッシング モードによって、データメモリの全空間にアクセスできます。アドレッシング モードについては、このセクションの後半で説明します。
頻繁に使われるレジスタ (SFR や一部の GPR) にシングルサイクルでアクセスできるように、PIC18 はアクセスバンクを実装しています。これは、SFR およびGPR バンク 0 の下位部分に、バンク セレクト レジスタ (BSR) を使用しないで高速にアクセスできるようにする 256 バイトのメモリ空間です。アクセス RAM については、3.3.3「アクセスバンク」で詳細に説明します。
3.3.1 USB RAM
データメモリの一部は、特殊なデュアルアクセス RAMにマッピングされています。USB モジュールが無効な場合、これらのバンクの GPR もデータメモリ空間内の他の GPR と同じように使用できます。
USB モジュールが有効な場合、これらのバンクのメモリは USB 動作のバッファ RAM に割り当てられます。この領域はマイクロコントローラ コアと USB シリアル インターフェイス エンジン(SIE)との間で共有され、両者の間でデータを直接転送するために使われます。
原理的には、USB バッファに割り当てられていないUSB RAM の領域を、スクラッチパッド メモリやその他の可変ストレージとして使用する事は可能です。しかし、実際にはバッファ割り当ての動的な性質を考えると、このような使用方法はリスクを伴います。USBRAM とバッファ動作の詳細は、22.0「USB (UniversalSerial Bus)」で説明します。
3.3.2 バンク セレクト レジスタ (BSR)
大きなデータメモリの空間に対しては、全てのアドレスに高速にアクセスできるように、効率的なアドレッシング方式が必要です。このため、読み書き動作ごとにアドレス全体を指定する必要がない事が理想です。PIC18 では、RAM のバンク方式によってこれを実現しています。この方式は、メモリ空間をそれぞれ 256 バイトの連続する 16 個のバンクに分割します。メモリ位置は、命令に応じて 12 ビットのアドレス全体で指定するか、8 ビットの下位アドレスと 4 ビットのバンクポインタに分けて指定します。
PIC18 命令セットのほとんどの命令は、バンク セレクト レジスタ(BSR)と呼ばれるバンクポインタを使用します。この SFR にメモリ位置アドレスの 上位 4 ビットが格納され、下位 8 ビットは命令自体に埋め込まれます。BSR は下位 4 ビット (BSR<3:0>) のみが実装されています。上位 4 ビットは未使用です。常に「0」が読み出され、書き込む事はできません。BSR には、MOVLB命令によって値を直接格納できます。
BSR の値はデータメモリ内のバンクを表し、命令に含まれる 8 ビットはバンク内の位置を示します。この値は、バンクの下限からのオフセットと考える事もできます。図 3-5 と図 3-6 に、BSR の値とデータメモリのバンク分割の関係を示します。
大 16 個のレジスタに同一の下位アドレスが存在するため、ユーザはデータの読み書きを実行する前に適切なバンクが選択されている事を確認する必要があります。例えば、プログラムデータを書き込むつもりで8 ビットアドレスに F9h を指定した場合、BSR の値に0Fhが指定されているとプログラム カウンタがリセットされてしまいます。
バンクは任意に指定できますが、読み書きを実行できるのは、実際に実装されているバンクに対してのみです。実装されていないバンクに対する書き込みは無視され、読み出しでは「0」が返されます。そのような場合でも、ステータス レジスタには動作が正常に実行されたかのような値が設定されます。図 3-5 と図 3-6のデータ メモリ マップに、どのバンクが実装されているかを示します。
PIC18 のコア命令セットの中では、MOVFF 命令のみが、移動元および移動先レジスタのアドレス全 12ビットを指定します。この命令は BSR を無視します。その他の命令は、いずれもオペランドとして下位アドレスのみを指定するため、対象のレジスタ位置を指定するには、BSR またはアクセスバンクを使用する必要があります。
Note: PIC18 の拡張命令セットを有効にした場合、データメモリの動作の一部が変更されます。詳細は、3.5「データメモリと拡張命令セット」を参照してください。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 35
PIC18F/LF1XK50
図 3-5: PIC18F13K50/PIC18LF13K50 のデータ メモリ マップ
Bank 0
Bank 1
Bank 14
Bank 15
Data Memory MapBSR<3:0>
= 0000
= 0001
= 1111
060h05Fh
F60hFFFh
00h
5Fh60h
FFh
Access Bank
When ‘a’ = 0:
The BSR is ignored and theAccess Bank is used.
The first 96 bytes are general purpose RAM (from Bank 0).
The second 160 bytes areSpecial Function Registers(from Bank 15).
When ‘a’ = 1:
The BSR specifies the Bankused by the instruction.
F5Fh
F00hEFFh
1FFh
100h0FFh
000hAccess RAM
FFh
00h
FFh
00h
FFh
00h
GPR
GPR
SFR
Access RAM High
Access RAM Low
Bank 2
= 0110
= 0010
(SFRs)
2FFh
200h
3FFh
300h
4FFh
400h
5FFh
500h
6FFh
600h
7FFh
700h
8FFh
800h
9FFh
900h
AFFh
A00h
BFFh
B00h
CFFh
C00h
DFFh
D00h
E00h
Bank 3
Bank 4
Bank 5
Bank 6
Bank 7
Bank 8
Bank 9
Bank 10
Bank 11
Bank 12
Bank 13
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
= 0011
= 0100
= 0101
= 0111
= 1000
= 1001
= 1010
= 1011
= 1100
= 1101
= 1110
UnusedRead 00h
Unused
UnusedRead 00h
F53hSFR(1)
Note 1: F53h ~ F5Fh のアドレス空間を占める SFR は仮想バンクに含まれません。
(DPRAM)
DS41350D_JP - p. 36 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 3-6: PIC18F14K50/PIC18LF14K50 のデータ メモリ マップ
Bank 0
Bank 1
Bank 14
Bank 15
Data Memory MapBSR<3:0>
= 0000
= 0001
= 1111
060h05Fh
00h
5Fh60h
FFh
Access Bank
When ‘a’ = 0:
The BSR is ignored and theAccess Bank is used.
The first 96 bytes are general purpose RAM (from Bank 0).
The second 160 bytes areSpecial Function Registers(from Bank 15).
When ‘a’ = 1:
The BSR specifies the Bankused by the instruction.
F00hEFFh
1FFh
100h0FFh
000hAccess RAM
FFh
00h
FFh
00h
GPR
GPR
Access RAM High
Access RAM Low
Bank 2
= 0110
= 0010
(SFRs)
2FFh
200h
3FFh
300h
4FFh
400h
5FFh
500h
6FFh
600h
7FFh
700h
8FFh
800h
9FFh
900h
AFFh
A00h
BFFh
B00h
CFFh
C00h
DFFh
D00h
E00h
Bank 3
Bank 4
Bank 5
Bank 6
Bank 7
Bank 8
Bank 9
Bank 10
Bank 11
Bank 12
Bank 13
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
FFh
00h
GPR
FFh
00h
= 0011
= 0100
= 0101
= 0111
= 1000
= 1001
= 1010
= 1011
= 1100
= 1101
= 1110
UnusedRead 00h
Note 1: F53h ~ F5Fh のアドレス空間を占める SFR は仮想バンクに含まれません。
F60hFFFh
F5Fh
FFh
00h
SFR
Unused
F53hSFR(1)
(DPRAM)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 37
PIC18F/LF1XK50
図 3-7: バンク セレクト レジスタの使用方法 ( 直接アドレッシング )
Note 1: 命令のアクセス RAM ビットを設定すると、選択されたバンク (BSR<3:0>) ではなく、アクセス バンク レジスタが優先してアクセスされます。
2: MOVFF 命令には、アドレスの全 12 ビットが埋め込まれています。
Data Memory
Bank Select(2)
7 0From Opcode(2)
0 0 0 0
000h
100h
200h
300h
F00h
E00h
FFFh
Bank 0
Bank 1
Bank 2
Bank 14
Bank 15
00h
FFh00h
FFh00h
FFh
00h
FFh00h
FFh
00h
FFh
Bank 3throughBank 13
0 0 1 1 1 1 1 1 1 1 1 1
7 0BSR(1)
DS41350D_JP - p. 38 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
3.3.3 アクセスバンク
ユーザは、BSR および命令に埋め込まれた 8 ビットのアドレスによってデータメモリの全アドレス範囲を指定できますが、これは同時に、正しいバンクが選択されているかどうかユーザが常に確認する必要がある事を意味します。この確認を怠ると、誤ったメモリ位置に対する読み書きが実行されるおそれがあります。例えば、演算結果を GPR ではなく SFR に書き込んでしまった場合の影響は深刻です。しかし、データメモリの読み書きごとに BSR を確認、変更する事は非常に非効率的です。
も頻繁に使用されるデータメモリ位置へのアクセスを効率化するために、データメモリの一部に対してアクセスバンクが設定されています。これにより、BSRを指定せずにアクセスできます。アクセスバンクは、バンク 0 のメモリの先頭 96 バイト (00h-5Fh) とバンク 15 の末尾 160 バイト (60h-FFh) で構成されます。下位の半分は「アクセス RAM」と呼ばれ、GPR で構成されます。上位の半分にはデバイスの SFR もマッピングされます。これら 2 つの領域は、アクセスバンク内では連続してマッピングされており、8 ビットでリニアにアドレスを指定できます ( 図 3-5 および図 3-6)。
アクセスバンクは、PIC18 のコア命令セットのうち、アクセス RAM ビット ( 命令内の「a」パラメータ ) を含むものが使用します。「a」が「1」の場合、命令はデータメモリのアドレスとして、BSR とオペコードに含まれる 8 ビットのアドレスを使用します。一方、「a」が「0」の場合、命令は BSR の現在値を無視し、アクセスバンクのアドレスマップを使用します。
この「強制」アドレッシングを使用する事で、命令は初に BSR を更新する事なく、シングルサイクルで
データアドレスに対する演算を実行できます。これによって、アクセスバンク内の 60h 以上については、8ビットアドレスによってSFRに対する評価や演算をより効率的に実行できる事になります。60h よりも下位のアクセス RAM は、直近の計算結果や頻繁に使用されるプログラム変数等、高速のアクセスが必要なデータ値の格納に適しています。また、アクセス RAMを使用する事で、変数の内容に応じた保存と切り換えを、より高速で効率的なコードによって実装できます。
拡張命令セットが有効な場合 ( コンフィグレーションビット XINST = 1)、アクセスバンクのマッピングは若干異なります。これについては、3.5.3「インデックス付きリテラル オフセット モードにおけるアクセスバンクのマッピング」で詳細に説明します。
3.3.4 汎用レジスタファイル
PIC18 は、GPR 領域内にバンク分けされたメモリを設定できます。これは、全命令で使用できるデータ RAMです。GPR はバンク 0 の下端 ( アドレス 000h) から始まり、上位にある SFR 領域の下端に向けて並びます。GPR はパワーオン リセットによって初期化されず、その他のいずれのリセットが発生しても変化しません。
3.3.5 特殊機能レジスタ
特殊機能レジスタ (SFR) は、CPU と周辺モジュールがデバイスの動作を制御するために使うレジスタです。これらのレジスタは SRAM として実装されています。SFR はデータメモリの上端 (FFFh) から下位に向かって並び、バンク 15 の上部 (F60h ~ FFFh) を占有します。表 3-1 と表 3-2 にこれらのレジスタ一覧を示します。
SFR は、デバイスの「コア」機能 (ALU、リセット、割り込み ) に関連するものと、周辺機能に関連するものの 2 つに分類できます。リセットおよび割り込みのレジスタは、それぞれ独立した章で説明しますが、ALUのステータス レジスタについては、このセクションの後半で説明します。また、周辺機能の動作に関連するレジスタについては、その周辺機能の章の中で説明します。
通常 SFR は、その制御対象となる周辺機能に分散して配置されます。未使用の SFR 位置にはメモリが実装されておらず、「0」が読み出されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 39
PIC18F/LF1XK50
表 3-1: PIC18F/LF1XK50 の特殊機能レジスタマップ
アドレス レジスタ名 アドレス レジスタ名 アドレス レジスタ名 アドレス レジスタ名 アドレス レジスタ名
FFFh TOSU FD7h TMR0H FAFh SPBRG F87h —(2) F5Fh UEIR
FFEh TOSH FD6h TMR0L FAEh RCREG F86h —(2) F5Eh UFRMH
FFDh TOSL FD5h T0CON FADh TXREG F85h —(2) F5Dh UFRML
FFCh STKPTR FD4h —(2) FACh TXSTA F84h —(2) F5Ch UADDR
FFBh PCLATU FD3h OSCCON FABh RCSTA F83h —(2) F5Bh UEIE
FFAh PCLATH FD2h OSCCON2 FAAh — F82h PORTC F5Ah UEP7
FF9h PCL FD1h WDTCON FA9h EEADR F81h PORTB F59h UEP6
FF8h TBLPTRU FD0h RCON FA8h EEDATA F80h PORTA F58h UEP5
FF7h TBLPTRH FCFh TMR1H FA7h EECON2(1) F7Fh ANSELH F57h UEP4
FF6h TBLPTRL FCEh TMR1L FA6h EECON1 F7Eh ANSEL F56h UEP3
FF5h TABLAT FCDh T1CON FA5h —(2) F7Dh —(2) F55h UEP2
FF4h PRODH FCCh TMR2 FA4h —(2) F7Ch —(2) F54h UEP1
FF3h PRODL FCBh PR2 FA3h —(2) F7Bh —(2) F53h UEP0
FF2h INTCON FCAh T2CON FA2h IPR2 F7Ah IOCB
FF1h INTCON2 FC9h SSPBUF FA1h PIR2 F79h IOCA
FF0h INTCON3 FC8h SSPADD FA0h PIE2 F78h WPUB
FEFh INDF0(1) FC7h SSPSTAT F9Fh IPR1 F77h WPUA
FEEh POSTINC0(1) FC6h SSPCON1 F9Eh PIR1 F76h SLRCON
FEDh POSTDEC0(1) FC5h SSPCON2 F9Dh PIE1 F75h —(2)
FECh PREINC0(1) FC4h ADRESH F9Ch —(2) F74h —(2)
FEBh PLUSW0(1) FC3h ADRESL F9Bh OSCTUNE F73h —(2)
FEAh FSR0H FC2h ADCON0 F9Ah —(2) F72h —(2)
FE9h FSR0L FC1h ADCON1 F99h —(2) F71h —(2)
FE8h WREG FC0h ADCON2 F98h —(2) F70h —(2)
FE7h INDF1(1) FBFh CCPR1H F97h —(2) F6Fh SSPMASK
FE6h POSTINC1(1) FBEh CCPR1L F96h —(2) F6Eh —(2)
FE5h POSTDEC1(1) FBDh CCP1CON F95h —(2) F6Dh CM1CON0
FE4h PREINC1(1) FBCh REFCON2 F94h TRISC F6Ch CM2CON1
FE3h PLUSW1(1) FBBh REFCON1 F93h TRISB F6Bh CM2CON0
FE2h FSR1H FBAh REFCON0 F92h TRISA F6Ah —(2)
FE1h FSR1L FB9h PSTRCON F91h —(2) F69h SRCON1
FE0h BSR FB8h BAUDCON F90h —(2) F68h SRCON0
FDFh INDF2(1) FB7h PWM1CON F8Fh —(2) F67h —(2)
FDEh POSTINC2(1) FB6h ECCP1AS F8Eh —(2) F66h —(2)
FDDh POSTDEC2(1) FB5h —(2) F8Dh —(2) F65h —(2)
FDCh PREINC2(1) FB4h —(2) F8Ch —(2) F64h UCON
FDBh PLUSW2(1) FB3h TMR3H F8Bh LATC F63h USTAT
FDAh FSR2H FB2h TMR3L F8Ah LATB F62h UIR
FD9h FSR2L FB1h T3CON F89h LATA F61h UCFG
FD8h STATUS FB0h SPBRGH F88h —(2) F60h UIE
Note 1: これは物理レジスタではありません。
2: 未実装のレジスタからは「0」が読み出されます。
DS41350D_JP - p. 40 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 3-2: レジスタファイルの要約 (PIC18F/LF1XK50)
ファイル名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 POR、BOR時の値
詳細ページ
TOSU — — — Top-of-Stack の 上位バイト (TOS<20:16>) ---0 0000 287, 30
TOSH Top-of-Stack の上位バイト (TOS<15:8>) 0000 0000 287, 30
TOSL Top-of-Stack の下位バイト (TOS<7:0>) 0000 0000 287, 30
STKPTR STKFUL STKUNF — SP4 SP3 SP2 SP1 SP0 00-0 0000 287, 31
PCLATU — — — PC<20:16> の保持レジスタ ---0 0000 287, 30
PCLATH PC<15:8> の保持レジスタ 0000 0000 287, 30
PCL PC の下位バイト (PC<7:0>) 0000 0000 287, 30
TBLPTRU — — — プログラムメモリ テーブル ポインタの 上位バイト (TBLPTR<20:16>) ---0 0000 287, 54
TBLPTRH プログラムメモリ テーブル ポインタの上位バイト (TBLPTR<15:8>) 0000 0000 287, 54
TBLPTRL プログラムメモリ テーブル ポインタの下位バイト (TBLPTR<7:0>) 0000 0000 287, 54
TABLAT プログラムメモリ テーブル ラッチ 0000 0000 287, 54
PRODH 積レジスタ、上位バイト xxxx xxxx 287, 65
PRODL 積レジスタ、下位バイト xxxx xxxx 287, 65
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 0000 000x 287, 69
INTCON2 RABPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RABIP 1111 -1-1 287, 70
INTCON3 INT2IP INT1IP — INT2IE INT1IE — INT2IF INT1IF 11-0 0-00 287, 71
INDF0 FSR0 の内容が指すデータメモリのアドレスにアクセスします。FSR0 の値は変化しません( 物理レジスタではありません )
N/A 287, 47
POSTINC0 FSR0 の内容が指すデータメモリのアドレスにアクセスします。アクセス後、FSR0 の値がインクリメントされます ( 物理レジスタではありません )
N/A 287, 47
POSTDEC0 FSR0 の内容が指すデータメモリのアドレスにアクセスします。アクセス後、FSR0 の値がデクリメントされます ( 物理レジスタではありません )
N/A 287, 47
PREINC0 FSR0 の内容が指すデータメモリのアドレスにアクセスします。アクセス前に FSR0 の値がインクリメントされます ( 物理レジスタではありません )
N/A 287, 47
PLUSW0 FSR0 の内容が指すデータメモリのアドレスにアクセスします。アクセス前に FSR0 の値が W レジスタの値だけオフセットされます ( 物理レジスタではありません )
N/A 287, 47
FSR0H — — — — 間接データ メモリ アドレス ポインタ 0、上位バイト ---- 0000 287, 47
FSR0L 間接データ メモリ アドレス ポインタ 0、下位バイト xxxx xxxx 287, 47
WREG ワーキング レジスタ xxxx xxxx 287
INDF1 FSR1 の内容が指すデータメモリのアドレスにアクセスします。FSR1 の値は変化しません( 物理レジスタではありません )
N/A 287, 47
POSTINC1 FSR1 の内容が指すデータメモリのアドレスにアクセスします。アクセス後、FSR1 の値がインクリメントされます ( 物理レジスタではありません )
N/A 287, 47
POSTDEC1 FSR1 の内容が指すデータメモリのアドレスにアクセスします。アクセス後、FSR1 の値がデクリメントされます ( 物理レジスタではありません )
N/A 287, 47
PREINC1 FSR1 の内容が指すデータメモリのアドレスにアクセスします。アクセス前に FSR1 の値がインクリメントされます ( 物理レジスタではありません )
N/A 287, 47
PLUSW1 FSR1 の内容が指すデータメモリのアドレスにアクセスします。アクセス前に FSR1 の値が W レジスタの値だけオフセットされます ( 物理レジスタではありません )
N/A 287, 47
FSR1H — — — — 間接データ メモリ アドレス ポインタ 1、上位バイト ---- 0000 288, 47
FSR1L 間接データ メモリ アドレス ポインタ 1、下位バイト xxxx xxxx 288, 47
BSR — — — — バンク セレクト レジスタ ---- 0000 288, 35
INDF2 FSR2 の内容が指すデータメモリのアドレスにアクセスします。FSR2 の値は変化しません( 物理レジスタではありません )
N/A 288, 47
POSTINC2 FSR2 の内容が指すデータメモリのアドレスにアクセスします。アクセス後、FSR2 の値がインクリメントされます ( 物理レジスタではありません )
N/A 288, 47
POSTDEC2 FSR2 の内容が指すデータメモリのアドレスにアクセスします。アクセス後、FSR2 の値がデクリメントされます ( 物理レジスタではありません )
N/A 288, 47
PREINC2 FSR2 の内容が指すデータメモリのアドレスにアクセスします。アクセス前に FSR2 の値がインクリメントされます ( 物理レジスタではありません )
N/A 288, 47
PLUSW2 FSR2 の内容が指すデータメモリのアドレスにアクセスします。アクセス前に FSR2 の値が W レジスタの値だけオフセットされます ( 物理レジスタではありません )
N/A 288, 47
凡例 : x = 未知、u = 変化なし、— = 未実装、q = 条件による
Note 1: SBOREN ビットを使用できるのはコンフィグレーション ビット BOREN<1:0> = 01の場合のみです。それ以外の場合は無効となり、「0」が読み出されます (23.4「ブラウンアウト リセット (BOR)」参照 )。
2: RA3 ビットを使用できるのはマスタ クリア リセットが無効に設定されている場合 ( コンフィグレーション ビット MCLRE = 0) のみです。それ以外の場合、RA3 からは「0」が読み出されます。このビットは読み出し専用です。
3: RA0 および RA1 ビットは、USB が無効な場合のみ使用できます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 41
PIC18F/LF1XK50
FSR2H — — — — 間接データ メモリ アドレス ポインタ 2、上位バイト ---- 0000 288, 47
FSR2L 間接データ メモリ アドレス ポインタ 2、下位バイト xxxx xxxx 288, 47
STATUS — — — N OV Z DC C ---x xxxx 288, 45
TMR0H Timer0 レジスタ、上位バイト 0000 0000 288, 103
TMR0L Timer0 レジスタ、下位バイト xxxx xxxx 288, 103
T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 1111 1111 288, 101
OSCCON IDLEN IRCF2 IRCF1 IRCF0 OSTS HFIOFS SCS1 SCS0 0011 qq00 288, 20
OSCCON2 — — — — — PRI_SD HFIOFL LFIOFS ---- -10x 288, 21
WDTCON — — — — — — — SWDTEN --- ---0 288, 305
RCON IPEN SBOREN(1) — RI TO PD POR BOR 0q-1 11q0 279, 286, 78
TMR1H Timer1 レジスタ、上位バイト xxxx xxxx 288, 110
TMR1L Timer1 レジスタ、下位バイト xxxx xxxx 288, 110
T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 0000 0000 288, 105
TMR2 Timer2 レジスタ 0000 0000 288, 112
PR2 Timer2 周期レジスタ 1111 1111 288, 112
T2CON — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 -000 0000 288, 111
SSPBUF SSP 受信バッファ / 送信レジスタ xxxx xxxx 288, 147, 148
SSPADD I2C™ スレーブモードの SSP アドレスレジスタ。 I2C マスタモードの SSP ボーレート再読み込みレジスタ 0000 0000 288, 148
SSPSTAT SMP CKE D/A P S R/W UA BF 0000 0000 288, 141, 150
SSPCON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 0000 0000 288, 141, 150
SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 0000 0000 288, 151
ADRESH A/D 変換結果レジスタ、上位バイト xxxx xxxx 289, 223
ADRESL A/D 変換結果レジスタ、下位バイト xxxx xxxx 289, 223
ADCON0 — — CHS3 CHS2 CHS1 CHS0 GO/DONE ADON --00 0000 289, 217
ADCON1 — — — — PVCFG1 PVCFG0 NVCFG1 NVCFG0 ---- 0000 289, 218
ADCON2 ADFM — ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0 0-00 0000 289, 219
CCPR1H キャプチャ / コンペア /PWM レジスタ 1、上位バイト xxxx xxxx 289, 138
CCPR1L キャプチャ / コンペア /PWM レジスタ 1、下位バイト xxxx xxxx 289, 138
CCP1CON P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 0000 0000 289, 117
REFCON2 — — — DAC1R4 DAC1R3 DAC1R2 DAC1R1 DAC1R0 ---0 0000 289, 250
REFCON1 D1EN D1LPS DAC1OE --- D1PSS1 D1PSS0 — D1NSS 000- 00-0 289, 250
REFCON0 FVR1EN FVR1ST FVR1S1 FVR1S0 — — — — 0001 00-- 289, 249
PSTRCON — — — STRSYNC STRD STRC STRB STRA ---0 0001 289, 134
BAUDCON ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN 0100 0-00 289, 194
PWM1CON PRSEN PDC6 PDC5 PDC4 PDC3 PDC2 PDC1 PDC0 0000 0000 289, 133
ECCP1AS ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1 PSSBD0 0000 0000 289, 129
TMR3H Timer3 レジスタ、上位バイト xxxx xxxx 289, 115
TMR3L Timer3 レジスタ、下位バイト xxxx xxxx 289, 115
T3CON RD16 — T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON 0-00 0000 289, 113
表 3-2: レジスタファイルの要約 (PIC18F/LF1XK50) ( 続き )
ファイル名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 POR、BOR時の値
詳細ページ
凡例 : x = 未知、u = 変化なし、— = 未実装、q = 条件による
Note 1: SBOREN ビットを使用できるのはコンフィグレーション ビット BOREN<1:0> = 01の場合のみです。それ以外の場合は無効となり、「0」が読み出されます (23.4「ブラウンアウト リセット (BOR)」参照 )。
2: RA3 ビットを使用できるのはマスタ クリア リセットが無効に設定されている場合 ( コンフィグレーション ビット MCLRE = 0) のみです。それ以外の場合、RA3 からは「0」が読み出されます。このビットは読み出し専用です。
3: RA0 および RA1 ビットは、USB が無効な場合のみ使用できます。
DS41350D_JP - p. 42 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
SPBRGH EUSART baud レート ジェネレータ レジスタ、上位バイト 0000 0000 289, 183
SPBRG EUSART baud レート ジェネレータ レジスタ、下位バイト 0000 0000 289, 183
RCREG EUSART 受信レジスタ 0000 0000 289, 184
TXREG EUSART 送信レジスタ 0000 0000 289, 183
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 0000 0010 289, 192
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 0000 000x 289, 193
EEADR EEADR7 EEADR6 EEADR5 EEADR4 EEADR3 EEADR2 EEADR1 EEADR0 0000 0000 289, 52, 61
EEDATA EEPROM データレジスタ 0000 0000 289, 52, 61
EECON2 EEPROM 制御レジスタ 2 ( 物理レジスタではありません ) 0000 0000 289, 52, 61
EECON1 EEPGD CFGS — FREE WRERR WREN WR RD xx-0 x000 289, 53, 61
IPR2 OSCFIP C1IP C2IP EEIP BCLIP USBIP TMR3IP – 1111 111- 290, 77
PIR2 OSCFIF C1IF C2IF EEIF BCLIF USBIF TMR3IF – 0000 000- 290, 73
PIE2 OSCFIE C1IE C2IE EEIE BCLIE USBIE TMR3IE – 0000 000- 290, 75
IPR1 – ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP -111 1111 290, 76
PIR1 – ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF -000 0000 290, 72
PIE1 – ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE -000 0000 290, 74
OSCTUNE INTSRC SPLLEN TUN5 TUN4 TUN3 TUN2 TUN1 TUN0 0000 0000 22, 290
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 1111 1111 290, 94
TRISB TRISB7 TRISB6 TRISB5 TRISB4 – – – – 1111 ---- 290, 89
TRISA – – TRISA5 TRISA4 – – – – --11 ---- 290, 83
LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0 xxxx xxxx 290, 94
LATB LATB7 LATB6 LATB5 LATB4 – – – – xxxx ---- 290, 89
LATA – – LATA5 LATA4 – – – – --xx ---- 290, 83
PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 xxxx xxxx 290, 94
PORTB RB7 RB6 RB5 RB4 – – – – xxxx ---- 290, 89
PORTA – – RA5 RA4 RA3(2) – RA1(3) RA0(3) --xx x-xx 290, 83
ANSELH — — — — ANS11 ANS10 ANS9 ANS8 ---- 1111 290, 99
ANSEL ANS7 ANS6 ANS5 ANS4 ANS3 — — — 1111 1--- 290, 98
IOCB IOCB7 IOCB6 IOCB5 IOCB4 — — — — 0000 ---- 290, 89
IOCA — — IOCA5 IOCA4 IOCA3 — IOCA1 IOCA0 --00 0-00 290, 83
WPUB WPUB7 WPUB6 WPUB5 WPUB4 — — — — 1111 ---- 290, 89
WPUA — — WPUA5 WPUA4 WPUA3 — — — --11 1--- 290, 89
SLRCON — — — — — SLRC SLRB SLRA ---- -111 290, 100
SSPMSK MSK7 MSK6 MSK5 MSK4 MSK3 MSK2 MSK1 MSK0 1111 1111 290, 158
CM1CON0 C1ON C1OUT C1OE C1POL C1SP C1R C1CH1 C1CH0 0000 1000 290, 231
CM2CON1 MC1OUT MC2OUT C1RSEL C2RSEL C1HYS C2HYS C1SYNC C2SYNC 0000 0000 290, 232
CM2CON0 C2ON C2OUT C2OE C2POL C2SP C2R C2CH1 C2CH0 0000 1000 290, 232
SRCON1 SRSPE SRSCKE SRSC2E SRSC1E SRRPE SRRCKE SRRC2E SRRC1E 0000 0000 290, 245
SRCON0 SRLEN SRCLK2 SRCLK1 SRCLK0 SRQEN SRNQEN SRPS SRPR 0000 0000 290, 244
UCON — PPBRST SE0 PKTDIS USBEN RESUME SUSPND — -0x0 000- 291, 254
USTAT — ENDP3 ENDP2 ENDP1 ENDP0 DIR PPBI — -xxx xxx- 291, 258
表 3-2: レジスタファイルの要約 (PIC18F/LF1XK50) ( 続き )
ファイル名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 POR、BOR時の値
詳細ページ
凡例 : x = 未知、u = 変化なし、— = 未実装、q = 条件による
Note 1: SBOREN ビットを使用できるのはコンフィグレーション ビット BOREN<1:0> = 01の場合のみです。それ以外の場合は無効となり、「0」が読み出されます (23.4「ブラウンアウト リセット (BOR)」参照 )。
2: RA3 ビットを使用できるのはマスタ クリア リセットが無効に設定されている場合 ( コンフィグレーション ビット MCLRE = 0) のみです。それ以外の場合、RA3 からは「0」が読み出されます。このビットは読み出し専用です。
3: RA0 および RA1 ビットは、USB が無効な場合のみ使用できます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 43
PIC18F/LF1XK50
UIR — SOFIF STALLIF IDLEIF TRNIF ACTVIF UERRIF URSTIF -000 0000 291, 268
UCFG UTEYE — — UPUEN — FSEN PPB1 PPB0 0--0 -000 291, 256
UIE — SOFIE STALLIE IDLEIE TRNIE ACTVIE UERRIE URSTIE -000 0000 291, 270
UEIR BTSEF — — BTOEF DFN8EF CRC16EF CRC5EF PIDEF 0--0 0000 291, 271
UFRMH — — — — — FRM10 FRM9 FRM8 ---- -xxx 291, 254
UFRML FRM7 FRM6 FRM5 FRM4 FRM3 FRM2 FRM1 FRM0 xxxx xxxx 291, 254
UADDR — ADDR6 ADDR5 ADDR4 ADDR3 ADDR2 ADDR1 ADDR0 -000 0000 291, 260
UEIE BTSEE — — BTOEE DFN8EE CRC16EE CRC5EE PIDEE 0--0 0000 291, 272
UEP7 – – – EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0 0000 291, 259
UEP6 – – – EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0 0000 291, 259
UEP5 – – – EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0 0000 291, 259
UEP4 – – – EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0 0000 291, 259
UEP3 – – – EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0 0000 291, 259
UEP2 – – – EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0 0000 291, 259
UEP1 – – – EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0 0000 291, 259
UEP0 – – – EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL ---0 0000 291, 259
表 3-2: レジスタファイルの要約 (PIC18F/LF1XK50) ( 続き )
ファイル名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 POR、BOR時の値
詳細ページ
凡例 : x = 未知、u = 変化なし、— = 未実装、q = 条件による
Note 1: SBOREN ビットを使用できるのはコンフィグレーション ビット BOREN<1:0> = 01の場合のみです。それ以外の場合は無効となり、「0」が読み出されます (23.4「ブラウンアウト リセット (BOR)」参照 )。
2: RA3 ビットを使用できるのはマスタ クリア リセットが無効に設定されている場合 ( コンフィグレーション ビット MCLRE = 0) のみです。それ以外の場合、RA3 からは「0」が読み出されます。このビットは読み出し専用です。
3: RA0 および RA1 ビットは、USB が無効な場合のみ使用できます。
DS41350D_JP - p. 44 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
3.3.6 ステータス レジスタ
レジスタ 3-2 に示すステータス レジスタには、ALU による算術演算の状況が格納されます。他の SFR と同様、このレジスタも全命令のオペランドとして指定できます。
Z、DC、C、OV、N ビットに影響を与える命令の結果格納先にステータス レジスタを指定した場合、命令の結果は書き込まれず、実行した命令に応じてステータス レジスタが更新されます。従って、ステータス レジスタを格納先とした命令の実行結果は、意図したものと異なる場合があります。例えば、CLRF STATUSでは Z ビットがセットされますが、他のステータスビットは変化しません (「000u u1uu」)。
ステータス レジスタの値を変更する時は、BCF、BSF、SWAPF、MOVFF、MOVWF命令のみを使用する事を推奨します。これらの命令はステータス レジスタの Z、C、DC、OV、N ビットに影響を与えないからです。
ステータスビットに影響を与えないその他の命令については、表 25-2 と表 25-3 の命令セットの要約を参照してください。
Note: C および DC ビットは、それぞれ減算におけるボローおよびデジットボロー ビットとして機能します。
レジスタ 3-2: STATUS: ステータス レジスタ
U-0 U-0 U-0 R/W-x R/W-x R/W-x R/W-x R/W-x
— — — N OV Z DC(1) C(1)
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-5 未実装ビット : 「0」として読み出し
bit 4 N: 負号ビット このビットは符号付き算術演算に使用されます (2 の補数 )。結果が負 (ALU MSB = 1) であるかどうかを示します。
1 = 結果が負 0 = 結果が正
bit 3 OV: オーバーフロー ビット このビットは符号付き算術演算に使用されます (2 の補数 )。結果が 7 ビットで表せる値を超え、オーバーフローによって符号ビット ( 結果の bit 7) の状態が変化した事を示します。
1 = 符号付き算術演算においてオーバーフローが発生した ( 今回実行した算術演算 ) 0 = オーバーフローは発生していない
bit 2 Z: ゼロビット
1 = 算術演算または論理演算の結果がゼロである0 = 算術演算または論理演算の結果がゼロではない
bit 1 DC: デジットキャリー / ボロービット (ADDWF、ADDLW、SUBLW、SUBWF命令 )(1)
1 = 結果の 下位から 4 ビット目でキャリーアウトが発生した0 = 結果の 下位から 4 ビット目でキャリーアウトが発生していない
bit 0 C: キャリー / ボロービット (ADDWF、ADDLW、SUBLW、SUBWF命令 )(1)
1 = 結果の 上位ビットでキャリーアウトが発生した0 = 結果の 上位ビットでキャリーアウトが発生していない
Note 1: ボローの場合、極性が反転します。減算では、第 2 オペランドの 2 の補数を加算します。ローテート命令 (RRF、RLF) の場合、このビットにはソースレジスタの上位または下位ビットが格納されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 45
PIC18F/LF1XK50
3.4 データ アドレッシング モード
プログラムメモリのアドレス指定には唯一の方法、すなわちプログラム カウンタを用いる方法しかありませんが、データメモリ空間のアドレス指定にはいくつかの方法があります。ほとんどの命令では、アドレッシング モードが固定されています。しかし一部の命令では、どのオペランドを使用するか、拡張命令セットを使用するかどうかに応じて、 大 3 つのモードでアドレスを指定できます。
アドレッシング モードには以下の種類があります。
• 含意
• リテラル
• 直接
• 間接
拡張命令セットを有効にした場合 ( コンフィグレーション ビット XINST = 1)、さらにインデックス付きリテラル オフセット アドレッシング モードも使用できます。その動作については、3.5.1「リテラル オフセットを使うインデックス付きアドレッシング」で詳細に説明します。
3.4.1 含意およびリテラル アドレッシング
PIC18 の制御命令の多くは引数を必要としません。これらの命令はデバイス全体に作用するものか、命令に暗黙的に指定された 1 つのレジスタに対して作用するもののいずれかです。このようなアドレッシング モードは含意アドレッシングと呼ばれます。例えば、SLEEP、RESET、DAW等の命令です。
これ以外に、同様に動作しますが、オペコード内で明示的に引数を指定する必要のある命令があります。これはリテラル アドレッシング モードと呼ばれます。引数として何らかのリテラル値を必要とするためです。例えば、ADDLW、MOVLW 等の命令で、それぞれ W レジスタ (WREG)に対してリテラル値を加算または移動します。また、20 ビットのプログラムメモリ アドレスを指定する CALLや GOTO命令があります。
3.4.2 直接アドレッシング
直接アドレッシングでは、演算のソースアドレスおよび結果の格納先アドレス ( またはそのいずれか一方 )の、アドレス全体またはその一部をオペコード自体の中で指定します。オプションは命令の引数として指定します。
PIC18 コア命令セットでは、ビット / バイト指向命令が既定値で直接アドレッシングを使用します。これらの命令は、いずれも 下位バイトに 8 ビットのリテラルアドレスを含みます。このアドレスは、データ RAM(3.3.4「汎用レジスタファイル」) のいずれかのバンクにおけるレジスタアドレスか、アクセスバンク (3.3.3
「アクセスバンク」) 内の位置を表し、命令のデータソースとして参照されます。
アクセス RAM ビット「a」の値に応じて、アドレスの解釈方法が異なります。「a」が「1」の場合、BSR (3.3.2
「バンク セレクト レジスタ (BSR)」) の内容とオペコード内のアドレスによって全 12 ビットのレジスタアドレスが決まります。「a」が「0」の場合、アクセス バンク レジスタを指定したものと見なされます。アクセス RAM を使用するアドレッシングは、直接強制アドレッシング モードと呼ばれる事もあります。
MOVFF 等少数の命令は、オペコードに全 12 ビットのアドレス ( ソースまたは結果格納先 ) を含みます。この場合、BSR は無視されます。
演算結果の格納先は、格納先ビット「d」によって決まります。「d」が「1」の場合、結果はソースレジスタに上書きの形で書き戻されます。「d」が「0」の場合、結果は W レジスタに格納されます。引数「d」のない命令の結果格納先は、命令自体によって暗黙的に指定されており、演算の対象レジスタまたは W レジスタのいずれかです。
3.4.3 間接アドレッシング
間接アドレッシングでは、命令内で固定アドレスを指定する事なく、データメモリ内の指定した位置にアクセスできます。このアクセスは、ファイル セレクト レジスタ (FSR) を、読み書き対象のメモリ位置に対するポインタとして使用する事で実現します。FSR 自体も特殊ファイルレジスタとしてRAM内に存在するため、プログラム制御のもと直接操作できます。このような特徴からFSRはデータメモリ内にテーブルや配列等のデータ構造を実装する時に非常に便利です。
間接アドレッシング用のレジスタには間接ファイルオペランド (INDF) も実装されています。このオペランドはポインタ値を自動インクリメント、自動デクリメント、オフセットさせる等の自動操作を可能とします。この機能により、ループを使った効率の良いコードを作成できます。例 3-5 に RAM バンク全体をクリアするサンプルコードを示します。
例 3-5: 間接アドレッシングによるRAM ( バンク 1) のクリア
Note: PIC18 拡張命令セットを有効にした場合、一部の PIC18 コア命令セットの動作が変化します。詳細は、3.5「データメモリと拡張命令セット」を参照してください。
LFSR FSR0, 100h ; NEXT CLRF POSTINC0 ; Clear INDF
; register then ; inc pointer
BTFSS FSR0H, 1 ; All done with; Bank1?
BRA NEXT ; NO, clear next CONTINUE ; YES, continue
DS41350D_JP - p. 46 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
3.4.3.1 FSR レジスタと INDF オペランド
間接アドレッシングの中心となるのが、3 つのレジスタセット、FSR0、FSR1、FSR2 です。各セットは、1 対の 8 ビットレジスタ FSRnH と FSRnL からなります。FSR の各ペアには 12 ビットの値が格納されます。従って、FSRnH レジスタの上位 4 ビットは使われません。12 ビットの FSR 値は、データメモリのアドレス全範囲をリニアに指定します。これらの FSR レジスタペアは、データメモリ位置を示すポインタとして機能します。
間接アドレッシングには、間接ファイル オペランドINDF0 ~ INDF2 を使用します。これらは「仮想」レジスタと考える事ができます。SFR 空間にマッピングされているものの、物理的には実装されていないためです。特定の INDF レジスタに対する読み書きは、実際には対応する FSR レジスタペアへのアクセスです。例えば、INDF1 からの読み出しの場合、データはFSR1H:FSR1L が示すアドレスから読み出されます。オペランドとして INDF レジスタを指定した命令は、実際には対応するFSRの内容を命令対象へのポインタとして使用します。INDF オペランドは、ポインタを使いやすくする機能です。
間接アドレッシングでは、アドレスの全 12 ビットを使用するため、データ RAM のバンク指定は不要です。従って、BSR の内容やアクセス RAM ビットはアドレスの決定に一切影響しません。
3.4.3.2 FSR レジスタと POSTINC、POSTDEC、PREINC、PLUSW
INDF オペランドの他に、各 FSR レジスタペアには4 つの間接オペランドがあります。これらは INDF と同じ「仮想」レジスタであるため、直接の読み書きは不可能です。これらのレジスタにアクセスすると、対応するFSRレジスタペアが指す位置を参照すると同時に、FSR の値に対して下記の操作を実行します。
• POSTDEC: FSR が指す位置にアクセスした後、FSR を 1 デクリメントします。
• POSTINC: FSR が指す位置にアクセスした後、FSR を 1 インクリメントします。
• PREINC: FSR を 1 インクリメントした後、FSRが指す位置の内容を演算に使用します。
• PLUSW: W レジスタ内の符号付きの値 (-127 ~128) を FSR に加算した後、その結果が指す位置の内容を演算に使用します。
INDF レジスタへのアクセスでは、対応する FSR レジスタの値を使用しますが、FSR レジスタ内の値自体は変更しません。同様に、PLUSW レジスタへのアクセスの場合も、FSR の値を W レジスタの値だけオフセットして使用しますが、W レジスタと FSR の値はいずれも変更しません。しかし、これら以外の仮想レジスタへのアクセスは、FSR レジスタの値を変更します。
図 3-8: 間接アドレッシング
FSR1H:FSR1L
07
Data Memory
000h
100h
200h
300h
F00h
E00h
FFFh
Bank 0
Bank 1
Bank 2
Bank 14
Bank 15
Bank 3throughBank 13
ADDWF, INDF1, 1
07
間接アドレッシング レジスタのい
ずれかをオペランドとして指定し
た命令では…
そのレジスタに対応する FSR ペア
内の 12 ビットのアドレスを使用し
て…
演算に使用するデータメモリ内の
位置を決定します。
この例ではFSR1ペアにECChが格
納されています。これは、メモリ位
置 ECCh の内容が、W レジスタの
値に加算され、結果が ECCh に書き
戻される事を意味します。
x x x x 1 1 1 0 1 1 0 0 1 1 0 0
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 47
PIC18F/LF1XK50
POSTDEC、POSTINC、PREINC による FSR に対する操作は、レジスタペア全体に作用します。つまり、FSRnL レジスタの FFh から 00h へのロールオーバーによって、FSRnH レジスタへのキャリーオーバーが発生するという事です。一方これらの操作の結果は、ステータス レジスタのいずれのフラグ (Z、N、OV 等 ) の値にも影響を与えません。
PLUSW レジスタは、データメモリ空間内にインデックス付きアドレッシングのデータ構造を実装する時に使用できます。W レジスタの値を操作する事で、ポインタアドレスから一定の値だけオフセットしたアドレスにアクセスできます。アプリケーションによっては、この機能でデータメモリ内にソフトウェア スタック等の強力なプログラム制御構造を実装できます。
3.4.3.3 FSR による FSR に対する操作
他の FSR または仮想レジスタを対象として間接アドレッシングの動作を実行すると特殊な挙動を示します。例えば、FSR を使って仮想レジスタのアドレスを指定すると失敗します。例えば、INDF1 のアドレスFE7h が FSR0H:FSR0L に格納されている場合を考えます。この場合、INDF0 をオペランドとして INDF1 の値を読み出そうとすると、00h が返されます。INDF0をオペランドとして INDF1 に書き込もうとすると、NOPとなります。
一方、仮想レジスタによって FSR ペアに書き込むと、意図した結果が得られない場合があります。このような場合、値は FSR ペアに書き込まれますが、インクリメント/デクリメントは実行されません。従って、INDF2レジスタと POSTDEC2 レジスタのいずれかに書き込むと、同じ値が FSR2H:FSR2L に書き込まれます。
FSR は SFR 空間にマッピングされた物理レジスタであるため、全ての直接演算で操作できます。従って、ユーザはこれらのレジスタを使用するにあたって、特にコードに間接アドレッシングを採用する場合、十分な注意を払う必要があります。
同様に、通常は全ての SFR を間接アドレッシングによって操作できます。このため、SFR による設定を誤って変更してデバイス動作に影響を与えないように注意する必要があります。
3.5 データメモリと拡張命令セット
PIC18 拡張命令セットを有効にすると ( コンフィグレーション ビット XINST = 1)、データメモリとそのアドレス方法の一部が大きく変わります。具体的には、PIC18 コア命令セットの多くについてアクセスバンクの使用方法が変わります。これは、データメモリ空間に対する新しいアドレッシング モードの導入に伴うものです。
変更のない点を把握しておく事も同様に重要です。まず、データメモリ空間のサイズと、リニア アドレッシングである事は変わりません。SFR のマップも変わりません。PIC18 コア命令セットは、引き続き直接および間接アドレッシング モードの両方で動作します。含意およびリテラル命令には一切変更はありません。FSR0 および FSR1 による間接アドレッシングも以前のままです。
3.5.1 リテラル オフセットを使うインデックス付きアドレッシング
PIC18 拡張命令セットを有効にする事で変化するのは、FSR2 レジスタペアをアクセス RAM 内で使用する場合の間接アドレッシング動作です。適切な条件のもとでは、アクセスバンクを使用する命令、つまりほとんどのビット / バイト指向命令において、オフセット値を命令に含めるインデックス付きアドレッシング方式を使用できます。この特殊なアドレッシング モードは、リテラル オフセットを使うインデックス付きアドレッシング、またはインデックス付きリテラル オフセット モードと呼ばれます。
拡張命令セットを使用する場合、このアドレッシングモードでは以下の2つの条件を満たす必要があります。
• 必ずアクセスバンクを使用する事 (「a」 = 0)
• ファイルアドレス引数が 5Fh 以下である事
これらの条件のもとでは、命令のファイルアドレス引数の解釈は、アドレスの下位バイト ( 直接アドレッシングにおいて BSR と共に使用する値 ) でも、アクセスバンク内の 8 ビットアドレスでもありません。ファイルアドレスの値は、FSR2 が指定するアドレスポインタからのオフセット値と見なされます。つまり、このオフセット値と FSR2 の内容を加算したものが、演算の対象アドレスになります。
3.5.2 インデックス付きリテラル オフセットモードの影響を受ける命令
直接アドレッシングを使用可能な PIC18 コア命令は、いずれもインデックス付きリテラル オフセット アドレッシング モードの影響を受ける可能性があります。これには、全てのバイト / ビット指向の命令、つまり PIC18 標準命令セットのほぼ半数が含まれます。含意またはリテラル アドレッシング モードのみ使用する命令は影響を受けません。
また、バイト / ビット指向命令であってもアクセスバンクを使用しない場合 ( アクセス RAM ビットが「1」)、または 60h 以上のファイルアドレスを含む場合、影響を受けません。これらの条件を満たす命令は、以前と同様に実行されます。図 3-9 に、拡張命令セットを有効にした場合に差異を生ずる可能性があるアドレッシング モードの比較を示します。
インデックス付きリテラル オフセット モードでバイト / ビット指向命令を使用する場合、アセンブラ構文の変更に注意してください。これについては、25.2.1「拡張命令の構文」で詳細に説明します。
DS41350D_JP - p. 48 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 3-9: ビット / バイト指向命令に対するアドレッシング オプションの比較 ( 拡張命令セットが有効な場合 )
When ‘a’ = 0 and f 60h:
命令は直接強制モードで実行されます。「f」はアクセス RAM 内の060h~0FFhの間のメモリ位置と見なされます。これは、データメモリ内の F60h ~ FFFh ( バンク 15) の位置を指定した場合と同じです。
60h よりも下位のメモリ位置は、このアドレッシング モードでは使用できません。
When ‘a’ = 0 and f5Fh:
命令はインデックス付きリテラル オフセット モードで実行されます。「f」は FSR2 内のアドレス値に対するオフセットと見なされます。両者を加算する事で命令の対象レジスタのアドレスが得られます。アドレスとしては、データメモリ空間内の任意の位置を指定できます。
このモードにおける正しい構文は、以下のようになる事に注意してください。ADDWF [k], dwhere ‘k’ is the same as ‘f’.
When ‘a’ = 1 (all values of f):
命令は直接モード ( 直接ロングモードとも呼ばれます ) で実行されます。「f」は、データメモリ空間の16バンクのうちの1つにおける位置と見なされます。バンクは、バンク セレクト レジスタ (BSR) によって指定します。データメモリ空間内に実装された全てのバンク内のアドレスを指定できます。
000h
060h
100h
F00h
F60h
FFFh
Valid range
00h
60h
FFh
Data Memory
Access RAM
Bank 0
Bank 1throughBank 14
Bank 15
SFRs
000h
060h
100h
F00h
F60h
FFFhData Memory
Bank 0
Bank 1throughBank 14
Bank 15
SFRs
FSR2H FSR2L
ffffffff001001da
ffffffff001001da
000h
060h
100h
F00h
F60h
FFFhData Memory
Bank 0
Bank 1throughBank 14
Bank 15
SFRs
for ‘f’
BSR00000000
EXAMPLE INSTRUCTION: ADDWF, f, d, a (Opcode: 0010 01da ffff ffff)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 49
PIC18F/LF1XK50
3.5.3 インデックス付きリテラル オフセットモードにおけるアクセスバンクのマッピング
インデックス付きリテラル オフセット アドレッシング モードでは、アクセス RAM (00h ~ 5Fh) の先頭 96アドレスのマッピングが実質的に変更されます。このモードでは、アクセス RAM の先頭の内容が、バンク 0の下位部分に限定されず、データメモリ空間内にユーザが任意に定義した「ウィンドウ」内の内容に対応付けられます。FSR2 の値がこのウィンドウにマッピングされるデータ メモリ アドレスの下限を決め、上限はFSR2 に 95 (5Fh) を加えた値です。アクセス RAM 内の5Fh よりも上位のアドレスは、前述のようにマッピングされます (3.3.3「アクセスバンク」参照 )。図 3-10に、このアドレッシング モードでアクセスバンクのマッピングがどのように変わるかの例を示します。
アクセスバンクのマッピング変更は、インデックス付きリテラル オフセット モードを使用する演算のみに適用されます。BSR を使用する演算 ( アクセス RAMビットが「1」) には、引き続き通常の直接アドレッシングが適用されます。
3.6 PIC18 命令の実行と拡張命令セット
拡張命令セットを有効にすると、既存の PIC18 命令セットに新たに 8 個のコマンドが追加されます。これらの命令は、25.2「拡張命令セット」で説明する方法によって実行されます。
図 3-10: インデックス付きリテラル オフセット アドレッシングにおけるアクセスバンクのマッピング変更
Data Memory
000h
100h
200h
F60h
F00h
FFFh
Bank 1
Bank 15
Bank 2throughBank 14
SFRs
ADDWF f, d, a
FSR2H:FSR2L = 120h
FSR2ポインタが指すアド
レス (120h) から、これに
05Fh を足したアドレス
(17Fh) までが、アクセス
RAMの下位(000h~05Fh)に対応付けられます。
特殊ファイルレジスタの
F60h ~ FFFh までは、従
来通り 60h ~ FFh に対応
付けられます。
バンク 0 の 5Fh より下位
のアドレスには、BSR を
使用すれば引き続きアク
セスできます。Access Bank
00h
60h
FFh
SFRs
Bank 1 “Window”
Bank 0
Window
Example Situation:
120h17Fh
5Fh
Bank 1
DS41350D_JP - p. 50 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
4.0 フラッシュ プログラムメモリ
フラッシュ プログラムメモリは、通常動作中 VDD の全レンジで読み出し、書き込み、消去動作が可能です。
プログラムメモリからの読み出しは、一度に 1 バイトずつ実行されます。プログラムメモリへの書き込みは、一度に 16 または 8 バイトのブロックごとに実行されます。ブロックの大きさはデバイスごとに異なります( 表 4-1 参照 )。プログラムメモリの消去は、一度に 64バイトのブロック単位で実行されます。書き込みと消去のブロックサイズが異なる事から、1 回のブロック消去によって消去された内容をリストアするには 1 ~8 回のブロック書き込みが必要です。バルク消去動作はユーザコードからは実行できません。
表 4-1: 書き込み / 消去ブロックサイズ
プログラムメモリに対する書き込みまたは消去動作が完了するまで、命令のフェッチは中止されます。書き込みまたは消去中はプログラムメモリにアクセスできないため、コードを実行できません。プログラムメモリの書き込みおよび消去は、内部のプログラミング タイマによって終了します。
プログラムメモリに書き込む値は、有効な命令である必要はありません。無効な命令を含むプログラムメモリ位置の実行は、NOPになります。
4.1 テーブル読み出し / 書き込み
プログラムメモリの読み書き時に、プロセッサがプログラムメモリ空間とデータRAM間でデータバイトを移動する方法には、以下の 2 つの動作があります。
• テーブル読み出し (TBLRD)
• テーブル書き込み (TBLWT)
プログラムメモリ空間は 16 ビット幅であるのに対し、データ RAM 空間は 8 ビット幅です。テーブルに対する読み書きは、8 ビットのレジスタ (TABLAT) を介して、これら 2 つのメモリ空間の間でデータを移動します。
テーブル読み出し動作では、1 バイトのデータをプログラムメモリから直接取得し、TABLAT レジスタに格納します。図 4-1 に、テーブル読み出しの動作を示します。
テーブル書き込み動作では、1 バイトのデータをTABLAT レジスタから書き込みブロック保持レジスタに転送します。保持レジスタの内容をプログラムメモリに書き込む手順の詳細は、4.5「フラッシュ プログラムメモリへの書き込み」で説明します。図 4-2 に、プログラムメモリとデータ RAM 間のテーブル書き込み動作を示します。
テーブル動作はバイト単位で実行されます。プログラム命令ではなくデータを格納するテーブルの場合、ワード境界でアライメントする必要はありません。従って、テーブルは任意のバイトアドレスから開始し、終了する事ができます。テーブル書き込みによって実行可能コードをプログラムメモリに書き込む場合、プログラム命令をワード境界でアライメントする必要があります。
図 4-1: テーブル読み出し動作
デバイス書き込み
ブロックサイズ ( バイト )
消去ブロックサイズ
( バイト )
PIC18F13K50 8 64
PIC18F14K50 16 64
Table Pointer(1)
Table Latch (8-bit)Program Memory
TBLPTRH TBLPTRLTABLAT
TBLPTRU
Instruction: TBLRD*
Note 1: テーブルポインタ レジスタはプログラムメモリ内の 1 バイトを指します。
Program Memory(TBLPTR)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 51
PIC18F/LF1XK50
図 4-2: テーブル書き込み動作
4.2 制御レジスタ
TBLRD および TBLWT 命令では、以下を含む制御レジスタを使用します。
• EECON1 レジスタ
• EECON2 レジスタ
• TABLAT レジスタ
• TBLPTR レジスタ
4.2.1 EECON1 および EECON2 レジスタ
EECON1 レジスタ (レジスタ 4-1)は、メモリアクセスを制御するレジスタです。EECON2 レジスタは物理レジスタではなく、メモリの書き込みおよび消去シーケンス専用です。EECON2 を読み出すと、常に「0」が返されます。
制御ビット EEPGD は、アクセスがプログラムメモリに対するものか、データ EEPROM に対するものかを決定します。EEPGD をクリアすると、後続の動作は全てデータ EEPROM に対して実行されます。EEPGDをセットすると、後続の動作は全てプログラムメモリに対して実行されます。
制御ビット CFGS は、アクセスがコンフィグレーション / 校正レジスタに対するものか、プログラムメモリ/データEEPROMに対するものかを決定します。CFGSをセットすると、後続の動作は EEPGD の状態に関係なく、コンフィグレーション レジスタに対して作用します (24.0「CPU の特殊機能」参照 )。CFGS をクリアすると、アクセスするメモリは EEPGD によって選択されます。
FREE ビットは、プログラムメモリの消去動作を可能にします。FREE をセットすると、次の WR コマンドで消去動作が開始されます。FREE をクリアすると、書き込みだけが有効になります。
WREN ビットをセットすると、書き込み動作が許可されます。WREN ビットはパワーアップ時にクリアされます。
WR ビットをセットし、その後内部プログラミング タイマがタイムアウトして書き込み動作が完了する事でWR ビットがクリアされると、WRERR ビットがハードウェアによってセットされます。
書き込み動作は、制御ビット WR によって開始されます。WR ビットはファームウェアによるセットのみが可能で、クリアはできません。WR ビットは、書き込み動作が終了した時点でハードウェアによってクリアされます。
Table Pointer(1)Table Latch (8-bit)
TBLPTRH TBLPTRL TABLAT
Program Memory(TBLPTR<MSBs>)
TBLPTRU
Instruction: TBLWT*
Note 1: テーブル書き込みを実行する時、テーブルポインタはプログラムメモリのアドレスを直接指している
わけではありません。TBLPRTL の LSb は、実際には書き込みブロック保持レジスタ内のアドレスを
指しています。書き込みブロックが 終的に書き込まれる位置は、テーブルポインタの MSb によって
決まります。保持レジスタの内容をプログラムメモリ アレイに書き込むプロセスについては、4.5「フ
ラッシュ プログラムメモリへの書き込み」で説明します。
Holding Registers Program Memory
Note: 通常動作中、WRERR からは「1」が読み出されます。これは、書き込み動作がリセットによって不完全なまま中止されたか、不適切な方法で実行された事を示している可能性があります。
Note: PIR2 レジスタの割り込みフラグビットEEIF は、書き込みが終了した時点でセットされます。EEIF フラグは、ファームウェアによってクリアされるまで、セットされた状態を維持します。
DS41350D_JP - p. 52 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 4-1: EECON1: データ EEPROM 制御 1 レジスタ
R/W-x R/W-x U-0 R/W-0 R/W-x R/W-0 R/S-0 R/S-0
EEPGD CFGS — FREE WRERR WREN WR RD
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット
S = ソフトウェアによってセットできるがクリアできないビット
U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 EEPGD: フラッシュ プログラムメモリまたはデータ EEPROM 選択ビット
1 = フラッシュ プログラムメモリにアクセス0 = データ EEPROM にアクセス
bit 6 CFGS: フラッシュ プログラムメモリ / データ EEPROM またはコンフィグレーション レジスタ選択ビット
1 = コンフィグレーション レジスタにアクセス0 = フラッシュ プログラムメモリまたはデータ EEPROM にアクセス
bit 5 未実装ビット : 「0」として読み出し
bit 4 FREE: フラッシュ ロウ ( ブロック ) 消去イネーブルビット
1 = TBLPTRによってアドレスを指定されたプログラムメモリ ブロックを次のWRコマンドで消去 ( 消去動作の完了時点でクリアされる )
0 = 書き込み動作のみ実行
bit 3 WRERR: フラッシュ プログラムメモリ / データ EEPROM エラーフラグ ビット (1)
1 = 書き込み動作が不完全なまま中止された ( 通常動作時の内部タイマによるプログラミング中にいずれかのリセット動作が実行されたか、不適切な書き込みを実行しようとした )
0 = 書き込み動作が完了した
bit 2 WREN: フラッシュ プログラムメモリ / データ EEPROM 書き込みイネーブルビット
1 = フラッシュ プログラムメモリ / データ EEPROM への書き込みサイクルを許可0 = フラッシュ プログラムメモリ / データ EEPROM への書き込みサイクルを禁止
bit 1 WR: 書き込み制御ビット
1 = データ EEPROM の消去 / 書き込みサイクル、またはプログラムメモリの消去サイクルまたは書き込みサイクルを開始 ( 動作は内部タイマによって制御され、ビットは書き込みが完了するとハードウェアがクリアする。ソフトウェアでは、WR ビットのセットのみ可能 ( クリアは不可 ))
0 = EEPROM に対する書き込みサイクルが完了
bit 0 RD: 読み出し制御ビット
1 = EEPROM の読み出し動作を開始 ( 読み出しは 1 サイクルで完了する。RD はハードウェアによってクリアされる。ソフトウェアでは、RD ビットのセットのみ可能 ( クリアは不可 ) である。ただし、EEPGD = 1または CFGS = 1の場合、RD ビットはセット不可 )
0 = EEPROM 読み出しを開始しない
Note 1: WRERR が発生した場合、EEPGD および CFGS ビットはクリアされません。このため、エラー状態を追跡できます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 53
PIC18F/LF1XK50
4.2.2 TABLAT – テーブル ラッチ レジスタ
テーブルラッチ (TABLAT) は、SFR 空間にマッピングされた 8 ビットのレジスタです。テーブルラッチ レジスタは、プログラムメモリとデータ RAM 間でデータを転送する時に 8 ビットのデータを保持します。
4.2.3 TBLPTR – テーブルポインタ レジスタ
テーブルポインタ (TBLPTR) レジスタは、プログラムメモリ内の 1 バイトのアドレスを指します。TBLPTRは 3 つの SFR レジスタから構成されます。テーブルポインタ 上位バイト、テーブルポインタ上位バイト、テーブルポインタ下位バイト (TBLPTRU:TBLPTRH:TBLPTRL) の 3 つです。これら 3 つを結合して、22ビット幅のポインタを構成します。下位 21 ビットによって、 大 2 MB のプログラムメモリ空間に対するアドレスを指定できます。22 番目のビットでは、デバイス ID、ユーザ ID、コンフィグレーション ビットにアクセスできます。
テーブルポインタ レジスタ TBLPTR は、TBLRD および TBLWT命令で使用します。これらの命令は、テーブルポインタに対する操作に基づく 4 つの方法のいずれかによって TBLPTR を更新します。表 4-2 にこれらの操作を示します。これらの TBLPTR に対する操作は、下位 21 ビットに対してのみ影響します。
4.2.4 テーブルポインタの境界
TBLPTR はフラッシュ プログラムメモリの読み出し、書き込み、消去に使用します。
TBLRDでは、TBLPTR の全 22 ビットによってプログラムメモリのどのバイトを読み出すかを判断し、読み出したデータを直接 TABLAT レジスタに格納します。
TBLWT を実行すると、TABLAT レジスタ内のバイトデータが、フラッシュメモリではなく保持レジスタに書き込まれます。このデータは、プログラムメモリへの書き込みの準備が整うまで保持されます。保持レジスタは、デバイスの種類ごとにサイズが異なる書き込みブロックを構成します ( 表 4-1 参照 )。TBLPTRL レジスタの下位 3、4、5 ビットによって、保持レジスタブロック内のどのアドレスに書き込むかが決まります。テーブルポインタの上位ビットは、TBLWT動作に対しては何も影響しません。
これらの上位ビットは、フラッシュ プログラムメモリへの書き込みを実行する際のフラッシュメモリ内のアドレスを指定します。この位置に保持レジスタブロック全体が一括して書き込まれます。フラッシュメモリへの書き込みでは、下位 3、4、5 ビットは無視されます。詳細は、4.5「フラッシュ プログラムメモリへの書き込み」を参照してください。
プログラムメモリ消去を実行する場合、消去対象となる 64 バイトのブロックは、テーブルポインタ レジスタの上位 16 ビット (TBLPTR<21:6>) によって指定されます。LSb (TBLPTR<5:0>) は無視されます。
図 4-3 に、フラッシュ プログラムメモリ動作に対応する TBLPTR の境界を示します。
表 4-2: TBLRDおよび TBLWT命令に伴うテーブルポインタに対する操作
例 テーブルポインタに対する操作
TBLRD*TBLWT* TBLPTR は変化しません。
TBLRD*+TBLWT*+ 読み出し / 書き込みの後に TBLPTR がインクリメントされます。
TBLRD*-TBLWT*- 読み出し / 書き込みの後に TBLPTR がデクリメントされます。
TBLRD+*TBLWT+* 読み出し / 書き込みの前に TBLPTR がインクリメントされます。
DS41350D_JP - p. 54 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 4-3: 動作ごとのテーブルポインタの境界
4.3 フラッシュ プログラムメモリの読み出し
TBLRD命令は、プログラムメモリからデータを取得して、データ RAM に格納します。プログラムメモリからのテーブル読み出しは、一度に 1 バイトずつ実行されます。
TBLPTR はプログラム空間内の 1 バイトのアドレスを指します。TBLRDを実行すると、TBLPTR が指すバイトが TABLAT に格納されます。さらに、次のテーブル読み出し動作に備えて、TBLPTR の値を自動的に変更する事ができます。
内部プログラムメモリの内容は通常ワード単位で並んでいます。アドレスの LSb が、ワードの上位バイトと下位バイトを区別します。図 4-4 に、内部プログラムメモリと TABLAT 間のインターフェイスを示します。
図 4-4: フラッシュ プログラムメモリからの読み出し
21 16 15 8 7 0
TABLE ERASE/WRITE TABLE WRITE
TABLE READ – TBLPTR<21:0>
TBLPTRLTBLPTRHTBLPTRU
TBLPTR<n:0>(1)TBLPTR<21:n+1>(1)
Note 1: ブロックサイズが 8、16、32、64 バイトの場合、n の値はそれぞれ 3、4、5、6 になります。
(Even Byte Address)
Program Memory
(Odd Byte Address)
TBLRD TABLAT
TBLPTR = xxxxx1
FETCHInstruction Register
(IR) Read Register
TBLPTR = xxxxx0
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 55
PIC18F/LF1XK50
例 4-1: フラッシュ プログラムメモリ ワードの読み出し MOVLW CODE_ADDR_UPPER ; Load TBLPTR with the baseMOVWF TBLPTRU ; address of the wordMOVLW CODE_ADDR_HIGHMOVWF TBLPTRHMOVLW CODE_ADDR_LOWMOVWF TBLPTRL
READ_WORDTBLRD*+ ; read into TABLAT and incrementMOVF TABLAT, W ; get dataMOVWF WORD_EVENTBLRD*+ ; read into TABLAT and incrementMOVFW TABLAT, W ; get dataMOVF WORD_ODD
DS41350D_JP - p. 56 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
4.4 フラッシュ プログラムメモリの消去
消去ブロックの 小単位は 32 ワードつまり 64 バイトです。より大きなプログラムメモリ ブロックを対象とするバルク消去を使用できるのは、外部プログラマを使用するか、ICSP™ 制御による場合のみです。フラッシュアレイは、ワード単位の消去に対応していません。
マイクロコントローラから消去シーケンスを開始する場合、プログラムメモリは 64 バイトのブロック単位で消去されます。消去するブロックは、TBLPTR<21:6>の 上位16ビットによって指定します。TBLPTR<5:0>ビットは無視されます。
消去動作はEECON1 レジスタによって制御します。フラッシュ プログラムメモリを選択するには EEPGDビットをセットします。書き込み動作を有効にするには、WREN ビットをセットする必要があります。消去動作を選択するには、FREE ビットをセットします。
4.4.1「フラッシュ プログラムメモリの消去シーケンス」のステップ 4 ~ 6 に示した EECON2 による書き込み開始シーケンスが、偶発的な書き込みを防止します。この動作をロングライトと呼ぶことがあります。
内部フラッシュを消去するには、ロングライトが必要です。ロングライト サイクル中は、命令の実行が一時停止されます。ロングライトは、内部のプログラミング タイマによって終了します。
4.4.1 フラッシュ プログラムメモリの消去シーケンス
内部プログラムメモリのブロック消去動作のシーケンスは以下の通りです。
1. 消去するブロックのアドレスをテーブルポインタレジスタに格納します。
2. EECON1レジスタに対して消去動作を設定します。
• EEPGD ビットをセットして、プログラムメモリを選択
• CFGS ビットをクリアして、プログラムメモリへのアクセスを選択
• WREN ビットをセットして、書き込みを有効に設定
• FREE ビットをセットして、消去を有効に設定
3. 割り込みを禁止します。
4. EECON2 に 55h を書き込みます。
5. EECON2 に 0AAh を書き込みます。
6. WR ビットをセットします。これによってブロック消去サイクルが開始されます。
7. 消去中はCPUが一時停止します (内部タイマによる約 2 ms)。
8. 割り込みを再度許可します。
例 4-2: フラッシュ プログラムメモリのブロック消去 MOVLW CODE_ADDR_UPPER ; load TBLPTR with the baseMOVWF TBLPTRU ; address of the memory blockMOVLW CODE_ADDR_HIGHMOVWF TBLPTRH MOVLW CODE_ADDR_LOWMOVWF TBLPTRL
ERASE_BLOCK BSF EECON1, EEPGD ; point to Flash program memoryBCF EECON1, CFGS ; access Flash program memoryBSF EECON1, WREN ; enable write to memoryBSF EECON1, FREE ; enable block Erase operationBCF INTCON, GIE ; disable interrupts
Required MOVLW 55hSequence MOVWF EECON2 ; write 55h
MOVLW 0AAhMOVWF EECON2 ; write 0AAhBSF EECON1, WR ; start erase (CPU stall)BSF INTCON, GIE ; re-enable interrupts
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 57
PIC18F/LF1XK50
4.5 フラッシュ プログラムメモリへの書き込み
フラッシュメモリへの書き込みは、デバイスの種類に応じて 8 バイトまたは 16 バイト単位で実行されます( 表 4-1 参照 )。ワードまたはバイト単位のプログラミングには対応していません。
フラッシュメモリのプログラミング時に必要となる保持レジスタへのデータ読み込みには、デバイス内部でテーブル書き込みを使用します。保持レジスタは、そのデバイスの書き込みブロックのバイト数と同数しか用意されていません ( 表 4-1 参照 )。
テーブルラッチ (TABLAT) には 1 バイトしか格納できないため、プログラミング動作のたびに 8 回または 16回の TBLWT命令 ( 回数はデバイスの種類による ) が必要になる可能性があります。テーブル書き込み動作は保持レジスタに対する書き込みであるため、全てショートライトです。保持レジスタの全てに対する書き込みが完了したら、このメモリブロックに対するプログラミング動作を開始します。それには、EECON1レジスタをプログラムメモリの書き込み用に設定して、ロングライトのシーケンスを実行します。
内部フラッシュのプログラミングには、ロングライトが必要です。ロングライト サイクル中は、命令の実行が一時停止されます。ロングライトは、内部のプログラミング タイマによって終了します。
書き込み時間は EEPROM 内蔵タイマが制御します。書き込み / 消去用の電圧は、デバイスの動作電圧よりも高い値で、内蔵チャージポンプによって生成されます。
図 4-5: フラッシュ プログラムメモリに対するテーブル書き込み
4.5.1 フラッシュ プログラムメモリの書き込みシーケンス
内部プログラムメモリに対するプログラミング動作のシーケンスは以下の通りです。
1. 64 バイトを RAM に読み出します。2. RAM 内のデータ値を必要に応じて更新します。
3. 消去するアドレスをテーブルポインタ レジスタに格納します。
4. ブロック消去手順を実行します。5. 書き込む 初のバイトのアドレスをテーブルポイ
ンタ レジスタに格納します。
6. 自動インクリメントにより、保持レジスタに 8 バイトまたは16バイトのブロックを書き込みます。
7. EECON1 レジスタに対して書き込み動作を設定します。• EEPGD ビットをセットして、プログラムメモリを選択
• CFGS ビットをクリアして、プログラムメモリへのアクセスを選択
• WREN ビットをセットして、バイト書き込みを有効に設定
8. 割り込みを禁止します。
9. EECON2 に 55h を書き込みます。
10. EECON2 に 0AAh を書き込みます。
11. WR ビットをセットします。これによって書き込みサイクルが開始します。
12. 書き込み中はCPUが一時停止します (内部タイマで約 2 ms)。
13. 割り込みを再度許可します。
14. 64 バイトが全て書き込まれるまで、各ブロックに対してステップ 6 ~ 13 を繰り返します。
15. メモリ内容を検証します ( テーブル読み出し )。
以上の手順では、メモリの書き込みブロックあたりの更新に約 6 ms を必要とします。例 4-3 に、必要なコードの例を示します。
Note: デバイスリセット時および書き込み動作後の保持レジスタの既定値は FFh です。保持レジスタ中の FFh を書き込まれたバイトは、プログラミングによって値が変化しません。これは、いずれのビットも「1」から「0」にしか変更しないという前提を守るならば、プログラムメモリをバイト単位で変更できる事を意味します。このように個々のバイトを変更する場合、ロングライトの実行前に保持レジスタ全体にデータを格納する必要はありません。
TABLAT
TBLPTR = xxxxYY(1)TBLPTR = xxxx01TBLPTR = xxxx00
Write Register
TBLPTR = xxxx02
Program Memory
Holding Register Holding Register Holding Register Holding Register
8 8 8 8
Note 1: 8、16、32 バイトの書き込みブロックに対して、YY の値はそれぞれ x7、xF、1F です。
Note: WR ビットをセットする前に、テーブルポインタのアドレスを保持レジスタ内の該当するバイトのアドレスレンジ内に設定しておく必要があります。
DS41350D_JP - p. 58 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
例 4-3: フラッシュ プログラムメモリへの書き込み
MOVLW D'64’ ; number of bytes in erase blockMOVWF COUNTERMOVLW BUFFER_ADDR_HIGH ; point to bufferMOVWF FSR0HMOVLW BUFFER_ADDR_LOWMOVWF FSR0LMOVLW CODE_ADDR_UPPER ; Load TBLPTR with the baseMOVWF TBLPTRU ; address of the memory blockMOVLW CODE_ADDR_HIGHMOVWF TBLPTRHMOVLW CODE_ADDR_LOWMOVWF TBLPTRL
READ_BLOCKTBLRD*+ ; read into TABLAT, and incMOVF TABLAT, W ; get dataMOVWF POSTINC0 ; store dataDECFSZ COUNTER ; done?BRA READ_BLOCK ; repeat
MODIFY_WORDMOVLW BUFFER_ADDR_HIGH ; point to bufferMOVWF FSR0HMOVLW BUFFER_ADDR_LOWMOVWF FSR0LMOVLW NEW_DATA_LOW ; update buffer wordMOVWF POSTINC0MOVLW NEW_DATA_HIGHMOVWF INDF0
ERASE_BLOCKMOVLW CODE_ADDR_UPPER ; load TBLPTR with the baseMOVWF TBLPTRU ; address of the memory blockMOVLW CODE_ADDR_HIGHMOVWF TBLPTRH MOVLW CODE_ADDR_LOWMOVWF TBLPTRL BSF EECON1, EEPGD ; point to Flash program memoryBCF EECON1, CFGS ; access Flash program memoryBSF EECON1, WREN ; enable write to memoryBSF EECON1, FREE ; enable Erase operationBCF INTCON, GIE ; disable interruptsMOVLW 55h
Required MOVWF EECON2 ; write 55hSequence MOVLW 0AAh
MOVWF EECON2 ; write 0AAhBSF EECON1, WR ; start erase (CPU stall)BSF INTCON, GIE ; re-enable interruptsTBLRD*- ; dummy read decrementMOVLW BUFFER_ADDR_HIGH ; point to bufferMOVWF FSR0HMOVLW BUFFER_ADDR_LOWMOVWF FSR0L
WRITE_BUFFER_BACKMOVLW BlockSize ; number of bytes in holding registerMOVWF COUNTERMOVLW D’64’/BlockSize ; number of write blocks in 64 bytesMOVWF COUNTER2
WRITE_BYTE_TO_HREGSMOVF POSTINC0, W ; get low byte of buffer dataMOVWF TABLAT ; present data to table latchTBLWT+* ; write data, perform a short write
; to internal TBLWT holding register.
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 59
PIC18F/LF1XK50
例 4-3: フラッシュ プログラムメモリへの書き込み ( 続き )
4.5.2 書き込みの検証
アプリケーションによっては、メモリに書き込まれた値を元の値と比較して検証する事が望ましい場合があります。例えば、仕様限界近くまで頻繁に書き込みを実行するようなアプリケーションです。
4.5.3 書き込み動作の予期せぬ中断
電源遮断や予期しないリセット等、予定外の事象によって書き込みが中止された場合、必要に応じて、その時点でプログラミングしていたメモリ位置の検証と再プログラミングを実行してください。書き込み動作がMCLRリセットまたはWDTタイムアウト リセットによって中断された場合、WRERR ビットがセットされます。これによって、ユーザはそのメモリ位置への再書き込み必要かどうかを判断できます。
4.5.4 誤書き込み防止
フラッシュ プログラムメモリへの誤書き込みを防止するため、書き込み開始シーケンスを遵守する必要があります。詳細は 24.0「CPU の特殊機能」を参照してください。
4.6 コード保護中のフラッシュ プログラムメモリの動作
フラッシュ プログラムメモリのコード保護に関する詳細は、24.3「プログラムの検証とコード保護」を参照してください。
表 4-3: プログラム フラッシュメモリに関連するレジスタ
DECFSZ COUNTER ; loop until holding registers are fullBRA WRITE_WORD_TO_HREGS
PROGRAM_MEMORYBSF EECON1, EEPGD ; point to Flash program memoryBCF EECON1, CFGS ; access Flash program memoryBSF EECON1, WREN ; enable write to memoryBCF INTCON, GIE ; disable interruptsMOVLW 55h
Required MOVWF EECON2 ; write 55hSequence MOVLW 0AAh
MOVWF EECON2 ; write 0AAhBSF EECON1, WR ; start program (CPU stall)DCFSZ COUNTER2 ; repeat for remaining write blocksBRA WRITE_BYTE_TO_HREGS ;BSF INTCON, GIE ; re-enable interruptsBCF EECON1, WREN ; disable write to memory
レジスタ名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の掲載ページ
TBLPTRU — — bit 21 プログラムメモリ テーブル ポインタの 上位バイト(TBLPTR<20:16>)
287
TBPLTRH プログラムメモリ テーブル ポインタの上位バイト (TBLPTR<15:8>) 287
TBLPTRL プログラムメモリ テーブル ポインタの下位バイト (TBLPTR<7:0>) 287
TABLAT プログラムメモリ テーブル ラッチ 287
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
EECON2 EEPROM 制御レジスタ 2 ( 物理レジスタではありません ) 289
EECON1 EEPGD CFGS — FREE WRERR WREN WR RD 289
IPR2 OSCFIP C1IP C2IP EEIP BCLIP USBIP TMR3IP — 290
PIR2 OSCFIF C1IF C2IF EEIF BCLIF USBIF TMR3IF — 290
PIE2 OSCFIE C1IE C2IE EEIE BCLIE USBIE TMR3IE — 290
凡例 : — = 未実装ビット、「0」として読み出し。網掛けの部分はフラッシュ /EEPROM へのアクセスには使用しません。
DS41350D_JP - p. 60 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
5.0 データ EEPROM メモリ
データ EEPROM はデータ RAM やプログラムメモリからは独立した不揮発性メモリアレイで、プログラムデータを長期間保存するために使用します。レジスタファイルとプログラム メモリ空間のどちらににも直接マッピングされてはいませんが、特殊機能レジスタ(SFR) を介して間接的にアドレスを指定できます。EEPROM は、通常動作の全 VDD レンジにおいて読み書きが可能です。
データ EEPROM の読み書きにはプログラムメモリ同様、以下の 4 つの SFR を使用します。
• EECON1
• EECON2
• EEDATA
• EEADR
データEEPROMはバイト単位の読み書きが可能です。データメモリ ブロックとインターフェイスする際、EEDATA は 8 ビットの読み書きデータを格納し、EEADR レジスタペアはアクセス先 EEPROM アドレスを格納します。
EEPROM データメモリは、高い消去 / 書き込み耐性を誇ります。バイト書き込みでは、自動的に対象メモリ位置を消去し、新しいデータを書き込みます (Erase-before-Write)。書き込み時間は内蔵タイマが制御します。この時間は電圧、温度、チップ間のばらつきで変わります。正確な限界値は、パラメータ D133 (27.0「電気的仕様」の表 27-4) を参照してください。
5.1 EEADR レジスタ
読み書き動作時のデータ EEPROM のアドレス指定には、EEADR レジスタを使用します。8 ビットのレジスタにより、256 バイト (00h ~ FFh) のメモリ範囲に対してアドレス指定できます。
5.2 EECON1 および EECON2 レジスタ
データ EEPROM へのアクセスは、EECON1 およびEECON2 レジスタにより制御します。これらのレジスタはプログラムメモリへのアクセスを制御するものと同じであり、その使用方法はデータ EEPROM の場合も同様です。
EECON1レジスタ (レジスタ 5-1)は、データおよびプログラムメモリに対するアクセスを制御するレジスタです。制御ビット EEPGD は、アクセスがプログラムメモリに対するものか、データ EEPROM に対するものかを決定します。EEPGD ビットがクリアされているとデータ EEPROM にアクセスします。EEPGD ビットがセットされているとプログラムメモリにアクセスします。
制御ビット CFGS は、アクセスがコンフィグレーション レジスタに対するものか、プログラムメモリ / データEEPROMに対するものかを決定します。CFGSビットをセットすると、後続の動作はコンフィグレーション レジスタに対して実行されます。CFGS ビットをクリアすると、EEPGD ビットによってプログラム フラッシュまたはデータ EEPROM のいずれかが選択されます。
WRENビットをセットすると書き込み動作が許可されます。WREN ビットは電源投入時にクリアされます。
WR ビットをセットし、その後内部プログラミング タイマがタイムアウトして書き込み動作が完了する事でWR ビットがクリアされると、WRERR ビットがハードウェアによってセットされます。
書き込み動作は、制御ビット WR によって開始されます。このビットはソフトウェアによってセットできますが、クリアはできません。書き込み終了時にハードウェアによってクリアされます。
制御ビットの RD および WR をセットすると、それぞれ読み出しおよび消去 / 書き込み動作が開始します。これらのビットはファームウェアによってセットし、動作終了時にハードウェアによってクリアします。
プログラムメモリ アクセス時 (EEPGD = 1) は、RDビットをセットできません。プログラムメモリを読み出すには、テーブル読み出し命令を使用します。テーブル読み出しについては、4.1「テーブル読み出し / 書き込み」を参照してください。
EECON2 レジスタは物理レジスタではありません。このレジスタは、メモリの書き込みおよび消去シーケンス専用です。EECON2 を読み出すと、常に「0」が返されます。
Note: 通常動作中、WRERR からは「1」が読み出される事があります。このような場合、書き込み動作がリセットによって不完全なまま中止されたか、不適切な方法で実行された事を示している可能性があります。
Note: PIR2 レジスタの割り込みフラグビットEEIF は、書き込み終了時にセットされます。このビットは、ソフトウェアによってクリアする必要があります
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 61
PIC18F/LF1XK50
レジスタ 5-1: EECON1: データ EEPROM 制御 1 レジスタ
R/W-x R/W-x U-0 R/W-0 R/W-x R/W-0 R/S-0 R/S-0
EEPGD CFGS — FREE WRERR WREN WR RD
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット
S = ソフトウェアによってセットできるがクリアできないビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 EEPGD: フラッシュ プログラムメモリ / データ EEPROM 選択ビット
1 = フラッシュ プログラムメモリにアクセス0 = データ EEPROM にアクセス
bit 6 CFGS: フラッシュ プログラムメモリ / データ EEPROM またはコンフィグレーション レジスタ選択ビット
1 = コンフィグレーション レジスタにアクセス0 = フラッシュ プログラムメモリまたはデータ EEPROM にアクセス
bit 5 未実装ビット : 「0」として読み出し
bit 4 FREE: フラッシュ ロウ ( ブロック ) 消去イネーブルビット
1 = TBLPTRによってアドレスを指定されたプログラムメモリ ブロックを次のWRコマンドで消去 ( 消去動作の完了時点でクリアされる )
0 = 書き込み動作のみ実行
bit 3 WRERR: フラッシュ プログラムメモリ / データ EEPROM エラーフラグ ビット (1)
1 = 書き込み動作が不完全なまま中止された ( 通常動作時の内部タイマによるプログラミング中に何らかのリセット動作が実行されたか、不適切な書き込みを実行しようとした )
0 = 書き込み動作が完了した
bit 2 WREN: フラッシュ プログラムメモリ / データ EEPROM 書き込みイネーブルビット
1 = フラッシュ プログラムメモリ / データ EEPROM への書き込みサイクルを許可0 = フラッシュ プログラムメモリ / データ EEPROM への書き込みサイクルを禁止
bit 1 WR: 書き込み制御ビット
1 = データ EEPROM またはプログラムメモリの消去 / 書き込みサイクルを開始 ( 動作は内部タイマによって制御され、ビットは書き込み完了時にハードウェアがクリアする。ソフトウェアではセットのみ可能 ( クリア不可 ))
0 = EEPROM に対する書き込みサイクルが完了
bit 0 RD: 読み出し制御ビット
1 = EEPROM の読み出し動作を開始 (1 サイクルで完了する。RD はハードウェアがクリアする。ソフトウェアではセットのみ可能 ( クリア不可 )。ただし、EEPGD = 1または CFGS = 1の場合、RD ビットはセット不可 )
0 = EEPROM 読み出しを開始しない
Note 1: WRERR が発生した場合、EEPGD および CFGS ビットはクリアされません。これにより、エラー条件を追跡できます。
DS41350D_JP - p. 62 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
5.3 データ EEPROM メモリの読み出し
データメモリ内のある位置を読み出すには、EEADRレジスタにアドレスを書き込み、EECON1 レジスタの制御ビットEEPGDをクリアした上で、制御ビットRDをセットします。データは次のサイクルで利用可能となるため、EEDATA レジスタは次の命令サイクルで読み出せます。次の読み出し動作が実行されるかユーザが新しい値を書き込むまで、EEDATA はこの値を保持します。
例 5-1 に、基本的なプロセスを示します。
5.4 データEEPROMメモリへの書き込み
EEPROM 内のあるメモリ位置に書き込むには、はじめに EEADR レジスタにアドレスを書き込み、続いてEEDATA レジスタにデータを書き込みます。書き込みサイクルを開始するには、例 5-2 に示すシーケンスを実行する必要があります。
各バイトについてこのシーケンス (EECON2 に 55h、次に 0AAh を書き込み、次に WR ビットをセット ) を厳密に遵守しないと、書き込みは開始しません。このコードセグメントの実行中は割り込みを禁止する事を強く推奨します。
さらに、EECON1 の WREN ビットをセットして書き込みを有効にする必要があります。これにより、プログラムの暴走等予測外のコード実行による偶発的なデータ EEPROM への書き込みを防止します。WRENビットは、EEPROM を更新する場合以外は、常にクリアしておきます。WREN ビットはハードウェアによってクリアされません。
書き込みシーケンスの開始後は、EECON1、EEADR、EEDATA を変更できません。WREN ビットがセットされていない限り、WR ビットのセットは禁止されます。WR と WREN は、同じ命令サイクルではセットできません。
書き込みサイクルが完了すると、ハードウェアによって WR ビットがクリアされ、EEPROM 割り込みフラグビット EEIF がセットされます。ユーザはこの割り込みを許可するか、このビットをポーリングする事ができます。EEIF は、ソフトウェアによってクリアする必要があります
5.5 書き込みの検証
アプリケーションによっては、メモリに書き込まれた値を元の値と比較して検証する事が望ましい場合があります。例えば、仕様限界近くまで頻繁に書き込みを実行するようなアプリケーションです。
例 5-1: データ EEPROM の読み出し
例 5-2: データ EEPROM への書き込み
MOVLW DATA_EE_ADDR ;MOVWF EEADR ; Data Memory Address to readBCF EECON1, EEPGD ; Point to DATA memoryBCF EECON1, CFGS ; Access EEPROMBSF EECON1, RD ; EEPROM ReadMOVF EEDATA, W ; W = EEDATA
MOVLW DATA_EE_ADDR_LOW ;MOVWF EEADR ; Data Memory Address to writeMOVLW DATA_EE_DATA ;MOVWF EEDATA ; Data Memory Value to writeBCF EECON1, EEPGD ; Point to DATA memoryBCF EECON1, CFGS ; Access EEPROMBSF EECON1, WREN ; Enable writesBCF INTCON, GIE ; Disable InterruptsMOVLW 55h ;
Required MOVWF EECON2 ; Write 55hSequence MOVLW 0AAh ;
MOVWF EECON2 ; Write 0AAhBSF EECON1, WR ; Set WR bit to begin writeBSF INTCON, GIE ; Enable Interrupts
; User code executionBCF EECON1, WREN ; Disable writes on write complete (EEIF set)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 63
PIC18F/LF1XK50
5.6 コード プロテクト時の動作
データ EEPROM は、コンフィグレーション ワードにコード プロテクト ビットを備えています。コード プロテクト有効時、外部からの読み書き動作は無効になります。
ただし、MCU はコード プロテクト コンフィグレーション ビットの状態に関わらず、いつでも内部データEEPROM に読み書きが可能です。詳細は、24.0「CPUの特殊機能」を参照してください。
5.7 誤書き込み防止
ユーザが意図せずにデータEEPROMメモリに書き込んでしまう状況があります。本デバイスは、そのような誤書き込みを防止する仕組みを実装済みです。電源投入時には WREN ビットをクリアします。また、パワーアップタイマのカウント中 (パラメータ33、TPWRT)は、EEPROM への書き込みを阻止します。
書き込み開始シーケンスと WREN ビットの両方が、ブラウンアウト、パワーグリッチ、ソフトウェアの誤動作による誤書き込みを防止します。
5.8 データ EEPROM の使用方法
データ EEPROM は高い書き込み耐性を有し、バイト単位のアドレス指定が可能なメモリアレイです。頻繁に変更される情報 ( 例 : プログラム変数等 ) を格納する場所として 適化されています。メモリの一部の領域に格納された変数が頻繁に変更され、他の領域の変数はそれほど変更されない場合、特定のバイトへの総書き込みサイクル数は制限を超えていなくとも、EEPROM 全体に対する総書き込みサイクル数が制限を超える場合があります。このような場合、アレイのリフレッシュを実行する必要があります。このため、頻繁には変更されない変数 ( 定数、ID、校正値等 ) は、フラッシュ プログラムメモリに保存するようにしてください。
例 5-3 に、簡単な EEPROM リフレッシュ ルーチンを示します。
例 5-3: データ EEPROM リフレッシュ ルーチン
表 5-1: データ EEPROM に関連するレジスタ
Note: データEEPROMを定数あるいはほとんど変更されないデータの保存にしか使用しない場合、アレイ リフレッシュは不要な場合がほとんどです。詳細は仕様を参照してください。
レジスタ名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の掲載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
EEADR EEADR7 EEADR6 EEADR5 EEADR4 EEADR3 EEADR2 EEADR1 EEADR0 289
EEDATA EEPROM データレジスタ 289
EECON2 EEPROM 制御レジスタ 2 ( 物理レジスタではありません ) 289
EECON1 EEPGD CFGS — FREE WRERR WREN WR RD 289
IPR2 OSCFIP C1IP C2IP EEIP BCLIP USBIP TMR3IP — 290
PIR2 OSCFIF C1IF C2IF EEIF BCLIF USBIF TMR3IF — 290
PIE2 OSCFIE C1IE C2IE EEIE BCLIE USBIE TMR3IE — 290
凡例 : — = 未実装ビット、「0」として読み出し。網掛けの部分はフラッシュ /EEPROM へのアクセスには使用しません。
CLRF EEADR ; Start at address 0BCF EECON1, CFGS ; Set for memoryBCF EECON1, EEPGD ; Set for Data EEPROMBCF INTCON, GIE ; Disable interruptsBSF EECON1, WREN ; Enable writes
Loop ; Loop to refresh arrayBSF EECON1, RD ; Read current addressMOVLW 55h ;MOVWF EECON2 ; Write 55hMOVLW 0AAh ;MOVWF EECON2 ; Write 0AAhBSF EECON1, WR ; Set WR bit to begin writeBTFSC EECON1, WR ; Wait for write to completeBRA $-2INCFSZ EEADR, F ; Increment addressBRA LOOP ; Not zero, do it again
BCF EECON1, WREN ; Disable writesBSF INTCON, GIE ; Enable interrupts
DS41350D_JP - p. 64 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
6.0 8 x 8 ハードウェア乗算器
6.1 はじめに
全ての PIC18 は、ALU の一部として 8 x 8 のハードウェア乗算器を搭載しています。この乗算器は符号なし演算を実行し、16 ビットの演算結果を生成します。結果は積レジスタペア PRODH:PRODL に格納されます。乗算器による演算は、ステータス レジスタののフラグを変化させません。
ハードウェアによる乗算を利用する事で、1 命令サイクルで演算が完了します。これには、計算のスループットが向上すると同時に、乗算アルゴリズムのコードサイズを削減できるという利点があり、以前はデジタル信号プロセッサを使用せざるを得なかった多くのアプリケーションに PIC18 を適用できるようになりました。表 6-1 に、ハードウェアとソフトウェアによる乗算を比較し、それぞれのメモリと実行時間を示します。
6.2 動作
例 6-1 に、8 x 8 符号なし乗算の命令シーケンスを示します。引数の一方が WREG レジスタにあらかじめ格納されていれば、乗算には 1 命令しか必要ありません。
例 6-2 に、8 x 8 符号付き乗算のシーケンスを示します。引数の符号ビットを適切に処理するために、各引数の 上位ビット (MSb) の値を調べ、必要な減算を実行しています。
例 6-1: 8 x 8 符号なし乗算のルーチン
例 6-2: 8 x 8 符号付き乗算のルーチン
表 6-1: 各種乗算における性能比較
MOVF ARG1, W ; MULWF ARG2 ; ARG1 * ARG2 ->
; PRODH:PRODL
MOVF ARG1, W MULWF ARG2 ; ARG1 * ARG2 ->
; PRODH:PRODL BTFSC ARG2, SB ; Test Sign Bit SUBWF PRODH, F ; PRODH = PRODH
; - ARG1 MOVF ARG2, WBTFSC ARG1, SB ; Test Sign Bit SUBWF PRODH, F ; PRODH = PRODH
; - ARG2
ルーチン 乗算の方法プログラムメモリ
( ワード )
サイクル数( 大 )
時間
@ 40 MHz @ 10 MHz @ 4 MHz
8 x 8 符号なしハードウェア乗算なし 13 69 6.9 s 27.6 s 69 s
ハードウェア乗算 1 1 100 ns 400 ns 1 s
8 x 8 符号付きハードウェア乗算なし 33 91 9.1 s 36.4 s 91 s
ハードウェア乗算 6 6 600 ns 2.4 s 6 s
16 x 16 符号なしハードウェア乗算なし 21 242 24.2 s 96.8 s 242 s
ハードウェア乗算 28 28 2.8 s 11.2 s 28 s
16 x 16 符号付きハードウェア乗算なし 52 254 25.4 s 102.6 s 254 s
ハードウェア乗算 35 40 4.0 s 16.0 s 40 s
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 65
PIC18F/LF1XK50
例 6-3 に、16 x 16 符号なし乗算のシーケンスを示します。式 6-1 に、適用されるアルゴリズムを示します。32 ビットの演算結果は 4 つのレジスタ (RES<3:0>) に格納されます。
式 6-1: 16 x 16符号なし乗算のアルゴリズム
例 6-3: 16 x 16 符号なし乗算のルーチン
例 6-4 に、16 x 16 符号付き乗算のシーケンスを示します。式 6-2 に、適用されるアルゴリズムを示します。32 ビットの演算結果は 4 つのレジスタ (RES<3:0>) に格納されます。引数の符号ビットを適切に処理するために、各引数ペアの 上位ビット (MSb) の値を調べ、必要な減算を実行しています。
式 6-2: 16 x 16符号付き乗算のアルゴリズム
例 6-4: 16 x 16 符号付き乗算のルーチン
RES3:RES0 = ARG1H:ARG1L ARG2H:ARG2L= (ARG1H ARG2H 216) +
(ARG1H ARG2L 28) +(ARG1L ARG2H 28) +(ARG1L ARG2L)
MOVF ARG1L, WMULWF ARG2L ; ARG1L * ARG2L->
; PRODH:PRODL MOVFF PRODH, RES1 ; MOVFF PRODL, RES0 ;
; MOVF ARG1H, W MULWF ARG2H ; ARG1H * ARG2H->
; PRODH:PRODL MOVFF PRODH, RES3 ; MOVFF PRODL, RES2 ;
; MOVF ARG1L, W MULWF ARG2H ; ARG1L * ARG2H->
; PRODH:PRODL MOVF PRODL, W ; ADDWF RES1, F ; Add cross MOVF PRODH, W ; products ADDWFC RES2, F ; CLRF WREG ; ADDWFC RES3, F ;
; MOVF ARG1H, W ; MULWF ARG2L ; ARG1H * ARG2L->
; PRODH:PRODL MOVF PRODL, W ; ADDWF RES1, F ; Add cross MOVF PRODH, W ; products ADDWFC RES2, F ; CLRF WREG ; ADDWFC RES3, F ;
RES3:RES0 = ARG1H:ARG1L ARG2H:ARG2L= (ARG1H ARG2H 216) +
(ARG1H ARG2L 28) +(ARG1L ARG2H 28) +(ARG1L ARG2L) +(-1 ARG2H<7> ARG1H:ARG1L 216) +(-1 ARG1H<7> ARG2H:ARG2L 216)
MOVF ARG1L, W MULWF ARG2L ; ARG1L * ARG2L ->
; PRODH:PRODL MOVFF PRODH, RES1 ; MOVFF PRODL, RES0 ;
; MOVF ARG1H, W MULWF ARG2H ; ARG1H * ARG2H ->
; PRODH:PRODL MOVFF PRODH, RES3 ; MOVFF PRODL, RES2 ;
; MOVF ARG1L, W MULWF ARG2H ; ARG1L * ARG2H ->
; PRODH:PRODL MOVF PRODL, W ; ADDWF RES1, F ; Add cross MOVF PRODH, W ; products ADDWFC RES2, F ; CLRF WREG ; ADDWFC RES3, F ;
; MOVF ARG1H, W ; MULWF ARG2L ; ARG1H * ARG2L ->
; PRODH:PRODL MOVF PRODL, W ; ADDWF RES1, F ; Add cross MOVF PRODH, W ; products ADDWFC RES2, F ; CLRF WREG ; ADDWFC RES3, F ;
; BTFSS ARG2H, 7 ; ARG2H:ARG2L neg? BRA SIGN_ARG1 ; no, check ARG1 MOVF ARG1L, W ; SUBWF RES2 ; MOVF ARG1H, W ; SUBWFB RES3
; SIGN_ARG1
BTFSS ARG1H, 7 ; ARG1H:ARG1L neg? BRA CONT_CODE ; no, done MOVF ARG2L, W ; SUBWF RES2 ; MOVF ARG2H, W ; SUBWFB RES3
; CONT_CODE
:
DS41350D_JP - p. 66 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
7.0 割り込み
PIC18F/LF1XK50 には複数の割り込み要因があり、そのほとんどに高 / 低優先度を設定できます。高優先度割り込みのベクタは 0008h、低優先度割り込みのベクタは 0018h です。高優先度の割り込みイベントは、低優先度割り込みを処理中でも割り込む事ができます。
割り込み動作の制御には、以下 10 個のレジスタを使用します。
• RCON
• INTCON
• INTCON2
• INTCON3
• PIR1、PIR2
• PIE1、PIE2
• IPR1、IPR2
これらのレジスタ内のビットに対応するシンボル名を使用するために、MPLAB® IDE に付属するマイクロチップ社のヘッダファイルの使用を推奨します。このヘッダファイルによって、アセンブラやコンパイラは指定されたレジスタ内のこれらのビットの配置を自動的に管理できます。
通常、各割り込み要因には、その動作を制御する以下の 3 つのビットが実装されています。
• フラグビット : 割り込みイベントが発生した事を示します。
• イネーブルビット : フラグビットがセットされた場合に、実行中のプログラムが割り込みベクタアドレスに分岐する事を許可します。
• 優先度ビット : 割り込みの高優先度と低優先度を選択します。
7.1 ミッドレンジ デバイスとの互換性
IPEN ビットがクリアされている場合 ( 既定値 )、割り込み優先度機能は無効となり、PIC® MCU ミッドレンジ デバイスとの互換性が保たれます。この互換モードでは、IPRx レジスタの割り込み優先度ビットは無視されます。INTCON レジスタの PEIE ビットは、周辺機能のグローバル割り込みを許可します。PEIE ビットをクリアした場合、周辺機能の割り込み要因のみが禁止されます。周辺機能の割り込みを許可するには、PEIEビットおよび GIE ビットを両方ともセットする必要があります。INTCON レジスタの GIE ビットは、周辺機能以外の全てのグローバル割り込みを許可、または周辺機能も含む全ての割り込み要因を禁止します。互換モードの場合、全ての割り込みはアドレス 0008h に分岐します。
7.2 割り込み優先度
割り込みの優先度機能は、RCONレジスタのIPENビットをセットすると有効になります。割り込み優先度を有効にした場合、互換モードにおけるGIEおよびPEIEのグローバル割り込みイネーブルビットは、高優先度グローバル割り込みイネーブルビット GIEH と、低優先度グローバル割り込みイネーブルビット GIEL に置
き換えられます。INTCON レジスタの GIEH ビットをセットすると、対応するIPRxレジスタまたはINTCONxレジスタ内で優先度ビットがセットされている ( 高優先度 ) 割り込みが全て許可されます。GIEH ビットをクリアすると、低優先度に設定されたものを含む全ての割り込み要因が禁止されます。INTCON レジスタのGIEL ビットをクリアすると、優先度ビットがクリアされている ( 低優先度 ) 割り込みのみが無効になります。低優先度の割り込み要因が許可されるのは、GIELビットと GIEH ビットの両方がセットされている場合です。
割り込みフラグ、割り込みイネーブルビット、対応するグローバル割り込みイネーブルビットが全てセットされている場合、割り込みが発生すると、その要因に設定されている優先度ビットのレベルに応じて、高優先度割り込みは 0008h に、低優先度割り込みは 0018hに分岐します。各割り込みは、対応する割り込みイネーブルビットによって個別に禁止できます。
7.3 割り込み処理
割り込みの処理が開始すると、グローバル割り込みイネーブルビットがクリアされ、以降の割り込みが禁止されます。IPEN ビットがクリアされている場合、GIEビットがグローバル割り込みイネーブルビットになります。IPEN ビットがセットされ割り込み優先度機能が有効な場合、GIEH ビットが高優先度、GIEL が低優先度のグローバル割り込みを許可します。高優先度の割り込み要因は、低優先度の割り込み処理に割り込む事ができます。高優先度割り込み処理の実行中は、低優先度の割り込みは処理されません。
割り込み処理からのリターンアドレスはスタックにプッシュされ、PCには割り込みベクタアドレス(0008hまたは 0018h) が読み込まれます。割り込みサービスルーチンへの移行後に割り込み要因を判断するには、INTCONxおよびPIRxレジスタの割り込みフラグビットをポーリングします。同じ割り込みが繰り返さないように、割り込みを再度許可する前に、割り込みフラグビットをクリアする必要があります。
「割り込みからの戻り」命令 RETFIE は割り込みルーチン終了時 GIE ビット ( 優先度機能有効時は GIEH または GIEL) をセットして割り込みを再度許可します。
INT ピンや PORTB の状態変化割り込み等の外部割り込みイベントの場合、割り込みのレイテンシは 3 ~ 4命令サイクルです。このレイテンシは、1 サイクル命令と 2 サイクル命令のどちらでも同じです。各割り込み要因のフラグビットは、対応するイネーブルビットまたはグローバル割り込みイネーブルビットの状態に関わらずセットされます。
Note: 任意の割り込みが許可されている場合、その割り込み制御レジスタの変更にMOVFF 命令を使用しないでください。マイクロコントローラの挙動が不安定になります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 67
PIC18F/LF1XK50
図 7-1: PIC18 の割り込みロジック
TMR0IE
GIEH/GIE
GIEL/PEIE
Wake-up if in
Interrupt to CPUVector to Location0008h
INT2IFINT2IEINT2IP
INT1IFINT1IEINT1IP
TMR0IFTMR0IETMR0IP
RABIFRABIERABIP
IPEN
TMR0IF
TMR0IP
INT1IFINT1IEINT1IPINT2IFINT2IEINT2IP
RABIFRABIERABIPINT0IFINT0IE
GIEL/PEIE
Interrupt to CPUVector to Location
IPEN
IPEN
0018h
SSPIFSSPIESSPIP
SSPIFSSPIE SSPIP
ADIFADIEADIP
RCIFRCIERCIP
Additional Peripheral Interrupts
ADIFADIEADIP
High Priority Interrupt Generation
Low Priority Interrupt Generation
RCIFRCIERCIP
Additional Peripheral Interrupts
Idle or Sleep modes
GIEH/GIE
Note 1: RABIF 割り込みを使用するには、IOCA および IOCB ピンも有効にしておく必要があります。
(1)
(1)
DS41350D_JP - p. 68 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
7.4 INTCON レジスタ
INTCON は、各種割り込みの許可、優先度、フラグビットを格納する読み書き可能なレジスタです。
Note: 割り込み条件が発生すると、各割り込みのフラグビットは、対応するイネーブルビットまたはグローバル イネーブルビットの状態に関わらずセットされます。ユーザソフトウェアでは、割り込みを許可する前に、対応する割り込みフラグビットを確実にクリアしてください。上記の機能によって、ソフトウェア ポーリングが可能になります。
レジスタ 7-1: INTCON: 割り込み制御レジスタ
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-x
GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 GIE/GIEH: グローバル割り込みイネーブルビット
IPEN = 0の場合 : 1 = マスクされていない全ての割り込みを許可
0 = 周辺機能を含む全ての割り込みを禁止
IPEN = 1の場合 : 1 = 高優先度の割り込みを全て許可 0 = 低優先度を含む全ての割り込みを禁止
bit 6 PEIE/GIEL: 周辺割り込みイネーブルビット
IPEN = 0の場合 : 1 = マスクされていない全ての周辺割り込みを許可 0 = 全ての周辺割り込みを禁止 IPEN = 1の場合 : 1 = 低優先度の割り込みを全て許可 0 = 低優先度の割り込みを全て禁止
bit 5 TMR0IE: TMR0 オーバーフロー割り込みイネーブルビット 1 = TMR0 オーバーフロー割り込みを許可 0 = TMR0 オーバーフロー割り込みを禁止
bit 4 INT0IE: INT0 外部割り込みイネーブルビット 1 = INT0 外部割り込みを許可 0 = INT0 外部割り込みを禁止
bit 3 RABIE: RA および RB ポート状態変化割り込みイネーブルビット (2) 1 = RA および RB ポートの状態変化割り込みを許可 0 = RA および RB ポートの状態変化割り込みを禁止
bit 2 TMR0IF: TMR0 オーバーフロー割り込みフラグビット 1 = TMR0 レジスタがオーバーフローした ( ソフトウェアによるクリアが必要 ) 0 = TMR0 レジスタはオーバーフローしていない
bit 1 INT0IF: INT0 外部割り込みフラグビット 1 = INT0 外部割り込みが発生した ( ソフトウェアによるクリアが必要 ) 0 = INT0 外部割り込みは発生していない
bit 0 RABIF: RA および RB ポート状態変化割り込みフラグビット (1) 1 = RA<5:3> または RB<7:4> ピンのいずれか 1 つ以上の状態が変化した ( ソフトウェアによるクリアが必要 ) 0 = RA<5:3> または RB<7:4> ピンのいずれも状態が変化していない
Note 1: 条件が不一致のままである場合、RABIF ビットもセットされたままです。PORTA および PORTB を読み出す事で、
この条件が解除され、ビットをクリアできるようになります。
2: RA および RB ポートの状態変化割り込みを使用するには、IOCA と IOCB 両方も有効にしておく必要があります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 69
PIC18F/LF1XK50
レジスタ 7-2: INTCON2: 割り込み制御 2 レジスタ
R/W-1 R/W-1 R/W-1 R/W-1 U-0 R/W-1 U-0 R/W-1
RABPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RABIP
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 RABPU: PORTA および PORTB プルアップ イネーブルビット
1 = PORTA と PORTB の全てのプルアップを無効にする 0 = ピンが入力に設定され、対応する WPUA および WPUB ビットがセットされている場合に限り、
PORTA と PORTB のプルアップを有効にする
bit 6 INTEDG0: 外部割り込み 0 エッジ選択ビット
1 = 立ち上がりエッジで割り込み 0 = 立ち下がりエッジで割り込み
bit 5 INTEDG1: 外部割り込み 1 エッジ選択ビット
1 = 立ち上がりエッジで割り込み 0 = 立ち下がりエッジで割り込み
bit 4 INTEDG2: 外部割り込み 2 エッジ選択ビット
1 = 立ち上がりエッジで割り込み 0 = 立ち下がりエッジで割り込み
bit 3 未実装ビット : 「0」として読み出し
bit 2 TMR0IP: TMR0 オーバーフロー割り込み優先度ビット
1 = 高優先度 0 = 低優先度
bit 1 未実装ビット : 「0」として読み出し
bit 0 RABIP: RA および RB ポート状態変化割り込み優先度ビット
1 = 高優先度 0 = 低優先度
Note: 割り込み条件が発生すると、各割り込みのフラグビットは、対応するイネーブルビットまたはグローバル イネーブルビットの状態に関わらずセットされます。ユーザ ソフトウェアでは、割り込みを許可する前に、対応する割り込みフラグビットを確実にクリアしてください。上記の機能によって、ソフトウェア ポーリングが可能になります。
DS41350D_JP - p. 70 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 7-3: INTCON3: 割り込み制御 3 レジスタ
R/W-1 R/W-1 U-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0
INT2IP INT1IP — INT2IE INT1IE — INT2IF INT1IF
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 INT2IP: INT2 外部割り込み優先度ビット
1 = 高優先度 0 = 低優先度
bit 6 INT1IP: INT1 外部割り込み優先度ビット
1 = 高優先度 0 = 低優先度
bit 5 未実装ビット : 「0」として読み出し
bit 4 INT2IE: INT2 外部割り込みイネーブルビット
1 = INT2 外部割り込みを許可 0 = INT2 外部割り込みを禁止
bit 3 INT1IE: INT1 外部割り込みイネーブルビット
1 = INT1 外部割り込みを許可 0 = INT1 外部割り込みを禁止
bit 2 未実装ビット : 「0」として読み出し
bit 1 INT2IF: INT2 外部割り込みフラグビット
1 = INT2 外部割り込みが発生した ( ソフトウェアによるクリアが必要 ) 0 = INT2 外部割り込みは発生していない
bit 0 INT1IF: INT1 外部割り込みフラグビット
1 = INT1 外部割り込みが発生した ( ソフトウェアによるクリアが必要 ) 0 = INT1 外部割り込みは発生していない
Note: 割り込み条件が発生すると、各割り込みのフラグビットは、対応するイネーブルビットまたはグローバル イネーブルビットの状態に関わらずセットされます。ユーザ ソフトウェアでは、割り込みを許可する前に、対応する割り込みフラグビットを確実にクリアしてください。上記の機能によって、ソフトウェア ポーリングが可能になります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 71
PIC18F/LF1XK50
7.5 PIR レジスタ
PIR レジスタには、各種周辺割り込みのフラグビットを格納します。周辺割り込み要因の数は多いため、割り込み要求フラグレジスタは 2 つ用意されています(PIR1 と PIR2)。
Note 1: 割り込み条件が発生すると、各割り込みフラグビットは、対応するイネーブルビットまたはグローバル割り込みイネーブルビット (INTCON レジスタの GIE) の状態に関わらずセットされます。
2: ユーザ ソフトウェアでは、割り込みを許可する前、および割り込み処理の完了後に、対応する割り込みフラグビットを確実にクリアしてください。
レジスタ 7-4: PIR1: 周辺割り込み要求 ( フラグ ) レジスタ 1
U-0 R/W-0 R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0
— ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 未実装ビット : 「0」として読み出し
bit 6 ADIF: A/D コンバータ割り込みフラグビット
1 = A/D 変換が完了した ( ソフトウェアによるクリアが必要 ) 0 = A/D 変換が完了していない、または開始していない
bit 5 RCIF: EUSART 受信割り込みフラグビット
1 = EUSART 受信バッファ RCREG がフル (RCREG を読み出すとクリアされる ) 0 = EUSART 受信バッファがエンプティ
bit 4 TXIF: EUSART 送信割り込みフラグビット
1 = EUSART 送信バッファ TXREG がエンプティ (TXREG に書き込むとクリアされる ) 0 = EUSART 送信バッファがフル
bit 3 SSPIF: マスタ同期シリアルポート割り込みフラグビット
1 = 送信 / 受信が完了した ( ソフトウェアによるクリアが必要 )0 = 送信 / 受信待ち
bit 2 CCP1IF: CCP1 割り込みフラグビット
キャプチャモード : 1 = TMR1 レジスタのキャプチャが発生した ( ソフトウェアによるクリアが必要 ) 0 = TMR1 レジスタのキャプチャは発生していない
コンペアモード : 1 = TMR1 レジスタのコンペア一致が発生した ( ソフトウェアによるクリアが必要 ) 0 = TMR1 レジスタのコンペア一致は発生していないPWM モード : このモードでは未使用
bit 1 TMR2IF: TMR2/PR2 一致割り込みフラグビット
1 = TMR2 と PR2 が一致した( ソフトウェアによるクリアが必要 ) 0 = TMR2 と PR2 は一致していない
bit 0 TMR1IF: TMR1 オーバーフロー割り込みフラグビット
1 = TMR1 レジスタがオーバーフローした ( ソフトウェアによるクリアが必要 )0 = TMR1 レジスタはオーバーフローしていない
DS41350D_JP - p. 72 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 7-5: PIR2: 周辺割り込み要求 ( フラグ ) レジスタ 2
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0
OSCFIF C1IF C2IF EEIF BCLIF USBIF TMR3IF —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 OSCFIF: オシレータ障害割り込みフラグビット
1 = デバイス オシレータに障害が発生し、クロック入力が HFINTOSC に変更された ( ソフトウェアによるクリアが必要 )
0 = デバイスクロックが動作中
bit 6 C1IF: コンパレータ C1 割り込みフラグビット
1 = コンパレータ C1 の出力が変化した ( ソフトウェアによるクリアが必要 )0 = コンパレータ C1 の出力は変化していない
bit 5 C2IF: コンパレータ C2 割り込みフラグビット
1 = コンパレータ C2 の出力が変化した ( ソフトウェアによるクリアが必要 )0 = コンパレータ C2 の出力は変化していない
bit 4 EEIF: データ EEPROM/ フラッシュ書き込み動作割り込みフラグビット
1 = 書き込み動作が完了した ( ソフトウェアによるクリアが必要 )0 = 書き込み動作が完了していない、または開始していない
bit 3 BCLIF: バスコリジョン割り込みフラグビット
1 = バスコリジョンが発生した ( ソフトウェアによるクリアが必要 )0 = バスコリジョンは発生していない
bit 2 USBIF: USB 割り込みフラグビット
1 = USB が割り込みを要求した ( ソフトウェアによるクリアが必要 )0 = USB 割り込み要求は発生していない
bit 1 TMR3IF: TMR3 オーバーフロー割り込みフラグビット
1 = TMR3 レジスタがオーバーフローした ( ソフトウェアによるクリアが必要 )0 = TMR3 レジスタはオーバーフローしていない
bit 0 未実装ビット : 「0」として読み出し
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 73
PIC18F/LF1XK50
7.6 PIE レジスタ
PIEレジスタには、各種周辺割り込みのイネーブルビットが含まれます。周辺割り込み要因の数は多いため、割り込みイネーブル レジスタは 2 つ用意されています(PIE1 と PIE2)。IPEN = 0の場合、これらの周辺割り込みを許可するには PEIE ビットをセットする必要があります。
レジスタ 7-6: PIE1: 周辺割り込みイネーブル ( フラグ ) レジスタ 1
U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 未実装ビット : 「0」として読み出し
bit 6 ADIE: A/D コンバータ割り込みイネーブルビット
1 = A/D 割り込みを許可する 0 = A/D 割り込みを禁止する
bit 5 RCIE: EUSART 受信割り込みイネーブルビット
1 = EUSART 受信割り込みを許可する 0 = EUSART 受信割り込みを禁止する
bit 4 TXIE: EUSART 送信割り込みイネーブルビット
1 = EUSART 送信割り込みを許可する 0 = EUSART 送信割り込みを禁止する
bit 3 SSPIE: マスタ同期シリアルポート割り込みイネーブルビット
1 = MSSP 割り込みを許可する 0 = MSSP 割り込みを禁止する
bit 2 CCP1IE: CCP1 割り込みイネーブルビット
1 = CCP1 割り込みを許可する 0 = CCP1 割り込みを禁止する
bit 1 TMR2IE: TMR2/PR2 一致割り込みイネーブルビット
1 = TMR2/PR2 一致割り込みを許可する 0 = TMR2/PR2 一致割り込みを禁止する
bit 0 TMR1IE: TMR1 オーバーフロー割り込みイネーブルビット
1 = TMR1 オーバーフロー割り込みを許可する 0 = TMR1 オーバーフロー割り込みを禁止する
DS41350D_JP - p. 74 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 7-7: PIE2: 周辺割り込みイネーブル ( フラグ ) レジスタ 2
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 U-0
OSCFIE C1IE C2IE EEIE BCLIE USBIE TMR3IE —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 OSCFIE: オシレータ障害割り込みイネーブルビット
1 = 許可0 = 禁止
bit 6 C1IE: コンパレータ C1 割り込みイネーブルビット
1 = 許可0 = 禁止
bit 5 C2IE: コンパレータ C2 割り込みイネーブルビット
1 = 許可0 = 禁止
bit 4 EEIE: データ EEPROM/ フラッシュ書き込み動作割り込みイネーブルビット
1 = 許可0 = 禁止
bit 3 BCLIE: バスコリジョン割り込みイネーブルビット
1 = 許可0 = 禁止
bit 2 USBIE: USB 割り込みイネーブルビット
1 = 許可0 = 禁止
bit 1 TMR3IE: TMR3 オーバーフロー割り込みイネーブルビット
1 = 許可0 = 禁止
bit 0 未実装ビット : 「0」として読み出し
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 75
PIC18F/LF1XK50
7.7 IPR レジスタ
IPR レジスタは、各種周辺割り込みの優先度ビットを格納します。周辺割り込み要因の数は多いため、割り込み優先度レジスタは 2 つ用意されています (IPR1 とIPR2)。優先度ビットを使用するには割り込み優先度イネーブルビット (IPEN) をセットする必要があります。
レジスタ 7-8: IPR1: 周辺割り込み優先度レジスタ 1
U-0 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
— ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 未実装ビット : 「0」として読み出し
bit 6 ADIP: A/D コンバータ割り込み優先度ビット
1 = 高優先度 0 = 低優先度
bit 5 RCIP: EUSART 受信割り込み優先度ビット
1 = 高優先度 0 = 低優先度
bit 4 TXIP: EUSART 送信割り込み優先度ビット
1 = 高優先度 0 = 低優先度
bit 3 SSPIP: マスタ同期シリアルポート割り込み優先度ビット
1 = 高優先度 0 = 低優先度
bit 2 CCP1IP: CCP1 割り込み優先度ビット
1 = 高優先度 0 = 低優先度
bit 1 TMR2IP: TMR2/PR2 一致割り込み優先度ビット
1 = 高優先度 0 = 低優先度
bit 0 TMR1IP: TMR1 オーバーフロー割り込み優先度ビット
1 = 高優先度 0 = 低優先度
DS41350D_JP - p. 76 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 7-9: IPR2: 周辺割り込み優先度レジスタ 2
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 U-0
OSCFIP C1IP C2IP EEIP BCLIP USBIP TMR3IP —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 OSCFIP: オシレータ障害割り込み優先度ビット
1 = 高優先度0 = 低優先度
bit 6 C1IP: コンパレータ C1 割り込み優先度ビット
1 = 高優先度0 = 低優先度
bit 5 C2IP: コンパレータ C2 割り込み優先度ビット
1 = 高優先度0 = 低優先度
bit 4 EEIP: データ EEPROM/ フラッシュ書き込み動作割り込み優先度ビット
1 = 高優先度0 = 低優先度
bit 3 BCLIP: バスコリジョン割り込み優先度ビット
1 = 高優先度0 = 低優先度
bit 2 USBIP: USB 割り込み優先度ビット
1 = 高優先度0 = 低優先度
bit 1 TMR3IP: TMR3 オーバーフロー割り込み優先度ビット
1 = 高優先度0 = 低優先度
bit 0 未実装ビット : 「0」として読み出し
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 77
PIC18F/LF1XK50
7.8 RCON レジスタ
RCON レジスタには、直近のリセット、アイドル、スリープモードからのウェイクアップの原因を判断するために使用するフラグビットを格納します。さらに、割り込み優先度機能を有効にする IPEN ビットも格納します。
SBOREN ビットとリセット フラグビットの動作は、23.1「RCON レジスタ」で詳細に説明します。
レジスタ 7-10: RCON: リセット制御レジスタ
R/W-0 R/W-1 U-0 R/W-1 R-1 R-1 R/W-0 R/W-0
IPEN SBOREN(1) — RI TO PD POR(2) BOR
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 IPEN: 割り込み優先度イネーブルビット
1 = 割り込みに対する優先度レベルの設定を有効にする0 = 割り込みに対する優先度レベルの設定を無効にする (PIC16CXXX 互換モード )
bit 6 SBOREN: ソフトウェア BOR イネーブルビット (1)
BOREN<1:0> = 01の場合 :1 = BOR を有効にする0 = BOR を無効にする
BOREN<1:0> = 00、10、または 11の場合 :ビットは無効、「0」として読み出し
bit 5 未実装ビット : 「0」として読み出し
bit 4 RI: RESET命令フラグビット
1 = RESET 命令は実行されていない ( ファームウェアまたはパワーオンリセットによってセットされる )
0 = RESET命令が実行され、デバイスがリセットされた (コードによってリセットされた後はファームウェアによってセットする必要がある )
bit 3 TO: ウォッチドッグ タイムアウト フラグビット
1 = 電源投入、CLRWDT命令または SLEEP命令によってセット 0 = WDT タイムアウトが発生した
bit 2 PD: パワーダウン検出フラグビット
1 = 電源投入または CLRWDT命令によってセット0 = SLEEP命令の実行によってセット
bit 1 POR: パワーオンリセット ステータス ビット (2)
1 = パワーオンリセットは発生していない0 = パワーオンリセットが発生した ( パワーオンリセット後、ソフトウェアによってセットする必要
がある )
bit 0 BOR: ブラウンアウト リセット ステータス ビット (3)
1 = ブラウンアウト リセットは発生していない ( ファームウェアによってのみセットできる )0 = ブラウンアウト リセットが発生した (POR またはブラウンアウト リセットの発生後、ファーム
ウェアによってセットする必要がある )
Note 1: SBOREN が有効に設定されている場合、リセット状態は「1」になります。それ以外の場合は「0」です。
2: POR 時の実際のリセット値は、デバイスリセットの種類によって決まります。詳細は、23.6「レジスタのリセット状態」を参照してください。
3: 表 23-3 を参照してください。
DS41350D_JP - p. 78 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
7.9 INTn ピン割り込み
RC0/INT0、RC1/INT1、RC2/INT2 ピンによる外部割り込みは、エッジによってトリガされます。INTCON2レジスタの対応する INTEDGx ビットがセットされている場合 (= 1)、割り込みは立ち上がりエッジでトリガされます。クリアされている場合、立ち下がりエッジでトリガされます。RCx/INTx ピンで有効なエッジが発生すると、対応するフラグビット INTxF がセットされます。この割り込みは、対応するイネーブルビットINTxE をクリアする事で禁止できます。フラグビットの INTxF は、再度この割り込みを許可する前に、ソフトウェアの割り込みサービスルーチン内でクリアしておく必要があります。
全ての外部割り込み (INT0、INT1、INT2) は、アイドルまたはスリープモードからプロセッサをウェイクアップできます。ただし、これらのモードに移行する前に INTxE をセットしておいた場合に限ります。グローバル割り込みイネーブルビットGIEをセットすると、プロセッサはウェイクアップ後に割り込みベクタに分岐します。
INT1 と INT2 の割り込み優先度は、INTCON3 レジスタの割り込み優先度ビット INT1IP と INT2IP の値によって決まります。INT0 には優先度ビットが実装されていません。INT0 は常に高優先度の割り込み要因として処理されます。
7.10 TMR0 割り込み
8 ビットモードの場合 ( 既定値 )、TMR0 レジスタでオーバーフローが発生すると (FFh 00h)、フラグビット TMR0IF がセットされます。16 ビットモードの場合、TMR0H:TMR0L レジスタペアでオーバーフローが発生すると(FFFFh 0000h)、フラグビットTMR0IFがセットされます。これらの割り込みは、INTCON レジスタのイネーブルビット TMR0IE をセット / クリアする事によって許可 / 禁止できます。Timer0 の割り込み優先度は、INTCON2レジスタの割り込み優先度ビット TMR0IP の値によって決まります。Timer0 モジュールの詳細は、10.0「Timer0 モジュール」を参照してください。
7.11 PORTA と PORTB の状態変化割り込み
PORTA または PORTB の入力が変化すると、INTCONレジスタのフラグビット RABIF がセットされます。この割り込みは、INTCON レジスタのイネーブルビットRABIE をセット / クリアする事によって許可 / 禁止できます。同時に各ピンも IOCA および IOCB レジスタによって個別に有効にしておく必要があります。PORTA および PORTB 状態変化割り込みの優先度は、INTCON2 レジスタの割り込み優先度ビット RABIP の値によって決まります。
7.12 割り込み処理中のコンテキスト保存
割り込みの処理中、PC のアドレスはスタックに保存されます。さらに、WREG、STATUS、BSR レジスタの値が高速リターンスタックに保存されます。割り込みからの高速リターンを使用しない場合 (3.3「データメモリの構成」参照 )、ユーザが割り込みサービスルーチンの入り口で WREG、STATUS、BSR レジスタの値を保存する必要がある場合があります。ユーザ アプリケーションによっては、その他のレジスタの保存も必要です。例 7-1 では、割り込みサービスルーチン内でWREG、STATUS、BSR レジスタの値を保存およびリストアしています。
例 7-1: ステータス、WREG、BSR レジスタ値の RAM への保存 MOVWF W_TEMP ; W_TEMP is in virtual bankMOVFF STATUS, STATUS_TEMP ; STATUS_TEMP located anywhereMOVFF BSR, BSR_TEMP ; BSR_TMEP located anywhere;; USER ISR CODE;MOVFF BSR_TEMP, BSR ; Restore BSRMOVF W_TEMP, W ; Restore WREGMOVFF STATUS_TEMP, STATUS ; Restore STATUS
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 79
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 80 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
8.0 低ドロップアウト (LDO) 電圧レギュレータ
PIC18F1XK50 と PIC18LF1XK50 は、内部低ドロップアウト (LDO) 電圧レギュレータの点で異なります。PIC18F1XK50が LDOレギュレータを内蔵している一方、PIC18LF1XK50 は内蔵していません。
ダイのリソグラフィにより、チップ内部のデジタルロジックの 大動作電圧は 3.6 V ( 定格 ) です。引き続き5.0 V設計にも対応できるように、LDO電圧レギュレータをダイに統合しました。LDO 電圧レギュレータによって、内部デジタルロジックを 3.3 V で動作させる一方、I/O は 5.0 V (VDD) で動作させる事ができます。
LDO 電圧レギュレータには、安定性を確保するために外付けのバイパス コンデンサが必要です。VUSB ピンにも、外付けのバイパス コンデンサが必要です。0.22~ 0.47 µF のセラミック コンデンサを推奨します。
電源投入時、外付けコンデンサは LDO 電圧レギュレータに対しては大きな負荷となってしまいます。誤動作を防ぐために、定電流源によって外付けコンデンサが充電されるまで、デバイスはリセット状態に保たれます。コンデンサが完全に充電されたら、リセットは解除されます。詳細は、27.0「電気的仕様」を参照してください。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 81
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 82 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
9.0 I/O ポート
大 3 つのポートを使用できます。I/O ポートピンの一部は代替機能と多重化されており、デバイスの周辺機能を割り当てる事ができます。通常、周辺機能を有効にしている時には、これらのピンを汎用 I/O ピンとして使用する事はできません。
各ポートの動作には以下の 3 個のレジスタを使用します。
• TRIS レジスタ ( データ方向レジスタ )
• PORTレジスタ (デバイスピンのレベル読み取り )
• LAT レジスタ ( 出力ラッチ )
PORTA データラッチ (LATA レジスタ ) は、I/O ピンが駆動している値に対して Read-Modify-Write 動作を実行する際に便利です。
図 9-1 に、他の周辺機能へのインターフェイスを省略した、汎用 I/O ポートの簡易モデルを示します。
図 9-1: 汎用 I/O ポートの動作
9.1 PORTA、TRISA、LATA レジスタ
PORTA は 5 ビット幅です。PORTA<5:4> ビットは双方向ポート、PORTA<3,1:0> ビットは入力専用ポートです。PORTAに対応するデータ方向レジスタはTRISAです。TRISA ビットをセットすると (= 1)、対応するPORTA のピンが入力になります ( すなわち、出力ドライバが無効になります )。TRISA ビットをクリアすると (= 0)、対応する PORTA のピンが出力になります( すなわち、出力ドライバが有効になり、出力ラッチの内容が選択したピンに出力されます )。
PORTA レジスタを読み出すと、ピンの状態が出力されるのに対し、PORTA レジスタに書き込むと、PORTラッチにデータが格納されます。
PORTA データラッチ (LATA) レジスタはメモリにもマッピングされています。LATA レジスタに対するRead-Modify-Write 動作は、PORTA にラッチされた出力値を読み出した上で、書き戻します。
PORTA の全てのピンは、個別に状態変化割り込みピンとして設定できます。IOCA レジスタの制御ビットによって、各ピンの割り込み機能が有効 ( セット時 )または無効 ( クリア時 ) に設定されます。
INTCON レジスタの RABIE ビットをセットすると、IOCA ビットをセットされているピンの全てで状態変化割り込みが許可されます。RABIE ビットをクリアすると、状態変化割り込みは全て禁止されます。
この割り込みを生成できるのは、入力として設定されているピンだけです ( 出力として設定されたピンがある場合、それらは状態変化割り込みの比較動作から除外されます )。
状態変化割り込みを有効に設定されたピンでは、前回の PORTA 読み出しでラッチされた値と、現在の値が比較されます。各ピンの前回読み出し値との「不一致」出力に対して PORTA 全体の論理和を取り、INTCONレジスタの PORTA 状態変化割り込みフラグビット(RABIF) をセットします。
この割り込みによって、デバイスをスリープモードまたは全てのアイドルモードからウェイクアップできます。ユーザは、割り込みサービスルーチン内で、以下のようにして割り込みをクリアできます。
a) PORTA に対する読み書き動作で不一致の状態を解消する ( ただし、PORTA が MOVFF 命令のソースまたは格納先ではない場合 )。
b) フラグビット RABIF をクリアする。
不一致状態が存在する限り、フラグビットRABIFはセットされたままになります。PORTA に対する読み出しまたは書き込みによって、この条件を解消すれば、RABIFビットをクリアできるようになります。前回の読み出し値を保持するラッチは、MCLR およびブラウンアウトのいずれのリセットからも影響を受けません。これらのリセットのいずれが発生しても、不一致状態が存在する限り、RABIF フラグはセットされたままになります。
DataBus
WR LAT
WR TRIS
RD Port
Data Latch
TRIS Latch
RD TRIS
InputBuffer
I/O pin(1)
QD
CK
QD
CK
EN
Q D
EN
RD LAT
or Port
Note 1: I/O ピンには VDD および VSS との間にダイオード保護回路が挿入されています。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 83
PIC18F/LF1XK50
状態変化割り込みは、キー押下操作によるウェイクアップ等、PORTA を状態変化割り込み機能のみに使用する場合に推奨します。状態変化割り込み機能の使用中に PORTA のポーリングはお勧めできません。
PORTA の各ピンには、個別に制御された弱い内部プルアップが接続されています。WPUA レジスタの各ビットをセットする事で、対応するピンのプルアップが有効になります。INTCON2 レジスタの RABPU ビットをクリアすると、対応する WPUA ビットがセットされている全てのピンでプルアップが有効になります。RABPUビットをセットすると、弱プルアップが全て無効になります。ポートピンを出力として設定すると、弱プルアップは自動的に OFF になります。パワーオンリセットによってもプルアップは無効になります。
RA0 および RA1 は USB モジュール機能と多重化され
ています。USB 機能が有効な場合、内蔵 USB トラン
シーバの差動データラインとして動作します。
RA0 および RA1 には対応する TRISA ビットがありま
せん。デジタルポート ピンとしての機能はデジタル入
力に限られます。USB 動作用に設定した場合のデータ
方向は、その時点での USB モジュールの設定と状態
によって決まります。
RA3 は入力専用ピンです。その動作は、CONFIG3H レジスタの MCLRE ビットによって制御されます。ポートピンとしての機能を選択した場合 (MCLRE = 0)、デ
ジタル入力専用のピンになります。従って、このピンの動作に対応する TRIS または LAT ビットは設けられていません。
RA4 および RA5 ピンはメインオシレータ ピンと多重化されています。コンフィグレーション レジスタ内のメインオシレータ選択に応じて、オシレータまたは I/Oピンとして設定されます ( 詳細は、24.1「コンフィグレーション ビット」を参照してください )。RA4 および RA5 をポートピンとして使用しない場合、対応するTRIS および LAT ビットからは「0」が読み出されます。
RA4 ピンはアナログ入力と多重化されています。RA4ピンのアナログ動作は、ANSEL レジスタの ANS3 ビットをセット ( パワーオン リセット後の既定の設定 ) すると有効になります。
例 9-1: PORTA の初期化
Note 1: 読み出し動作の実行中 (Q2 サイクルの開始時 ) に I/O ピンが変化する可能性がある場合、割り込みフラグビット RABIF がセットされない恐れがあります。また、ポートに対する読み書きは、そのポートの全てのビットに影響を与えるため、状態変化割り込みモードで複数のピンを使用する場合には注意が必要です。あるピンの変化を処理している間に別のピンの変化を見逃す可能性があります。
2: USB 動作用の設定では、RA0 および RA1の状態変化割り込み機能は自動的に無効になります。
3: RA<1:0>ポートピンのデジタル入力機能を使用するには、状態変化割り込みピンを有効にして (IOCA <1:0> = 11)、さらにUSBモジュールを無効にする必要があります (USBEN = 0)。
Note: パワーオン リセット時にRA4は既定ではアナログ入力として設定され、「0」が読み出されます。また、RA<1:0> およびRA<5:3> はデジタル入力として設定されます。
Note: パワーオン リセット時に RA3 のデジタル入力機能が有効になるのは、マスタクリア機能を無効に設定している場合だけです。
Note: パワーオン リセット時、RA4 はアナログ入力として設定され、「0」が読み出されます。
CLRF PORTA ; Initialize PORTA by; clearing output; data latches
CLRF LATA ; Alternate method; to clear output; data latches
MOVLW 030h ; Value used to ; initialize data ; direction
MOVWF TRISA ; Set RA<5:4> as output
DS41350D_JP - p. 84 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 9-1: PORTA: PORTA レジスタ
U-0 U-0 R/W-x R/W-x R-x U-0 R/W-x R/W-x
— — RA5 RA4 RA3 — RA1 RA0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-6 未実装ビット : 「0」として読み出し
bit 5-3 RA<5:3>: PORTA I/O ピンビット (1)
1 = ポートピンが > VIH
0 = ポートピンが < VIL
bit 2 未実装ビット : 「0」として読み出し
bit 1-0 RA<1:0>: PORTA I/O ピンビット1 = ポートピンが > VIH
0 = ポートピンが < VIL
Note 1: RA3 ビットを使用できるのはマスタ クリア リセットが無効に設定されている場合 ( コンフィグレーション ビット MCLRE = 0) のみです。それ以外の場合、RA3 からは「0」が読み出されます。このビットは読み出し専用です。
レジスタ 9-2: TRISA: PORTA 3 ステート レジスタ
U-0 U-0 R/W-1 R/W-1 U-0 U-0 U-0 U-0
— — TRISA5 TRISA4 — — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-6 未実装ビット : 「0」として読み出し
bit 5-4 TRISA<5:4>: PORTA 3 ステート制御ビット1 = PORTA のピンを入力として設定 (3 ステート入力 )0 = PORTA のピンを出力として設定
bit 3-0 未実装ビット : 「0」として読み出し
Note 1: XT、HS、LP オシレータモードの場合、TRISA<5:4> からは常に「1」が読み出されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 85
PIC18F/LF1XK50
レジスタ 9-3: WPUA: PORTA 弱プルアップ レジスタ
U-0 U-0 R/W-1 R/W-1 R/W-1 U-0 U-0 U-0
— — WPUA5 WPUA4 WPUA3 — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-6 未実装ビット : 「0」として読み出し
bit 5-3 WPUA<5:3>: 弱プルアップ イネーブルビット
1 = プルアップを有効に設定
0 = プルアップを無効に設定
bit 2 未実装ビット : 「0」として読み出し
bit 1-0 WPUA<1:0>: 弱プルアップ イネーブルビット
1 = プルアップを有効に設定
0 = プルアップを無効に設定
レジスタ 9-4: IOCA: PORTA 状態変化割り込みレジスタ
U-0 U-0 R/W-0 R/W-0 R-0 U-0 R/W-0 R/W-0
— — IOCA5 IOCA4 IOCA3 — IOCA1 IOCA0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-6 未実装ビット : 「0」として読み出し
bit 5-3 IOCA<5:3>: PORTA I/O ピンビット
1 = 状態変化割り込みを許可
0 = 状態変化割り込みを禁止
bit 2 未実装ビット : 「0」として読み出し
bit 1-0 IOCA<1:0>: PORTA I/O ピンビット
1 = 状態変化割り込みを許可
0 = 状態変化割り込みを禁止
レジスタ 9-5: LATA: PORTA データ ラッチ レジスタ
U-0 U-0 R/W-x R/W-x U-0 U-0 U-0 U-0
- - LATA5 LATA4 - - - -
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-6 未実装ビット : 「0」として読み出し
bit 5-4 LATA<5:4>: RA<5:4> ポート I/O 出力ラッチレジスタ ビット
bit 3-0 未実装ビット : 「0」として読み出し
DS41350D_JP - p. 86 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 9-1: PORTA I/O の要約
ピン 機能TRIS設定
I/OI/O
タイプ説明
RA0/IOCA0/D+/PGD
RA0 —(1) I TTL PORTA<0> のデータ入力です。USB を有効にした場合、無効になり
ます。
IOCA0 —(1) I TTL ピン状態変化割り込みです。USB を有効に設定した場合、無効にな
ります。
D+ —(1) I XCVR USB バス差動入力ライン (+) ( 内部トランシーバ ) です。
—(1) O XCVR USB バス差動出力ライン (+) ( 内部トランシーバ ) です。
PGD —(1) O DIG ICSP™ のシリアル実行データ出力です。
—(1) I ST ICSP™ のシリアル実行データ入力です。
RA1/IOCA1/D-/PGC
RA1 —(1) I TTL PORTA<1> のデータ入力です。USB を有効にした場合、無効になり
ます。
IOCA1 —(1) I TTL ピン状態変化割り込みです。USB を有効に設定した場合、無効にな
ります。
D- —(1) I XCVR USB バス差動入力ライン (-) ( 内部トランシーバ ) です。
—(1) O XCVR USB バス差動出力ライン (-) ( 内部トランシーバ ) です。
PGC —(1) O DIG ICSP™ のシリアル実行クロック出力です。
—(1) I ST ICSP™ のシリアル実行クロック入力です。
RA3/IOCA3/MCLR/VPP
RA3 —(2) I ST PORTA<3> データ入力です。コンフィグレーション ビット MCLREをクリアすると有効になります。プログラム可能な弱プルアップがあ
ります。
IOCA3 —(1) I TTL ピン状態変化割り込み
MCLR — I ST 外部マスタクリア入力です。コンフィグレーション ビット MCLREをセットすると有効になります。
VPP — I ANA 高電圧検出です。ICSP™ モードへの移行を検出するために使用しま
す。ピンのモードに関わらず、常に使用可能です。
RA4/IOCA4/AN3/OSC2/CLKOUT
RA4 0 O DIG LATA<4> データ出力です。RCIO、INTIO2、ECIO モードのみで有効
になります。
1 I TTL PORTA<4> データ入力です。プログラム可能な弱プルアップがあり
ます。RCIO、INTIO2、ECIO モードのみで有効になります。
IOCA4 1 I TTL ピン状態変化割り込み
AN3 1 I ANA A/D 入力チャンネル 3 です。POR 時の既定の設定です。
OSC2 x O ANA メインオシレータのフィードバック出力接続 (XT、HS、LP モード )です。
CLKOUT x O DIG RC、INTIO1、EC オシレータモードのシステム サイクルクロック出
力 (FOSC/4) です。
RA5/IOCA5/OSC1/CLKIN
RA5 0 O DIG LATA<5>データ出力です。外部オシレータモードでは無効になります。
1 I TTL PORTA<5> データ入力です。外部オシレータモードでは無効になり
ます。プログラム可能な弱プルアップがあります。
IOCA5 1 I TTL ピン状態変化割り込み
OSC1 x I ANA メインオシレータの入力接続です。
CLKIN x I ANA メインクロックの入力接続です。
凡例 : DIG = デジタルレベル出力、TTL = TTL 入力バッファ、ST = シュミットトリガ入力バッファ、ANA = アナログレベル入力 / 出力
x = ドントケア ( このオプションでは TRIS ビットは無視され、ポートの方向に影響を与えません。)
Note 1: RA0 および RA1 には、対応する TRISA ビットがありません。ポートモードでは、これらのピンは入力専用です。
USB のデータ方向は、USB のコンフィグレーションによって決まります。
2: RA3 には対応する TRISA ビットがありません。このピンは、モードに関わらず常に入力になります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 87
PIC18F/LF1XK50
表 9-2: PORTA に関連するレジスタの要約
レジスタ名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の掲載ページ
PORTA — — RA5(1) RA4(1) RA3(2) — RA1(3) RA0(3) 290
LATA — — LATA5(1) LATA4(1) — — — — 290
TRISA — — TRISA5(1) TRISA4(1) — — — — 290
ANSEL ANS7 ANS6 ANS5 ANS4 ANS3 — — — 290
SLRCON — — — — — SLRC SLRB SLRA 290
IOCA — — IOCA5 IOCA4 IOCA3(2) — IOCA1(3) IOCA0(3) 290
WPUA — — WPUA5 WPUA4 WPUA3(2) — — — 290
UCON — PPBRST SE0 PKTDIS USBEN RESUME SUSPND — 290
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
INTCON2 RABPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RABIP 287
凡例 : — = 未実装ビット、「0」として読み出し。網掛けの部分は PORTA では使用しません。
Note 1: RA<5:4> および対応するラッチやデータ方向ビットでは、オシレータのコンフィグレーションに応じてI/O ピンとしての機能が有効になります。それ以外の場合、「0」として読み出されます。
2: マスタクリア機能が無効に設定されている ( コンフィグレーション ビット MCLRE = 0) 場合にのみ実装されます。
3: RA1 および RA0 をポートピンとして使用できるのは、USB モジュールが無効に設定されている(UCON<3> = 0) 場合のみです。
DS41350D_JP - p. 88 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
9.2 PORTB、TRISB、LATB レジスタ
PORTB は 4 ビット幅の双方向ポートです。PORTB に対応するデータ方向レジスタは TRISB です。TRISBビットをセットすると (= 1)、対応する PORTB のピンが入力になります ( すなわち、出力ドライバが無効になります )。TRISB ビットをクリアすると (= 0)、対応する PORTB のピンが出力になります ( すなわち、出力ドライバが有効になり、出力ラッチの内容が選択したピンに出力されます )。
PORTBデータラッチ (LATB)レジスタはメモリにも対応付けられています。LATB レジスタに対する Read-Modify-Write 動作は、PORTB にラッチされた出力値を読み出した上で、書き戻します。
例 9-2: PORTB の初期化
PORTB の全てのピンは、個別に状態変化割り込みピンとして設定できます。IOCB レジスタの制御ビットによって、各ピンの割り込み機能が有効 ( セット時 )または無効 ( クリア時 ) に設定されます。
INTCON レジスタの RABIE ビットをセットすると、IOCB ビットをセットされているピンの全てで状態変化割り込みが許可されます。RABIE ビットをクリアすると、状態変化割り込みは全て禁止されます。
この割り込みを生成できるのは、入力として設定されているピンだけです ( 出力として設定されたピンがある場合、それらは状態変化割り込みの比較動作から除外されます )。
状態変化割り込みを有効に設定されたピンでは、前回の PORTB 読み出しでラッチされた値と、現在の値が比較されます。各ピンの前回読み出し値との「不一致」出力に対して PORTB 全体の論理和を取り、INTCONレジスタの PORTB 状態変化割り込みフラグビット(RABIF) をセットします。
この割り込みによって、デバイスをスリープモードまたは全てのアイドルモードからウェイクアップできます。ユーザは、割り込みサービスルーチン内で、以下のようにして割り込みをクリアできます。
a) PORTB に対する、なんらかの読み書き動作は不一致の状態を解消します ( ただし、PORTB が MOVFF命令のソースまたは格納先ではない場合 )。
b) フラグビット RABIF をクリアします。
不一致状態が存在する限り、フラグビットRABIFはセットされたままになります。PORTB に対する読み出しまたは書き込みによって、この条件を解消すれば、RABIFビットをクリアできるようになります。前回の読み出し値を保持するラッチは、MCLR とブラウンアウトのいずれのリセットからも影響を受けません。これらのリセットのいずれが発生しても、不一致状態が存在する限り、RABIF フラグはセットされたままになります。
状態変化割り込みは、キー押下操作によるウェイクアップ等、PORTB を状態変化割り込み機能のみに使用する場合に推奨します。状態変化割り込み機能の使用中に PORTB のポーリングはお勧めできません。
PORTB の各ピンには、個別に制御された弱い内部プルアップが接続されています。WPUB レジスタの各ビットをセットする事で、対応するピンのプルアップが有効になります。INTCON2 レジスタの RABPU ビットをクリアすると、対応する WPUB ビットがセットされている全てのピンでプルアップが有効になります。RABPUビットをセットすると、弱プルアップが全て無効になります。ポートピンを出力として設定すると、弱プルアップは自動的に OFF になります。パワーオンリセットによってもプルアップは無効になります。
CLRF PORTB ; Initialize PORTB by; clearing output; data latches
CLRF LATB ; Alternate method; to clear output; data latches
MOVLW 0F0h ; Value used to; initialize data ; direction
MOVWF TRISB ; Set RB<7:4> as outputs
Note: 読み出し動作の実行中 (Q2 サイクルの開始時 ) に I/O ピンが変化する可能性がある場合、割り込みフラグビットRABIFがセットされない恐れがあります。また、ポートに対する読み書きは、そのポートの全てのビットに影響を与えるため、状態変化割り込みモードで複数のピンを使用する場合には注意が必要です。あるピンの変化を処理している間に別のピンの変化を見逃す可能性があります。
Note: パワーオン リセット時にRB<5:4>は既定ではアナログ入力として設定され、「0」として読み出されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 89
PIC18F/LF1XK50
レジスタ 9-6: PORTB: PORTB レジスタ
R/W-x R/W-x R/W-x R/W-x U-0 U-0 U-0 U-0
RB7 RB6 RB5 RB4 — — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-4 RB<7:4>: PORTB I/O ピンビット1 = ポートピンが > VIH
0 = ポートピンが < VIL
bit 3-0 未実装ビット : 「0」として読み出し
レジスタ 9-7: TRISB: PORTB 3 ステート レジスタ
R/W-1 R/W-1 R/W-1 R/W-1 U-0 U-0 U-0 U-0
TRISB7 TRISB6 TRISB5 TRISB4 — — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-4 TRISB<7:4>: PORTB 3 ステート制御ビット1 = PORTB のピンを入力として設定 (3 ステート入力 )0 = PORTB のピンを出力として設定
bit 3-0 未実装ビット : 「0」として読み出し
DS41350D_JP - p. 90 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 9-8: WPUB: PORTB 弱プルアップ レジスタ
R/W-1 R/W-1 R/W-1 R/W-1 U-0 U-0 U-0 U-0
WPUB7 WPUB6 WPUB5 WPUB4 — — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-4 WPUB<7:4>: 弱プルアップ イネーブルビット1 = プルアップを有効に設定0 = プルアップを無効に設定
bit 3-0 未実装ビット : 「0」として読み出し
レジスタ 9-9: IOCB: PORTB 状態変化割り込みレジスタ
R/W-0 R/W-0 R/W-0 R/W-0 U-0 U-0 U-0 U-0
IOCB7 IOCB6 IOCB5 IOCB4 — — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-4 IOCB<7:4>: 状態変化割り込みビット1 = 状態変化割り込みを許可0 = 状態変化割り込みを禁止
bit 3-0 未実装ビット : 「0」として読み出し
レジスタ 9-10: LATB: PORTB データラッチ レジスタ
R/W-x R/W-x R/W-x R/W-x U-0 U-0 U-0 U-0
LATB7 LATB6 LATB5 LATB4 — — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-4 LATB<7:4>: RB<7:4> ポート I/O 出力ラッチ レジスタ ビット
bit 3-0 未実装ビット : 「0」として読み出し
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 91
PIC18F/LF1XK50
表 9-3: PORTB I/O の要約
ピン 機能TRIS設定
I/OI/O
タイプ説明
RB4/IOCB4/AN10/SDI/SDA
RB4 0 O DIG LATB<4> データ出力です。アナログ入力の影響は受けません。
1 I TTL PORTB<4> データ入力です。プログラム可能な弱プルアップがあり
ます。
IOCB4 1 I TTL ピン状態変化割り込み
AN10 1 I ANA ADC 入力チャンネル 10
SDI 1 I ST SPI データ入力 (MSSP モジュール )
SDA 1 I DIG I2C™ データ出力 (MSSP モジュール ) です。ポートデータよりも優先
されます。
1 O I2C I2C™ データ入力 (MSSP モジュール ) です。入力タイプはモジュール
の設定によって決まります。
RB5/IOCB5/AN11/RX/DT
RB5 0 O DIG LATB<5> データ出力です。
1 I TTL PORTB<5> データ入力です。プログラム可能な弱プルアップがあり
ます。
IOCB5 1 I TTL ピン状態変化割り込み
AN11 1 I ANA ADC 入力チャンネル 11
RX 1 I ST 非同期シリアル受信データ入力 (USART モジュール ) です。
DT 1 O DIG 同期シリアルデータ出力 (USART モジュール )。ポートデータよりも
優先されます。
1 I ST 同期シリアルデータ入力 (USART モジュール ) です。ユーザが入力と
して設定する必要があります。
RB6/IOCB6/SCK/SCL
RB6 0 O DIG LATB<6> データ出力です。
1 I TTL PORTB<6> データ入力です。プログラム可能な弱プルアップがあり
ます。
IOCB6 1 I TTL ピン状態変化割り込み
SCK 0 O DIG SPI クロック出力 (MSSP モジュール ) です。ポートデータよりも優
先されます。
1 I ST SPI クロック入力 (MSSP モジュール )
SCL 0 O DIG I2C™ クロック出力 (MSSP モジュール ) です。ポートデータよりも優
先されます。
1 I I2C I2C™ クロック入力 (MSSP モジュール ) です。入力タイプはモジュー
ルの設定によって決まります。
RB7/IOCB7/TX/CK RB7 0 O DIG LATB<7> データ出力です。
1 I TTL PORTB<7> データ入力です。プログラム可能な弱プルアップがあり
ます。
IOCB7 1 I TTL ピン状態変化割り込み
TX 1 O DIG 非同期シリアル送信データ出力 (USART モジュール ) です。
ポートデータよりも優先されます。ユーザが出力として設定する必要
があります。
CK 1 O DIG 同期シリアルクロック出力 (USART モジュール ) です。ポートデータ
よりも優先されます。
1 I ST 同期シリアルクロック入力 (USART モジュール ) です。
凡例 : DIG = デジタルレベル出力、TTL = TTL 入力バッファ、ST = シュミットトリガ入力バッファ、ANA = アナログレベル入力 / 出力
x = ドントケア ( このオプションでは TRIS ビットは無視され、ポートの方向に影響を与えません。)
DS41350D_JP - p. 92 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 9-4: PORTB に関連するレジスタの要約
レジスタ名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の掲載ページ
PORTB RB7 RB6 RB5 RB4 — — — — 290
LATB LATB7 LATB6 LATB5 LATB4 — — — — 290
TRISB TRISB7 TRISB6 TRISB5 TRISB4 — — — — 290
WPUB WPUB7 WPUB6 WPUB5 WPUB4 — — — — 290
IOCB IOCB7 IOCB6 IOCB5 IOCB4 290
SLRCON — — — — — SLRC SLRB SLRA 290
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
INTCON2 RABPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RABIP 287
ANSELH — — — — ANS11 ANS10 ANS9 ANS8 290
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 289
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 289
SSPCON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 288
凡例 : — = 未実装ビット、「0」として読み出し。網掛けの部分は PORTB では使用しません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 93
PIC18F/LF1XK50
9.3 PORTC、TRISC、LATC レジスタ
PORTC は 8 ビット幅の双方向ポートです。PORTC に対応するデータ方向レジスタは TRISC です。TRISCビットをセットすると (= 1)、対応する PORTC のピンが入力になります ( すなわち、出力ドライバが無効になります )。TRISC ビットをクリアすると (= 0)、対応する PORTC のピンが出力になります ( すなわち、出力ドライバが有効になり、出力ラッチの内容が選択したピンに出力されます )。
PORTCデータラッチ (LATC)レジスタはメモリにも対応付けられています。LATC レジスタに対する Read-Modify-Write 動作は、PORTC にラッチされた出力値を読み出した上で、書き戻します。
PORTCでは、全てのピンにシュミットトリガ入力バッファが実装されています。各ピンは、個別に入力または出力として設定できます。
例 9-3: PORTC の初期化
Note: パワーオン リセット時、RC<7:6> およびRC<3:0> はアナログ入力として設定され、「0」が読み出されます。
CLRF PORTC ; Initialize PORTC by; clearing output; data latches
CLRF LATC ; Alternate method; to clear output; data latches
MOVLW 0CFh ; Value used to ; initialize data ; direction
MOVWF TRISC ; Set RC<3:0> as inputs; RC<5:4> as outputs; RC<7:6> as inputs
レジスタ 9-11: PORTC: PORTC レジスタ
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-0 RC<7:0>: PORTC I/O ピンビット1 = ポートピンが > VIH
0 = ポートピンが < VIL
レジスタ 9-12: TRISC: PORTC 3 ステート レジスタ
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-0 TRISC<7:0>: PORTC 3 ステート制御ビット1 = PORTC を入力として設定 (3 ステート入力 )0 = PORTC を出力として設定
DS41350D_JP - p. 94 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 9-13: LATC: PORTC データラッチ レジスタ
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-0 LATC<7:0>: RB<7:0> ポート I/O 出力ラッチ レジスタ ビット
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 95
PIC18F/LF1XK50
表 9-5: PORTC I/O の要約
ピン 機能TRIS設定
I/OI/O
タイプ説明
RC0/AN4/C12IN+/VREF+/INT0
RC0 0 O DIG LATC<0> データ出力
1 I ST PORTC<0> データ入力
AN4 1 I ANA A/D 入力チャンネル 4
C12IN+ 1 I ANA コンパレータ C1 および C2 の非反転入力です。アナログ選択レジスタ
は ADC と共用です。
VREF+ 1 I ANA ADC およびコンパレータの電圧リファレンス High 入力
INT0 1 I ST 外部割り込み 0 入力
RC1/AN5/C12IN1-/VREF-/INT1
RC1 0 O DIG LATC<1> データ出力
1 I ST PORTC<1> データ入力
AN5 1 I ANA A/D 入力チャンネル 5
C12IN1- 1 I ANA コンパレータ C1 および C2 の反転入力です。アナログ選択レジスタは
ADC と共用です。
VREF- 1 I ANA ADC およびコンパレータの電圧リファレンス Low 入力
INT1 1 I ST 外部割り込み 1 入力
RC2/AN6/C12IN2-/CVREF/P1D/INT2
RC2 0 O DIG LATC<2> データ出力
1 I ST PORTC<2> データ入力
AN6 1 I ANA A/D 入力チャンネル 6
C12IN2- 1 I ANA コンパレータ C1 および C2 の反転入力、チャンネル 2 です。アナログ
選択レジスタは ADC と共用です。
CVREF x O ANA 電圧リファレンス出力です。この機能を有効にすると、デジタル I/O は
無効になります。
P1D 0 O DIG ECCP1 拡張 PWM 出力、チャンネル D です。拡張 PWM シャットダ
ウン時に 3 ステートに設定する事も可能です。ポートデータよりも優
先されます。
INT2 1 I ST 外部割り込み 2 入力
RC3/AN7/C12IN3-/P1C/PGM
RC3 0 O DIG LATC<3> データ出力
1 I ST PORTC<3> データ入力
AN7 1 I ANA A/D 入力チャンネル 7
C12IN3- 1 I ANA コンパレータ C1 および C2 の反転入力、チャンネル 3 です。アナログ
選択レジスタは ADC と共用です。
P1C 0 O DIG ECCP1 拡張 PWM 出力、チャンネル C です。拡張 PWM シャットダ
ウン時に 3 ステートに設定する事も可能です。ポートデータよりも優
先されます。
PGM x I ST 単一電源プログラミング モード エントリ (ICSP™) です。コンフィグ
レーション ビット LVP によって有効に設定されます。
その他のピン機能は全て無効になります。
RC4/C12OUT/P1B
RC4 0 O DIG LATC<4> データ出力
1 I ST PORTC<4> データ入力
C12OUT 0 O DIG コンパレータ1および2の出力です。ポートデータよりも優先されます。
P1B 0 O DIG ECCP1 拡張 PWM 出力、チャンネル B です。拡張 PWM シャットダ
ウン時に 3 ステートに設定する事も可能です。ポートデータよりも優
先されます。
凡例 : DIG = デジタルレベル出力、TTL = TTL 入力バッファ、ST = シュミットトリガ入力バッファ、ANA = アナログレベル入力 / 出力
I2C/SMB = I2C/SMBus 入力バッファ、x = ドントケア ( このオプションでは TRIS ビットは無視され、ポートの方向に影
響を与えません。)
DS41350D_JP - p. 96 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 9-6: PORTC に関連するレジスタの要約
RC5/CCP1/P1A/T0CKI
RC5 0 O DIG LATC<5> データ出力
1 I ST PORTC<5> データ入力
CCP1 0 O DIG ECCP1 のコンペアまたは PWM 出力です。ポートデータよりも優先
されます。
1 I ST ECCP1 キャプチャ入力
P1A 0 0 DIG ECCP1 拡張 PWM 出力、チャンネル A です。拡張 PWM シャットダウ
ン時に 3 ステートに設定する事も可能です。ポートデータよりも優先
されます。
T0CKI 1 I ST Timer0 カウンタ入力
RC6/AN8/SS/T13CKI/T1OSCI
RC6 0 O DIG LATC<6> データ出力
1 I ST PORTC<6> データ入力
AN8 1 I ANA A/D 入力チャンネル 8
SS 1 I TTL SSP のスレーブ選択入力 (MSSP モジュール )
T13CKI 1 I ST Timer1 および Timer3 カウンタ入力
T1OSCI x O ANA Timer1 オシレータ入力です。Timer1 オシレータが有効な場合に、有効
になります。
デジタル I/O は無効になります。
RC7/AN9/SDO/T1OSCO
RC7 0 O DIG LATC<7> データ出力
1 I ST PORTC<7> データ入力
AN9 1 I ANA A/D 入力チャンネル 9
SDO 0 I DIG SPI データ出力 (MSSP モジュール ) です。ポートデータよりも優先さ
れます。
T1OSCO x O ANA Timer1 オシレータ出力です。Timer1 オシレータが有効な場合に、有効
になります。
デジタル I/O は無効になります。
レジスタ名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット
値の掲載
ページ
PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 290
LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0 290
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
ANSEL ANS7 ANS6 ANS5 ANS4 ANS3 — — — 290
ANSELH — — — — ANS11 ANS10 ANS9 ANS8 290
T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 288
T3CON RD16 — T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON 289
SSPCON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 288
CCP1CON P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 289
ECCP1AS ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1 PSSBD0 289
PSTRCON — — — STRSYNC STRD STRC STRB STRA 289
SLRCON — — — — — SLRC SLRB SLRA 290
REFCON1 D1EN D1LPS DAC1OE --- D1PSS1 D1PSS0 --- D1NSS 289
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
INTCON2 RABPU INTEDG0 INTEDG1 INTEDG2 — TMR0IP — RABIP 287
INTCON3 INT2IP INT1IP — INT2IE INT1IE — INT2IF INT1IF 287
表 9-5: PORTC I/O の要約 ( 続き )
ピン 機能TRIS設定
I/OI/O
タイプ説明
凡例 : DIG = デジタルレベル出力、TTL = TTL 入力バッファ、ST = シュミットトリガ入力バッファ、ANA = アナログレベル入力 / 出力
I2C/SMB = I2C/SMBus 入力バッファ、x = ドントケア ( このオプションでは TRIS ビットは無視され、ポートの方向に影
響を与えません。)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 97
PIC18F/LF1XK50
9.4 ポートのアナログ制御
ポートピンの中には、A/D コンバータやコンパレータ等のアナログ機能と多重化されているものがあります。これらの I/O ピンをアナログ入力として使用する場合、デジタル入力バッファを無効にして、デジタル入力への不適切なバイアスによって過大電流が流れないようにする必要があります。アナログ機能共用ピンに接続されたデジタル入力バッファを個別に制御するために、ANSEL および ANSELH レジスタがあります。
ANSx ビットを High にセットすると、対応するデジタル入力バッファが無効になり、そのピンを読み出すと常に「0」が返されるようになります。そして、その状態のままアナログピンとしても適切に機能します。
また、ANSx ビットの状態は、デジタル出力機能に対しては何の影響も与えません。対応する TRISx ビットをクリアし、ANSx ビットをセットしたピンは、デジタル出力として通常通り機能しますが、入力モードはアナログになります。
レジスタ 9-14: ANSEL: アナログ選択レジスタ 1
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 U-0 U-0 U-0
ANS7 ANS6 ANS5 ANS4 ANS3 — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 ANS7: RC3 アナログ選択制御ビット
1 = RC3 のデジタル入力バッファを無効に設定0 = RC3 のデジタル入力バッファを有効に設定
bit 6 ANS6: RC2 アナログ選択制御ビット
1 = RC2 のデジタル入力バッファを無効に設定0 = RC2 のデジタル入力バッファを有効に設定
bit 5 ANS5: RC1 アナログ選択制御ビット
1 = RC1 のデジタル入力バッファを無効に設定0 = RC1 のデジタル入力バッファを有効に設定
bit 4 ANS4: RC0 アナログ選択制御ビット
1 = RC0 のデジタル入力バッファを無効に設定0 = RC0 のデジタル入力バッファを有効に設定
bit 3 ANS3: RA4 アナログ選択制御ビット
1 = RA4 のデジタル入力バッファを無効に設定0 = RA4 のデジタル入力バッファを有効に設定
bit 2-0 未実装ビット : 「0」として読み出し
DS41350D_JP - p. 98 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 9-15: ANSELH: アナログ選択レジスタ 2
U-0 U-0 U-0 U-0 R/W-1 R/W-1 R/W-1 R/W-1
— — — — ANS11 ANS10 ANS9 ANS8
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-4 未実装ビット : 「0」として読み出し
bit 3 ANS11: RB5 アナログ選択制御ビット
1 = RB5 のデジタル入力バッファを無効に設定0 = RB5 のデジタル入力バッファを有効に設定
bit 2 ANS10: RB4 アナログ選択制御ビット
1 = RB4 のデジタル入力バッファを無効に設定0 = RB4 のデジタル入力バッファを有効に設定
bit 1 ANS9: RC7 アナログ選択制御ビット
1 = RC7 のデジタル入力バッファを無効に設定0 = RC7 のデジタル入力バッファを有効に設定
bit 0 ANS8: RC6 アナログ選択制御ビット
1 = RC6 のデジタル入力バッファを無効に設定0 = RC6 のデジタル入力バッファを有効に設定
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 99
PIC18F/LF1XK50
9.5 ポートのスルーレート制御
各ポートの出力スルーレートをプログラムできます。標準的な遷移、あるいは EMI を 小限に抑えるために標準の 0.1 倍に低速化した遷移のいずれかを選択できます。既定のスルーレートは、全てのポートで低速に設定されます。
レジスタ 9-16: SLRCON: スルーレート制御レジスタ
U-0 U-0 U-0 U-0 U-0 R/W-1 R/W-1 R/W-1
— — — — — SLRC SLRB SLRA
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-3 未実装ビット : 「0」として読み出し
bit 2 SLRC: PORTC スルーレート制御ビット
1 = PORTC の全出力のスルーレートを標準レートの 0.1 倍に設定0 = PORTC の全出力のスルーレートを標準に設定
bit 1 SLRB: PORTB スルーレート制御ビット
1 = PORTB の全出力のスルーレートを標準レートの 0.1 倍に設定0 = PORTB の全出力のスルーレートを標準に設定
bit 0 SLRA: PORTA スルーレート制御ビット
1 = PORTA の全出力のスルーレートを標準レートの 0.1 倍に設定 (1)
0 = PORTA の全出力のスルーレートを標準に設定
Note 1: RA4 のピンを CLKOUT として使用する場合、その既定のスルーレートは標準になります。
DS41350D_JP - p. 100 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
10.0 TIMER0 モジュール
Timer0 モジュールには以下の機能があります。
• 8/16 ビットモードのタイマまたはカウンタ動作をソフトウェアによって選択可能
• 読み書き可能なレジスタ
• 専用の 8 ビット ソフトウェア プログラマブル プリスケーラ
• 選択可能なクロック源 ( 内部または外部 )
• 外部クロックのエッジ選択
• オーバーフロー割り込み
T0CON レジスタ ( レジスタ 10-1) は、プリスケール値の選択を含むモジュールのあらゆる機能を制御します。このレジスタは読み書きの両方が可能です。
図 10-1 に、Timer0 モジュールの 8 ビットモードの概略ブロック図を示します。図 10-2 に、16 ビットモードの概略ブロック図を示します。
レジスタ 10-1: T0CON: TIMER0 制御レジスタ
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 TMR0ON: Timer0 ON/OFF 制御ビット
1 = Timer0 を ON にする0 = Timer0 を OFF にする
bit 6 T08BIT: Timer0 8 ビット /16 ビット制御ビット
1 = Timer0 を 8 ビットのタイマ / カウンタとして設定する0 = Timer0 を 16 ビットのタイマ / カウンタとして設定する
bit 5 T0CS: Timer0 クロック源選択ビット
1 = T0CKI ピンの遷移0 = 内部命令サイクルクロック (CLKOUT)
bit 4 T0SE: Timer0 ソースエッジ選択ビット
1 = T0CKI ピンの High から Low への遷移時にインクリメントする0 = T0CKI ピンの Low から High への遷移時にインクリメントする
bit 3 PSA: Timer0 プリスケーラ割り当てビット
1 = Timer0 プリスケーラを割り当てない。Timer0 クロック入力はプリスケーラをバイパスする0 = Timer0 プリスケーラを割り当てる。Timer0 クロック入力はプリスケーラを経由して供給される
bit 2-0 T0PS<2:0>: Timer0 プリスケーラ選択ビット
111 = 1:256 のプリスケール値を選択する110 = 1:128 のプリスケール値を選択する101 = 1:64 のプリスケール値を選択する100 = 1:32 のプリスケール値を選択する011 = 1:16 のプリスケール値を選択する010 = 1:8 のプリスケール値を選択する001 = 1:4 のプリスケール値を選択する000 = 1:2 のプリスケール値を選択する
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 101
PIC18F/LF1XK50
10.1 Timer0 の動作
Timer0 はタイマまたはカウンタのいずれかのモードによる動作が可能です。モードは T0CON レジスタのT0CSビットによって選択します。タイマモード(T0CS= 0) の既定値設定では、異なるプリスケール値を選択していない限り、モジュールがクロックごとにインクリメントします (10.3「プリスケーラ」参照 )。ただし、TMR0 レジスタへの書き込み後の 2 命令サイクルの間は、Timer0 のインクリメントが禁止されます。この制約に対処するには、TMR0 レジスタに書き込む値をあらかじめ調整して、インクリメントされない回数を補います。
カウンタモードは T0CS ビットをセット (= 1) する事で選択します。このモードでは、T0CKI ピンの立ち上がりまたは立ち下がりエッジで Timer0 をインクリメントします。インクリメントするエッジは T0CON レジスタのTimer0ソースエッジ選択ビットT0SEによって決まります。このビットをクリアすると立ち上がりエッジが選択されます。次に、外部クロック入力を使用する場合の制約について説明します。
Timer0 の駆動には外部クロック源を使用できます。ただし、外部クロックが内部の位相クロック (TOSC) と確実に同期できるように、いくつかの要件(表 27-6参照)を満たす必要があります。同期確立からタイマ / カウンタのインクリメント開始までには遅延があります。
10.2 16 ビットモードにおける Timer0 の読み書き
16 ビットモード動作時の TMR0H は Timer0 の実際の上位バイトではなく、バッファを介した値です。実際の Timer0 上位バイトは、直接読み書きできません( 図 10-2 参照 )。TMR0H は TMR0L の読み出し時にTimer0 の上位バイトの内容によって更新されます。この動作により、上位バイトと下位バイトの読み出しが有効であったかどうか検証する事なく、Timer0の全16ビットを一括して読み出す事ができます。上位バイトと下位バイトを別々に連続して読み出す場合、2 つの読み出しの間でロールオーバーが発生して無効な値が得られる恐れがあります。
読み出しと同様に Timer0 の上位バイトへの書き込みも、TMR0H のバッファレジスタを介して実行する必要があります。TMR0H に書き込んでも Timer0 には直接影響を与えません。Timer0 の上位バイトは、TMR0L への書き込みが実行された時点で TMR0H の内容によって更新されます。これによって、Timer0 の全 16 ビットを同時に更新できます。
図 10-1: TIMER0 のブロック図 (8 ビットモード )
T0CKI pin
T0SE
0
1
0
1
T0CS
FOSC/4
ProgrammablePrescaler
Sync withInternalClocks
TMR0L
(2 TCY Delay)
Internal Data BusPSA
T0PS<2:0>
Set TMR0IFon Overflow
3 8
8
Note: リセット時に Timer0 は、クロックを T0CKI から入力し、 大のプリスケール値を適用した 8 ビットモードに設定されます。
DS41350D_JP - p. 102 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 10-2: TIMER0 のブロック図 (16 ビットモード )
10.3 プリスケーラ
Timer0 モジュールのプリスケーラとして 8 ビットのカウンタを使用できます。プリスケーラを直接読み書きする事はできません。値はT0CONレジスタのPSAビットと T0PS<2:0> ビットによって設定します。これらの値は、プリスケーラの割り当てと比率を決定します。
PSA ビットをクリアすると、Timer0 モジュールにプリスケーラが割り当てられます。その場合、1:2 ~ 1:256の範囲の2のべき乗でプリスケール値を選択できます。
Timer0 モジュールにプリスケーラを割り当てた場合、TMR0 レジスタに書き込む命令 ( 例 : CLRF TMR0、MOVWF TMR0、BSF TMR0等 ) は、いずれもプリスケーラのカウントをクリアします。
10.3.1 プリスケーラ割り当ての切り換え
プリスケーラの割り当てはソフトウェアによって完全に制御でき、プログラム実行時に変更が可能です。
10.4 Timer0 割り込み
TMR0 レジスタが、FFh から 00h (8 ビットモード ) または FFFFh から 0000h (16 ビットモード ) にオーバーフローすると TMR0 割り込みが発生します。このオーバーフローはフラグビット TMR0IF をセットします。INTCON レジスタの TMR0IE ビットをクリアすると、この割り込みをマスクできます。この割り込みを再度有効にする前に、ソフトウェアの割り込みサービスルーチン内で TMR0IF ビットをクリアしておく必要があります。
Timer0 はスリープモードでシャットダウンされるため、TMR0 の割り込みによってプロセッサをスリープからウェイクアップさせる事はできません。
表 10-1: TIMER0 に関連するレジスタ
T0CKI pin
T0SE
0
1
0
1
T0CS
FOSC/4
ProgrammablePrescaler
Sync withInternalClocks
TMR0L
(2 TCY Delay)
Internal Data Bus
8
PSA
T0PS<2:0>
Set TMR0IFon Overflow
3
TMR0
TMR0H
High Byte
88
8
Read TMR0L
Write TMR0L
8
Note: リセット時に Timer0 は、クロックを T0CKI から入力し、 大のプリスケール値を適用した 8 ビットモードに設定されます。
Note: Timer0 にプリスケーラを適用した場合、TMR0 への書き込みによってプリスケーラのカウントはクリアされますが、プリスケーラの割り当て自体は変わりません。
レジスタ名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の掲載ページ
TMR0L Timer0 レジスタ、下位バイト 288
TMR0H Timer0 レジスタ、上位バイト 288
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
T0CON TMR0ON T08BIT T0CS T0SE PSA T0PS2 T0PS1 T0PS0 288
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
凡例 : 網掛けの部分は Timer0 では使用しません。
Note 1: プライマリ オシレータの各種モードに応じて、PORTA<7:6> とこれらの方向ビットは、ポートピンとして個別に設定されます。無効時、これらのビットからは「0」が読み出されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 103
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 104 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
11.0 TIMER1 モジュール
Timer1タイマ /カウンタ モジュールには以下の機能があります。
• 16 ビットのタイマまたはカウンタ動作をソフトウェアによって選択可能
• 読み書き可能な 8 ビットのレジスタ (TMR1H とTMR1L)
• 内部または外部のクロック源と Timer1 オシレータのオプションを選択可能
• オーバーフロー割り込み
• CCP 特殊イベントトリガによるリセット
• デバイスクロックのステータスフラグ (T1RUN)
図 11-1 に、Timer1 モジュールの概略ブロック図を示します。図 11-2 に、モジュールの読み書きモードの動作を説明する概略ブロック図を示します。
このモジュールは低消費電力オシレータを備えており、クロック駆動の選択肢を追加します。Timer1 オシレータは、電源管理動作時にマイクロコントローラにクロックを供給する、低電力のクロック源としても使用できます。
また、Timer1を使うと外付け部品とコード オーバーヘッドをほとんど増やす事なく、アプリケーションにリアルタイム クロック (RTC) 機能を持たせる事ができます。
Timer1はT1CON制御レジスタ(レジスタ 11-1)によって制御します。このレジスタは、Timer1 オシレータ イネーブルビット (T1OSCEN)も格納します。Timer1は、T1CON レジスタの制御ビット TMR1ON をセット / クリアする事で有効 / 無効に設定します。
レジスタ 11-1: T1CON: TIMER1 制御レジスタ
R/W-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 RD16: 16 ビット読み書きモード イネーブルビット
1 = 1 回の 16 ビット動作による Timer1 のレジスタ読み書きを有効に設定する0 = 2 回の 8 ビット動作による Timer1 のレジスタ読み書きを有効に設定する
bit 6 T1RUN: Timer1 システムクロック ステータス ビット
1 = メイン システムクロックを Timer1 オシレータから供給する0 = メイン システムクロックを他のソースから供給する
bit 5-4 T1CKPS<1:0>: Timer1 入力クロック プリスケール値選択ビット
11 = 1:8 のプリスケール値を選択する 10 = 1:4 のプリスケール値を選択する 01 = 1:2 のプリスケール値を選択する 00 = 1:1 のプリスケール値を選択する
bit 3 T1OSCEN: Timer1 オシレータ イネーブルビット
1 = Timer1 オシレータを有効にする 0 = Timer1 オシレータを無効にする オシレータのインバータとフィードバック抵抗を遮断して消費電力を低減する
bit 2 T1SYNC: Timer1 外部クロック入力同期選択ビット
TMR1CS = 1の場合 : 1 = 外部クロック入力を同期させない 0 = 外部クロック入力を同期させる
TMR1CS = 0の場合 : このビットは無視される。TMR1CS = 0の場合、Timer1 は内部クロックを使用する
bit 1 TMR1CS: Timer1 クロック源選択ビット
1 = T13CKI ピンに入力される外部クロック ( 立ち上がりエッジ ) 0 = 内部クロック (FOSC/4)
bit 0 TMR1ON: Timer1 ON/OFF 制御ビット
1 = Timer1 を ON にする 0 = Timer1 を OFF にする
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 105
PIC18F/LF1XK50
11.1 Timer1 の動作
Timer1 は以下のいずれかのモードで動作します。
• タイマ
• 同期カウンタ
• 非同期カウンタ
動作モードは T1CON レジスタのクロック選択ビットTMR1CS によって決まります。TMR1CS をクリア (= 0)すると、Timer1 は内部命令サイクル (FOSC/4) ごとにイ
ンクリメントします。TMR1CS をセットすると、Timer1は外部クロック入力またはオシレータのいずれかの立ち上がりエッジごとにインクリメントします。
Timer1 オシレータが有効の時、T1OSI と T1OSO ピンに関連したデジタル回路は無効です。これはTRISC<1:0> の値が無視され、ピンが「0」として読み出される事を意味します。
図 11-1: TIMER1 のブロック図
図 11-2: TIMER1 のブロック図 (16 ビット読み書きモード )
T1SYNC
TMR1CS
T1CKPS<1:0>
Sleep InputT1OSCEN(1)
FOSC/4InternalClock
On/Off
Prescaler1, 2, 4, 8
Synchronize
Detect
1
0
2
T1OSI/T13CKI
T1OSO
1
0
TMR1ON
TMR1LSet
TMR1IFon Overflow
TMR1 High ByteClear TMR1
(CCP Special Event Trigger)
Timer1 Oscillator
On/OffTimer1
Timer1 Clock Input
Note 1: Timer1 オシレータのイネーブルビット T1OSCEN をクリアすると、インバータとフィードバック抵抗が OFF となり
消費電力が低減します。
T1SYNC
TMR1CS
T1CKPS<1:0>
Sleep InputT1OSCEN(1)
FOSC/4InternalClock
Prescaler1, 2, 4, 8
Synchronize
Detect
1
0
2
T1OSI/T13CKI
T1OSO
1
0
TMR1L
Internal Data Bus
8
Set TMR1IF
on Overflow
TMR1
TMR1H
High Byte
88
8
Read TMR1L
Write TMR1L
8
TMR1ON
Clear TMR1(CCP Special Event Trigger)
Timer1 Oscillator
On/OffTimer1
Timer1 Clock Input
Note 1: Timer1 オシレータのイネーブルビット T1OSCEN をクリアすると、インバータとフィードバック抵抗が OFF となり
消費電力が低減します。
DS41350D_JP - p. 106 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
11.2 Timer1 の 16 ビット読み書きモード
Timer1は、16ビットの読み書きが可能な設定 (図 11-2参照 ) にする事ができます。T1CON レジスタの制御ビット RD16 をセットすると、TMR1H のアドレスがTimer1 上位バイトのバッファレジスタにマッピングされます。TMR1L を読み出す事で、Timer1 の上位バイトの内容が Timer1 上位バイトバッファに格納されます。この動作により、Timer1 の全 16 ビットを正確に読み出すことができます。下位バイトの前に読み出された上位バイトが、2 回の読み出しの間のロールオーバーまたはキャリーによって無効になっていないかを検証する必要がありません。
TMR1Hへの書き込みはTimer1には直接の影響を与えません。Timer1 の上位バイトは、TMR1L への書き込みを実行した時点で TMR1H の内容によって更新されます。これによって、Timer1 の全 16 ビットを同時に更新できます。
このモードでは Timer1 の上位バイトを直接読み書きできません。読み書きは全て Timer1 上位バイト バッファレジスタを介して実行する必要があります。TMR1H に書き込んでも、Timer1 のプリスケーラはクリアされません。Timer1 のプリスケーラがクリアされるのは、TMR1L に書き込んだ場合だけです。
11.3 Timer1 オシレータ
T1OSI ( 入力 ) と T1OSO ( アンプ出力 ) ピンの間には、内蔵の水晶振動子オシレータ回路が接続されています。このオシレータは、T1CON レジスタの Timer1 オシレータ イネーブルビットT1OSCENをセットすると有効になります。定格 32 kHz の水晶振動子によって低消費電力で動作します。電源管理モードのいずれに移行しても、このオシレータは動作を続けます。図 11-3に代表的な LP オシレータの回路を示します。表 11-1に、Timer1 オシレータ用コンデンサを選定する際の指針を示します。
ユーザは、Timer1オシレータが確実に起動するように、ソフトウェアによる遅延を確保する必要があります。
図 11-3: TIMER1 の LP オシレータに必要な外付け部品
表 11-1: TIMER1 オシレータ用コンデンサの選定
11.3.1 クロック源としての TIMER1 の使用
Timer1 オシレータは、電源管理モードのクロック源としても使用できます。OSCCON レジスタのクロック選択ビット SCS<1:0> を「01」に設定すると、デバイスは SEC_RUN モードに移行します。このモードでは、CPU と周辺機能のクロックを Timer1 オシレータから供給します。OSCCON レジスタの IDLEN ビットをクリアして SLEEP 命令を実行すると、デバイスはSEC_IDLE モードに移行します。詳細は、19.0「電力管理モード」を参照してください。
Timer1 オシレータをクロック源として使用する場合は常に、T1CON レジスタの Timer1 システムクロックステータス フラグ T1RUN がセットされます。従って、このフラグによってコントローラの現在のクロック供給モードを判断できます。このビットからは、フェイルセーフ クロックモニタが現在使用しているクロック源もわかります。クロックモニタが有効で、クロック供給中の Timer1 オシレータに障害が発生した場合、T1RUN ビットをポーリングすれば、クロックの供給源が Timer1 オシレータか他のクロック源かを判断できます。
Note: コンデンサの選定に関する詳細は、表 11-1 の
Note を参照してください。
C1
C2
XTAL
T1OSI
T1OSO
32.768 kHz
27 pF
27 pF
PIC® MCU
タイプ 周波数 C1 C2
LP 32 kHz 27 pF(1) 27 pF(1)
Note 1: マイクロチップ社は、オシレータ回路の設計に際して上記の値を初期値として推奨します。
2: 静電容量を大きくするとオシレータの安定性は増すものの、起動に要する時間が長くなります。
3: 振動子 / 水晶振動子は製品ごとに固有の特性を持つため、外付け部品の適切な数値は振動子 / 水晶振動子のメーカーに問い合わせてください。
4: ここに示すコンデンサの値は設計上の指針に過ぎません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 107
PIC18F/LF1XK50
11.3.2 TIMER1 オシレータのレイアウト上の考慮事項
Timer1 オシレータ回路は、動作中にごくわずかな電力しか消費しません。低消費電力であるという事は、高速で変化する近傍の信号から影響を受けやすい事を意味します。
このため、図 11-3 に示したオシレータ回路は、マイクロコントローラのできるだけ近くに配置してください。また、オシレータ回路のレイアウト領域を横切る配線は VSS または VDD のみとしてください。
オシレータのそばに高速の回路を配置せざるを得ない場合 (出力コンペアまたはPWMモードのCCP1ピン、OSC2ピンを使用するプライマリ オシレータ)、図 11-4に示すようにオシレータ回路の周りに接地されたガードリングを設けるとよいでしょう。この方法は、片面のみの PCB またはグランド プレーンで使用する場合に適用されます。
図 11-4: 接地されたガードリングで囲まれたオシレータ回路
11.4 Timer1 割り込み
TMR1 レジスタペア (TMR1H:TMR1L) は 0000h からFFFFh までインクリメントした後、0000h にロールオーバーします。Timer1 割り込みを有効にしている場合、オーバーフローが発生した時点で割り込みが発生し、PIR1 レジスタの割り込みフラグビット TMR1IF がラッチされます。この割り込みは、PIE1 レジスタの割り込みイネーブルビットTMR1IEをセットまたはクリアする事で、有効または無効にできます。
11.5 CCP 特殊イベントトリガによるTimer1 のリセット
CCP モジュールのいずれかが Timer1 を使用し、コンペアモードで特殊イベントトリガを生成する設定になっている場合 (CCP1M<3:0> または CCP2M<3:0> =1011)、この信号は Timer1 をリセットします。A/D モジュールを有効にしている場合、CCP2 によるトリガはA/D変換も開始します (14.3.4「特殊イベントトリガ」参照 )。
この機能を使用するには、モジュールをタイマまたは同期カウンタのいずれかに設定する必要があります。この方法で使用する場合、CCPRH:CCPRL レジスタペアは実質 Timer1 の周期レジスタとして機能します。
Timer1 が非同期カウンタモードで動作している場合、特殊イベントトリガによるリセットが動作しない可能性があります。
Timer1 への書き込みと特殊イベントトリガが同時に発生した場合、書き込みが優先されます。
VDD
OSC1
VSS
OSC2
RC0
RC1
RC2
Note: 図の縮尺比は不定です。
Note: CCP2 モジュールによる特殊イベントトリガは、PIR1 レジスタの割り込みフラグビット TMR1IF をセットしません。
DS41350D_JP - p. 108 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
11.6 リアルタイム クロックとしてのTimer1 の使用法
Timer1に外部LPオシレータを接続すると(例えば11.3「Timer1 オシレータ」で示した回路 )、アプリケーションに RTC 機能を実装できます。正確なクロック周期を供給する腕時計用の安価な水晶振動子と、時間を計算する数行のアプリケーション コードがあれば実現できます。スリープモードで動作し、電源として電池またはスーパー キャパシタを使用している場合、外付けの RTC デバイスやバッテリ バックアップは一切必要ありません。
例 11-1 に示すアプリケーション コード ルーチンRTCisr は、割り込みサービスルーチンによって 1 秒間隔でカウンタをインクリメントする簡単な方法を示したものです。TMR1 レジスタペアがインクリメントしてオーバーフローすると割り込みが発生し、このルーチンをコールします。ルーチンは秒のカウンタを1 つ進め、これとは別に実装された分と時間のカウンタも、より下位のカウンタのオーバーフローによって順にインクリメントします。
レジスタペアは 16 ビット幅であるため、32.768 kHzのクロック源によってカウンタをオーバーフローさせるには 2 秒必要です。従って、所定の 1 秒間隔で強制的にオーバーフローを発生させるには、あらかじめカウンタにこの値を読み込んでおく必要があります。も簡単な方法は、BSF命令によって TMR1H の MSb を設定する事です。TMR1L レジスタには、あらかじめ値を格納したり変更できないことに注意してください。このような操作を実行すると、サイクル数が増えるとともに誤差が累積する場合があります。
この方法で正確な RTC を実現するには、RTCinitルーチンにも示した通り、Timer1 を非同期モードで動作させ、Timer1 オーバーフロー割り込みを有効に (PIE1<0>= 1) しておく必要があります。また、Timer1 オシレータを有効に設定し、常時動作させておく必要もあります。
例 11-1: TIMER1 割り込みサービスによるリアルタイム クロックの実装RTCinit
MOVLW 80h ; Preload TMR1 register pairMOVWF TMR1H ; for 1 second overflowCLRF TMR1LMOVLW b」00001111」 ; Configure for external clock,MOVWF T1CON ; Asynchronous operation, external oscillatorCLRF secs ; Initialize timekeeping registersCLRF mins ; MOVLW .12MOVWF hoursBSF PIE1, TMR1IE ; Enable Timer1 interruptRETURN
RTCisrBSF TMR1H, 7 ; Preload for 1 sec overflowBCF PIR1, TMR1IF ; Clear interrupt flagINCF secs, F ; Increment secondsMOVLW .59 ; 60 seconds elapsed?CPFSGT secsRETURN ; No, doneCLRF secs ; Clear secondsINCF mins, F ; Increment minutesMOVLW .59 ; 60 minutes elapsed?CPFSGT minsRETURN ; No, doneCLRF mins ; clear minutesINCF hours, F ; Increment hoursMOVLW .23 ; 24 hours elapsed?CPFSGT hoursRETURN ; No, doneCLRF hours ; Reset hoursRETURN ; Done
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 109
PIC18F/LF1XK50
表 11-2: TIMER1 のタイマ / カウンタ動作に関連するレジスタ
レジスタ名
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の掲載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
TMR1L Timer1 レジスタ、下位バイト 288
TMR1H Timer1 レジスタ、上位バイト 288
T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 288
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
ANSELH — — — — ANS11 ANS10 ANS9 ANS8 290
SSPCON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 288
凡例 : — = 未実装ビット、「0」として読み出し。網掛けの部分は Timer1 モジュールでは使用しません。
DS41350D_JP - p. 110 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
12.0 TIMER2 モジュール
Timer2 モジュールには以下の機能があります。
• 8 ビットのタイマと周期レジスタ (TMR2 と PR2)
• 読み書き可能なレジスタ ( 上記の 2 つ )
• ソフトウェア プログラマブル プリスケーラ(1:1、1:4、1:16)
• ソフトウェア プログラマブル ポストスケーラ(1:1 ~ 1:16)
• TMR2/PR2 一致割り込み
• MSSP モジュールのシフトクロックとして使用するオプション
モジュールはT2CONレジスタ(レジスタ 12-1)によって制御します。このレジスタによって、タイマの有効 /無効を設定、プリスケーラ / ポストスケーラを設定します。T2CON レジスタの制御ビット TMR2ON をクリアして Timer2 回路を遮断する事で消費電力を低減できます。
図 12-1 にモジュールの概略ブロック図を示します。
12.1 Timer2 の動作
通常動作時、TMR2 は 00h からクロックごと (FOSC/4)にインクリメントされます。クロック入力に接続された 4 ビットのカウンタ / プリスケーラには、直接入力、4 分周、16 分周のオプションがあります。これらは、T2CON レジスタのプリスケーラ制御ビットT2CKPS<1:0> によって選択します。クロックサイクルごとに、TMR2 の値と周期レジスタ PR2 の値が比較されます。両者が一致すると、コンパレータがタイマの出力として一致信号を生成します。この信号は、次のサイクルで TMR2 の値を 00h にリセットし、出力カウンタ / ポストスケーラを駆動します (12.2「Timer2割り込み」参照 )。
TMR2 と PR2 レジスタは、いずれも直接読み書きできます。TMR2レジスタは全てのデバイスリセットによってクリアされますが、PR2 レジスタは FFh に初期化されます。以下の操作を実行すると、プリスケーラとポストスケーラ カウンタが両方ともクリアされます。
• TMR2 レジスタへの書き込み
• T2CON レジスタへの書き込み
• 何らかのデバイスリセット ( パワーオン リセット、MCLR リセット、ウォッチドッグ タイマ リセット、ブラウンアウト リセット )
T2CON レジスタに書き込んでも TMR2 はクリアされません。
レジスタ 12-1: T2CON: TIMER2 制御レジスタ
U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 未実装ビット : 「0」として読み出し
bit 6-3 T2OUTPS<3:0>: Timer2 出力ポストスケール値選択ビット
0000 = 1:1 のポストスケール値を選択する 0001 = 1:2 のポストスケール値を選択する • • • 1111 = 1:16 のポストスケール値を選択する
bit 2 TMR2ON: Timer2 ON/OFF 制御ビット
1 = Timer2 を ON にする 0 = Timer2 を OFF にする
bit 1-0 T2CKPS<1:0>: Timer2 クロック プリスケール値選択ビット
00 = 1:1 のプリスケール値を選択する 01 = 1:4 のプリスケール値を選択する 1x = 1:16 のプリスケール値を選択する
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 111
PIC18F/LF1XK50
12.2 Timer2 割り込み
Timer2 には、デバイス割り込みを生成するオプションもあります。Timer2 の出力信号 (TMR2/PR2 一致 ) は、4 ビットの出力カウンタ / ポストスケーラに入力されます。このカウンタが一致割り込みを生成し、PIR1 レジスタのTMR2一致割り込みフラグTMR2IFにラッチされます。割り込みは、PIE1 レジスタの TMR2 一致割り込みイネーブルビットTMR2IEをセットする事で有効にします。
T2CON レジスタのポストスケーラ制御ビットT2OUTPS<3:0>によって 16通りのポストスケール オプション (1:1 ~ 1:16) を選択できます。
12.3 Timer2 の出力
TMR2 の分周していない出力は、主に CCP モジュールでPWMモード動作のタイム ベースとして使われます。
Timer2 には、SPI モードで動作する MSSP モジュールのシフトクロック源として使用するオプションもあります。詳細は、15.0「マスタ同期シリアルポート(MSSP) モジュール」を参照してください。
図 12-1: TIMER2 のブロック図
表 12-1: TIMER2 のタイマ / カウンタ動作に関連するレジスタ
レジスタ名
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の掲載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
TMR2 Timer2 レジスタ 288
T2CON — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 288
PR2 Timer2 周期レジスタ 288
凡例 : — = 未実装ビット、「0」として読み出し。網掛けの部分は Timer2 モジュールでは使用しません。
Comparator
TMR2 Output
TMR2
Postscaler
PrescalerPR2
2
FOSC/4
1:1 to 1:16
1:1, 1:4, 1:16
4T2OUTPS<3:0>
T2CKPS<1:0>
Set TMR2IF
Internal Data Bus8
ResetTMR2/PR2
88
(to PWM or MSSP)
Match
DS41350D_JP - p. 112 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
13.0 TIMER3 モジュール
Timer3タイマ /カウンタ モジュールには以下の機能があります。
• 16 ビットのタイマまたはカウンタ動作をソフトウェアによって選択可能
• 読み書き可能な 8 ビットのレジスタ (TMR3H とTMR3L)
• 内部または外部のクロック源と、デバイスクロックまたは Timer1 オシレータの内部オプションを選択可能
• オーバーフロー割り込み
• CCP 特殊イベントトリガによるモジュール リセット
図 13-1 に、Timer3 モジュールの概略ブロック図を示します。図 13-2 に、モジュールの読み書きモードの動作を説明する概略ブロック図を示します。
Timer3モジュールはT3CONレジスタ(レジスタ 13-1)によって制御します。このレジスタは CCP モジュールのクロック源オプションを選択する時にも使用します (14.1.1「CCP モジュールとタイマリソース」参照 )。
レジスタ 13-1: T3CON: TIMER3 制御レジスタ
R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
RD16 — T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 RD16: 16 ビット読み書きモード イネーブルビット
1 = 1 回の 16 ビット動作による Timer3 のレジスタ読み書きを有効に設定する0 = 2 回の 8 ビット動作による Timer3 のレジスタ読み書きを有効に設定する
bit 6 未実装ビット : 「0」として読み出し
bit 5-4 T3CKPS<1:0>: Timer3 入力クロック プリスケール値選択ビット
11 = 1:8 のプリスケール値を選択する10 = 1:4 のプリスケール値を選択する01 = 1:2 のプリスケール値を選択する00 = 1:1 のプリスケール値を選択する
bit 3 T3CCP1: CCP1 の Timer3/Timer1 イネーブルビット
1 = ECCP1 コンペア / キャプチャのクロック源に Timer3 を使用する0 = ECCP1 コンペア / キャプチャのクロック源に Timer1 を使用する
bit 2 T3SYNC: Timer3 外部クロック入力同期制御ビット ( デバイスクロックを Timer1/Timer3 から供給している場合は使用不可 )
TMR3CS = 1の場合 :1 = 外部クロック入力に同期しない0 = 外部クロック入力に同期する
TMR3CS = 0の場合 :このビットは無視される。TMR3CS = 0の場合、Timer3 は内部クロックを使用する。
bit 1 TMR3CS: Timer3 クロック源選択ビット
1 = Timer1 オシレータまたは T13CKI からの外部クロック入力 ( 初の立ち下がりエッジ後の、立ち上がりエッジごと )
0 = 内部クロック (FOSC/4)
bit 0 TMR3ON: Timer3 ON/OFF 制御ビット
1 = Timer3 を ON にする 0 = Timer3 を OFF にする
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 113
PIC18F/LF1XK50
13.1 Timer3 の動作
Timer3 は以下のいずれかのモードで動作します。
• タイマ
• 同期カウンタ
• 非同期カウンタ
動作モードは T3CON レジスタのクロック選択ビットTMR3CS によって決まります。TMR3CS をクリア(= 0) すると、Timer3 は内部命令サイクル (FOSC/4) ごとにインクリメントします。TMR3CS をセットすると、Timer3 は、Timer1 外部クロック入力または Timer1オシレータ ( 有効時 ) のいずれかの立ち上がりエッジごとにインクリメントします。
Timer1 の場合と同様、Timer1 オシレータを有効にすると、RC1/T1OSI と RC0/T1OSO/T13CKI ピンに関連するデジタル回路は無効になります。これはTRISC<1:0> の値が無視され、ピンが「0」として読み出される事を意味します。
図 13-1: TIMER3 のブロック図
T3SYNC
TMR3CS
T3CKPS<1:0>
Sleep InputT1OSCEN(1)
FOSC/4InternalClock
Prescaler1, 2, 4, 8
Synchronize
Detect
1
02
T1OSO/T13CKI
T1OSI
1
0
TMR3ON
TMR3LSet
TMR3IFon Overflow
TMR3 High Byte
Timer1 Oscillator
On/OffTimer3
CCP1 Special Event TriggerCCP1 Select from T3CON<3>
Clear TMR3
Timer1 Clock Input
Note 1: Timer1 オシレータのイネーブルビット T1OSCEN をクリアすると、インバータとフィードバック抵抗が遮断され消費電力が低減します。
DS41350D_JP - p. 114 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 13-2: TIMER3 のブロック図 (16 ビット読み書きモード )
13.2 Timer3 (16 ビット読み書きモード )
Timer3は、16ビットの読み書きが可能な設定 (図 13-2参照 ) にする事ができます。T3CON レジスタの制御ビット RD16 をセットすると、TMR3H のアドレスがTimer3 上位バイトのバッファレジスタにマッピングされます。TMR3L を読み出す事で、Timer3 の上位バイトの内容が Timer3 上位バイト バッファレジスタに格納されます。この動作により、Timer3 の全 16 ビットを正確に読み出すことができます。下位バイトの前に読み出された上位バイトが、2 回の読み出しの間のロールオーバーまたはキャリーによって無効になっていないかを検証する必要がありません。
読み出しと同様に、Timer3 の上位バイトへの書き込みも TMR3H のバッファレジスタを介して実行する必要があります。Timer3 の上位バイトは、TMR3L への書き込みを実行した時点で TMR3H の内容によって更新されます。これによって、ユーザは Timer3 の上位バイトと下位バイト両方の 16 ビットを一括して書き込む事ができます。
このモードでは Timer3 の上位バイトを直接読み書きできません。読み書きは全て Timer3 上位バイト バッファレジスタを介して実行する必要があります。
TMR3H に書き込んでも、Timer3 のプリスケーラはクリアされません。Timer3 のプリスケーラがクリアされるのは、TMR3L に書き込んだ場合だけです。
13.3 Timer3 クロック源としての Timer1オシレータの使用法
Timer3 のクロック源として Timer1 内部オシレータを使用できます。Timer1 オシレータは、T1CON レジスタのT1OSCENビットをセットする事で有効にします。Timer3 のクロック源として使用するには、TMR3CSビットもセットする必要があります。前述の通り、この設定によってTimer3はオシレータソースの立ち上がりエッジごとにインクリメントします。
Timer1 オシレータについては、11.0「Timer1 モジュール」で説明しています。
13.4 Timer3 割り込み
TMR3 レジスタペア (TMR3H:TMR3L) は 0000h からFFFFh までインクリメントした後、0000h にオーバーフローします。Timer3 割り込みを有効にしている場合、オーバーフローが発生した時点で割り込みが発生し、PIR2 レジスタの割り込みフラグビット TMR3IF にラッチされます。この割り込みは、PIE2 レジスタのTimer3割り込みイネーブルビットTMR3IEをセットまたはクリアする事で、有効または無効にできます。
T3SYNC
TMR3CS
T3CKPS<1:0>
Sleep InputT1OSCEN(1)
FOSC/4InternalClock
Prescaler1, 2, 4, 8
Synchronize
Detect
1
02
T13CKI/T1OSI
T1OSO
1
0
TMR3L
Internal Data Bus
8
Set TMR3IF
on Overflow
TMR3
TMR3H
High Byte
88
8
Read TMR1L
Write TMR1L
8
TMR3ON
CCP1 Special Event Trigger
Timer1 Oscillator
On/OffTimer3
Timer1 Clock Input
CCP1 Select from T3CON<3>Clear TMR3
Note 1: Timer1 オシレータのイネーブルビット T1OSCEN をクリアすると、インバータとフィードバック抵抗が遮断され消費電力が低減します。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 115
PIC18F/LF1XK50
13.5 CCP 特殊イベントトリガによるTimer3 のリセット
CCP1 モジュールが Timer3 を使用し、コンペアモードで特殊イベントトリガを生成するように設定されている場合 (CCP1M<3:0>)、このトリガによって Timer3 がリセットされます。A/D モジュールを有効にしている場合、A/D 変換も開始します (17.2.8「特殊イベントトリガ」参照 )。
この機能を使用するには、モジュールをタイマまたは同期カウンタのいずれかに設定する必要があります。この方法で使用する場合、CCPR1H:CCPR1L レジスタペアは実質 Timer3 の周期レジスタとして機能します。
Timer3 が非同期カウンタモードで動作している場合、特殊イベントトリガによるリセットが動作しない可能性があります。
Timer3 への書き込みと CCP モジュールからの特殊イベントトリガが同時に発生した場合、書き込みが優先されます。
表 13-1: TIMER3 のタイマ / カウンタ動作に関連するレジスタ
レジスタ名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の掲載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR2 OSCFIF C1IF C2IF EEIF BCLIF USBIF TMR3IF CCP2IF 290
PIE2 OSCFIE C1IE C2IE EEIE BCLIE USBIE TMR3IE CCP2IE 290
IPR2 OSCFIP C1IP C2IP EEIP BCLIP USBIP TMR3IP CCP2IP 290
TMR3L Timer3 レジスタ、下位バイト 289
TMR3H Timer3 レジスタ、上位バイト 289
T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 288
T3CON RD16 — T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON 289
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
ANSELH — — — — ANS11 ANS10 ANS9 ANS8 290
凡例 : — = 未実装ビット、「0」として読み出し。網掛けの部分は Timer3 モジュールでは使用しません。
DS41350D_JP - p. 116 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
14.0 拡張キャプチャ / コンペア /PWM (ECCP) モジュール
PIC18F/LF1XK50 は、ECCP ( キャプチャ / コンペア /PWM)モジュールを1つ搭載しています。このモジュールは、16 ビットのキャプチャ レジスタ、16 ビットのコンペアレジスタまたはPWMマスタ/スレーブ デューティ サイクル レジスタとして動作する、16 ビットレジスタを 1 つ収めます。
CCP1 は標準的な CCP モジュールとして実装され、以下の拡張 PWM 機能を備えています。
• 2 つまたは 4 つの出力チャンネル
• 出力ステアリング
• 極性をプログラム可能 • デッドバンド制御をプログラム可能
• 自動シャットダウンと自動再起動
拡張機能については、14.4「PWM ( 拡張モード )」で詳細に説明します。
レジスタ 14-1: CCP1CON: 拡張キャプチャ / コンペア /PWM 制御レジスタ
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-6 P1M<1:0>: 拡張 PWM 出力コンフィグレーション ビット
CCP1M<3:2> = 00、01、10の場合 :xx = P1A にキャプチャ / コンペア入力 / 出力、P1B、P1C、P1D にポートピンを割り当てる。
CCP1M<3:2> = 11の場合 :00 = シングル出力 : P1A、P1B、P1C、P1D がステアリングによって制御される (14.4.7「パルス ステア
リング モード」参照 )。01 = フルブリッジ順方向出力 : P1D に変調信号を出力、P1A をアクティブ、P1B、P1C を非アクティブ
に駆動する。10 = ハーフブリッジ出力 : P1A、P1B にデッドバンド制御された変調信号を出力、P1C、P1D をポート
ピンに割り当てる。11 = フルブリッジ逆方向出力 : P1B に変調信号を出力、P1C をアクティブ、P1A、P1D を非アクティブ
に駆動する。
bit 5-4 DC1B<1:0>: PWM デューティ サイクル bit 1 と bit 0キャプチャモード :未使用
コンペアモード : 未使用
PWM モード : これらのビットは、10 ビットの PWM デューティ サイクル値の 下位 2 ビットである。デューティ サイクルの上位 8 ビットは CCPR1L 内で設定する。
bit 3-0 CCP1M<3:0>: 拡張 CCP モード選択ビット
0000 = キャプチャ / コンペア /PWM を OFF にする (ECCP モジュールをリセット )0001 = 予約 0010 = コンペアモード、一致時に出力をトグル0011 = 予約0100 = キャプチャモード、立ち下がりエッジごと 0101 = キャプチャモード、立ち上がりエッジごと0110 = キャプチャモード、立ち上がりエッジ 4 回ごと 0111 = キャプチャモード、立ち上がりエッジ 16 回ごと1000 = コンペアモード、CCP1 ピンを Low に初期化しコンペアの一致時に出力をセットする (CCP1IF を
セット )1001 = コンペアモード、CCP1 ピンを High に初期化しコンペアの一致時に出力をクリアする (CCP1IF
をセット )1010 = コンペアモード、ソフトウェア割り込みのみを生成し CCP1 ピンは I/O ポートの状態に戻す1011 = コンペアモード、特殊イベントトリガを生成する (ECCP によって TMR1 または TMR3 をリセッ
ト、A/D 変換を開始、CC1IF ビットをセット )1100 = PWM モード、P1A、P1C をアクティブ High、P1B、P1D をアクティブ High1101 = PWM モード、P1A、P1C をアクティブ High、P1B、P1D をアクティブ Low1110 = PWM モード、P1A、P1C をアクティブ Low、P1B、P1D をアクティブ High1111 = PWM モード、P1A、P1C をアクティブ Low、P1B、P1D をアクティブ Low
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 117
PIC18F/LF1XK50
CCP1CON レジスタと ECCP1AS レジスタにより使用可能なモードが拡張されたのに加えて、ECCPモジュールには拡張 PWM 動作と自動シャットダウン機能に関連する、以下の 2 つのレジスタが追加されました。
• PWM1CON ( デッドバンド遅延 )
• PSTRCON ( 出力ステアリング )
14.1 ECCPの出力とコンフィグレーション
拡張 CCP モジュールは、選択した動作モードに応じて 大 4 つの PWM 信号を出力できます。P1A ~ P1Dと名前の付いたこれらの出力は、PORTC の I/O ピンと多重化されています。アクティブとなる出力は、選択した CCP 動作モードによって決まります。表 14-2にピン割り当てをまとめました。
I/O ピンを PWM 出力として設定するには、P1M<1:0>ビットとCCP1M<3:0>ビットを設定して適切なPWMモードを選択する必要があります。また、各ポートピンに対するTRISC方向ビットも出力として設定する必要があります。
14.1.1 CCP モジュールとタイマリソース
CCP モジュールは、選択したモードに応じて、Timer1、2、3 のいずれかを使用します。Timer1 と Timer3 はキャプチャまたはコンペアモードに設定したモジュールで使用できます。一方、Timer2 は PWM モードのモジュールで使用できます。
表 14-1: CCP モード - タイマリソース
特定のタイマをモジュールに割り当てるには、T3CONレジスタ ( レジスタ 13-1) のタイマ /CCP イネーブルビットを設定します。図 14-1 に、2 つのモジュール間の相互作用を示します。非同期カウンタモードでは、キャプチャ動作の信頼性を確保できません。
CCP/ECCP モード タイマリソース
キャプチャ Timer1 または Timer3
コンペア Timer1 または Timer3
PWM Timer2
DS41350D_JP - p. 118 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
14.2 キャプチャモード
キャプチャモードでは、対応する CCP1 ピンでイベントが発生すると、TMR1 または TMR3 レジスタの 16ビットの値が CCPR1H:CCPR1L レジスタペアにキャプチャされます。イベントとしては、以下のいずれか1 つを指定します。
• 立ち下がりエッジごと
• 立ち上がりエッジごと
• 立ち上がりエッジ 4 回ごと
• 立ち上がりエッジ 16 回ごと
このイベントはCCP1CONレジスタのモード選択ビット CCP1M<3:0> によって指定します。キャプチャが実行されると、割り込み要求フラグビットCCP1IFがセットされます。このフラグは、ソフトウェアによってクリアする必要があります。CCPR1 レジスタの値を読み出す前に再度キャプチャ イベントが発生した場合、前回キャプチャされた値は新しい値によって上書きされます。
14.2.1 CCP のピン設定
キャプチャモードで使用する CCP1 ピンは、方向ビットTRISを設定し、入力として設定する必要があります。
14.2.2 TIMER1/TIMER3 モード選択
キャプチャ機能で使用するタイマ (Timer1 およびTimer3 またはどちらか一方 ) は、タイマモードまたは同期カウンタモードで動作させておく必要があります。非同期カウンタモードでは、キャプチャ機能が動作しない可能性があります。各 CCP モジュールで使用するタイマは、T3CON レジスタで選択します (14.1.1「CCP モジュールとタイマリソース」参照 )。
14.2.3 ソフトウェア割り込み
キャプチャモードを変更すると、誤ったキャプチャ割り込みが発生する恐れがあります。このような誤った割り込みの発生を避けるために、ユーザは割り込みイネーブルビット CCP1IEをクリアしておく必要があります。また、このような動作モードの変更後は、割り込みフラグビット CCP1IF もクリアする必要があります。
14.2.4 CCP プリスケーラ
キャプチャモードには 4 つのプリスケーラ設定があります。いずれを選択するかは、動作モード選択の一部としてモード選択ビット (CCP1M<3:0>)によって指定します。CCP モジュールを OFF、またはキャプチャモードを無効に設定すると、プリスケーラ カウンタがクリアされます。これは、全てのリセットでプリスケーラ カウンタがクリアされる事を意味します。
あるキャプチャ プリスケーラから他のプリスケーラに切り換えると割り込みが発生する場合があります。また、切り換え時にはプリスケーラ カウンタがクリアされないため、変更後の 初のキャプチャがゼロ以外からカウントを開始したプリスケーラによって発生する恐れもあります。例 14-1 に、キャプチャ プリスケーラを切り換える場合の推奨される方法を示します。この例ではプリスケーラ カウンタをクリアし、「誤った割り込み」を発生させません。
例 14-1: キャプチャ プリスケーラの変更
図 14-1: キャプチャモード動作のブロック図
Note: CCP1 ピンを出力として設定すると、ポートへの書き込みによってキャプチャ条件が満たされてしまう可能性があります。
CLRF CCP1CON ; Turn CCP module offMOVLW NEW_CAPT_PS ; Load WREG with the
; new prescaler mode; value and CCP ON
MOVWF CCP1CON ; Load CCP1CON with; this value
CCPR1H CCPR1L
TMR1H TMR1L
Set CCP1IF
TMR3Enable
Q1:Q4
CCP1CON<3:0>
CCP1 pinPrescaler 1, 4, 16
andEdge Detect
TMR1Enable
T3CCP1
T3CCP1
TMR3H TMR3L
4
4
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 119
PIC18F/LF1XK50
14.3 コンペアモード
コンペアモードでは、CCPR1 レジスタの 16 ビットの値を、TMR1 または TMR3 レジスタペアのいずれかの値と常時比較しつづけます。2 つの値が一致すると、CCP1 ピンは以下のいずれかの動作を示します。
• High に駆動
• Low に駆動
• トグル(HighからLowへ、またはLowからHighへ)
• 変化なし (= I/O ラッチの状態を反映 )
ピンの動作はモード選択ビット (CCP1M<3:0>)の値によって決まります。上記の動作と共に、割り込みフラグビット CCP1IF がセットされます。
14.3.1 CCP のピン設定
ユーザは、対応する TRIS ビットをクリアして、CCP1ピンを出力として設定する必要があります。
14.3.2 TIMER1/TIMER3 モード選択
CCP モジュールでコンペア機能を使用する場合、Timer1 および Timer3 ( またはどちらか一方 )はタイマモードまたは同期カウンタモードで動作している必要があります。非同期カウンタモードでは、コンペア動作の信頼性を確保できません。
14.3.3 ソフトウェア割り込みモード
ソフトウェア割り込み生成モードを選択した場合(CCP1M<3:0> = 1010)、CCP1 ピンの動作に変化はありません。割り込みフラグ CCP1IF の動作のみが変わります。
14.3.4 特殊イベントトリガ
CCP モジュールには特殊イベントトリガが実装されています。これは、他のモジュールの動作をトリガするために使用する、コンペアモードによって生成される内部ハードウェア信号です。特殊イベントトリガは、コンペア特殊イベント トリガ モードを選択(CCP1M<3:0> = 1011) する事で有効になります。
特殊イベントトリガは、モジュールにクロック周期を供給しているタイマリソースの種類に関わらず、タイマ レジスタ ペアをリセットします。このため、全てのタイマで CCPR1 レジスタをプログラム可能な周期レジスタとして使用できます。
特殊イベントトリガによってA/D変換を開始する事もできます。それには、あらかじめ A/D コンバータを有効にしておく必要があります。
図 14-2: コンペアモード動作のブロック図
Note: CCP1CON レジスタをクリアすると、CCP1コンペア出力ラッチ (デバイスの設定による ) が強制的に既定値の Low レベルに設定されます。こ のラッチは、PORTC の I/O データラッチとは別のラッチです。
TMR1H TMR1L
TMR3H TMR3L
CCPR1H CCPR1L
Comparator
T3CCP1
Set CCP1IF
1
0
QS
R
OutputLogic
Special Event Trigger
CCP1 pin
TRIS
CCP1CON<3:0>
Output Enable4
(Timer1/Timer3 Reset, A/D Trigger)
CompareMatch
DS41350D_JP - p. 120 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
14.4 PWM ( 拡張モード )
拡張 PWM モードでは、 大 4 本のピン 大分解能 10ビットの PWM 信号を生成できます。PWM 出力モードには、以下の 4 種類があります。
• シングル PWM
• ハーフブリッジ PWM
• フルブリッジ PWM、順方向モード
• フルブリッジ PWM、逆方向モード
拡張 PWM モードを選択するには、CCP1CON レジスタの P1M ビットを適切に設定する必要があります。
PWM 出力は、I/O ピンと多重化されており、P1A、P1B、P1C、P1D という名称が付いています。PWM ピンの極性はユーザ設定可能です。CCP1CON レジスタのCCP1M ビットで設定できます。
表 14-1 に、各拡張 PWM モードにおけるピン割り当てを示します。
図 14-3 に、拡張 PWM モジュールの概略ブロック図の例を示します。
図 14-3: 拡張 PWM モードの概略ブロック図の例
表 14-2: 各 PWM 拡張モードにおけるピン割り当ての例
Note: PWMを有効化した直後に不完全な波形が発生する事を防ぐために、ECCPモジュールは新しいPWM周期の開始を待ってからPWM 信号を生成します。
CCPR1L
CCPR1H (Slave)
Comparator
TMR2
Comparator
PR2
(1)
R Q
S
Duty Cycle RegistersDC1B<1:0>
Clear Timer2,toggle PWM pin and latch duty cycle
Note 1: 8 ビットのタイマレジスタ TMR2 と、2 ビットの内部 Q クロックまたはプリスケーラの 2 ビットを結合して 10 ビットのクロック周期を生成します。
TRIS
CCP1/P1A
TRIS
P1B
TRIS
P1C
TRIS
P1D
OutputController
P1M<1:0>2
CCP1M<3:0>4
PWM1CON
CCP1/P1A
P1B
P1C
P1D
Note 1: PWM の各出力に対して TRIS レジスタの値を適切に設定する必要があります。
2: 拡張 PWM モードで使用しないピンには、別のピン機能に利用できます。
ECCP モード P1M<1:0> CCP1/P1A P1B P1C P1D
シングル 00 あり (1) あり (1) あり (1) あり (1)
ハーフブリッジ 10 あり あり なし なし
フルブリッジ、順方向 01 あり あり あり あり
フルブリッジ、逆方向 11 あり あり あり あり
Note 1: 各出力は、シングルモードのパルス ステアリングによって有効になります。レジスタ 14-4 参照
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 121
PIC18F/LF1XK50
図 14-4: PWM ( 拡張モード ) 出力間の関係の例 ( アクティブ HIGH 状態 )
0
Period
00
10
01
11
SignalPR2+1
P1M<1:0>
P1A Modulated
P1A Modulated
P1B Modulated
P1A Active
P1B Inactive
P1C Inactive
P1D Modulated
P1A Inactive
P1B Modulated
P1C Active
P1D Inactive
PulseWidth
(Single Output)
(Half-Bridge)
(Full-Bridge,Forward)
(Full-Bridge,Reverse)
Delay(1) Delay(1)
Relationships:• Period = 4 * TOSC * (PR2 + 1) * (TMR2 Prescale Value)• Pulse Width = TOSC * (CCPR1L<7:0>:CCP1CON<5:4>) * (TMR2 Prescale Value)• Delay = 4 * TOSC * (PWM1CON<6:0>)
Note 1: デッドバンド遅延はPWM1CONレジスタによってプログラムします (14.4.6「プログラム可能なデッドバンド遅延モード」)。
DS41350D_JP - p. 122 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 14-5: 拡張 PWM 出力間の関係の例 ( アクティブ LOW 状態 )
0
Period
00
10
01
11
SignalPR2+1
P1M<1:0>
P1A Modulated
P1A Modulated
P1B Modulated
P1A Active
P1B Inactive
P1C Inactive
P1D Modulated
P1A Inactive
P1B Modulated
P1C Active
P1D Inactive
Pulse
Width
(Single Output)
(Half-Bridge)
(Full-Bridge,
Forward)
(Full-Bridge,
Reverse)
Delay(1) Delay(1)
Relationships:• Period = 4 * TOSC * (PR2 + 1) * (TMR2 Prescale Value)• Pulse Width = TOSC * (CCPR1L<7:0>:CCP1CON<5:4>) * (TMR2 Prescale Value)• Delay = 4 * TOSC * (PWM1CON<6:0>)
Note 1: デッドバンド遅延はPWM1CONレジスタによってプログラムします (14.4.6「プログラム可能なデッドバンド遅延モード」)。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 123
PIC18F/LF1XK50
14.4.1 ハーフブリッジ モード
ハーフブリッジ モードでは、プッシュプル型の負荷を駆動するために出力として 2 つのピンを使用します。PWM 出力信号が CCP1/P1A ピンに出力される一方、P1Bピンにはその相補信号が出力されます(図 14-6参照 )。このモードは図 14-7 に示すような、2 つの PWM信号によって 4 つのパワースイッチを変調するハーフブリッジまたはフルブリッジのアプリケーションに適用できます。
ハーフブリッジ モードでは、ハーフブリッジ パワーデバイスの貫通電流を防止するために、デッドバンド遅延をプログラムできます。PWM1CON レジスタのPDC<6:0> ビットによって、出力をアクティブに駆動するまでの遅延を命令サイクル数として設定します。この値がデューティ サイクルよりも大きい場合、対応する出力は 1 サイクルの全期間、非アクティブのままです。デッドバンド遅延動作の詳細は、14.4.6「プログラム可能なデッドバンド遅延モード」を参照してください。
P1A 出力と P1B 出力は PORT データラッチと多重化されているため、対応する TRIS ビットをクリアして、P1A と P1B を出力として設定する必要があります。
図 14-6: ハーフブリッジ PWM 出力の例
図 14-7: ハーフブリッジ アプリケーションの例
Period
Pulse Width
td
td
(1)
P1A(2)
P1B(2)
td = Dead-Band Delay
Period
(1) (1)
Note 1: この時点でTMR2レジスタとPR2レジスタの
値が等しくなります。
2: 出力信号はアクティブHighとして示してあり
ます。
P1A
P1B
FETDriver
FETDriver
Load
+
-
+
-
FETDriver
FETDriver
V+
Load
FETDriver
FETDriver
P1A
P1B
Standard Half-Bridge Circuit (“Push-Pull”)
Half-Bridge Output Driving a Full-Bridge Circuit
DS41350D_JP - p. 124 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
14.4.2 フルブリッジ モード
フルブリッジ モードでは出力として4つのピンを全て使用します。図 14-8 に、フルブリッジ アプリケーションの例を示します。
図 14-9 に示した順方向モードでは、CCP1/P1A ピンがアクティブ状態に駆動され、ピン P1D を変調信号で駆動し、P1B と P1C は非アクティブ状態になります。
図 14-9に示した逆方向モードでは、P1Cがアクティブ状態に駆動され、P1B を変調信号で駆動し、P1A とP1D は非アクティブ状態になります。
P1A、P1B、P1C、P1D 出力は PORT データラッチと多重化されています。P1A、P1B、P1C、P1D ピンを出力として設定するために、対応する TRIS ビットをクリアする必要があります。
図 14-8: フルブリッジ アプリケーションの例
P1A
P1C
FETDriver
FETDriver
V+
V-
Load
FETDriver
FETDriver
P1B
P1D
QA
QB QD
QC
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 125
PIC18F/LF1XK50
図 14-9: フルブリッジ PWM 出力の例
Period
Pulse Width
P1A(2)
P1B(2)
P1C(2)
P1D(2)
Forward Mode
(1)
Period
Pulse Width
P1A(2)
P1C(2)
P1D(2)
P1B(2)
Reverse Mode
(1)
(1)(1)
Note 1: この時点で TMR2 レジスタと PR2 レジスタの値が等しくなります。
2: 出力信号はアクティブ High として示してあります。
DS41350D_JP - p. 126 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
14.4.2.1 フルブリッジ モードにおける方向の変更
フルブリッジ モードでは、CCP1CON レジスタのP1M1 ビットによって、ユーザが順方向 / 逆方向を制御できます。アプリケーション ファームウェアによってこの方向制御ビットを変更すると、モジュールの動作は次の PWM サイクルで新しい方向に変化します。
方向の変更は、ソフトウェア内で CCP1CON レジスタの P1M1 ビットを変更した時点で開始します。以下のシーケンスが、現在の PWM 周期が終了するまでに実行されます。
• 変調出力 (P1B と P1D) を、非アクティブ状態にする
• 対応する非変調出力 (P1A と P1C) の駆動方向を逆向きに切り換える
• 次の周期の先頭から PWM 変調を再開する
図 14-10 に、このシーケンスを図示します。
フルブリッジ モードにはデッドバンド遅延の機能がありません。このモードでは出力が都度変調されるため、通常デッドバンド遅延は不要であるためです。ただし、以下の条件が両方とも満たされる場合にはデッドバンド遅延が必要です。
1. 出力のデューティ サイクルが100%またはそれに近い状態で PWM 出力の方向が変化する
2. パワーデバイスと駆動回路を含むパワースイッチ回路のターンオフ時間がターンオン時間よりも長い
図 14-11 に、デューティ サイクルが 100% 近い状態で、PWM の方向が順方向から逆方向に変化する場合の例を示します。この例の t1 の時点で、出力 P1A とP1D は非アクティブに、出力 P1C がアクティブになります。パワーデバイスのターンオフ時間がターンオン時間よりも長いため、パワーデバイス QC と QD ( 図 14-8 参照 ) に「T」の時間だけ貫通電流が流れます。PWM の方向が逆方向から順方向に変わる場合も、パワーデバイス QA と QB に同じ事が起きます。
デューティ サイクルが大きい時にPWMの方向を変える事が必要なアプリケーションでこの貫通電流を防止するには、以下の 2 つの方法があります。
1. 方向を変える前に、1周期だけPWMデューティサイクルを小さくする
2. ターンオフ時間がターンオン時間よりも短いスイッチドライバを使用する
貫通電流を防止する方法は上記の 2 つ以外にも考えられます。
図 14-10: PWM 方向切り換えの例
Pulse Width
Period(1)Signal
Note 1: CCP1CON レジスタの方向ビット P1M1 には、PWM サイクル中いつでも書き込む事ができます。
Period
P1A (Active-High)
P1B (Active-High)
P1C (Active-High)
P1D (Active-High)
Pulse Width
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 127
PIC18F/LF1XK50
図 14-11: デューティ サイクルがほぼ 100% の場合に PWM の方向を変える例
14.4.3 起動に関する考慮事項
いずれの PWM モードを使用する場合も、アプリケーション ハードウェアではPWM出力ピンに適切な外部プルアップまたはプルダウン抵抗 ( あるいは両方 ) を接続する必要があります。
CCP1CON レジスタの CCP1M<1:0> ビットによって、ユーザは各PWM出力ピンのペア(P1A/P1CとP1B/P1D)のからの信号を、アクティブ High とアクティブ Low のどちらにするかを選択できます。PWM 出力の極性は、PWM ピンの出力ドライバを有効にする前に選択しておく必要があります。PWM ピン出力ドライバを駆動したまま極性を変える事は推奨しません。アプリケーション回路を損傷する恐れがあります。
PWM モジュールを初期化後、P1A、P1B、P1C、P1Dの出力ラッチは適正な状態でない可能性があります。PWM ピンの出力ドライバと拡張 PWM モードを同時に有効にすると、アプリケーション回路を損傷する恐れがあります。従って、まず拡張 PWM モードを適切な出力モードで有効にしてから、PWM サイクルが1 サイクル経過後に、PWM ピン出力ドライバを有効にします。PWM サイクルが完了したかどうかは、PIR1レジスタの TMR2IF ビットが 2 サイクル目の開始時にセットされる事から判断できます。
Forward Period Reverse Period
P1A
TON
TOFF
T = TOFF – TON
P1B
P1C
P1D
External Switch D
PotentialShoot-Through Current
Note 1: 信号は全てアクティブ High として示してあります。
2: TON はパワースイッチ QC とそのドライバのターンオン遅延時間です。
3: TOFF はパワースイッチ QD とそのドライバのターンオフ遅延時間です。
External Switch C
t1
PW
PW
Note: マイクロコントローラのリセット終了時、全 I/O ピンはハイインピーダンス状態です。マイクロコントローラが適切な信号レベルで I/O ピンを駆動し始めるまで、あるいはPWM出力をアクティブにするまで、外部回路はパワースイッチ デバイスを OFF 状態に保つ必要があります。
DS41350D_JP - p. 128 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
14.4.4 拡張 PWM の自動シャットダウン モード
PWM モードは、外部でシャットダウン イベントが発生した時に PWM 出力を無効にする、自動シャットダウン モードに対応しています。自動シャットダウンモードは、PWM 出力ピンをあらかじめ指定した状態に遷移させます。このモードは、PWM によるアプリケーション回路の損傷を予防するのに有効です。
自動シャットダウンのソースは、ECCPAS レジスタのECCPAS<2:0> ビットによって選択します。シャットダウン イベントは以下の状態で発生します。
• INT0 ピンのロジック「0」
• コンパレータ (Cx) 出力のロジック「1」
シャットダウン状態は、ECCPAS レジスタの自動シャットダウン イベント ステータスビットECCPASEで示します。このビットが「0」の場合、PWM ピンは正常に動作中です。このビットが「1」の場合、PWM出力はシャットダウン状態です。
シャットダウン イベント発生時、2 つの動作が実行されます。
第一に、ECCPASE ビットが「1」にセットされます。ECCPASEはファームウェアによってクリアされるか、自動再起動 (14.4.5「自動再起動モード」参照 ) が実行されるまでセットされた状態を維持します。
第二に、有効に設定されている PWM ピンが非同期でシャットダウン状態に移行します。PWM 出力ピンは2 つのペア、[P1A/P1C] と [P1B/P1D] にグループ化されます。各ペアの状態は、ECCPAS レジスタの PSSACビットと PSSBD ビットによって決まります。その状態は、以下の 3 つのいずれかです。
• ロジック「1」を駆動
• ロジック「0」を駆動
• 3 ステート ( ハイインピーダンス )
レジスタ 14-2: ECCP1AS: 拡張キャプチャ / コンペア /PWM 自動シャットダウン制御レジスタ
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1 PSSBD0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 ECCPASE: ECCP 自動シャットダウン イベント ステータスビット
1 = シャットダウン イベントが発生し、ECCP 出力がシャットダウン状態にある0 = ECCP 出力は動作中である
bit 6-4 ECCPAS<2:0>: ECCP 自動シャットダウン ソース選択ビット
000 = 自動シャットダウンを無効に設定する001 = コンパレータ出力 C1OUT が High である010 = コンパレータ出力 C2OUT が High である011 = コンパレータ出力 C1OUT または C2OUT が High である100 = INT0 ピンが VIL である101 = INT0 ピンが VIL またはコンパレータ出力 C1OUT が High である110 = INT0 ピンが VIL またはコンパレータ出力 C2OUT が High である111 = INT0 ピンが VIL またはコンパレータ出力 C1OUT または C2OUT が High である
bit 3-2 PSSACn: P1A ピンと P1C ピンのシャットダウン状態制御ビット
00 = P1A ピンと P1C ピンを「0」に駆動する01 = P1A ピンと P1C ピンを「1」に駆動する1x = P1A ピンと P1C ピンを 3 ステートに設定する
bit 1-0 PSSBDn: P1B ピンと P1D ピンのシャットダウン状態制御ビット
00 = P1B ピンと P1D ピンを「0」に駆動する01 = P1B ピンと P1D ピンを「1」に駆動する1x = P1B ピンと P1D ピンを 3 ステートに設定する
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 129
PIC18F/LF1XK50
図 14-12: PWM 自動シャットダウンとファームウェアによる再起動 (PRSEN = 0)
Note 1: 自動シャットダウン条件はエッジではなくレベルによって判定される信号です。レベルが保たれている限り、自動シャットダウン状態は続きます。
2: 自動シャットダウン状態が続く限り、ECCPASE ビットへの書き込みは禁止されます。
3: 自動シャットダウンの条件が解消され、PWMが再起動されると (ファームウェアまたは自動再起動による )、PWM 信号の生成は常に次の PWM 周期の先頭から再開します。
4: CCPxASE ビットを「1」に設定すると、コンパレータ出力または INT ピンの状態による自動シャットダウン イベントが発生する前に、ファームウェア内でソフトウェア シャットダウンをトリガできます。デバイスの自動再起動機能は、コンパレータ出力または INT ピンのイベントによって発生したシャットダウンのアクティブ状態のみを追跡します。この時、自動再起動機能が有効な場合、このビットをただちにクリアし、次の PWM 周期の先頭からECCPモジュールを再起動します。
Shutdown
PWM
ECCPASE bit
Activity
Event
ShutdownEvent Occurs
ShutdownEvent Clears
PWMResumes
Normal PWM
Start ofPWM Period
ECCPASECleared byFirmware
PWM Period
DS41350D_JP - p. 130 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
14.4.5 自動再起動モード
拡張 PWM 機能を、自動シャットダウン条件が解消された場合に PWM 信号生成を自動的に再開するように設定できます。この自動再起動機能は、PWM1CON レジスタの PRSEN ビットをセットする事で有効になります。
自動再起動が有効な場合、ECCPASE ビットは自動シャットダウン条件が続く限りセットされたままです。自動シャットダウン条件が解消すると、ハードウェアが ECCPASE ビットをクリアし、通常動作が再開します。
図 14-13: 自動再起動が有効な場合 (PRSEN = 1) の PWM 自動シャットダウン
Shutdown
PWM
ECCPASE bit
Activity
Event
ShutdownEvent Occurs
ShutdownEvent Clears
PWMResumes
Normal PWM
Start ofPWM Period
PWM Period
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 131
PIC18F/LF1XK50
14.4.6 プログラム可能なデッドバンド遅延モード
全てのパワースイッチが PWM 周波数で変調されるハーフブリッジ アプリケーションでは、通常パワースイッチのターンオフにはターンオンより長い時間を要します。上側のパワースイッチと下側のパワースイッチが同時に切り換えられた場合 ( 一方がターンオン、他方がターンオフ )、一方が完全にターンオフになるまでの短い期間、両方のスイッチがオン状態になる可能性があります。この間ブリッジの電源が短絡するため、きわめて大きな電流 ( 貫通電流 ) が両方のパワースイッチを通して流れます。回路に損傷を与えかねないこのスイッチング時の貫通電流を防止するために、通常パワースイッチのターンオンを遅延させ、その間にもう一方のスイッチが完全にターンオフになるようにします。
ハーフブリッジ モードでは、貫通電流がブリッジのパワースイッチを破壊するのを防ぐため、デジタル プログラムが可能なデッドバンド遅延を使用できます。信号の非アクティブ状態からアクティブ状態への遷移を遅延させます。図 14-14 にこの動作を図示します。遅延時間は、対応する PWM1CON ( レジスタ 14-3) レジスタの下位 7 ビットを使って、マイクロコントローラの命令サイクル数 (TCYまたは 4 TOSC)単位で指定します。
図 14-14: ハーフブリッジ PWM 出力の例
図 14-15: ハーフブリッジ アプリケーションの例
Period
Pulse Width
td
td
(1)
P1A(2)
P1B(2)
td = Dead-Band Delay
Period
(1) (1)
Note 1: この時点で TMR2 レジスタと PR2 レジスタ
の値が等しくなります。
2: 出力信号はアクティブ High として示してあ
ります。
P1A
P1B
FETDriver
FETDriver
V+
V-
Load
+V-
+V-
Standard Half-Bridge Circuit (“Push-Pull”)
DS41350D_JP - p. 132 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 14-3: PWM1CON: 拡張 PWM 制御レジスタ
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
PRSEN PDC6 PDC5 PDC4 PDC3 PDC2 PDC1 PDC0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 PRSEN: PWM 再起動イネーブルビット
1 = 自動シャットダウン後、シャットダウン条件が解消されると自動的に ECCPASE ビットがクリアされ、PWM 信号の生成が再開される。
0 = 自動シャットダウン後、PWM を再起動するにはソフトウェアによって ECCPASE をクリアする必要がある。
bit 6-0 PDC<6:0>: PWM 遅延カウントビット
PDCn = PWM 信号が遷移する予定の時点と、実際に遷移する時点の間の FOSC/4 サイクル数(4 * TOSC)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 133
PIC18F/LF1XK50
14.4.7 パルス ステアリング モード
シングル出力モードでは、パルス ステアリング機能によって任意のPWMピンから変調信号を出力できます。さらに、同じ PWM 信号を複数のピンから同時に出力する事も可能です。
シングル出力モードを選択 (CCP1CON レジスタのCCP1M<3:2> = 11 および P1M<1:0> = 00) した上で、PSTRCONレジスタの該当するSTR<D:A>ビットを設定する事で、ユーザ ファームウェアは同じ PWM 信号を1~4本の出力ピンに出力できます (表 14-2参照 )。
PWM ステアリング モードの動作中は、CCP1CON レジスタのCCP1M<1:0>ビットをP1<D:A>ピンのPWM出力極性の選択に使用します。
PWM の自動シャットダウンは、PWM ステアリングモードにおいても 14.4.4「拡張 PWM の自動シャットダウン モード」の説明と同様に動作します。自動シャットダウン イベントはPWM出力を有効にしているピンにだけ作用します。
Note: PWM 信号をピンに出力するには、対応する TRIS ビットで出力を選択し (「0」)、ピンの出力ドライバを有効にする必要があります。
レジスタ 14-4: PSTRCON: パルス ステアリング制御レジスタ (1)
U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-1
— — — STRSYNC STRD STRC STRB STRA
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-5 未実装ビット :「0」として読み出し
bit 4 STRSYNC: ステアリング同期ビット
1 = 出力ステアリングを次の PWM 周期で更新する0 = 出力ステアリングを命令サイクルの境界の先頭で更新する
bit 3 STRD: ステアリング イネーブルビット D
1 = P1D ピンに CCP1M<1:0> で指定した極性に従って PWM 波形を出力する
0 = P1D ピンをポートピンに割り当てる
bit 2 STRC: ステアリング イネーブルビット C
1 = P1C ピンに CCP1M<1:0> で指定した極性に従って PWM 波形を出力する
0 = P1C ピンをポートピンに割り当てる
bit 1 STRB: ステアリング イネーブルビット B
1 = P1B ピンに CCP1M<1:0> で指定した極性に従って PWM 波形を出力する
0 = P1B ピンをポートピンに割り当てる
bit 0 STRA: ステアリング イネーブルビット A
1 = P1A ピンに CCP1M<1:0> で指定した極性に従って PWM 波形を出力する
0 = P1A ピンをポートピンに割り当てる
Note 1: PWM ステアリング モードを使用できるのは、CCP1CON レジスタのビットが CCP1M<3:2> = 11および P1M<1:0> = 00の場合のみです。
DS41350D_JP - p. 134 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 14-16: ステアリング動作の概略ブロック図
1
0TRIS
P1A pin
PORT Data
P1A Signal
STRA
1
0TRIS
P1B pin
PORT Data
STRB
1
0TRIS
P1C pin
PORT Data
STRC
1
0TRIS
P1D pin
PORT Data
STRD
Note 1: 図のようにポート出力が設定されるのは、
CCP1CON レジスタのビットを
P1M<1:0> = 00 および CCP1M<3:2> = 11 に
設定した場合です。
2: PWM のシングル出力モードを使用する場合、
STRx ビットのうち少なくとも 1 つをセット
する必要があります。
CCP1M1
CCP1M0
CCP1M1
CCP1M0
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 135
PIC18F/LF1XK50
14.4.7.1 ステアリングの同期
PSTRCON レジスタの STRSYNC ビットにより、ユーザはステアリング イベントが発生するタイミングを以下の 2 つのうちから選択できます。STRSYNC ビットを「0」とした場合、ステアリング イベントはPSTRCONレジスタへの書き込み命令の終了時に発生します。この方法は、P1<D:A> ピンに出力される信号が不完全な PWM 波形になる可能性があります。この動作は、ユーザ ファームウェアがピンからただちにPWM 信号を除去する必要がある場合に役立ちます。
一方、STRSYNC ビットを「1」とした場合、ステアリングは次の PWM 周期の先頭で更新されます。従って、PWM ステアリングの ON/OFF 出力は常に完全なPWM 波形を生成します。
図 14-17 と 14-18 に、STRSYNC 設定に応じた PWMステアリング動作のタイミング チャートを示します。
図 14-17: 命令終了時に発生するステアリング イベントの例 (STRSYNC = 0)
図 14-18: 命令開始時に発生するステアリング イベントの例 (STRSYNC = 1)
PWM
P1n = PWM
STRn
P1<D:A> PORT Data
PWM Period
PORT Data
PWM
PORT Data
P1n = PWM
STRn
P1<D:A> PORT Data
DS41350D_JP - p. 136 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
14.4.8 電源管理モードにおける動作
スリープモードでは、全てのクロック源が停止します。Timer2 はインクリメントせず、モジュールの状態は変化しません。値を駆動している ECCP ピンは、引き続きその値を駆動します。デバイスがウェイクアップした場合、動作はこの状態から継続します。2 段階起動モードが有効な場合、HFINTOSC の初期の起動周波数とポストスケーラの動作がすぐに安定しない事があります。
PRI_IDLEモードの場合、プライマリ クロックがECCPモジュールの駆動を継続します。その他全ての電源管理モードでは、選択した電源管理モードのクロックがTimer2 にクロック信号を供給します。PRI_IDLE 以外の電源管理モードのクロック周波数は、多くの場合、プライマリ クロックの周波数とは異なります。
14.4.8.1 フェイルセーフ クロックモニタとECCP
フェイルセーフ クロックモニタが有効な場合、クロック障害が発生すると、デバイスは強制的に RC_RUN電源管理モードに移行し、PIR2 レジスタの OSCFIFビットがセットされます。そのモードでは ECCP が内部オシレータ クロック源によって駆動されます。このクロックの周波数はプライマリ クロックとは異なる場合があります。
詳細は、前のセクションを参照してください。
14.4.9 リセットの影響
パワーオン リセットおよびそれ以降のリセットは、いずれも全ポートを入力モードに設定し、CCP レジスタをリセット状態に移行させます。
これによって拡張 CCP モジュールは、標準 CCP モジュールと互換性のある状態にリセットされます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 137
PIC18F/LF1XK50
表 14-3: ECCP1 モジュールと TIMER1 ~ 3 に関連するレジスタ
レジスタ名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の掲載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
RCON IPEN SBOREN — RI TO PD POR BOR 286
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
PIR2 OSCFIF C1IF C2IF EEIF BCLIF USBIF TMR3IF — 290
PIE2 OSCFIE C1IE C2IE EEIE BCLIE USBIE TMR3IE — 290
IPR2 OSCFIP C1IP C2IP EEIP BCLIP USBIP TMR3IP — 290
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
TMR1L Timer1 レジスタ、下位バイト 288
TMR1H Timer1 レジスタ、上位バイト 288
T1CON RD16 T1RUN T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON 288
TMR2 Timer2 レジスタ 288
T2CON — T2OUTPS3 T2OUTPS2 T2OUTPS1 T2OUTPS0 TMR2ON T2CKPS1 T2CKPS0 288
PR2 Timer2 周期レジスタ 288
TMR3L Timer3 レジスタ、下位バイト 289
TMR3H Timer3 レジスタ、上位バイト 289
T3CON RD16 — T3CKPS1 T3CKPS0 T3CCP1 T3SYNC TMR3CS TMR3ON 289
CCPR1L キャプチャ / コンペア /PWM レジスタ 1、下位バイト 289
CCPR1H キャプチャ / コンペア /PWM レジスタ 1、上位バイト 289
CCP1CON P1M1 P1M0 DC1B1 DC1B0 CCP1M3 CCP1M2 CCP1M1 CCP1M0 289
ECCP1AS ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1 PSSBD0 289
PWM1CON PRSEN PDC6 PDC5 PDC4 PDC3 PDC2 PDC1 PDC0 289
凡例 : — = 未実装ビット、「0」として読み出し。網掛けの部分は ECCP 動作には使用しません。
DS41350D_JP - p. 138 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.0 マスタ同期シリアルポート(MSSP) モジュール
15.1 MSSP モジュールの概要
マスタ同期シリアルポート (MSSP) モジュールとは、他の周辺モジュールまたはマイクロコントローラとの通信に便利なシリアル インターフェイスです。通信する周辺モジュールは、シリアル EEPROM、シフトレジスタ、ディスプレイ ドライバ、A/D コンバータ等です。MSSP モジュールは、以下の 2 つのモードのいずれかで動作します。
• シリアル ペリフェラル インターフェイス (SPI)• I2C™ (Inter-Integrated Circuit)
- フルマスタモード
- スレーブモード ( ジェネラルコール アドレス機能使用 )
I2C インターフェイスは、ハードウェアによって以下のモードをサポートします。
• マスタモード
• マルチマスタ モード
• スレーブモード
15.2 SPI モード
SPI モードでは、8 ビットのデータの送受信を同期方式により同時に実行できます。SPI の 4 つのモードに全て対応しています。通信を確立するために、通常以下の 3 つのピンを使用します。
• シリアルデータ出力 – SDO
• シリアルデータ入力 – SDI
• シリアルクロック – SCK
さらに、スレーブモードの動作では 4 本目のピンを使用する場合があります。
• スレーブ選択 – SS
図 15-1 に、SPI モードで動作する MSSP モジュールのブロック図を示します。
図 15-1: MSSP のブロック図 (SPI モード )
( )
Read Write
InternalData Bus
SSPSR Reg
SSPM<3:0>
bit 0 ShiftClock
SS ControlEnable
EdgeSelect
Clock Select
TMR2 Output
TOSCPrescaler4, 16, 64
2EdgeSelect
2
4
TRIS bit
SDO
SSPBUF Reg
SDI/SDA
SS
SCK/SCL
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 139
PIC18F/LF1XK50
15.2.1 レジスタ
MSSP モジュールには、SPI モードの動作用に以下の4 つのレジスタがあります。
• SSPCON1 – 制御レジスタ
• SSPSTAT – ステータス レジスタ
• SSPBUF – シリアル送受信バッファ
• SSPSR – シフトレジスタ ( 直接アクセス不可 )
SSPCON1 と SSPSTAT は、SPI モード動作時の制御レジスタとステータス レジスタです。SSPCON1 レジスタは、読み書き可能です。SSPSTAT の下位 6 ビットは読み出し専用です。SSPSTAT の上位 2 ビットは読み書き可能です。
SSPSR はデータをシフト入出力するためのシフトレジスタです。SSPBUF は、SSPSR レジスタに間接的にアクセスするためのバッファです。SSPBUFは、データバイトを読み書きするバッファレジスタです。
受信動作の場合、SSPSR と SSPBUF が連動して、ダブルバッファ レシーバを構成します。SSPSR が 1 バイト分のデータを全て受信すると、そのバイトはSSPBUFに転送され、SSPIF 割り込みがセットされます。
送信時の SSPBUF はダブルバッファを構成しません。SSPBUF への書き込み動作は、SSPBUF と SSPSR の両方に書き込みます。
レジスタ 15-1: SSPSTAT: MSSP ステータス レジスタ (SPI モード )
R/W-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0
SMP CKE D/A P S R/W UA BF
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 SMP: サンプルビット
SPI マスタモード :1 = データ出力期間の 後に入力データをサンプリングする0 = データ出力期間の途中に入力データをサンプリングする
SPI スレーブモード :SPI をスレーブモードで使用する場合、SMP をクリアする必要がある。
bit 6 CKE: SPI クロック選択ビット (1)
1 = クロック状態がアクティブからアイドルに遷移する時に送信する0 = クロック状態がアイドルからアクティブに遷移する時に送信する
bit 5 D/A: データ / アドレスビット
I2C モードでのみ使用する。
bit 4 P: ストップビット
I2C モードでのみ使用する。SSPEN をクリアして MSSP モジュールが無効に設定されると、このビットはクリアされる。
bit 3 S: スタートビット
I2C モードでのみ使用する。
bit 2 R/W: 読み出し / 書き込み情報ビット
I2C モードでのみ使用する。
bit 1 UA: 更新アドレスビット
I2C モードでのみ使用する。
bit 0 BF: バッファフル ステータスビット ( 受信モードのみ )
1 = 受信が完了し、SSPBUF がフルである 0 = 受信が未完、SSPBUF が空である
Note 1: クロック状態の極性は、SSPCON1 レジスタの CKP ビットによって設定します。
DS41350D_JP - p. 140 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 15-2: SSPCON1: MSSP 制御 1 レジスタ (SPI モード )
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 WCOL: 書き込みコリジョン検出ビット ( 送信モードのみ )
1 = 前回のワードを送信中の SSPBUF レジスタに対して書き込みを実行した( ソフトウェアによるクリアが必要 )
0 = コリジョンは発生していない
bit 6 SSPOV: 受信オーバーフロー インジケータ ビット (1)
SPI スレーブモード : 1 = SSPBUF レジスタがまだ前回のデータを保持している間に、新しいバイトを受信した。オーバー
フローが発生すると、SSPSR 内のデータは失われる。オーバーフローが発生する可能性があるのは、スレーブモードのみである。データ送信しか実行しない場合でも、オーバーフロー ビットがセットされるのを防ぐには (セットされたビットはソフトウェアによるクリアが必要 )、ユーザが SSPBUF を読み出す必要がある。
0 = オーバーフローは発生していない
bit 5 SSPEN: 同期シリアルポート イネーブルビット (2)
1 = シリアルポートを有効にし、シリアルポート ピンとして SCK、SDO、SDI、SS を設定する 0 = シリアルポートを無効にし、上記のピンを I/O ポートピンとして設定する
bit 4 CKP: クロック極性選択ビット
1 = クロックのアイドル状態を High レベルに設定する 0 = クロックのアイドル状態を Low レベルに設定する
bit 3-0 SSPM<3:0>: 同期シリアルポート モード選択ビット (3)
0101 = SPI スレーブモード、クロック = SCK ピン、SS ピン制御無効、SS を I/O ピンとして使用可能 0100 = SPI スレーブモード、クロック = SCK ピン、SS ピン制御有効0011 = SPI マスタモード、クロック = TMR2 出力 /2 0010 = SPI マスタモード、クロック = FOSC/64 0001 = SPI マスタモード、クロック = FOSC/16 0000 = SPI マスタモード、クロック = FOSC/4
Note 1: マスタモードではオーバーフロー ビットがセットされません。新たな受信 ( と送信 ) は毎回 SSPBUF レジスタへの書き込みによって開始されるためです。
2: 有効にする場合、これらのピンを入力または出力として適切に設定する必要があります。
3: ここに具体的に値を示していないビットの組み合わせは、予約済みか、I2C モードでのみ使用するものです。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 141
PIC18F/LF1XK50
15.2.2 動作
SPI を初期化する場合、いくつかのオプションを指定する必要があります。それには、該当する制御ビット(SSPCON1<5:0> と SSPSTAT<7:6>) をプログラムします。これらの制御ビットによって、以下のオプションを指定できます。
• マスタモード (SCK からクロックを出力 )
• スレーブモード (SCK にクロックを入力 )
• クロック極性 (SCK のアイドル状態 )
• データ入力をサンプリングするタイミング ( データ出力期間の途中または 後 )
• クロックエッジ (SCK の立ち上がり / 立ち下がりエッジでデータを出力 )
• クロック速度 ( マスタモードのみ )
• スレーブ選択モード ( スレーブモードのみ )
MSSP は送信 / 受信シフトレジスタ (SSPSR) とバッファレジスタ (SSPBUF) から構成されます。SSPSRは MSb を先頭に、デバイスにデータをシフト入力またはシフト出力します。SSPBUF は受信データが揃うまで、SSPSR に書き込まれたデータを保持します。8 ビットのデータの受信が完了すると、受信したバイトは SSPBUF レジスタに転送されます。そしてSSPSTAT レジスタのバッファフル検出ビット BF と、割り込みフラグビット SSPIF がセットされます。このようなダブル バッファリング方式(SSPBUF)でデータを受信する事で、今受信したデータを読み出す前に、次のバイトの受信を開始できます。データ送受信中のSSPBUF レジスタへの書き込みは全て無視され、実行した場合はSSPCON1レジスタの書き込みコリジョン検出ビット WCOL がセットされます。コリジョン発生後にSSPBUFレジスタへの書き込みが適切に実行されるように、ユーザ ソフトウェアは WCOL ビットをクリアする必要があります。
アプリケーション ソフトウェアが有効なデータを受信する事が予想される場合、次に転送するデータバイトが SSPBUF に書き込まれる前に、SSPBUF を読み出します。SSPSTAT レジスタのバッファフル ビットBF が、SSPBUF に受信データが読み込まれた事 ( 送信が完了した事 ) を知らせます。BF ビットは SSPBUFを読み出すとクリアされます。読み出されたデータは、SPI をトランスミッタとしてしか使用しない場合は特に意味のないものかも知れません。通常、MSSP 割り込みは、いつ送受信が完了したかを判断するために使用します。割り込みによる方法を使用せずに書き込みコリジョンを避けるには、ソフトウェア ポーリングを実行します。例 15-1 に、送信データを SSPBUF(SSPSR) に読み込むサンプルコードを示します。
SSPSR は直接読み書きできません。アクセスするには SSPBUF レジスタのアドレスを指定します。この他にも MSSP ステータス レジスタ (SSPSTAT) は、様々な状態を示します。
例 15-1: SSPBUF (SSPSR) レジスタの読み込み LOOP BTFSS SSPSTAT, BF ;Has data been received (transmit complete)?
BRA LOOP ;No MOVF SSPBUF, W ;WREG reg = contents of SSPBUF
MOVWF RXDATA ;Save in user RAM, if data is meaningful
MOVF TXDATA, W ;W reg = contents of TXDATA MOVWF SSPBUF ;New data to xmit
DS41350D_JP - p. 142 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.2.3 SPI I/O の有効化
シリアルポートを有効にするには、SSPCON1 レジスタのSSPイネーブルビットSSPENをセットする必要があります。SPI モードをリセットまたは再設定するには、SSPEN ビットをクリアし、SSPCON レジスタを再初期化してから、SSPEN ビットをセットします。これによって、SDI、SDO、SCK、SS ピンがシリアルポート ピンとして設定されます。さらに、以下のように各ピンに対応するデータ方向ビット (TRISレジスタ内 ) の一部を設定する必要があります。
• SDI: SPI モジュールによって自動制御される
• SDO: 対応する TRIS ビットをクリアする
• SCK ( マスタモード ): 対応する TRIS ビットをクリアする
• SCK ( スレーブモード ): 対応する TRIS ビットをセットする
• SS: 対応する TRIS ビットをセットする
シリアルポート機能が不要の場合、対応するデータ方向レジスタ(TRIS)を逆の値にプログラムする事で可能です。
15.2.4 代表的な接続
図 15-2 に、2 つのマイクロコントローラ間の代表的な接続方法を示します。マスタ コントローラ ( プロセッサ 1) が、SCK 信号を送信してデータ転送を開始します。データは、プログラムされたクロックエッジごとに両方のシフトレジスタからシフト出力され、逆のクロックエッジごとにラッチされます。両方のプロセッサには、同じクロック極性 (CKP) を設定します。これによって、両方のコントローラが同時にデータを送受信できます。データが有効なものか(またはダミーデータか ) は、アプリケーション ソフトウェアによって決まります。従って、データ送信には以下の 3 つのシナリオが考えられます。
• マスタはデータを送信–スレーブはダミーデータを送信
• マスタはデータを送信–スレーブもデータを送信
• マスタはダミーデータを送信–スレーブはデータを送信
図 15-2: 代表的な SPI マスタ / スレーブ接続
Serial Input Buffer(SSPBUF)
Shift Register(SSPSR)
MSb LSb
SDO
SDI
Processor 1
SCK
SPI Master SSPM<3:0> = 00xx
Serial Input Buffer(SSPBUF)
Shift Register(SSPSR)
LSbMSb
SDI
SDO
Processor 2
SCK
SPI Slave SSPM<3:0> = 010x
Serial Clock
SSSlave Select
General I/O(optional)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 143
PIC18F/LF1XK50
15.2.5 マスタモード
マスタは SCK を制御する側であるため、いつでもデータ転送を開始できます。スレーブ ( 図 15-2 のプロセッサ 2) がいつデータをブロードキャストするかは、ソフトウェア プロトコルに基づいてマスタが決定します。
マスタモードでは、SSPBUFレジスタへの書き込み後、ただちにデータを送受信します。SPI を受信のみに使用する場合、SDO 出力を無効に ( 入力としてプログラム ) してもかまいません。SSPSR レジスタは、プログラムされたクロック速度でSDIピンの信号のシフト入力を継続します。1 バイト受信するごとに、通常の受信バイトと同じようにSSPBUFレジスタに読み込みます ( 割り込みとステータスビットも必要に応じてセットされます )。
SSPCON1レジスタのCKPビットを適切にプログラムする事でクロックの極性を選択します。これによって図 15-3、図 15-5、図 15-6 に示す、SPI 通信の波形が得られます。この波形では、MSb が 初に送信されています。マスタモードでは、SPI のクロック速度 ( ビットレート ) を以下のいずれかにプログラムできます。
• FOSC/4 ( または TCY)
• FOSC/16 ( または 4 • TCY)
• FOSC/64 ( または 16 • TCY)
• Timer2 出力 /2
従って、 大データレートは 16.00 Mbps (@ 64 MHz)です。
図 15-3 にマスタモードの波形を示します。CKE ビットをセットした場合、SDO のデータは SCK にクロックエッジが現れる前に有効になります。この図には、SMP ビットの状態に応じた入力サンプリング位置の変化も示してあります。また、受信データが SSPBUFに読み込まれるタイミングも示しました。
図 15-3: SPI モードの波形 ( マスタモード )
SCK(CKP = 0
SCK(CKP = 1
SCK(CKP = 0
SCK(CKP = 1
4 ClockModes
InputSample
InputSample
SDI
bit 7 bit 0
SDO bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
bit 7
SDI
SSPIF
(SMP = 1)
(SMP = 0)
(SMP = 1)
CKE = 1)
CKE = 0)
CKE = 1)
CKE = 0)
(SMP = 0)
Write toSSPBUF
SSPSR toSSPBUF
SDO bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
(CKE = 0)
(CKE = 1)
bit 0
DS41350D_JP - p. 144 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.2.6 スレーブモード
スレーブモードでは、SCK に外部クロックパルスが印加されるとデータが送受信されます。 後のビットがラッチされた時点で割り込みフラグビット SSPIF がセットされます。
モジュールをSPIスレーブモードで動作させる前に、クロックラインのアイドル状態を一致させておく必要があります。クロックラインの状態は SCK ピンを読み出す事で調べられます。アイドル状態は、SSPCON1 レジスタの CKP ビットによって決まります。
スレーブモードでは、SCK ピンに外部クロック源からのクロックが供給されます。この外部クロックは、電気的仕様に規定された High 期間と Low 期間の 小値を満たす必要があります。
スリープモードでも、スレーブはデータを送受信できます。バイトデータを受信すると、デバイスはスリープからウェイクアップします。
15.2.7 スレーブ選択の同期
SS ピンを使って、同期スレーブモードを実現できます。これには SPI を SS ピン制御を有効にしたスレーブモードに設定する必要があります (SSPCON1<3:0>= 0100)。SS ピンを Low にすると、送受信が有効になり、SDO ピンが駆動されます。SS ピンを High にすると、たとえ送信バイトの途中であっても SDO ピンの駆動は中断され、出力はフローティング状態になります。従って、アプリケーションによっては外付けのプルアップ / プルダウン抵抗の接続が望ましい場合があります。
SPI モジュールがリセットされると、ビットカウンタは強制的に「0」に設定されます。これは SS ピンを強制的に High レベルにするか、SSPEN ビットをクリアする事で可能です。
図 15-4: スレーブの同期波形
Note 1: SPI を、SS ピン制御を有効にしたスレーブモードに設定した場合 (SSPCON<3:0>= 0100)、SSピンをVDDに設定するとSPIモジュールがリセットされます。
2: CKEビットをセットしたスレーブモードで SPI を使用する場合、SS ピンによる制御も有効に設定する必要があります。
SCK(CKP = 1
SCK(CKP = 0
InputSample
SDI
bit 7
SDO bit 7 bit 6 bit 7
SSPIFInterrupt
(SMP = 0)
CKE = 0)
CKE = 0)
(SMP = 0)
Write toSSPBUF
SSPSR toSSPBUF
SS
Flag
bit 0
bit 7
bit 0
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 145
PIC18F/LF1XK50
図 15-5: SPI モードの波形 (CKE = 0のスレーブモード )
図 15-6: SPI モードの波形 (CKE = 1のスレーブモード )
SCK(CKP = 1
SCK(CKP = 0
InputSample
SDI
bit 7
SDO bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
SSPIFInterrupt
(SMP = 0)
CKE = 0)
CKE = 0)
(SMP = 0)
Write toSSPBUF
SSPSR toSSPBUF
SS
Flag
Optional
bit 0
SCK(CKP = 1
SCK(CKP = 0
InputSample
SDI
bit 7 bit 0
SDO bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
SSPIFInterrupt
(SMP = 0)
CKE = 1)
CKE = 1)
(SMP = 0)
Write toSSPBUF
SSPSR toSSPBUF
SS
Flag
Not Optional
DS41350D_JP - p. 146 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.2.8 電力管理モードにおける動作
SPI のマスタモードで電力管理モードに移行した場合、モジュール クロックがフルパワーモードとは異なる速度で動作する可能性があります。スリープモードでは全てのクロックが停止します。
いずれのアイドルモードも、周辺モジュールにはクロックが供給されます。このクロックはプライマリ クロック源から供給される場合もあれば、セカンダリ クロック (32.768 kHz で動作する Timer1 オシレータ ) または INTOSC ソースから供給される場合もあります。詳細は、19.0「電力管理モード」を参照してください。
ほとんどの場合、マスタが SPI データをクロッキングする速度はそれほど重要ではないものの、システムごとに評価しておくべきです。
MSSP 割り込みを有効化している場合、マスタがデータ送信を完了すると、MSSP 割り込みによってコントローラが以下のようにウェイクアップされます。
• スリープモードからはスレーブモードに
• アイドルモードからはスレーブまたはマスタモードに
スリープまたはアイドルモードを終了させたくない場合、MSSP 割り込みを無効にします。
SPI マスタモードでスリープモードを選択すると全てのモジュール クロックが停止し、デバイスがウェイクアップするまで送受信はその時点の状態を保ちます。デバイスがランモードに復帰すると、モジュールはデータの送受信を再開します。
SPI スレーブモードにおける SPI 送受信シフトレジスタはデバイスとは非同期に動作します。従って、デバイスがいずれの電力管理モードに移行しても、SPI 送受信シフトレジスタへのデータのシフト入力は継続で
きます。8 ビットを全て受信すると、MSSP 割り込みフラグビットがセットされ、割り込みを有効化している場合はデバイスがウェイクアップします。
15.2.9 リセットの影響
リセットは MSSP モジュールを無効にし、現在の転送は中止されます。
15.2.10 バスモード互換性
表 15-1 に、標準 SPI モードと、制御ビット CKP とCKE の状態の関係を示します。
表 15-1: SPI バスモード
データ サンプリングのタイミングを制御する SMPビットもあります。
表 15-2: SPI 動作に関連するレジスタ
標準 SPI モードの表現
制御ビットの状態
CKP CKE
0, 0 0 1
0, 1 0 0
1, 0 1 1
1, 1 1 0
レジスタ名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の掲載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
TRISB TRISB7 TRISB6 TRISB5 TRISB4 — — — — 290
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
SSPBUF SSP 受信バッファ / 送信レジスタ 288
SSPCON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 288
SSPSTAT SMP CKE D/A P S R/W UA BF 288
凡例 : 網掛けの部分は SPI モードの MSSP では使用しません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 147
PIC18F/LF1XK50
15.3 I2C モード
I2C モードの MSSP モジュールは、全てのマスタ / スレーブ機能 ( ジェネラルコールのサポートを含む ) を実装しており、空いているバスを判断するためのハードウェアによるスタート / ストップビット割り込みを生成できます ( マルチマスタ機能 )。MSSP モジュールは標準モードの仕様を実装すると共に、7 ビットと 10ビットのアドレッシングにも対応しています。
データ転送には以下の 2 つのピンを使用します。
• シリアルクロック – SCL
• シリアルデータ – SDA
図 15-7: MSSP のブロック図 (I2C™ モード )
15.3.1 レジスタ
MSSP モジュールには、I2C 動作用に以下の 7 つのレジスタがあります。
• MSSP 制御レジスタ 1 (SSPCON1)
• MSSP 制御レジスタ 2 (SSPCON2)
• MSSP ステータス レジスタ (SSPSTAT)
• シリアル受信 / 送信バッファレジスタ (SSPBUF)
• MSSPシフトレジスタ(SSPSR) – 直接アクセスは不可
• MSSP アドレスレジスタ (SSPADD)
• MSSP アドレスマスク (SSPMSK)
SSPCON1、SSPCON2、SSPSTAT は、I2C モード動作時の制御レジスタとステータス レジスタです。SSPCON1 と SSPCON2 は読み書き可能なレジスタです。SSPSTAT の下位 6 ビットは読み出し専用です。SSPSTAT の上位 2 ビットは読み書き可能です。
SSPSR はデータをシフト入出力するためのシフトレジスタです。SSPBUF はデータバイトの読み書き用バッファレジスタです。
MSSP をマスタモードに設定した場合、SSPADD レジスタの値は baud レート ジェネレータの再読み込み値です。MSSP を I2C スレーブモードに設定した場合、SSPADDレジスタはスレーブデバイスのアドレスを保持します。SSPMSK レジスタによってアドレスレジスタのビットの一部だけを選択的に比較する事で、一定範囲のアドレスにだけ応答するようにMSSPを設定できます。
受信動作の場合、SSPSR と SSPBUF が連動して、ダブルバッファ レシーバを構成します。SSPSR が 1 バイト分のデータを全て受信すると、そのバイトはSSPBUFに転送され、SSPIF 割り込みがセットされます。
送信時の SSPBUF はダブルバッファを構成しません。SSPBUF への書き込み動作は、SSPBUF と SSPSR の両方に書き込みます。
Note: ユーザは対応するTRISビットによってこれらのピンを入力として設定する必要があります。
Read Write
SSPSR Reg
Match Detect
SSPADD Reg
Start andStop bit Detect
SSPBUF Reg
InternalData Bus
Addr Match
Set, ResetS, P bits
(SSPSTAT Reg)
SCK/SCL
SDI/SDA
ShiftClock
MSb LSb
SSPMSK Reg
DS41350D_JP - p. 148 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 15-3: SSPSTAT: MSSP ステータス レジスタ (I2C モード )
R/W-0 R/W-0 R-0 R-0 R-0 R-0 R-0 R-0
SMP CKE D/A P(1) S(1) R/W(2, 3) UA BF
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 SMP: スルーレート制御ビット
マスタまたはスレーブモード : 1 = スルーレート制御の標準速度モード (100 kHz と 1 MHz) を無効に設定する 0 = スルーレート制御の高速モード (400 kHz) を有効に設定する
bit 6 CKE: SMBus 選択ビットマスタまたはスレーブモード :1 = SMBus 指定の入力を有効に設定する 0 = SMBus 指定の入力を無効に設定する
bit 5 D/A: データ / アドレスビット
マスタモード :予約済み
スレーブモード :1 = 後に送受信したバイトがデータであった事を示す0 = 後に受信したバイトがアドレスであった事を示す
bit 4 P: ストップビット (1)
1 = 後にストップビットが検出された事を示す0 = 後にストップビットが検出されなかった事を示す
bit 3 S: スタートビット (1)
1 = 後にスタートビットが検出された事を示す0 = 後にスタートビットが検出されなかった事を示す
bit 2 R/W: 読み出し / 書き込み情報ビット (I2C モードのみ )(2、3)
スレーブモード :1 = 読み出し0 = 書き込み
マスタモード :1 = 送信中0 = 送信中ではない
bit 1 UA: 更新アドレスビット (10 ビットのスレーブモードのみ )
1 = ユーザが SSPADD レジスタ内のアドレスを更新する必要がある事を示す 0 = アドレスの更新は不要である
bit 0 BF: バッファフル ステータスビット
送信モード : 1 = SSPBUF がフル 0 = SSPBUF が空
受信モード :1 = SSPBUF がフル (ACK とストップビットを除く )0 = SSPBUF が空 (ACK とストップビットを除く )
Note 1: このビットは、リセット時と SSPEN のクリア時にクリアされます。
2: このビットは、 後のアドレス一致後の R/W ビット情報を保持します。このビットが有効な期間は、アドレス一致から次のスタートビット、ストップビットまたは非 ACK ビットまでです。
3: このビットと、SEN、RSEN、PEN、RCEN、または ACKEN との論理和を取ると、マスタモードがアクティブかどうかを判断できます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 149
PIC18F/LF1XK50
レジスタ 15-4: SSPCON1: MSSP 制御レジスタ 1 (I2C モード )
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 WCOL: 書き込みコリジョン検出ビット
マスタ送信モード :1 = 送信を開始するための I2C 条件が有効でない状態で SSPBUF レジスタへの書き込みを試みた
( ソフトウェアによるクリアが必要 )0 = コリジョンは発生していない
スレーブ送信モード :1 = 前回のワードを送信中の SSPBUF レジスタに対して書き込みが実行された
( ソフトウェアによるクリアが必要 )0 = コリジョンは発生していない
受信モード ( マスタまたはスレーブモード ):ドントケアビット
bit 6 SSPOV: 受信オーバーフロー インジケータ ビット
受信モード :1 = SSPBUF レジスタが、まだ前回のバイトを保持している間にバイトを受信した
( ソフトウェアによるクリアが必要 )0 = オーバーフローは発生していない
送信モード : 送信モードではドントケアビット
bit 5 SSPEN: 同期シリアルポート イネーブルビット
1 = シリアルポートを有効に設定し、SDA ピンと SCL ピンをシリアルポートとして設定する 0 = シリアルポートを無効にし、上記のピンを I/O ポートピンとして設定するシリアルポートを有効にする場合、SDA ピンと SCL ピンを入力として適切に設定する必要がある。
bit 4 CKP: SCK 解放制御ビット
スレーブモード : 1 = クロックを解放する 0 = クロックを Low に保持 ( クロック ストレッチ ) してデータ セットアップ時間を確保する
マスタモード : このモードでは未使用
bit 3-0 SSPM<3:0>: 同期シリアルポート モード選択ビット
1111 = I2C スレーブモード、10 ビットアドレス、スタートビットとストップビットの割り込みを有効にする
1110 = I2C スレーブモード、7 ビットアドレス、スタートビットとストップビットの割り込みを有効にする
1011 = I2C ファームウェア制御マスタモード ( スレーブアイドル )1000 = I2C マスタモード、クロック = FOSC/(4 * (SSPADD + 1)) 0111 = I2C スレーブモード、10 ビットアドレス0110 = I2C スレーブモード、7 ビットアドレスここに具体的に値を示していないビットの組み合わせは、予約済みか、SPI モードでのみ使用するものです。
DS41350D_JP - p. 150 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 15-5: SSPCON2: MSSP 制御レジスタ (I2C モード )
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
GCEN ACKSTAT ACKDT(2) ACKEN(1) RCEN(1) PEN(1) RSEN(1) SEN(1)
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 GCEN: ジェネラルコール イネーブルビット ( スレーブモードのみ )
1 = SSPSR にジェネラルコール アドレス 0x00 または 00h を受信した時に割り込みを発生させる0 = ジェネラルコール アドレスを無効にする
bit 6 ACKSTAT: 肯定応答 (ACK) ステータスビット ( マスタ送信モードのみ )
1 = スレーブから ACK を受信していない 0 = スレーブから ACK を受信した
bit 5 ACKDT: 肯定応答 (ACK) データビット ( マスタ受信モードのみ )(2)
1 = 肯定応答しない 0 = 肯定応答する
bit 4 ACKEN: ACK シーケンス イネーブルビット ( マスタ受信モードのみ )(1)
1 = SDA ピンと SCL ピンで ACK シーケンスを開始し、ACKDT データビットを送信するハードウェアによって自動的にクリアされる。
0 = ACK シーケンスをアイドルにする
bit 3 RCEN: 受信イネーブルビット ( マスタモードのみ )(1)
1 = I2C の受信モードを有効に設定0 = 受信をアイドル
bit 2 PEN: ストップ条件イネーブルビット ( マスタモードのみ )(1)
1 = SDA ピンと SCL ピンでストップ条件を開始する。ハードウェアによって自動的にクリアされる。0 = ストップ条件をアイドルにする
bit 1 RSEN: リピートスタート条件イネーブルビット ( マスタモードのみ )(1)
1 = SDA ピンと SCL ピンでリピートスタート条件を開始する。ハードウェアによって自動的にクリアされる。
0 = リピートスタート条件をアイドルにする
bit 0 SEN: スタート条件イネーブル / ストレッチ イネーブルビット (1)
マスタモード :1 = SDA ピンと SCL ピンでスタート条件を開始する。ハードウェアによって自動的にクリアされる。0 = スタート条件をアイドルにする
スレーブモード :1 = スレーブ送信とスレーブ受信の両方でクロック ストレッチを有効に設定する0 = クロック ストレッチを無効に設定する
Note 1: ACKEN、RCEN、PEN、RSEN、SEN ビットについて : I2C モジュールがアイドル以外のモードにある場合、これらのビットがセットされない可能性があり ( スプーリングなし )、SSPBUF への書き込みが実行されない (SSPBUF への書き込みが無効である ) 場合があります。
2: ユーザが、受信終了時に ACK シーケンスを開始する時に送信される値です。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 151
PIC18F/LF1XK50
15.3.2 動作
MSSP モジュールの動作は、SSPCON1 レジスタのSSPEN ビットをセットすると有効になります。
SSPCON1 レジスタにより、I2C 動作を制御できます。SSPCON1 レジスタの 4 つのモード選択ビットによって、以下の I2C モードのいずれか 1 つを選択します。
• I2C マスタモード、クロック = (FOSC/(4*(SSPADD + 1))
• I2C スレーブモード、7 ビットアドレス
• I2C スレーブモード、10 ビットアドレス
• I2C スレーブモード、7 ビットアドレス、スタートビットとストップビットの割り込み有効化
• I2C スレーブモード、10 ビットアドレス、スタートビットとストップビットの割り込み有効化
• I2C ファームウェア制御マスタモード ( スレーブはアイドル )
SSPEN ビットをセットして、さらに I2C モードを選択した場合、いずれのモードでも SCL ピンと SDA ピンは強制的にオープンドレインに設定されます。ただし、対応する TRIS ビットによってこれらのピンを入力として設定している場合に限ります。
15.3.3 スレーブモード
スレーブモードでは SCL ピンと SDA ピンを入力として設定する必要があります。MSSP モジュールは必要に応じて、出力データによって入力状態を無効にします ( スレーブ トランスミッタ )。
I2C スレーブモードのハードウェアは、常時アドレス一致割り込みを発生させます。モード選択ビットを設定する事で、スタートビットとストップビットによる割り込みも選択できます。
アドレスが一致した場合、またはアドレス一致後に転送データの受信が完了した時点で、ハードウェアは自動的に肯定応答 (ACK) パルスを生成すると共に、直前にSSPSRレジスタで受信した値をSSPBUFレジスタに読み込みます。
以下の条件が 1 つでも満たされると、MSSP モジュールは上記の ACK パルスを発生しません。
• 転送データを受信する前に SSPSTAT レジスタのバッファフル ビット BF がセットされる。
• 転送データを受信する前にSSPCON1レジスタのオーバーフロー ビット SSPOV がセットされる。
この場合、SSPSR レジスタの値は SSPBUF に読み込まれませんが、PIR1 レジスタの SSPIF ビットはセットされます。BF ビットは SSPBUF レジスタを読み出す事でクリアされますが、SSPOVビットはソフトウェアによるクリアが必要です。
適切に動作させるには、SCL クロック入力の High 期間とLow期間が 小値の仕様を満たしている必要があります。I2C仕様のHigh期間とLow期間の規定、MSSPモジュールに関する要件は、27.0「電気的仕様」に記載されています。
15.3.3.1 アドレッシング
有効に設定された MSSP モジュールは、スタート条件が発生するのを待ちます。スタート条件が発生すると、8ビットがSSPSRレジスタにシフト入力されます。受信ビットは、全てクロックライン (SCL) の立ち上がりエ ッ ジ で サ ン プ リ ン グ さ れ ま す。レ ジ ス タSSPSR<7:1> の値が、SSPADD レジスタの値と比較されます。アドレスは、8 番目のクロックパルス (SCL)の立ち下がりエッジで比較されます。アドレスが一致し、BF ビットと SSPOV ビットがクリアされている場合、以下のように動作します。
1. SSPSR レジスタの値が SSPBUF レジスタに読み込まれる。
2. バッファフル ビット BF がセットされる。
3. ACK パルスが生成される。
4. 9 番目の SCL パルスの立ち下がりエッジで、PIR1 レジスタの MSSP 割り込みフラグビットSSPIFがセットされる(有効化されている場合、割り込みを発生させる )。
10 ビット アドレスモードの場合、スレーブは 2 バイトのアドレスを受信する必要があります。1 バイト目のアドレスバイトの上位 5 ビット (MSb) が、10 ビットアドレスであるかどうかを示します。スレーブデバイスがアドレスの 2 バイト目を受信するように、SSPSTATレジスタのR/Wビットでは書き込みを指定しておく必要があります。10 ビットアドレスの場合、1 バイト目の値は「11110 A9 A8 0」です。この「A9」と「A8」はアドレスの上位 2 ビット (MSb) です。10 ビットアドレス モードの動作シーケンスは以下の通りです。ただし、ステップ 7 ~ 9 はスレーブ トランスミッタの場合に実行されます。
1. アドレスバイトの 1 バイト目 ( 上位バイト ) を受信する (SSPSTAT レジスタの SSPIF、BF、UAビットがセットされる )。
2. SSPBUFレジスタを読み出し (BFビットがクリアされる )、フラグビット SSPIF をクリアする。
3. SSPADDレジスタをアドレスバイトの2バイト目( 下位バイト ) によって更新する (UA ビットがクリアされ SCL ラインが解放される )。
4. アドレスの 2 バイト目を受信する (SSPIF、BF、UA ビットがセットされる )。アドレスが一致した場合、次のステップまで SCL を保持する。それ以外の場合は SCL ラインを保持しない。
5. SSPBUFレジスタを読み出し (BFビットがクリアされる )、フラグビット SSPIF をクリアする。
6. SSPADD レジスタをアドレスの 1 バイト目 ( 上位バイト ) によって更新する。(UA ビットがクリアされ、保持されていた SCL ラインが解放される。)
7. リピートスタート条件を受信する。
8. R/Wビットがセットされたアドレスの 1バイト目( 上位バイト ) を受信する (SSPIF、BF、R/W ビットがセットされる )。
9. SSPBUFレジスタを読み出し (BFビットがクリアされる )、フラグビット SSPIF をクリアする。
10. スレーブが送信するバイトを SSPBUF に読み込み、BF ビットがセットされる。
11. CKP ビットをセットして、SCL を解放する。
Note: モジュールが適切に動作するように、SCLピンと SDA ピンに外部プルアップ抵抗の接続が必要となる場合があります。
DS41350D_JP - p. 152 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.3.3.2 受信
R/Wビットがクリアされた状態のアドレスバイトが一致した場合、SSPSTAT レジスタの R/W ビットがクリアされます。受信したアドレスは SSPBUF レジスタに読み込まれ、SDAラインがLowに保持されます (ACK)。
アドレスバイトのオーバーフロー条件が真の場合、ACK パルス (ACK) が生成されません。オーバーフロー条件の定義は、SSPSTAT レジスタの BF ビット、またはSSPCON1 レジスタのSSPOV ビットのいずれかがセットされている事です。
転送データのバイトごとにMSSP割り込みが発生します。PIR1レジスタのフラグビットSSPIFはソフトウェアによってクリアする必要があります。
SSPCON2 レジスタの SEN ビットがセットされている場合、各データの転送が完了するごとに、SCL がlowに保持(クロック ストレッチ)されます。SSPCON1レジスタの CKP ビットをセットしてクロックを解放する必要があります。詳細は 15.3.4「クロック ストレッチ」を参照してください。
15.3.3.3 送信
受信アドレスバイトのR/Wビットがセットされた状態でアドレスが一致すると、SSPSTAT レジスタの R/Wビットがセットされます。受信したアドレスはSSPBUF レジスタに読み込まれます。9 番目のビットで ACK パルスが送信され、SEN の状態にかかわらずSCK/SCL ピンが Low に保持されます (15.3.4「クロック ストレッチ」参照 )。このクロック ストレッチ動作によって、マスタはスレーブが送信データの準備を整えるまで、次のクロックパルスをアサートできなくなります。送信データは SSPBUF レジスタに読み込まれます。データはさらに SSPSR レジスタにも読み込まれます。次に、SSPCON1 レジスタの CKP ビットをセットして SCK/SCL ピンを解放します。8 ビットのデータがSCL入力の立ち下がりエッジでシフト出力されます。これによって、必ず SCL の High 期間に SDA信号が有効になります ( 図 15-9)。
マスタレシーバからの ACK パルスが 9 番目の SCL 入力パルスの立ち上がりエッジでラッチされます。SDAラインが High ( 非 ACK) の場合、データ送信は完了です。この場合、スレーブが ACK をラッチすると、スレーブのロジックはリセットされ (SSPSTAT レジスタをリセット )、次のスタートビットの監視を開始します。SDA ラインが Low (ACK) の場合、次の送信データを SSPBUF レジスタに読み込む必要があります。この場合も、CKP ビットをセットして SCK/SCL ピンを解放する必要があります。
転送データのバイトごとにMSSP割り込みが発生します。SSPIF ビットはソフトウェアによってクリアする必要があり、バイトの状態を判断するには SSPSTATレジスタを使用します。SSPIF ビットは 9 番目のクロックパルスの立ち下がりエッジでセットされます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 153
PIC18F/LF1XK50
図 15-8: SEN = 0の場合の I2C™ スレーブモードのタイミング (7 ビットアドレス モードの受信 )
SD
A
SC
L
SS
PIF
BF
(S
SP
STA
T<
0>
)
SS
PO
V (
SS
PC
ON
1<6>
)
S1
23
45
67
89
12
34
56
78
91
23
45
78
9P
A7
A6
A5
A4
A3
A2
A1
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D1
D0
AC
KR
ece
ivin
g D
ata
AC
KR
ecei
ving
Dat
aR
/W =
0 AC
K
Re
ceiv
ing
Add
ress
Cle
ared
by
softw
are
SS
PB
UF
is r
ea
d
Bu
s m
ast
erte
rmin
ate
str
ans
fer
SS
PO
V is
se
tb
eca
use
SS
PB
UF
isst
ill fu
ll. A
CK
is n
ot s
ent.
D2 6
(PIR
1<
3>
)
CK
P(C
KP
doe
s no
t re
set
to ‘0
’ wh
en
SE
N =
0)
DS41350D_JP - p. 154 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 15-9: I2C™ スレーブモードのタイミング (7 ビットアドレス モードの送信 )
SD
A
SC
L
SS
PIF
(P
IR1<
3>)
BF
(S
SP
STA
T<
0>)
A6
A5
A4
A3
A2
A1
D6
D5
D4
D3
D2
D1
D0
12
34
56
78
23
45
67
89
SS
PB
UF
is w
ritte
n by
sof
twar
e
Cle
ared
by
softw
are
Fro
m S
SP
IF IS
R
Dat
a in
sa
mpl
ed
S
AC
KT
rans
mitt
ing
Dat
aR
/W =
0
AC
K
Rec
eivi
ng A
ddre
ss
A7
D7
91
D6
D5
D4
D3
D2
D1
D0
23
45
67
89
SS
PB
UF
is w
ritte
n by
sof
twar
e
Cle
ared
by
softw
are
Fro
m S
SP
IF IS
R
Tra
nsm
ittin
g D
ata
D7 1
CK
P
P
AC
K
CK
P is
set
by
softw
are
CK
P is
set
by
softw
are
SC
L he
ld lo
ww
hile
CP
Ure
spon
ds to
SS
PIF
SS
PB
UF
is r
ead
by s
oftw
are
Bus
mas
ter
term
inat
es s
oftw
are
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 155
PIC18F/LF1XK50
図 15-10: SEN = 0の場合の I2C™ スレーブモードのタイミング (10 ビットアドレス モードの受信 )
SD
A
SC
L
SS
PIF
BF
(S
SP
STA
T<
0>
)
S1
23
45
67
89
12
34
56
78
91
23
45
78
9P
11
11
0A
9A
8A
7A
6A
5A
4A
3A
2A
1A
0D
7D
6D
5D
4D
3D
1D
0
Rec
eiv
e D
ata
Byt
e
AC
K
R/W
= 0 AC
K
Rec
eiv
e F
irst B
yte
of A
ddre
ss
Cle
are
d b
y so
ftwa
re
D2
6
(PIR
1<
3>
)
Cle
are
d b
y so
ftwa
re
Rec
eiv
e S
eco
nd
Byt
e o
f Add
ress
Cle
are
d b
y h
ardw
are
wh
en S
SP
AD
D is
upd
ate
dw
ith lo
w b
yte
of a
ddre
ss
UA
(S
SP
STA
T<
1>
)
Clo
ck is
he
ld lo
w u
ntil
upd
ate
of S
SP
AD
D h
as
take
n pl
ace
UA
is s
et in
dica
ting
that
the
SS
PA
DD
ne
eds
to b
eu
pda
ted
UA
is s
et in
dica
ting
that
SS
PA
DD
ne
eds
to b
eu
pda
ted
Cle
are
d by
har
dwa
re w
hen
SS
PA
DD
is u
pda
ted
with
hig
hb
yte
of a
ddre
ss
SS
PB
UF
is w
ritte
n w
ithco
nten
ts o
f SS
PS
RD
um
my
read
of
SS
PB
UF
to c
lear
BF
fla
g
AC
K
CK
P
12
34
57
89
D7
D6
D5
D4
D3
D1
D0
Rec
eiv
e D
ata
Byt
e
Bu
s m
aste
rte
rmin
ate
str
ansf
er
D2 6
AC
K
Cle
are
d b
y so
ftwa
reC
lear
ed
by
softw
are
SS
PO
V (
SS
PC
ON
1<6>
)
SS
PO
V is
se
tb
eca
use
SS
PB
UF
isst
ill fu
ll. A
CK
is n
ot s
ent.
(CK
P d
oe
s n
ot r
ese
t to
‘0’ w
he
n S
EN
= 0
)
Clo
ck is
hel
d lo
w u
ntil
up
date
of
SS
PA
DD
ha
s ta
ken
pla
ce
DS41350D_JP - p. 156 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 15-11: I2C™ スレーブモードのタイミング (10 ビットアドレス モードの送信 )
SD
A
SC
L
SS
PIF
BF
S1
23
45
67
89
12
34
56
78
91
23
45
78
9P
11
11
0A
9A
8A
7A
6A
5A
4A
3A
2A
1A
01
11
10
A8
R/W
=1 A
CK
AC
K
R/W
= 0
AC
K
Rec
eive
Firs
t B
yte
of A
ddre
ss
Cle
are
d in
sof
twa
re
Bus
Mas
ter
send
s S
top
cond
ition
A9
6
Rec
eiv
e S
eco
nd
Byt
e o
f A
ddre
ss
Cle
are
d b
y ha
rdw
are
wh
enS
SP
AD
D is
upd
ate
d w
ith lo
wby
te o
f ad
dres
s.
UA
Clo
ck is
hel
d lo
w u
ntil
up
date
of
SS
PA
DD
ha
s ta
ken
pla
ce
UA
is s
et in
dica
ting
that
the
SS
PA
DD
ne
eds
to b
eu
pda
ted
UA
is s
et in
dica
ting
that
SS
PA
DD
ne
eds
to b
eu
pdat
ed
Cle
are
d b
y h
ardw
are
whe
nS
SP
AD
D is
up
date
d w
ith h
igh
byt
e o
f add
ress
.
SS
PB
UF
is w
ritte
n w
ithco
nte
nts
of S
SP
SR
Du
mm
y re
ad o
f S
SP
BU
Fto
cle
ar B
F f
lag
Rec
eive
Firs
t B
yte
of
Add
ress
12
34
57
89
D7
D6
D5
D4
D3
D1
AC
K
D2
6
Tra
nsm
ittin
g D
ata
Byt
e
D0
Du
mm
y re
ad o
f S
SP
BU
Fto
cle
ar B
F f
lag
Sr
Cle
are
d in
so
ftwa
re
Writ
e o
f S
SP
BU
F
Cle
ared
in s
oftw
are
Com
ple
tion
of
clea
rs B
F fl
ag
CK
P
CK
P is
se
t in
softw
are,
initi
ate
s tr
an
smis
sio
n
CK
P is
au
tom
atic
ally
cle
are
d in
har
dw
are
hol
din
g S
CL
low
Clo
ck is
he
ld lo
w u
ntil
up
date
of
SS
PA
DD
ha
sta
ken
pla
ce
data
tran
smis
sion
Clo
ck is
hel
d lo
w u
ntil
CK
P is
set
to 「
1」
Bu
s M
aste
rse
nds
Res
tart
sco
ndi
tion
Dum
my
rea
d o
f SS
PB
UF
to c
lea
r B
F fl
ag
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 157
PIC18F/LF1XK50
15.3.3.4 SSP マスクレジスタ
I2C スレーブモードのアドレス比較動作において、SSPSR レジスタに保持されている値を SSP マスクレジスタ (SSPMSK) によってマスクできます。SSPMSKレジスタ内のゼロ (「0」) のビットは、SSPSR レジスタ内の対応するビットを「ドントケア」にする効果があります。
このレジスタは、全てのリセット条件で全ビットが「1」にリセットされるため、ユーザがマスク値を書き込まない限り、標準のSSP動作には影響を与えません。
このレジスタの設定は、SSPM<3:0> ビットをセットして I2C スレーブモード (7 ビットまたは 10 ビットアドレス)を選択する前に完了しておく必要があります。
SSP マスクレジスタは以下の場合に適用されます。
• 7 ビットアドレス モード : アドレス A<7:1> を比較する。
• 10 ビットアドレス モード : アドレス A<7:0> のみを比較する。アドレスの 1 バイト目 ( 上位バイト ) の受信時は、SSP マスクが適用されない。
レジスタ 15-6: SSPMSK: SSP マスクレジスタ
R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1 R/W-1
MSK7 MSK6 MSK5 MSK4 MSK3 MSK2 MSK1 MSK0(1)
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-1 MSK<7:1>: マスクビット
1 = 受信アドレス bit n を SSPADD<n> と比較して I2C アドレス一致を検出する0 = 受信アドレス bit n を I2C アドレス一致の検出に使用しない
bit 0 MSK<0>: 10 ビットアドレスの I2C スレーブモードに使用するマスクビット (1)
I2C スレーブモード、10 ビットアドレス (SSPM<3:0> = 0111):1 = 受信アドレス bit 0 を SSPADD<0> と比較して I2C アドレス一致を検出する0 = 受信アドレス bit 0 を I2C アドレス一致の検出に使用しない
Note 1: MSK0 ビットは 10 ビットのスレーブモードでのみ使用します。その他の全てのモードでは、このビットは無視されます。
DS41350D_JP - p. 158 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 15-7: SSPADD: MSSP アドレス /baud レート レジスタ (I2C モード )
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
ADD7 ADD6 ADD5 ADD4 ADD3 ADD2 ADD1 ADD0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
マスタモード :
bit 7-0 ADD<7:0>: baud レート クロック分周ビットSCL ピンクロック周期 = ((ADD<7:0> + 1) *4)/FOSC
10 ビット スレーブモード - 上位アドレスバイト :
bit 7-3 未使用 : 上位アドレスバイトとしては使用しません。このレジスタのビット状態は「ドントケア」です。マスタが送信するビットパターンは I2C 仕様によって「11110」に固定されているためです。これらのビットに対してもハードウェアによる比較は実行されますが、このレジスタの値は比較結果に影響を与えません。
bit 2-1 ADD<9:8>: 10 ビットアドレスの上位 2 ビット
bit 0 未使用 : このモードでは使用しません。ビット状態は「ドントケア」です。
10 ビット スレーブモード - 下位アドレスバイト :
bit 7-0 ADD<7:0>: 10 ビットアドレスの下位 8 ビット
7 ビット スレーブモード :
bit 7-1 ADD<6:0>: 7 ビットのアドレス
bit 0 未使用 : このモードでは使用しません。ビット状態は「ドントケア」です。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 159
PIC18F/LF1XK50
15.3.4 クロック ストレッチ
7 ビットと 10 ビットの両スレーブモードは、送信シーケンス実行中の自動クロック ストレッチ機能を実装します。
SSPCON2 レジスタの SEN ビットによって、受信時のクロック ストレッチが有効になります。SEN ビットをセットすると、データ受信シーケンスが終了するごとに SCL ピンが Low に保持されます。
15.3.4.1 7 ビットスレーブ受信モードのクロック ストレッチ (SEN = 1)
7 ビットスレーブ受信モードでは、ACK シーケンスの後、9 番目のクロックの立ち下がりエッジで BF ビッ
トがセットされている場合、SSPCON1 レジスタのCKP ビットが自動的にクリアされます。これによって、SCL 出力が強制的に Low に保持されます。CKPを「0」にクリアすると、SCL ラインが Low にアサートされます。受信を継続するには、ユーザ割り込みサービスルーチン (ISR)内でCKPビットをセットする必要があります。SCL ラインを Low に保持する事で、マスタデバイスが次のデータ転送シーケンスを開始する前に、ユーザ ISR の処理と SSPBUF の内容読み出しの時間を確保できます。これによって、バッファ オーバーランを防止します ( 図 15-13 参照 )。
15.3.4.2 10 ビットスレーブ受信モードのクロック ストレッチ (SEN = 1)
10 ビットスレーブ受信モードのアドレス シーケンスでは、クロック ストレッチが自動的に実行されますが、CKP はクリアされません。この場合、もし 9 番目のクロック後に UA ビットがセットされていると、クロック ストレッチが開始されます。UA ビットがセットされるのは、10 ビットアドレスの上位バイトを受信した後に、R/W ビットが「0」にクリアされている下位バイトを受信した後です。クロックラインは SSPADD を更新した時点で解放されます。クロック ストレッチは、7 ビットモードと同様に、データ受信のシーケンスごとに発生します。
15.3.4.3 7 ビットスレーブ送信モードのクロック ストレッチ
7 ビットスレーブ送信モードでは、9 番目のクロックの立ち下がりエッジ後に CKP ビットをクリアする事でクロック ストレッチを実現します。この動作は、SEN ビットの状態にかかわらず実行されます。
送信を継続するには、ユーザ ISR によって CKP ビットをセットする必要があります。SCL ラインを Low に保持する事で、マスタデバイスが次のデータ転送シーケンスを開始する前に、ユーザ ISR の処理と SSPBUFの内容読み込みの時間を確保できます(図 15-9参照)。
15.3.4.4 10 ビットスレーブ送信モードのクロック ストレッチ
10 ビットスレーブ送信モード開始後、 初の 2 つのアドレスのシーケンスにおけるクロック ストレッチは、10ビットスレーブ受信モードの場合と同様に、UAビットの状態によって制御されます。これに続く 3 番目のアドレス シーケンスには、10 ビットアドレスの上位ビットと「1」にセットされた R/W ビットが含まれます。3番目のアドレス シーケンス以降UAビットはセットされず、モジュールが送信モードに設定されて、クロック ストレッチは7ビットスレーブ送信モードと同様に、ハードウェアが CKP をクリアする自動実行に切り換わります ( 図 15-11 参照 )。
Note 1: ユーザが 9 番目のクロックの立ち下がりエッジよりも前にSSPBUFの内容を読み出したために BF ビットがクリアされた場合、CKP ビットはクリアされず、クロック ストレッチは実行されません。
2: CKP ビットは、BF ビットの状態にかかわらずソフトウェアによってセットできます。ユーザ ISR 内で次の受信シーケンスの前に BF ビットをクリアする場合、オーバーフロー条件を生じないように慎重にコードを実装する必要があります。
Note 1: ユーザが 9 番目のクロックの立ち下がりエッジよりも前にSSPBUFの内容を読み込んだために BF ビットがセットされた場合、CKP ビットはクリアされず、クロック ストレッチは実行されません。
2: CKP ビットは、BF ビットの状態にかかわらずソフトウェアによってセットできます。
DS41350D_JP - p. 160 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.3.4.5 クロック同期と CKP ビット
CKP ビットがクリアされると、SCL 出力は強制的に「0」になります。ただし、CKP ビットをクリアしても、SCL 出力が Low にサンプリングされるまで、SCL出力の Low はアサートされません。従って、外部のI2CマスタデバイスがSCLラインをアサートするまで、CKP ビットは SCL ラインをアサートしません。CKPビットがセットされ、かつ I2C バス上の他のデバイスの SCL が全てデアサートされるまで SCL 出力は Lowのままです。このため、CKP ビットへの書き込みによって SCL の High 期間が規格下限を下回る事を防止できます ( 図 15-12 参照 )。
図 15-12: クロック同期のタイミング
SDA
SCL
DX – 1DX
WR
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
SSPCON1
CKP
Master devicedeasserts clock
Master deviceasserts clock
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 161
PIC18F/LF1XK50
図 15-13: SEN = 1の場合の I2C™ スレーブモードのタイミング (7 ビットアドレス モードの受信 )
SD
A
SC
L
SS
PIF
BF
(S
SP
STA
T<
0>)
SS
PO
V (
SS
PC
ON
1<6>
)
S1
23
45
67
89
12
34
56
78
91
23
45
78
9P
A7
A6
A5
A4
A3
A2
A1
D7
D6
D5
D4
D3
D2
D1
D0
D7
D6
D5
D4
D3
D1
D0
AC
KR
ece
ivin
g D
ata
AC
KR
ece
ivin
g D
ata
R/W
= 0 AC
K
Re
ceiv
ing
Ad
dres
s
Cle
are
d b
y so
ftwa
re
SS
PB
UF
is r
ead
Bu
s m
aste
rte
rmin
ate
str
an
sfe
r
SS
PO
V is
set
beca
use
SS
PB
UF
isst
ill fu
ll. A
CK
is n
ot s
ent
.
D2 6
(PIR
1<3>
)
CK
P
CK
Pw
ritte
nto
‘1’ i
nIf
BF
is c
lear
ed
prio
r to
the
falli
ng
edg
e o
f th
e 9
th c
lock
,C
KP
will
no
t be
res
et
to ‘0
’ and
no
clo
ckst
retc
hing
will
occ
ur
soft
war
e
Clo
ck is
he
ld lo
w u
ntil
CK
P is
se
t to
‘1’
Clo
ck is
no
t hel
d lo
wbe
cau
se b
uffe
r fu
ll b
it is
cl
ear
prio
r to
fal
ling
ed
ge
of 9
th c
lock
Clo
ck is
not
he
ld lo
wbe
cau
se A
CK
= 1
BF
is s
et a
fter
falli
ng
ed
ge o
f th
e 9
th c
lock
,C
KP
is r
ese
t to
‘0’ a
nd
cloc
k st
retc
hing
occ
urs
DS41350D_JP - p. 162 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 15-14: SEN = 1の場合の I2C™ スレーブモードのタイミング (10 ビットアドレス モードの受信 )
SD
A
SC
L
SS
PIF
BF
(S
SP
STA
T<
0>)
S1
23
45
67
89
12
34
56
78
91
23
45
78
9P
11
11
0A
9A
8A
7A
6A
5A
4A
3A
2A
1A
0D
7D
6D
5D
4D
3D
1D
0
Rec
eiv
e D
ata
Byt
e
AC
K
R/W
= 0
AC
K
Rec
eive
Fir
st B
yte
of A
ddre
ss
Cle
ared
by
softw
are
D2 6
(PIR
1<3>
)
Cle
ared
by
softw
are
Rec
eiv
e S
eco
nd
Byt
e o
f A
ddre
ss
Cle
are
d by
har
dwa
re w
hen
SS
PA
DD
is u
pda
ted
with
low
byt
e of
add
ress
afte
r fa
lling
ed
ge
UA
(S
SP
STA
T<
1>)
Clo
ck is
hel
d lo
w u
ntil
upda
te o
f SS
PA
DD
ha
s ta
ken
plac
e
UA
is s
et in
dica
ting
that
the
SS
PA
DD
ne
eds
to b
eu
pda
ted
UA
is s
et in
dica
ting
that
SS
PA
DD
nee
ds t
o b
eup
date
d
Cle
are
d b
y h
ardw
are
whe
nS
SP
AD
D is
up
date
d w
ith h
igh
byt
e o
f ad
dre
ss a
fter
falli
ng
ed
ge
SS
PB
UF
is w
ritte
n w
ithco
nte
nts
of
SS
PS
RD
um
my
read
of
SS
PB
UF
to c
lear
BF
fla
g
AC
K
CK
P
12
34
57
89
D7
D6
D5
D4
D3
D1
D0
Re
ceiv
e D
ata
Byt
e
Bus
mas
ter
term
inat
es
tra
nsfe
r
D2 6
AC
K
Cle
are
d b
y so
ftwa
reC
lea
red
by
softw
are
SS
PO
V (
SS
PC
ON
1<6>
)
CK
P w
ritte
n to
「1」
No
te:
9番目のクロックの立ち下がりエ
ッジよりも前に
SS
PA
DDレジスタを更新した場合、
UAは変化せ
ずセットされたままになります。
No
te:
9番目のクロックの立ち下が
りエッジよりも前に
SS
PA
DD
レジスタを更新した場合、
UA
は変
化せ
ずセ
ット
され
たま
まになります。
BY
SO
FT
WA
RE
Clo
ck is
hel
d lo
w u
ntil
upda
te o
f SS
PA
DD
ha
s ta
ken
plac
e of n
inth
clo
cko
f nin
th c
lock
SS
PO
V is
se
tbe
caus
e S
SP
BU
F is
still
full.
AC
K is
no
t se
nt.
Du
mm
y re
ad o
f S
SP
BU
Fto
cle
ar B
F f
lag
Clo
ck is
he
ld lo
w u
ntil
CK
P is
set
to 「1」
Clo
ck is
no
t he
ld lo
wb
eca
use
AC
K =
1
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 163
PIC18F/LF1XK50
15.3.5 ジェネラルコール アドレスのサポート
通常の I2C バスアドレッシング手順では、スタート条件後の最初のバイトは、マスタがスレーブとするデバイスのアドレスを指定します。例外は、全てのデバイスのアドレスを指定するジェネラルコール アドレスです。このアドレスが使用された場合、理論上、全てのデバイスが ACK を返す必要があります。
I2C プロトコルでは、特定の目的のために 8 つのアドレスが予約されています。ジェネラルコール アドレスは、そのうちの 1 つです。そのアドレス値は、R/W = 0 も含め、全て「0」です。
ジェネラルコール アドレスが認識されるのは、SSPCON2 レジスタの GCEN ビットがセットされている場合です。スタートビットの検出に続き、8 ビットが SSPSR にシフト入力され、アドレスが SSPADDと比較されます。値はジェネラルコール アドレスとも比較され、ハードウェア内に固定されます。
ジェネラルコール アドレスに一致した場合、SSPSR がSSPBUF に転送され、フラグビット BF がセットされた後 (8 番目のビット )、9 番目のビット (ACK ビット )の立ち下がりエッジで割り込みフラグビット SSPIF がセットされます。
割り込みを処理する場合、割り込み要因は SSPBUF の内容を読み出す事で確認できます。値は、アドレスがデバイス固有か、ジェネラルコール アドレスのいずれであるかの判断に使用できます。
10 ビットモードでは、アドレスの後半部分も比較するために SSPADD を後半部分によって更新する必要があり、SSPSTAT レジスタの UA ビットがセットされます。スレーブが 10 ビットアドレス モードで設定されていて、GCEN ビットがセットされた状態でジェネラルコール アドレスがサンプリングされた場合、アドレスの後半部分は不要です。UA ビットはセットされず、スレーブは ACK 送信後、データの受信を開始します ( 図 15-15)。
図 15-15: スレーブモードのジェネラルコール アドレス シーケンス (7 または 10 ビットアドレスモード )
SDA
SCL
S
SSPIF
BF (SSPSTAT<0>)
SSPOV (SSPCON1<6>)
Cleared by software
SSPBUF is read
R/W = 0
ACKGeneral Call Address
Address is compared to General Call Address
GCEN (SSPCON2<7>)
Receiving Data ACK
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
D7 D6 D5 D4 D3 D2 D1 D0
after ACK, set interrupt
‘0’
‘1’
DS41350D_JP - p. 164 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.3.6 マスタモード
マスタモードは、SSPCON1 の該当する SSPM ビットをセットまたはクリアし、SSPEN ビットをセットする事で有効になります。マスタモードでは、SCL ラインと SDA ラインが MSSP ハードウェアによって制御されます。
マスタモードは、スタート条件とストップ条件検出時に発生する割り込みに基づいて動作します。ストップビット (P) とスタートビット (S) は、リセット時または MSSP モジュールが無効になるとクリアされます。I2C バスの制御権は、P ビットがセットされた場合、またはSビットとPビットの両方がクリアされてバスがアイドル状態になった場合に取得できます。
ファームウェア制御マスタモードの場合、ユーザコードが全ての I2C バス動作をスタートビット条件とストップビット条件に基づいて制御します。
マスタモードを有効にした上で、ユーザは以下の 6 つの動作を選択できます。
1. SDAとSCL上にスタート条件をアサートする。
2. SDA と SCL 上にリピートスタート条件をアサートする。
3. SSPBUF レジスタに書き込み、データ / アドレスの送信を開始する。
4. I2C ポートをデータ受信モードに設定する。
5. 受信データバイトの終端に ACK 条件を生成する。
6. SDAとSCL上にストップ条件をアサートする。
以下のイベントは SSP 割り込みフラグビット SSPIFをセットします (有効化されていればSSP割り込みが実行されます )。
• スタート条件
• ストップ条件
• データ転送バイトの送信 / 受信
• ACK の送信
• リピートスタート
図 15-16: MSSP のブロック図 (I2C™ マスタモード )
Note: I2Cマスタモードに設定したMSSPモジュールではイベントをキューに入れる事ができません。例えばスタート条件を開始した後、その完了を待たずに SSPBUF レジスタに書き込んで送信を開始する事はできません。この場合 SSPBUF に値は書き込まれず、その事を示すWCOLビットがセットされます。
Read Write
SSPSR
Start bit, Stop bit,
SSPBUF
InternalData Bus
Set/Reset, S, P, WCOL
ShiftClock
MSb LSb
SDA
AcknowledgeGenerate
Stop bit DetectWrite Collision Detect
Clock ArbitrationState Counter forend of XMIT/RCV
SCL
SCL In
Bus Collision
SDA In
Rec
eive
Ena
ble
Clo
ck C
ntl
Clo
ck A
rbitr
ate/
WC
OL
Det
ect
(ho
ld o
ff cl
ock
sou
rce
)
SSPADD<6:0>
Baud
Set SSPIF, BCLIFReset ACKSTAT, PEN
RateGenerator
SSPM<3:0>
Start bit Detect
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 165
PIC18F/LF1XK50
15.3.6.1 I2C マスタモード動作
マスタデバイスは、シリアルクロック パルス、スタート条件、ストップ条件の全てを生成します。転送は、ストップ条件またはリピートスタート条件によって終了します。リピートスタート条件では、次のシリアル転送も開始されるため I2C バスは解放されません。
マスタ トランスミッタ モードでは、SCL に出力されるシリアルクロックと共に、SDA からシリアルデータが出力されます。送信される 初のバイトには、受信デバイスのスレーブアドレス(7ビット)と、Read/Write(R/W) ビットが含まれます。この場合、R/W ビットの値はロジック「0」です。シリアルデータは一度に 8ビットずつ送信されます。各バイトの送信後は、ACKビットを受信します。スタート条件とストップ条件とは、シリアル転送の開始と終了を示す出力です。
マスタ受信モードの場合、バスに送信される 初のバイトには、送信デバイスのスレーブアドレス (7 ビット ) とR/W ビットが含まれます。この場合、R/W ビットの値はロジック「1」です。従って、先頭バイトとして、7ビットのスレーブアドレスの後に受信ビットを示す「1」が付加された値が送信されます。SDA からシリアルデータを受信しながら、SCL からはシリアルクロックを出力します。シリアルデータは一度に 8 ビットずつ受信されます。1 バイトを受信するごとに、ACKビットを送信します。スタート条件とストップ条件は、送信の開始と終了を示します。
SCL に出力されるクロックの周波数は baud レートジェネレータによって設定します。詳細は15.3.7「baudレート」を参照してください。
代表的な送信シーケンスは、以下のように進行します。
1. ユーザが SSPCON2 レジスタの SEN ビットをセットしてスタート条件を生成する。
2. SSPIF がセットされる。MSSP モジュールは、必要なスタート時間が経過するまで待機してから、他の動作を実行する。
3. ユーザが、送信するスレーブアドレスをSSPBUF に読み込む。
4. アドレスの8ビットが全て送信されるまでSDAピンからシフト出力する。
5. MSSP モジュールがスレーブデバイスからのACK ビットをシフト入力し、SSPCON2 レジスタの ACKSTAT ビットにその値を書き込む。
6. MSSP モジュールが、9 番目のクロックサイクルの終端でSSPIFビットをセットして割り込みを生成する。
7. ユーザが SSPBUF に 8 ビットのデータを読み込む。
8. データの8ビットが全て送信されるまでSDAピンからシフト出力する。
9. MSSP モジュールがスレーブデバイスからのACK ビットをシフト入力し、SSPCON2 レジスタの ACKSTAT ビットにその値を書き込む。
10. MSSP モジュールが、9 番目のクロックサイクルの終端でSSPIFビットをセットして割り込みを生成する。
11. ユーザが SSPCON2 レジスタの PEN ビットをセットしてストップ条件を生成する。
12. ストップ条件が完了すると割り込みが生成される。
DS41350D_JP - p. 166 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.3.7 baud レート
I2C マスタモードでは、SSPADD レジスタに baud レート ジェネレータ (BRG) の再読み込み値が格納されます(図 15-17)。SSPBUFへの書き込みが実行されると、baud レート ジェネレータが自動的にカウントを開始します。
一定の動作が完了すると(すなわち、 後のデータビットに続いて ACK が送信されると )、内部クロックが自動的にカウントを停止し、SCL ピンは 後の状態を保持します。
表 15-3 に、命令サイクルに基づくクロック速度とSSPADD に読み込まれる BRG の値を示します。
式 15-1:
図 15-17: baud レート ジェネレータのブロック図
表 15-3: I2C™ クロック速度と BRG
FSCLFOSC
SSPADD 1+ 4 ----------------------------------------------=
SSPM<3:0>
BRG Down CounterCLKOUT FOSC/2
SSPADD<7:0>
SSPM<3:0>
SCL
Reload
Control
Reload
FOSC FCY BRG 時の値FSCL
(BRG のロールオーバー 2 回 )
48 MHz 12 MHz 0Bh 1 MHz(1)
48 MHz 12 MHz 1Dh 400 kHz
48 MHz 12 MHz 77h 100 kHz
40 MHz 10 MHz 18h 400 kHz(1)
40 MHz 10 MHz 1Fh 312.5 kHz
40 MHz 10 MHz 63h 100 kHz
16 MHz 4 MHz 09h 400 kHz(1)
16 MHz 4 MHz 0Ch 308 kHz
16 MHz 4 MHz 27h 100 kHz
4 MHz 1 MHz 02h 333 kHz(1)
4 MHz 1 MHz 09h 100 kHz
4 MHz 1 MHz 00h 1 MHz(1)
Note 1: この I2C インターフェイスは、400 kHz I2C 仕様 (100 kHz よりも高速のバスに適用される仕様 ) に厳密には準拠していません。ただし、アプリケーションがより高速のクロックを必要としている場合、十分な注意を払う事で使用できる可能性があります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 167
PIC18F/LF1XK50
15.3.7.1 クロック アービトレーション
全ての送受信またはリピートスタート / ストップ条件の処理中に、マスタがSCLピンをデアサートする (SCLのフローティング High を許可する ) と、クロック アービトレーションが発生します。SCL ピンのフローティング High が許可されても、実際に High がサンプリングされるまで baud レート ジェネレータ (BRG) のカウントは中断されます。SCL ピンで High がサンプリングされると、baud レート ジェネレータに SSPADD<6:0>の内容が再度読み込まれ、カウントが始まります。外部デバイスによってクロックが Low に保持されていたとしても、上記の動作によって、SCL の High 期間が短でも BRG のロールオーバー 1 回分確保されます( 図 15-18)。
図 15-18: クロック アービトレーションを伴う baud レート ジェネレータのタイミング
SDA
SCL
SCL deasserted but slave holds
DX – 1DX
BRG
SCL is sampled high, reload takesplace and BRG starts its count
03h 02h 01h 00h (hold off) 03h 02h
Reload
BRGValue
SCL low (clock arbitration)SCL allowed to transition high
BRG decrements onQ2 and Q4 cycles
DS41350D_JP - p. 168 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.3.8 I2C マスタモードのスタート条件のタイミング
スタート条件を開始するには、SSPCON2 レジスタのスタート イネーブルビットSENをセットします。SDAピンとSCLピンでHighがサンプリングされると、baudレート ジェネレータにSSPADD<6:0>の内容が再度読み込まれ、カウントが始まります。baud レート ジェネレータがタイムアウトした時に (TBRG)、SCLとSDAの両方で High がサンプリングされると、SDA ピンがLow に駆動されます。SCL が High の間に SDA を Lowに駆動する動作はスタート条件となり、SSPSTAT1 レジスタの S ビットがセットされます。続いて、baudレート ジェネレータにSSPADD<7:0>の内容が再度読み込まれ、カウントが再開します。baud レート ジェネレータがタイムアウトすると (TBRG)、SSPCON2 レジスタの SEN ビットがハードウェアによって自動的にクリアされ、baud レート ジェネレータが一時停止状態になります。これによって SDA ラインが Low に保持されスタート条件が終了します。
15.3.8.1 WCOL ステータスフラグ
スタート シーケンスの実行中にユーザが SSPBUF に書き込むと、WCOL がセットされ、バッファの内容は変化しません ( 書き込みは実行されません )。
図 15-19: 初のスタートビットのタイミング
Note: スタート条件の開始時に既に SDA ピンとSCL ピンで Low がサンプリングされていた場合、あるいはスタート条件で SDA ラインが Low に駆動される前に SCL ラインで Low がサンプリングされた場合、バスコリジョンが発生します。その場合、バスコリジョン割り込みフラグ BCLIF がセットされて、スタート条件は中止され、I2Cモジュールはアイドル状態にリセットされます。
Note: イベントをキューに保存する事はできないため、スタート条件が終了するまで、SSPCON2 の下位 5 ビットには書き込む事ができません。
SDA
SCL
S
TBRG
1st bit 2nd bit
TBRG
SDA = 1, At completion of Start bit,SCL = 1
Write to SSPBUF occurs hereTBRG
hardware clears SEN bit
TBRG
Write to SEN bit occurs hereSet S bit (SSPSTAT<3>)
and sets SSPIF bit
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 169
PIC18F/LF1XK50
15.3.9 I2C マスタモードのリピートスタート条件のタイミング
リピートスタート条件は、SSPCON2 レジスタのRSEN ビットが High にプログラムされ、I2C ロジックモジュールがアイドル状態の場合に発生します。RSEN ビットがセットされると、SCL ピンが Low にアサートされます。SCL ピンで Low がサンプリングされると、baud レート ジェネレータに値が読み込まれカウントが始まります。baud レート ジェネレータの 1 ロールオーバー カウントの間 (TBRG)、SDA ピンは解放されます (High になります )。baud レート ジェネレータがタイムアウトした時に SDA で High がサンプリングされると、SCL ピンがデアサートされます(High になります )。SCL ピンで High がサンプリングされると、baud レート ジェネレータに値が読み込まれカウントが始まります。SDA と SCL は TBRG の 1回分の間、High をサンプリングする必要があります。この動作に続いて、SCL が high の間に、SDA ピンをTBRG の 1 回分の間アサート (SDA = 0) します。続いて SSPCON2 レジスタの RSEN ビットが自動的にクリアされる事で、baud レート ジェネレータには値が再度読み込まれず、SDA ピンが Low に保持されます。SDAピンとSCLピンのスタート条件が検出されると、ただちに SSPSTAT レジスタの S ビットがセットされます。SSPIF ビットは、baud レート ジェネレータがタイムアウトするまでセットされません。
SSPIF ビットがセットされた後、ユーザはすぐにSSPBUF に対して、7 ビットモードでは 7 ビットのアドレスを、10 ビットモードでは既定値の 1 番目のアドレスを書き込む事ができます。 初の 8 ビットを送信し ACK を受信したら、ユーザはアドレスの残り 8 ビット (10 ビットモード ) または 8 ビットのデータ (7 ビットモード ) を送信できます。
15.3.9.1 WCOL ステータスフラグ
リピートスタート シーケンスの実行中にユーザがSSPBUF に書き込むと、WCOL がセットされ、バッファの内容は変化しません ( 書き込みは実行されません )。
図 15-20: リピートスタート条件の波形
Note 1: 他のイベントの発生中に RSEN をプログラムしても効果はありません。
2: 以下のような方法でリピートスタート条件が発生すると、バスコリジョンが発生します。
• SCL が Low から High に遷移する時にSDA で Low がサンプリングされる。
• SDA で Low がアサートされる前にSCL が Low に遷移する。これは、他のマスタがデータ「1」を送信しようとしている可能性を示している。
Note: イベントをキューに保存する事はできないため、リピートスタート条件が終了するまで、SSPCON2 の下位 5 ビットには書き込む事ができません。
SDA
SCL
Sr = Repeated Start
Write to SSPCON2
Write to SSPBUF occurs hereon falling edge of ninth clock,end of Xmit
At completion of Start bit, hardware clears RSEN bit
1st bit
S bit set by hardware
TBRG
TBRG
SDA = 1,
SDA = 1,
SCL (no change).
SCL = 1occurs here.
TBRG TBRG TBRG
and sets SSPIF
RSEN bit set by hardware
DS41350D_JP - p. 170 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.3.10 I2C マスタモード送信
データバイト、7 ビットアドレス、10 ビットアドレスの後半の値は、単に SSPBUF レジスタに書き込むだけで送信できます。書き込み動作によってバッファフルフラグビット BF がセットされ、baud レート ジェネレータのカウントと共に次の送信が開始されます。SCLの立ち下がりエッジのアサート後、アドレス /データの各ビットはSDAピンにシフト出力されます (データホールド時間仕様のパラメータ SP106 参照 )。SCLは baudレート ジェネレータのロールオーバー カウント 1 回分の間 (TBRG)、Low に保持されます。データはSCLがHighに解放されるまでは有効です(データ セットアップ時間仕様のパラメータ SP107 参照 )。SCL ピンは High に解放された後、TBRG の間、その状態を保持します。SDA ピン上のデータは、この期間と、SCLの次の立ち下がりエッジから一定のホールド時間の間、安定に保つ必要があります。8 番目のビットのシフト出力後(8番目のクロックの立ち下がりエッジ後)、BF フラグがクリアされマスタは SDA を解放します。SDA が解放されたため、アドレスを指定されたスレーブデバイスは 9 番目のビット期間に ACK ビットを返す事ができます ( このビットを返すのは、アドレスが一致するかデータが適切に受信された場合です )。ACKの状態は、9 番目のクロックの立ち下がりエッジでACKDT ビットに書き込まれます。マスタが ACK を受信すると、ACK ステータスビット ACKSTAT がクリアされます。ACK を受信しなかった場合、このビットがセットされます。9 番目のクロックの後、SSPIF ビットがセットされ、マスタクロック (baud レート ジェネレータ )は次のデータバイトがSSPBUFに読み込まれるまで一時停止し、SCL は Low、SDA はそのままの状態を保持します ( 図 15-21)。
SSPBUF に書き込むと、アドレスの各ビットが SCLの立ち下がりエッジでシフト出力されます。シフト動作は、7 ビットのアドレスと R/W ビットが全て出力されるまで続きます。8 番目のクロックの立ち下がりエッジでマスタは SDA ピンをデアサートし、スレーブが ACK を返せるようにします。9 番目のクロックの立ち下がりエッジでマスタは SDA ピンをサンプリングし、スレーブがアドレスを認識できたかどうかを確認します。ACK ビットの状態は、SSPCON2 レジスタのステータスビット ACKSTAT に読み込まれます。アドレス送信の9番目のクロックが立ち下がると、SSPIFがセットされ、BF フラグがクリアされます。これによって次に SSPBUF への書き込みが実行されるまでbaud レート ジェネレータが OFF になり、SCL が Lowに保持され、SDA はフローティング状態になります。
15.3.10.1 BF ステータスフラグ
送信モードの場合、SSPSTAT レジスタの BF ビットは、CPU が SSPBUF に書き込むとセットされ、8 ビットが全てシフト出力された時点でクリアされます。
15.3.10.2 WCOL ステータスフラグ
送信が既に開始された状態で(すなわち、SSPSRがデータバイトをシフト出力している間に )、ユーザがSSPBUF に書き込むと、WCOL がセットされ、バッファの内容は変化しません ( 書き込みは実行されません )。
WCOLは次の送信を実行する前にソフトウェアによってクリアする必要があります。
15.3.10.3 ACKSTAT ステータスフラグ
送信モードの場合、SSPCON2 レジスタの ACKSTATビットは、スレーブが肯定応答 (ACK = 0) を送信するとクリアされ、肯定応答しない場合 (ACK = 1) にセットされます。スレーブは自分のアドレス ( またはジェネラルコール ) を検出するか、自分宛のデータを正常に受信した時に ACK を送信します。
15.3.11 I2C マスタモード受信
マスタモードの受信は、SSPCON2 レジスタの受信イネーブルビットRCENをプログラムすると有効になります。
baud レート ジェネレータがカウントを開始すると、ロールオーバーするごとにSCLピンの状態が変化して(High から Low/Low から High)、データが SSPSR にシフト入力されます。8 番目のクロックの立ち下がりエッジで受信イネーブルフラグが自動的にクリアされます。これによって、SSPSR の内容が SSPBUF に読み込まれ、フラグビットの BF と SSPIF がセットされる事で baud レート ジェネレータがカウントを停止して SCL が Low に保持されます。MSSP はアイドル状態となり、次のコマンドを待ちます。CPU がバッファを読み出すと、フラグビット BF は自動的にクリアされます。クリア後、ユーザは SSPCON2 レジスタのACK シーケンス イネーブルビット ACKEN をセットする事で、受信終了時に ACK ビットを送信できます。
15.3.11.1 BF ステータスフラグ
受信動作では、SSPSR から SSPBUF にアドレスまたはデータバイトが読み込まれた時点で BF ビットがセットされます。このビットは SSPBUF レジスタを読み出すとクリアされます。
15.3.11.2 SSPOV ステータスフラグ
受信動作では、BFフラグ ビットが前の受信で既にセットされている場合にSSPSRに8ビットを受信すると、SSPOV ビットがセットされます。
15.3.11.3 WCOL ステータスフラグ
受信が既に開始された状態で(すなわち、SSPSRがデータバイトをシフト入力している間に )、ユーザがSSPBUF に書き込むと、WCOL がセットされ、バッファの内容は変化しません ( 書き込みは実行されません )。
Note: RCEN ビットをセットする前に MSSP モジュールをアイドル状態にする必要があります。アイドル状態にない場合、RCENビットは無視されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 171
PIC18F/LF1XK50
図 15-21: I2C™ マスタモードの波形 (7 ビットまたは 10 ビットアドレス モードの送信 )
SD
A
SC
L
SS
PIF
BF
(S
SP
STA
T<
0>)
SE
N
A7
A6
A5
A4
A3
A2
A1
AC
K =
0D
7D
6D
5D
4D
3D
2D
1D
0
AC
KT
ran
smitt
ing
Da
ta o
r S
eco
nd H
alf
R/W
= 0
Tra
nsm
it A
ddr
ess
to
Sla
ve
12
34
56
78
91
23
45
67
89
P
Cle
are
d b
y so
ftwar
e s
ervi
ce r
ou
tine
SS
PB
UF
is w
ritte
n b
y so
ftwa
re
fro
m S
SP
inte
rru
pt
Afte
r S
tart
co
nditi
on
, SE
N c
lea
red
by h
ard
wa
re
S
SS
PB
UF
wri
tten
with
7-b
it a
ddre
ss a
nd
R/W
star
t tr
an
smit
SC
L h
eld
low
wh
ile C
PU
resp
on
ds
to S
SP
IF
SE
N =
0
of 1
0-b
it A
dd
ress
Writ
e S
SP
CO
N2<
0> S
EN
= 1
Sta
rt c
on
ditio
n b
eg
ins
Fro
m s
lave
, cl
ea
r A
CK
STA
T b
it S
SP
CO
N2<
6>
AC
KS
TAT
in
SS
PC
ON
2 =
1
Cle
are
d b
y so
ftwa
re
SS
PB
UF
wri
tten
PE
N
R/W
Cle
are
d b
y so
ftwa
re
DS41350D_JP - p. 172 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 15-22: I2C™ マスタモードの波形 (7 ビットアドレス モードの受信 )
P9
87
65
D0
D1
D2
D3
D4
D5
D6
D7
S
A7
A6
A5
A4
A3
A2
A1
SD
A
SC
L1
23
45
67
89
12
34
56
78
91
23
4
Bus
mas
ter
term
ina
tes
tra
nsf
er
AC
K
Rec
eiv
ing
Da
ta fr
om S
lave
Re
ceiv
ing
Dat
a fr
om
Sla
ve
D0
D1
D2
D3
D4
D5
D6
D7
AC
K
R/W
= 0
Tra
nsm
it A
ddr
ess
to S
lave
SS
PIF
BF
AC
K is
not
se
nt
Wri
te to
SS
PC
ON
2<
0>
(SE
N =
1),
Wri
te t
o S
SP
BU
F o
ccu
rs h
ere
,A
CK
fro
m S
laveM
ast
er c
onf
igu
red
as
a r
ece
ive
rb
y p
rogr
amm
ing
SS
PC
ON
2<
3>
(R
CE
N =
1)
PE
N b
it =
1w
ritte
n h
ere
Da
ta s
hift
ed
in o
n fa
lling
ed
ge o
f CL
K
Cle
are
d by
so
ftwa
re
star
t XM
IT
SE
N =
0
SS
PO
V
SD
A =
0, S
CL
= 1
wh
ile C
PU
(SS
PS
TAT
<0
>)
AC
K
Cle
are
d b
y so
ftwar
eC
lear
ed b
y so
ftwar
e
Se
t S
SP
IF in
terr
upt
at e
nd
of
rece
ive
Set
P b
it (S
SP
STA
T<
4>
)an
d S
SP
IFC
lear
ed in
softw
are
AC
K f
rom
Ma
ste
r
Set
SS
PIF
at
end
Se
t SS
PIF
inte
rrup
tat
en
d o
f Ack
now
led
gese
quen
ce
Set
SS
PIF
inte
rru
pt
at e
nd
of A
ckno
w-
led
ge s
eq
uenc
e
of r
ecei
ve
Se
t A
CK
EN
, sta
rt A
ckno
wle
dge
sequ
ence
SS
PO
V is
se
t bec
aus
eS
SP
BU
F is
stil
l fu
ll
SD
A =
AC
KD
T =
1
RC
EN
cle
are
dau
tom
atic
ally
RC
EN
= 1
, sta
rtne
xt r
ecei
ve
Writ
e to
SS
PC
ON
2<4>
to s
tart
Ack
now
ledg
e se
quen
ceS
DA
= A
CK
DT
(S
SP
CO
N2<
5>)
= 0
RC
EN
cle
ared
auto
mat
ical
ly
resp
onds
to
SS
PIF
AC
KE
Nbeg
in S
tart
con
diti
on
Cle
are
d b
y so
ftwa
re
SD
A =
AC
KD
T =
0
Last
bit
is s
hifte
d in
to S
SP
SR
and
con
ten
ts a
re u
nloa
ded
into
SS
PB
UF
RC
EN
Ma
ste
r co
nfig
ured
as
a re
ceiv
erby
pro
gra
mm
ing
SS
PC
ON
2<3>
(R
CE
N =
1)
RC
EN
cle
are
dau
tom
atic
ally
AC
K fr
om M
aste
rS
DA
= A
CK
DT
= 0
R
CE
N c
lear
eda
uto
ma
tica
lly
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 173
PIC18F/LF1XK50
15.3.12 ACK シーケンスのタイミング
ACK シーケンスは、SSPCON2 レジスタの ACK シーケンス イネーブルビット ACKEN をセットすると有効になります。このビットをセットすると SCL ピンがLow にプルされ、ACK データビットの内容が SDA ピンに出力されます。ACK 信号を生成する必要がある場合、ACKDT ビットをクリアします。ACK 送信が必要ない場合、ACK シーケンスの開始前に ACKDT ビットをセットします。続いて baud レート ジェネレータがロールオーバー1 周期 (TBRG) をカウントし、SCL ピンがデアサート (Highにプル )されます。SCLピンでHighがサンプリングされた場合 ( クロック アービトレーション )、baud レート ジェネレータは TBRG の期間カウントします。この時点で、SCL が Low にプルされます。続いてACKENビットが自動的にクリアされてbaudレート ジェネレータが OFF になり、MSSP モジュールはアイドルモードに移行します ( 図 15-23)。
15.3.12.1 WCOL ステータスフラグ
ACK シーケンスの実行中にユーザが SSPBUF に書き込むと、WCOL がセットされ、バッファの内容は変化しません ( 書き込みは実行されません )。
15.3.13 ストップ条件のタイミング
SSPCON2 レジスタのストップ シーケンス イネーブルビット PEN をセットすると、送受信の 後に SDAピンに対してストップビットがアサートされます。送受信が完了する 9 番目のクロックの立ち下がりエッジ後、SCL ラインは Low に保持されます。PEN ビットがセットされると、マスタは SDA ラインを Low にアサートします。SDA ラインに Low がサンプリングされると、baud レート ジェネレータが再度読み込まれ「0」へのカウントダウンが始まります。baud レートジェネレータがタイムアウトすると、SCL ピンが Highになり、TBRG の 1 周期 (baud レート ジェネレータのロールオーバー カウント ) の間、SDA ピンがデアサートされます。SCL が High の間に SDA ピンに High がサンプリングされると、SSPSTAT レジスタの P ビットがセットされます。TBRG の経過後、PEN ビットがクリアされ、SSPIF ビットがセットされます ( 図 15-24)。
15.3.13.1 WCOL ステータスフラグ
ストップ シーケンスの実行中にユーザが SSPBUF に書き込むと、WCOL がセットされ、バッファの内容は変化しません ( 書き込みは実行されません )。
図 15-23: ACK シーケンスの波形
図 15-24: 受信または送信モードのストップ条件
Note: TBRG = one Baud Rate Generator period.
SDA
SCL
SSPIF set at
Acknowledge sequence starts here,write to SSPCON2
ACKEN automatically cleared
Cleared in
TBRG TBRG
the end of receive
8
ACKEN = 1, ACKDT = 0
D0
9
SSPIF
software SSPIF set at the endof Acknowledge sequence
Cleared insoftware
ACK
SCL
SDA
SDA asserted low before rising edge of clock
Write to SSPCON2,set PEN
Falling edge of
SCL = 1 for TBRG, followed by SDA = 1 for TBRG
9th clock
SCL brought high after TBRG
Note: TBRG = one Baud Rate Generator period.
TBRG TBRG
after SDA sampled high. P bit (SSPSTAT<4>) is set.
TBRG
to setup Stop condition
ACK
P
TBRG
PEN bit (SSPCON2<2>) is cleared by hardware and the SSPIF bit is set
DS41350D_JP - p. 174 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.3.14 スリープ動作
スリープモードに移行した後も、I2C スレーブ モジュールはアドレスまたはデータを受信可能であり、アドレスが一致した場合またはバイト転送が完了した場合、プロセッサをスリープからウェイクアップさせる事ができます (MSSP 割り込み有効時 )。
15.3.15 リセットの効果
リセットは MSSP モジュールを無効にし、現在の転送は中止されます。
15.3.16 マルチマスタ モード
マルチマスタ モードでは、スタート条件とストップ条件の検出によって発生する割り込みに基づいて、バスが空いている期間を判断します。ストップビット (P)とスタートビット (S) は、リセット時または MSSP モジュールが無効になるとクリアされます。I2C バスの制御権は、SSPSTAT レジスタの P ビットがセットされた場合、または S ビットと P ビットの両方がクリアされてバスがアイドル状態になった場合に取得できます。バスがビジーの場合、SSP 割り込みが有効であれば、ストップ条件が発生した時に割り込みが生成されます。
マルチマスタ動作では、信号レベルが期待される出力レベルに変化したかどうかを確認して、バス アービトレーション動作を実行できるように、SDA ラインを監視する必要があります。ハードウェアが SDA ラインの状態を確認し、その結果を BCLIF ビットに格納します。
以下の状態では、アービトレーションが失われる可能性があります。
• アドレス転送
• データ転送
• スタート条件
• リピートスタート条件
• ACK 条件
15.3.17 マルチマスタ通信、バスコリジョンとバス アービトレーション
マルチマスタ モードのサポートは、バス アービトレーションによって実現します。マスタが SDA ピンにアドレス / データビットを出力する場合、マスタが SDAに「1」を出力し、SDA をフローティング High のままにして、別のマスタが「0」をアサートすると、バスアービトレーションが行われます。SCL ピンがフローティング High の時、データは安定している必要があります。SDA で予測される値が「1」であるのに、サンプリングされた SDA ピンの値が「0」の場合、バスコリジョンが発生しています。マスタはバスコリジョン割り込みフラグ BCLIF をセットし、I2C ポートをアイドル状態にリセットします ( 図 15-25)。
バスコリジョンの発生時に送信中だった場合、その送信は中断され、BF フラグがクリアされて SDA ラインと SCL ラインがデアサートされて、SSPBUF への書き込みが可能になります。ユーザが割り込みサービスルーチンによってバスコリジョンを処理する場合、I2Cバスが空いていれば、スタート条件をアサートする事で通信を再開できます。
バスのコリジョン時にスタート、リピートスタート、ストップ、ACK 条件の処理を実行中だった場合、動作は中断され SDA ラインと SCL ラインがデアサートされます。さらに、SSPCON2 レジスタのそれぞれの条件に対応する制御ビットがクリアされます。ユーザが割り込みサービスルーチンによってバスコリジョンを処理する場合、I2C バスが空いていれば、スタート条件をアサートする事で通信を再開できます。
マスタは SDA ピンと SCL ピンの監視を続けます。ストップ条件が発生すると、SSPIF ビットがセットされます。
SSPBUF に書き込むと、バスコリジョン発生時にトランスミッタがどこまで送信を完了していたかにかかわらず、データの先頭ビットから送信が開始されます。
マルチマスタ モードでは、スタート条件とストップ条件の検出によって発生する割り込みに基づいて、バスが空いている期間を判断します。I2C バスの制御権は、SSPSTAT レジスタの P ビットがセットされた場合、またはSビットとPビットの両方がクリアされてバスがアイドル状態になった場合に取得できます。
図 15-25: 送信時と ACK 送信時のバスコリジョン タイミング
SDA
SCL
BCLIF
SDA released
SDA line pulled lowby another source
Sample SDA. While SCL is high,data doesn」t match what is driven
Bus collision has occurred.
Set bus collisioninterrupt (BCLIF)
by the master.
by master
Data changeswhile SCL = 0
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 175
PIC18F/LF1XK50
15.3.17.1 スタート条件実行中のバスコリジョン
スタート条件の実行中は、以下の場合にバスコリジョンが発生します。
a) スタート条件の開始時に SDA または SCL でLow がサンプリングされる ( 図 15-26)。
b) SDA が Low にアサートされる前に SCL で Lowがサンプリングされる ( 図 15-27)。
スタート条件の実行中、SDA ピンと SCL ピンは両方とも監視されています。
SDA ピンが既に Low だった場合、または SCL ピンが既に Low だった場合、以下の全てが実行されます。
• スタート条件を中止する。
• BCLIF フラグをセットする。
• MSSPモジュールをアイドル状態にリセットする( 図 15-26)。
スタート条件は、SDA ピンと SCL ピンのデアサートから始まります。SDA ピンで High がサンプリングされると、baud レート ジェネレータに値が読み込まれカウントダウンが始まります。SDA が High の間に、SCL ピンで Low がサンプリングされると、バスコリジョンが発生します。これは、他のマスタがスタート条件の実行中にデータ「1」の駆動を試みていると考えられるためです。
上記の BRG カウント中に SDA ピンで Low がサンプリングされると、BRG はリセットされ、SDA ラインは BRG のタイムアウトを待たずにアサートされます( 図 15-28)。ただし、SDA ピンで「1」がサンプリングされた場合、SDA ピンは BRG カウントの完了時にLow にアサートされます。続いて baud レート ジェネレータが再度読み込まれ、0 へのカウントダウンを開始します。この間に SCL ピンで「0」がサンプリングされた場合、バスコリジョンは発生しません。BRG のカウント終了時点で SCL ピンが Low にアサートされます。
図 15-26: スタート条件実行中のバスコリジョン (SDA のみ )
Note: スタート条件中にバスコリジョンが問題にならないのは、2 つのバスマスタが全く同じタイミングでスタート条件をアサートする事があり得ないためです。必ず、どちらか一方のマスタが他方よりも先にSDA をアサートします。そのような状態ではバスコリジョンは発生しません。2 つのマスタはスタート条件に続く 初のアドレスでバス アービトレーションを行うはずだからです。アドレスが同じだった場合、引き続きデータ部分、リピートスタートまたはストップ条件におけるアービトレーションが可能なはずです。
SDA
SCL
SEN
SDA sampled low before
SDA goes low before the SEN bit is set.
S bit and SSPIF set because
SSP module reset into Idle state.SEN cleared automatically because of bus collision.
S bit and SSPIF set because
Set SEN, enable Startcondition if SDA = 1, SCL = 1
SDA = 0, SCL = 1.
BCLIF
S
SSPIF
SDA = 0, SCL = 1.
SSPIF and BCLIF arecleared by software
SSPIF and BCLIF arecleared by software
Set BCLIF,
Start condition. Set BCLIF.
DS41350D_JP - p. 176 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 15-27: スタート条件実行中のバスコリジョン (SCL = 0の場合 )
図 15-28: スタート条件実行中の SDA アービトレーションによる BRG のリセット
SDA
SCL
SENbus collision occurs. Set BCLIF.SCL = 0 before SDA = 0,
Set SEN, enable Startsequence if SDA = 1, SCL = 1
TBRG TBRG
SDA = 0, SCL = 1
BCLIF
S
SSPIF
Interrupt clearedby software
bus collision occurs. Set BCLIF.SCL = 0 before BRG time-out,
‘0’ ‘0’
‘0’‘0’
SDA
SCL
SEN
Set SLess than TBRG
TBRG
SDA = 0, SCL = 1
BCLIF
S
SSPIF
S
Interrupts clearedby softwareset SSPIF
SDA = 0, SCL = 1,
SCL pulled low after BRGtime-out
Set SSPIF
‘0’
SDA pulled low by other master.Reset BRG and assert SDA.
Set SEN, enable STARTsequence if SDA = 1, SCL = 1
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 177
PIC18F/LF1XK50
15.3.17.2 リピートスタート条件実行中のバスコリジョン
リピートスタート条件の実行中は、以下の状態でバスコリジョンが発生します。
a) SCL が Low から High に遷移する時に SDA でLow がサンプリングされる。
b) SDA で Low がアサートされる前に SCL が Lowに遷移する。これは、他のマスタがデータ「1」を送信しようとしている可能性を示している。
SDA がユーザによってデアサートされ、ピンのフローティング High が許可されると、BRG に SSPADD の内容が読み込まれ、0 へのカウントダウンが始まります。続いて SCL ピンがデアサートされた後、High をサンプリングした時点で、SDA ピンをサンプリングします。
この時 SDA が Low ならば、バスコリジョンが発生しています ( すなわち、他のマスタがデータ「0」を送信しようとしています。図 15-29)。SDA で High がサンプリングされた場合、BRG が再度読み込まれカウントが始まります。BRG がタイムアウトする前に SDA がHigh から Low に遷移した場合、バスコリジョンは発生しません。2 つのマスタが全く同時に SDA をアサートする事はあり得ないからです。
BRG がタイムアウトする前に SCL が High から Lowに遷移し、SDA がまだアサートされていない場合はバスコリジョンが発生します。この場合、リピートスタート条件実行中に、他のマスタがデータ「1」を送信しようとしています ( 図 15-30 参照 )。
BRGのタイムアウト時点でSCLとSDAの両方が依然として High の場合、SDA ピンが Low に駆動され、BRG の再読み込み後にカウントを開始します。カウントが終了すると、SCL ピンはその状態に関係なく Lowに駆動され、リピートスタート条件が終了します。
図 15-29: リピートスタート条件実行中のバスコリジョン ( 例 1)
図 15-30: リピートスタート条件実行中のバスコリジョン ( 例 2)
SDA
SCL
RSEN
BCLIF
S
SSPIF
Sample SDA when SCL goes high.If SDA = 0, set BCLIF and release SDA and SCL.
Cleared by software
‘0’
‘0’
SDA
SCL
BCLIF
RSEN
S
SSPIF
Interrupt clearedby software
SCL goes low before SDA,set BCLIF. Release SDA and SCL.
TBRG TBRG
‘0’
DS41350D_JP - p. 178 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
15.3.17.3 ストップ条件実行中のバスコリジョン
ストップ条件の実行中は、以下の場合にバスコリジョンが発生します。
a) SDA ピンがデアサートされてフローティングHigh が許可された後、BRG のタイムアウト後に SDA で Low がサンプリングされる。
b) SCL ピンがデアサートされた後、SDA が Highに遷移する前に SCL で Low がサンプリングされる。
ストップ条件は、SDA の Low アサートから開始されます。SDA で Low がサンプリングされると、SCL ピンをフローティング状態にする事ができます。SCL ピンで High がサンプリングされると ( クロック アービトレーション )、baud レート ジェネレータに SSPADD の値が読み込まれ 0 へのカウントダウンが始まります。BRG のタイムアウト後、SDA がサンプリングされます。この時 Low がサンプリングされた場合、バスコリジョンが発生しています。これは、他のマスタがデータ「0」を駆動しようとしているためです ( 図 15-31)。SDA のフローティング High が許可される前に、SCLピンで Low がサンプリングされると、バスコリジョンが発生します。これは、他のマスタがデータ「0」を駆動しようとしている、もう 1 つの例です ( 図 15-32)。
図 15-31: ストップ条件実行中のバスコリジョン ( 例 1)
図 15-32: ストップ条件実行中のバスコリジョン ( 例 2)
SDA
SCL
BCLIF
PEN
P
SSPIF
TBRG TBRG TBRG
SDA asserted low
SDA sampledlow after TBRG,set BCLIF
‘0’
‘0’
SDA
SCL
BCLIF
PEN
P
SSPIF
TBRG TBRG TBRG
Assert SDA SCL goes low before SDA goes high,set BCLIF
‘0’
‘0’
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 179
PIC18F/LF1XK50
表 15-4: I2C™ に関連するレジスタの要約
レジスタ名
bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の掲載ページ
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR2 OSCFIP C1IP C2IP EEIP BCLIP USBIP TMR3IP — 290
PIR2 OSCFIF C1IF C2IF EEIF BCLIF USBIF TMR3IF — 290
PIE2 OSCFIE C1IE C2IE EEIE BCLIE USBIE TMR3IE — 290
SSPADD I2C スレーブモードの SSP アドレスレジスタ、 I2C マスタモードの SSP baud レート再読み込みレジスタ
288
SSPBUF SSP 受信バッファ / 送信レジスタ 288
SSPCON1 WCOL SSPOV SSPEN CKP SSPM3 SSPM2 SSPM1 SSPM0 288
SSPCON2 GCEN ACKSTAT ACKDT ACKEN RCEN PEN RSEN SEN 288
SSPMSK MSK7 MSK6 MSK5 MSK4 MSK3 MSK2 MSK1 MSK0 290
SSPSTAT SMP CKE D/A P S R/W UA BF 288
TRISB TRISB7 TRISB6 TRISB5 TRISB4 — — — — 290
凡例 : — = 未実装ビット、「0」として読み出し。網掛けの部分は I2C™ では使用しません。
DS41350D_JP - p. 180 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
NOTES:
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 181
PIC18F/LF1XK50
DS41350D_JP - p. 182 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
16.0 拡張 USART (EUSART: ENHANCED UNIVERSAL SYNCHRONOUS ASYNCHRONOUS RECEIVER TRANSMITTER)
拡張 USART (EUSART: Enhanced Universal Synchronous Asynchronous Receiver Transmitter) モジュールは、シリアル I/O 通信用の周辺モジュールです。このモジュールは、デバイスのプログラム実行から独立してシリアルデータの送受信を実行するために必要なクロック ジェネレータ、シフトレジスタ、データバッファを全て備えています。EUSART は SCI(Serial Communications Interface) とも呼ばれ、全二重非同期システムまたは半二重同期システムとして構成できます。全二重モードは、CRT 端末やパーソナル コンピュータ等の周辺システムとの通信に便利です。半二重同期モードは、A/D または D/A IC、シリアルEEPROM、その他のマイクロコントローラ等の周辺デバイスとの通信向けです。これらのデバイスは通常、baud レート生成用の内部クロックを持たないため、マスタ同期デバイスから外部クロック信号を供給する必要があります。
EUSART モジュールには以下の機能があります。
• 全二重非同期の送受信
• 2 文字の入力バッファ
• 1 文字の出力バッファ
• 文字長を 8 ビットまたは 9 ビットにプログラム可能
• アドレス検出 (9 ビットモード )
• 入力バッファ オーバーラン エラー検出
• 受信文字のフレーミング エラー検出
• 半二重同期マスタ
• 半二重同期スレーブ
• クロックとデータの極性をプログラム可能
EUSART モジュールは以下の機能も実装しているため、LIN (Local Interconnect Network) バスシステムでの使用にも 適です。
• baud レートの自動検出および校正
• ブレーク受信によるウェイクアップ
• 13 ビットのブレーク文字送信
図 16-1 と図 16-2 に、EUSART トランスミッタとレシーバのブロック図を示します。
図 16-1: EUSART トランスミッタのブロック図
TXIF
TXIE
Interrupt
TXEN
TX9D
MSb LSb
Data Bus
TXREG Register
Transmit Shift Register (TSR)
(8) 0
TX9
TRMT SPEN
TX/CK pin
Pin Bufferand Control
8
SPBRGSPBRGH
BRG16
FOSC÷ n
n
+ 1 Multiplier x4 x16 x64
SYNC 1 X 0 0 0
BRGH X 1 1 0 0
BRG16 X 1 0 1 0
Baud Rate Generator
• • •
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 183
PIC18F/LF1XK50
図 16-2: EUSART レシーバのブロック図
EUSART モジュールの動作は、以下の 3 つのレジスタで制御します。
• TXSTA ( 送信状態 / 制御 ) レジスタ
• RCSTA ( 受信状態 / 制御 ) レジスタ
• BAUDCTL (baud レート制御 ) レジスタ
これらのレジスタの詳細は、レジスタ 16-1、レジスタ 16-2、レジスタ 16-3 をそれぞれ参照してください。
EUSART の動作モードにかかわらず、RX/DT およびTX/CK ピンに対応する TRIS 制御ビットは「1」にセットしてください。EUSART の制御により、ピン設定は必要に応じて入力から出力に自動的に変更されます。
RX/DT pin
Pin Bufferand Control
SPEN
DataRecovery
CREN OERR
FERR
RSR RegisterMSb LSb
RX9D RCREG RegisterFIFO
InterruptRCIFRCIE
Data Bus8
Stop START(8) 7 1 0
RX9
• • •
SPBRGSPBRGH
BRG16
RCIDL
FOSC÷ n
n+ 1 Multiplier x4 x16 x64
SYNC 1 X 0 0 0
BRGH X 1 1 0 0
BRG16 X 1 0 1 0
Baud Rate Generator
DS41350D_JP - p. 184 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
16.1 EUSART 非同期モード
EUSART は、標準の NRZ (Non-Return-to-Zero) 方式でデータを送受信します。NRZ は、2 つのレベルで実装されています。データビット「1」を表す VOH マーク状態と、データビット「0」を表す VOL スペース状態です。NRZ で同じ値のデータビットを連続して送信すると、出力レベルはそのビットのレベルのまま変化しません(1ビットを送信するたびにニュートラル レベルに戻るのではない )。NRZ 送信ポートのアイドル状態はマーク状態です。各送信文字は、1 ビットのスタートビットの後に 8 ビットまたは 9 ビットのデータビットを送信し、 後は必ず 1 つ以上のストップビットで終了します。スタートビットは常にスペースで、ストップビットは常にマークです。データ フォーマットは8 ビットが一般的です。1 ビットの送信にかかる時間は、1/(baud レート ) です。標準 baud レート周波数は、内蔵の専用8ビット /16ビットbaudレート ジェネレータを使用してシステム オシレータから生成します。baud レートの構成例は、表 16-5 を参照してください。
EUSART は LSb から順に送受信します。EUSART のトランスミッタとレシーバは独立して動作しますが、データ フォーマットと baud レートは共通です。パリティはハードウェア レベルではサポートされていませんが、ソフトウェアで実装して 9 番目のデータビットとして格納されます。
16.1.1 EUSART 非同期トランスミッタ
図 16-1 に、EUSART トランスミッタのブロック図を示します。トランスミッタの中心となるのがシリアルトランスミット シフト レジスタ (TSR) で、このレジスタにはソフトウェアから直接はアクセスできません。TSR は、送信バッファ (TXREG レジスタ ) からデータを取得します。
16.1.1.1 トランスミッタの有効化
EUSART トランスミッタを非同期モードとして有効化するには、3 つの制御ビットを以下のように設定します。
• TXEN = 1
• SYNC = 0
• SPEN = 1
その他の EUSART 制御ビットは全て既定値のままと仮定します。
TXSTA レジスタの TXEN ビットをセットすると、EUSART のトランスミッタ回路が有効になります。TXSTA レジスタの SYNC ビットをクリアすると、EUSART が非同期モードになります。RCSTA レジスタの SPEN をセットすると EUSART が有効になり、TX/CK I/O ピンが自動的に出力に設定されます。TX/CKピンをアナログ周辺モジュールと共用している場合、対応するANSELビットをクリアしてアナログ I/O機能を無効にする必要があります。
16.1.1.2 データの送信
TXREG レジスタに文字を書き込むと送信が開始します。これが 初の文字の場合、または TSR 内に以前の文字が全く残っていない場合、TXREG のデータがただちに TSR レジスタに転送されます。TSR 内に以前の文字が一部でも残っている場合、その文字のストップビットが送信されるまで新しい文字データは TXREGに保持されます。TXREG 内に残っている文字は、ストップビット送信直後の 1 TCY の期間に TSR に転送されます。TXREG から TSR にデータが転送されると、その直後にスタートビット、データビット、ストップビットのシーケンスの送信が開始します。
16.1.1.3 送信データの極性
送信データの極性は、BAUDCON レジスタの CKTXPビットで制御できます。このビットが既定値「0」の場合、送信アイドル / データビットは正論理です。CKTXP ビットを「1」にセットすると送信データが反転し、送信アイドル / データビットは負論理になります。CKTXP ビットで送信データの極性を制御できるのは、非同期モードの場合のみです。同期モードでは、CKTXP ビットの機能は異なります。
Note 1: SPEN ビットをセットすると、対応するTRISビットの状態やEUSARTレシーバが有効か無効かにかかわらず、RX/DT I/O ピンは自動的に入力として設定されます。RX/DT ピンのデータは通常の PORT 読み出しで読み出す事ができますが、PORTラッチのデータ出力は禁止されます。
2: TXEN イネーブルビットをセットすると、TXIF トランスミッタ割り込みフラグがセットされます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 185
PIC18F/LF1XK50
16.1.1.4 送信割り込みフラグ
EUSART トランスミッタが有効で、かつ送信する文字が TXREG に格納されていない場合は常に、PIR1 レジスタの TXIF 割り込みフラグビットがセットされます。つまり、TXIF ビットがクリアされるのは、TSR に何らかの文字がある時に新しい送信文字が TXREG に格納された場合のみです。TXIF フラグビットは、TXREGへの書き込みの直後にはクリアされません。TXIF は、書き込みを実行してから 2 つ目の命令サイクルで有効になります。TXREG への書き込み直後に TXIF をポーリングすると、正しい結果が得られません。TXIF ビットは読み出し専用で、ソフトウェアでセットまたはクリアする事はできません。
PIE1 レジスタの TXIE 割り込みイネーブルビットをセットすると、TXIF 割り込みが許可されます。ただし、TXREG が空になると TXIE イネーブルビットの状態に関係なく TXIF フラグビットがセットされます。
データの送信時に割り込みを使用するには、引き続きデータを送信する場合のみ TXIE ビットをセットします。送信する 後の文字を TXREG に書き込んだら、TXIE 割り込みイネーブルビットをクリアします。
16.1.1.5 TSR のステータス
TXSTA レジスタの TRMT ビットが TSR レジスタの状態を示します。このビットは読み出し専用です。TRMTビットは、TSR レジスタが空になるとセットされ、TXREGから TSRレジスタに文字が転送されるとクリアされます。TRMT ビットは、TSR レジスタから全てのビットがシフト出力されるまでクリアされたままです。このビットには割り込みロジックが接続されていないため、TSR の状態を調べるにはユーザが明示的にこのビットをポーリングする必要があります。
16.1.1.6 9 ビット文字の送信
EUSART は 9 ビット文字の送信をサポートしています。TXSTA レジスタの TX9 ビットをセットすると、EUSARTは1文字の送信につき 9ビットをシフト出力します。TXSTA レジスタの TX9D ビットには、 上位(9 ビット目 ) のデータビットを格納します。9 ビットのデータを送信する場合、まず TX9D ビットに 上位データビットを書き込んでから TXREG に下位 8 ビットを書き込む必要があります。TXREG への書き込みが完了したら、ただちに 9 ビット全てのデータが TSRシフトレジスタに転送されます。
複数のレシーバを使用する場合、9 ビット目を特別にアドレスモードとして使用する事ができます。アドレスモードの詳細は、16.1.2.8「アドレス検出」を参照してください。
16.1.1.7 非同期送信の実行手順 :
1. 目標のbaudレートに合わせて、SPBRGH:SPBRGレジスタペア、BRGH ビット、BRG16 ビットを初期化する (16.3「EUSART baud レート ジェネレータ (BRG)」参照 )。
2. SYNC ビットをクリアし、SPEN ビットをセットして非同期シリアルポートを有効にする。
3. 9 ビット送信を行う場合、TX9 制御ビットをセットする。レシーバ側でアドレス検出を有効に設定している場合、9 ビット目をセットすると下位 8ビットはアドレスと見なされる。
4. 送信データの極性を反転する場合、CKTXP 制御ビットをセットする。
5. TXEN 制御ビットをセットして、送信を有効にする。これにより、TXIF 割り込みビットがセットされる。
6. 割り込みを使用する場合、TXIE 割り込みイネーブルビットをセットする。INTCON レジスタの GIEおよび PEIE ビットもセットされていれば、割り込みがただちに発生する。
7. 9 ビット送信を選択した場合、9 ビット目を TX9Dデータビットに格納する。
8. TXREG レジスタに 8 ビットのデータを書き込むと、 送信が開始する。
Note: TSR レジスタはデータメモリにマッピングされていないため、ユーザからはアクセスできません。
DS41350D_JP - p. 186 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 16-3: 非同期送信
図 16-4: 非同期送信 ( 連続 )
表 16-1: 非同期送信に関連するレジスタ
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の記載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 289
TXREG EUSART 送信レジスタ 289
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 289
BAUDCON ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN 289
SPBRGH EUSART baud レート ジェネレータ レジスタ、上位バイト 289
SPBRG EUSART baud レート ジェネレータ レジスタ、下位バイト 289
凡例 : — = 未実装ビット、「0」として読み出し。網掛けのビットは非同期送信には使用しません。
Word 1Stop bit
Word 1Transmit Shift Reg
Start bit bit 0 bit 1 bit 7/8
Write to TXREGWord 1
BRG Output(Shift Clock)
RB7/TX/CK
TXIF bit(Transmit Buffer
Reg. Empty Flag)
TRMT bit(Transmit Shift
Reg. Empty Flag)
1 TCY
pin
Transmit Shift Reg
Write to TXREG
BRG Output(Shift Clock)
RB7/TX/CK
TXIF bit(Interrupt Reg. Flag)
TRMT bit(Transmit Shift
Reg. Empty Flag)
Word 1 Word 2
Word 1 Word 2
Start bit Stop bit Start bit
Transmit Shift Reg
Word 1 Word 2bit 0 bit 1 bit 7/8 bit 0
Note: このタイミング チャートには、2 つの連続する送信を示しています。
1 TCY
1 TCY
pin
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 187
PIC18F/LF1XK50
16.1.2 EUSART 非同期レシーバ
通常、RS-232 システムでは非同期モードを使用します。図 16-2 に、レシーバのブロック図を示します。RX/DTピンで受信したデータでデータ復元ブロックを駆動します。データ復元ブロックの実体は、baud レートの 16 倍の速度で動作する高速シフタです。一方、シリアル受信シフトレジスタ (RSR: Receive Shift Register) はビットレートで動作します。文字を構成する8ビットまたは9ビット全てがシフト入力されたら、ただちに 2 文字の FIFO (First-In-First-Out) メモリに転送されます。この FIFO がバッファの役割を果たすため、2 文字までは完全に受信が可能で、3 文字目の受信が完了するまでにソフトウェアで EUSART レシーバへのサービスを開始すれば良い事になります。FIFOと RSR レジスタは、ソフトウェアから直接アクセスする事はできません。受信データへのアクセスには、RCREG レジスタを使用します。
16.1.2.1 レシーバの有効化
EUSART レシーバを非同期モードとして有効化するには、3 つの制御ビットを以下のように設定します。
• CREN = 1
• SYNC = 0
• SPEN = 1
その他の EUSART 制御ビットは全て既定値のままと仮定します。
RCSTA レジスタの CREN ビットをセットすると、EUSART のレシーバ回路が有効になります。TXSTA レジスタの SYNC ビットをクリアすると、EUSART が非同期モードになります。RCSTA レジスタの SPEN ビットをセットすると EUSART が有効になります。RX/DTI/O ピンは、対応する TRIS 制御ビットをセットして入力として設定しておく必要があります。RX/DT ピンをアナログ周辺モジュールと共用している場合、対応するANSELビットをクリアしてアナログ I/O機能を無効にする必要があります。
16.1.2.2 データの受信
レシーバのデータ復元回路は、 初のビットの立ち下がりエッジで文字の受信を開始します。 初のビット( スタートビット ) は常に「0」です。データ復元回路はスタートビットの中央まで 1/2 ビットの期間をカウントし、そのビットがまだ「0」かどうかをチェックします。「0」でない場合、データ復元回路はエラーを生成せずに文字の受信を中止し、スタートビットの立ち下がりエッジの検出を再開します。スタートビット「0」のチェックに成功した場合、データ復元回路は次のビットの中央までさらに 1 ビットの期間をカウントします。次にこのビットを多数決回路でサンプリングし、その結果 (「0」または「1」) を RSR にシフトします。以後、この動作を繰り返して全てのデータビットをサンプリングし、RSR にシフトします。 後の1 ビットの期間を計測して、そのレベルをサンプリングします。これはストップビットで、常に「1」です。ストップビットの位置でデータ復元回路が「0」をサンプリングした場合、この文字に対するフレーミングエラーがセットされます。それ以外の場合、この文字のフレーミング エラーはクリアされます。フレーミング エラーの詳細は、16.1.2.5「受信フレーミング エラー」 を参照してください。
全てのデータビットとストップビットを受信したら、その直後に RSR 内の文字を EUSART 受信 FIFO に転送し、PIR1 レジスタの RCIF 割り込みフラグビットをセットします。RCREG レジスタを読み出すと、FIFOから先頭の文字が出力されます。
16.1.2.3 受信データの極性
受信データの極性は、BAUDCON レジスタの DTRXPビットで制御できます。このビットが既定値「0」の場合、受信アイドル / データビットは正論理になります。DTRXP ビットを「1」にセットすると受信データが反転し、送信アイドル / データビットは負論理になります。DTRXP ビットで受信データの極性を制御できるのは、非同期モードの場合のみです。同期モードでは、DTRXP ビットの機能は異なります。
Note: SPEN ビットをセットすると、対応するTRISビットの状態やEUSARTトランシーバが有効か無効かにかかわらず、TX/CKI/Oピンは自動的に出力として設定されます。PORT ラッチは出力ドライバから切断されるため、TX/CK ピンを汎用出力として使用する事はできません。
Note: 受信 FIFO がオーバーランした場合、オーバーラン条件が解消されるまで、それ以降の文字は受信されません。オーバーランエラーの詳細は、16.1.2.6「受信オーバーランエラー」を参照してください。
DS41350D_JP - p. 188 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
16.1.2.4 受信割り込み
EUSART レシーバが有効で、受信 FIFO 内に読み出していない文字がある場合は常に、PIR1 レジスタのRCIF 割り込みフラグビットがセットされます。RCIF割り込みフラグビットは読み出し専用で、ソフトウェアでセットまたはクリアする事はできません。
RCIF 割り込みを許可するには、以下のビットをセットします。
• PIE1 レジスタの RCIE 割り込みイネーブルビット
• INTCON レジスタの PEIE 周辺割り込みイネーブルビット
• INTCONレジスタのGIEグローバル割り込みイネーブルビット
FIFO 内に読み出していない文字が残っている場合、これらの割り込みイネーブルビットの状態に関係なくRCIF 割り込みフラグビットがセットされます。
16.1.2.5 受信フレーミング エラー
受信 FIFO バッファ内の各文字には、対応するフレーミング エラー ステータス ビットがあります。フレーミング エラーは、ストップビットが本来の位置で正しく検出されなかった場合に発生します。フレーミングエラー ステータスは、RCSTA レジスタの FERR ビットで調べる事ができます。FERR ビットは、受信 FIFOの先頭にある、読み出されていない文字のステータスを示します。このため、RCREG を読み出す前に FERRビットを読み出す必要があります。
FERR ビットは読み出し専用で、受信 FIFO の先頭にある、読み出されていない文字にのみ適用されます。フレーミング エラーが発生しても (FERR = 1)、後続文字の受信が禁止される事はありません。FERR ビットはクリアする必要がありません。FIFO バッファから次の文字を読み出すと、FIFO は次の文字に進み、FERR ビットにはその文字のフレーミング エラー ステータスが格納されます。
RCSTA レジスタの SPEN ビットをクリアしてEUSART をリセットすると、FERR ビットは強制的にクリアされます。RCSTA レジスタの CREN ビットをクリアしても FERR ビットには影響しません。フレーミング エラー自体は、割り込みを生成しません。
16.1.2.6 受信オーバーランエラー
受信FIFOバッファには2文字まで格納できます。FIFOにアクセスする前に 3 文字目の受信が完了してしまうと、オーバーランエラーが発生します。オーバーランエラーになると、RCSTA レジスタの OERR ビットがセットされます。この場合、既に FIFO バッファ内にある文字は読み出す事ができますが、それ以降の文字はオーバーランエラーが解消されるまで受信できません。オーバーランエラーを解消するには、RCSTA レジスタのCRENビットをクリアするか、またはRCSTAレジスタの SPEN ビットをクリアして EUSART をリセットする必要があります。
16.1.2.7 9 ビット文字の受信
EUSART は 9 ビット文字の受信をサポートしています。RCSTA レジスタの RX9 ビットをセットすると、EUSART は 1 文字の受信につき 9 ビットを RSR にシフト入力します。RCSTA レジスタの RX9D ビットには、受信 FIFO の先頭にある、読み出されていない文字の 9 ビット目 ( 上位データビット ) を格納します。受信 FIFO バッファから 9 ビットデータを読み出す場合、RCREG の下位 8 ビットより前に RX9D データビットを読み出す必要があります。
16.1.2.8 アドレス検出
RS-485 システムのように 1 つの送信ラインを複数のレシーバが共用している場合、特別なアドレス検出モードを利用できます。アドレス検出を有効にするには、RCSTAレジスタのADDENビットをセットします。
アドレス検出モードを利用するには、9 ビット文字を受信する必要があります。アドレス検出を有効にすると、9 番目のデータビットがセットされた文字のみが受信 FIFO バッファに転送され、これによって RCIF 割り込みビットがセットされます。これ以外の文字は全て無視されます。
アドレス文字を受信したら、そのアドレスが自分のアドレスと一致するかどうかをユーザ ソフトウェアで判定します。アドレスが一致したら、次のストップビットが発生する前にユーザ ソフトウェアでADDENビットをクリアしてアドレス検出を無効にする必要があります。使用しているメッセージ プロトコルに基づいてメッセージの終了を検出したら、ユーザ ソフトウェアで ADDEN ビットをセットして、レシーバを再びアドレス検出モードに戻します。
Note: 受信FIFO内の全ての受信文字にフレーミング エラーがある場合、RCREG の読み出しを繰り返しても FERR ビットはクリアされません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 189
PIC18F/LF1XK50
16.1.2.9 非同期受信の実行手順 :
1. 目標のbaudレートに合わせて、SPBRGH:SPBRGレジスタペア、BRGH ビット、BRG16 ビットを初期化する (16.3「EUSART baud レート ジェネレータ (BRG)」参照 )。
2. SPEN ビットおよび RX/DT ピンの TRIS ビットをセットして、シリアルポートを有効にする。非同期モードの場合、SYNC ビットをクリアする。
3. 割り込みを使用する場合、RCIE 割り込みイネーブルビットをセットし、INTCON レジスタの GIEおよび PEIE ビットもセットする。
4. 9ビット受信を行う場合、RX9ビットをセットする。
5. 受信データの極性を反転する場合、DTRXP ビットをセットする。
6. CREN ビットをセットして、受信を有効にする。
7. RSR から受信バッファに文字が転送されると、RCIF 割り込みフラグビットがセットされる。RCIE 割り込みイネーブルビットもセットしている場合、割り込みが発生する。
8. RCSTA レジスタを読み出してエラーフラグを取得する。9 ビットデータ受信を有効にしている場合、9 ビット目のデータビットも読み出す。
9. RCREG レジスタを読み出し、受信バッファから受信済みデータの下位 8 ビットを取得する。
10. オーバーランが発生した場合、CREN レシーバ イネーブルビットをクリアしてOERRフラグをクリアする。
16.1.2.10 9 ビットアドレス検出モードの実行手順
通常、このモードは RS-485 システムで使用します。非同期受信でアドレス検出を有効にするには、以下の手順を実行します。
1. 目標のbaudレートに合わせて、SPBRGH:SPBRGレジスタペア、BRGH ビット、BRG16 ビットを初期化する (16.3「EUSART baud レート ジェネレータ (BRG)」参照 )。
2. SPEN ビットをセットしてシリアルポートを有効にする。非同期モードの場合、SYNC ビットをクリアする。
3. 割り込みを使用する場合、RCIE 割り込みイネーブルビットをセットし、INTCON レジスタの GIEおよび PEIE ビットもセットする。
4. RX9 ビットをセットして 9 ビット受信を有効にする。
5. ADDEN ビットをセットしてアドレス検出を有効にする。
6. 受信データの極性を反転する場合、DTRXP ビットをセットする。
7. CREN ビットをセットして、受信を有効にする。
8. RSRから9ビット目をセットした文字が受信バッファに転送されると、RCIF 割り込みフラグビットがセットされる。RCIE割り込みイネーブルビットもセットしている場合、割り込みが発生する。
9. RCSTA レジスタを読み出してエラーフラグを取得する。9 ビット目のデータビットは常にセットされる。
10. RCREG レジスタを読み出し、受信バッファから受信済みデータの下位 8 ビットを取得する。これがデバイスのアドレスかどうかをソフトウェアで判定する。
11. オーバーランが発生した場合、CREN レシーバ イネーブルビットをクリアしてOERRフラグをクリアする。
12. デバイスのアドレスと一致した場合、ADDENビットをクリアして全ての受信データを受信バッファに取り込み、割り込みを生成する。
DS41350D_JP - p. 190 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 16-5: 非同期受信
表 16-2: 非同期受信に関連するレジスタ
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の記載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 289
RCREG EUSART 受信レジスタ 289
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 289
BAUDCON ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN 289
SPBRGH EUSART baud レート ジェネレータ レジスタ、上位バイト 289
SPBRG EUSART baud レート ジェネレータ レジスタ、下位バイト 289
凡例 : — = 未実装ビット、「0」として読み出し。網掛けのビットは非同期受信には使用しません。
Startbit bit 7/8bit 1bit 0 bit 7/8 bit 0Stop
bit
Startbit
Startbitbit 7/8 Stop
bitRX/DT pin
RegRcv Buffer Reg
Rcv Shift
Read RcvBuffer RegRCREG
RCIF(Interrupt Flag)
OERR bit
CREN
Word 1RCREG
Word 2RCREG
Stopbit
Note: このタイミング チャートでは、3 つのワードが RX 入力に現れています。3 つ目のワードの後に RCREG ( 受信バッファ ) を読み出しているため、OERR ( オーバーランエラー ) ビットがセットされています。
RCIDL
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 191
PIC18F/LF1XK50
16.2 非同期モードのクロック精度
内部オシレータ ブロックの出力 (HFINTOSC) は工場で校正済みです。しかし HFINTOSC の周波数は VDD
や温度の変化によってドリフトする事があり、これによって非同期 baud レートが直接影響を受けます。baud レート クロックを調整するには 2 つの方法がありますが、いずれの場合も何らかの基準となるクロック源が必要です。
1 つは OSCTUNE レジスタを使用して HFINTOSC 出力を調整する方法で、通常こちらの方法を推奨します。OSCTUNEレジスタの値を調整すると、システム クロック ソースを微調整できます。詳細は、2.6.1「OSCTUNEレジスタ」を参照してください。
もう 1 つは、baud レート ジェネレータの値を調整する方法です。これは、自動 baud レート検出機能によって自動的に実行できます (16.3.1「自動 baud レート検出」参照 )。ただし、baud レート ジェネレータを調整して周辺クロック周波数の緩慢な変化を補正する場合、分解能が不十分である事があります。
レジスタ 16-1: TXSTA: 送信状態 / 制御レジスタ
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-1 R/W-0
CSRC TX9 TXEN(1) SYNC SENDB BRGH TRMT TX9D
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 CSRC: クロック源選択ビット
非同期モード : ドントケア
同期モード : 1 = マスタモード ( クロックを内部の BRG から生成 )0 = スレーブモード ( 外部クロック ソースを使用 )
bit 6 TX9: 9 ビット送信イネーブルビット
1 = 9 ビット送信を選択
0 = 8 ビット送信を選択
bit 5 TXEN: 送信イネーブルビット (1)
1 = 送信を有効にする
0 = 送信を無効にする
bit 4 SYNC: EUSART モード選択ビット 1 = 同期モード 0 = 非同期モード
bit 3 SENDB: ブレーク文字送信ビット
非同期モード :1 = 次の送信で同期ブレークを送信 ( 完了時にハードウェアによってクリア )0 = 同期ブレークの送信完了
同期モード :ドントケア
bit 2 BRGH: 高 baud レート選択ビット
非同期モード : 1 = 高速 0 = 低速
同期モード : 使用しない
bit 1 TRMT: 送信シフトレジスタ ステータスビット
1 = TSR が空 0 = TSR がフル
bit 0 TX9D: 送信データの 9 ビット目
アドレス / データビットまたはパリティビットとして使用可能
Note 1: 同期モードでは、SREN/CREN の設定が TXEN よりも優先されます。
DS41350D_JP - p. 192 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 16-2: RCSTA: 受信状態 / 制御レジスタ (1)
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-0 R-0 R-x
SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 SPEN: シリアルポート イネーブルビット
1 = シリアルポートを有効にする (RX/DT および TX/CK ピンをシリアルポート ピンに設定 )0 = シリアルポートを無効にする ( リセットに保持 )
bit 6 RX9: 9 ビット受信イネーブルビット
1 = 9 ビット受信を選択0 = 8 ビット受信を選択
bit 5 SREN: シングル受信イネーブルビット
非同期モード :
ドントケア同期モード – マスタ :
1 = シングル受信を有効にする0 = シングル受信を無効にするこのビットは、受信完了後にクリアされる同期モード – スレーブ :
ドントケア
bit 4 CREN: 連続受信イネーブルビット
非同期モード :
1 = レシーバを有効にする0 = レシーバを無効にする同期モード :
1 = イネーブルビット CREN がクリアされるまで連続受信を有効にする(CREN の設定は SREN より優先 )
0 = 連続受信を無効にする
bit 3 ADDEN: アドレス検出イネーブルビット
非同期モード 9 ビット (RX9 = 1):
1 = アドレス検出を有効にし、割り込みを有効にする。RSR<8> がセットされたら受信バッファに転送する
0 = アドレス検出を無効にする。全てのバイトが受信され、9 ビット目はパリティビットとして使用可能
非同期モード 8 ビット (RX9 = 0):
ドントケア
bit 2 FERR: フレーミング エラー ビット
1 = フレーミング エラー (RCREG レジスタを読み出すと更新され、次の有効なバイトを受信する )0 = フレーミング エラーなし
bit 1 OERR: オーバーランエラー ビット
1 = オーバーランエラー (CREN ビットをクリアするとクリアされる ) 0 = オーバーランエラーなし
bit 0 RX9D: 受信データの 9 ビット目
アドレス / データビットまたはパリティビットとして使用可能。ユーザ ファームウェアでの計算が必要
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 193
PIC18F/LF1XK50
レジスタ 16-3: BAUDCON: baud レート制御レジスタ
R-0 R-1 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0
ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 ABDOVF: 自動 baud レート検出オーバーフロー ビット
非同期モード :1 = 自動 baud レートタイマがオーバーフローした0 = 自動 baud レートタイマがオーバーフローしていない同期モード :ドントケア
bit 6 RCIDL: 受信アイドル フラグビット
非同期モード :1 = レシーバがアイドル0 = スタートビットが検出され、レシーバがアクティブ同期モード :ドントケア
bit 5 DTRXP: データ / 受信極性選択ビット
非同期モード :1 = 受信データ (RX) を反転する ( 負論理 )0 = 受信データ (RX) を反転しない ( 正論理 )同期モード :1 = データ (DT) を反転する ( 負論理 )0 = データ (DT) を反転しない ( 正論理 )
bit 4 CKTXP: クロック / 送信極性選択ビット
非同期モード :1 = 送信 (TX) のアイドル状態を low にする0 = 送信 (TX) のアイドル状態を high にする
同期モード :1 = クロックの立ち下がりエッジでデータが変化し、クロックの立ち上がりエッジでデータを
サンプリングする0 = クロックの立ち上がりエッジでデータが変化し、クロックの立ち下がりエッジでデータを
サンプリングする
bit 3 BRG16: 16 ビット baud レート ジェネレータ ビット
1 = 16 ビット baud レート ジェネレータを使用する (SPBRGH:SPBRG)0 = 8 ビット baud レート ジェネレータを使用する (SPBRG)
bit 2 未実装ビット : 「0」として読み出し
bit 1 WUE: ウェイクアップ イネーブルビット
非同期モード :1 = レシーバが立ち下がりエッジの検出を待機中。文字は受信されないが、立ち下がりエッジで
RCIF がセットされる。WUE は立ち上がりエッジで自動的にクリアされる0 = レシーバは通常の動作中同期モード :ドントケア
bit 0 ABDEN: 自動 baud レート検出イネーブルビット
非同期モード :1 = 自動 baud レート検出モードが有効である ( 自動 baud レート検出の完了時にクリアされる )0 = 自動 baud レート検出モードが無効である同期モード :ドントケア
DS41350D_JP - p. 194 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
16.3 EUSART baud レート ジェネレータ(BRG)
baud レート ジェネレータ (BRG) は、EUSART の非同期および同期モードをサポートするための専用の 8ビットまたは 16 ビットのタイマです。既定値では、BRG は 8 ビットモードで動作します。BAUDCON レジスタの BRG16 ビットをセットすると、16 ビットモードを選択できます。
baud レート タイマはフリーラン動作で、その周期はSPBRGH:SPBRG レジスタペアで決定します。非同期モードでは、TXSTA レジスタの BRGH ビットとBAUDCON レジスタの BRG16 ビットによって baudレート周期の乗数が決まります。同期モードでは、BRGH ビットは無視されます。
表 16-3 に、baud レートの計算式を示します。例 16-1に、baud レートおよび baud レートエラーの計算例を示します。
参考までに、各種非同期モードにおける代表的な baudレートとbaudレートエラーの計算値を表 16-5にまとめます。高 baud レート (BRGH = 1) または 16 ビットBRG (BRG16 = 1) を使用すると、baud レートエラーの低減に効果があります。16 ビット BRG モードを使用すると、オシレータ周波数が高い場合でも低速のbaud レートが得られます。
SPBRGH:SPBRGレジスタペアに新しい値を書き込むと、BRG タイマがリセット ( クリア ) されます。これにより、BRG はタイマ オーバーフローを待たずに新しい baud レートを出力できるようになっています。
レシーバの受信動作中にシステムクロックを変更すると、レシーバエラーまたはデータロスが発生します。この問題を防ぐには、システムクロックを変更する前に RCIDL ビットの状態をチェックして、受信動作がアイドルである事を確認してください。
例 16-1: baud レートエラーの計算
表 16-3: baud レートの計算式
表 16-4: baud レート ジェネレータに関連するレジスタ
FOSC = 16 MHz、目標の baud レートが 9600、非同期モード、8 ビット BRG のデバイスの場合 :
SPBRGH:SPBRG について解くと :
Desired Baud Rate FOSC
64 [SPBRGH:SPBRG] 1+ ---------------------------------------------------------------------=
25.042 25= =
Calculated Baud Rate 1600000064 25 1+ ---------------------------=
9615=
Error Calc. Baud Rate Desired Baud Rate –Desired Baud Rate
--------------------------------------------------------------------------------------------=
9615 9600– 9600
---------------------------------- 0.16%= =
FOSCX = 64 * (Desired Baud Rate)
-1( )16,000,000
= 64 * 9600-1( )
コンフィグレーション ビットBRG/EUSART モード baud レートの計算式
SYNC BRG16 BRGH
0 0 0 8 ビット / 非同期 FOSC/[64 (n+1)]
0 0 1 8 ビット / 非同期FOSC/[16 (n+1)]
0 1 0 16 ビット / 非同期
0 1 1 16 ビット / 非同期
FOSC/[4 (n+1)]1 0 x 8 ビット / 同期
1 1 x 16 ビット / 同期
凡例 : x = ドントケア、n = SPBRGH:SPBRG レジスタペアの値
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 リセット値の記載ページ
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 289
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 289
BAUDCON ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN 289
SPBRGH EUSART baud レート ジェネレータ レジスタ、上位バイト 289
SPBRG EUSART baud レート ジェネレータ レジスタ、下位バイト 289
凡例 : — = 未実装ビット、「0」として読み出し。網掛けのビットは BRG には使用しません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 195
PIC18F/LF1XK50
表 16-5: 各種非同期モードにおける baud レート
baudレート
SYNC = 0、BRGH = 0、BRG16 = 0
FOSC = 48.000 MHz FOSC = 18.432 MHz FOSC = 12.000 MHz FOSC = 11.0592 MHz
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
300 — — — — — — — — — — — —
1200 — — — 1200 0.00 239 1202 0.16 155 1200 0.00 143
2400 — — — 2400 0.00 119 2404 0.16 77 2400 0.00 71
9600 9615 0.16 77 9600 0.00 29 9375 -2.34 19 9600 0.00 17
10417 10417 0.00 71 10286 -1.26 27 10417 0.00 17 10165 -2.42 16
19.2k 19.23k 0.16 38 19.20k 0.00 14 18.75k -2.34 9 19.20k 0.00 8
57.6k 57.69k 0.16 12 57.60k 0.00 7 — — — 57.60k 0.00 2
115.2k — — — — — — — — — — — —
baudレート
SYNC = 0、BRGH = 0、BRG16 = 0
FOSC = 8.000 MHz FOSC = 4.000 MHz FOSC = 3.6864 MHz FOSC = 1.000 MHz
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
300 — — — 300 0.16 207 300 0.00 191 300 0.16 51
1200 1202 0.16 103 1202 0.16 51 1200 0.00 47 1202 0.16 12
2400 2404 0.16 51 2404 0.16 25 2400 0.00 23 — — —
9600 9615 0.16 12 — — — 9600 0.00 5 — — —
10417 10417 0.00 11 10417 0.00 5 — — — — — —
19.2k — — — — — — 19.20k 0.00 2 — — —
57.6k — — — — — — 57.60k 0.00 0 — — —
115.2k — — — — — — — — — — — —
baudレート
SYNC = 0、BRGH = 1、BRG16 = 0
FOSC = 48.000 MHz FOSC = 18.432 MHz FOSC = 12.000 MHz FOSC = 11.0592 MHz
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
300 — — — — — — — — — — — —
1200 — — — — — — — — — — — —
2400 — — — — — — — — — — — —
9600 — — — 9600 0.00 119 9615 0.16 77 9600 0.00 71
10417 — — — 10378 -0.37 110 10417 0.00 71 10473 0.53 65
19.2k 19.23k 0.16 155 19.20k 0.00 59 19.23k 0.16 38 19.20k 0.00 35
57.6k 57.69k 0.16 51 57.60k 0.00 19 57.69k 0.16 12 57.60k 0.00 11
115.2k 115.38k 0.16 25 115.2k 0.00 9 — — — 115.2k 0.00 5
DS41350D_JP - p. 196 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
baudレート
SYNC = 0、BRGH = 1、BRG16 = 0
FOSC = 8.000 MHz FOSC = 4.000 MHz FOSC = 3.6864 MHz FOSC = 1.000 MHz
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
実際の
レート
%誤差
SPBRGの値
(10 進数 )
300 — — — — — — — — — 300 0.16 207
1200 — — — 1202 0.16 207 1200 0.00 191 1202 0.16 51
2400 2404 0.16 207 2404 0.16 103 2400 0.00 95 2404 0.16 25
9600 9615 0.16 51 9615 0.16 25 9600 0.00 23 — — —
10417 10417 0.00 47 10417 0.00 23 10473 0.53 21 10417 0.00 5
19.2k 19231 0.16 25 19.23k 0.16 12 19.2k 0.00 11 — — —
57.6k 55556 -3.55 8 — — — 57.60k 0.00 3 — — —
115.2k — — — — — — 115.2k 0.00 1 — — —
baudレート
SYNC = 0、BRGH = 0、BRG16 = 1
FOSC = 48.000 MHz FOSC = 18.432 MHz FOSC = 12.000 MHz FOSC = 11.0592 MHz
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
300 300.0 0.00 9999 300.0 0.00 3839 300 0.00 2499 300.0 0.00 2303
1200 1200.1 0.00 2499 1200 0.00 959 1200 0.00 624 1200 0.00 575
2400 2400 0.00 1249 2400 0.00 479 2404 0.16 311 2400 0.00 287
9600 9615 0.16 311 9600 0.00 119 9615 0.16 77 9600 0.00 71
10417 10417 0.00 287 10378 -0.37 110 10417 0.00 71 10473 0.53 65
19.2k 19.23k 0.16 155 19.20k 0.00 59 19.23k 0.16 38 19.20k 0.00 35
57.6k 57.69k 0.16 51 57.60k 0.00 19 57.69k 0.16 12 57.60k 0.00 11
115.2k 115.38k 0.16 25 115.2k 0.00 9 — — — 115.2k 0.00 5
baudレート
SYNC = 0、BRGH = 0、BRG16 = 1
FOSC = 8.000 MHz FOSC = 4.000 MHz FOSC = 3.6864 MHz FOSC = 1.000 MHz
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
300 299.9 -0.02 1666 300.1 0.04 832 300.0 0.00 767 300.5 0.16 207
1200 1199 -0.08 416 1202 0.16 207 1200 0.00 191 1202 0.16 51
2400 2404 0.16 207 2404 0.16 103 2400 0.00 95 2404 0.16 25
9600 9615 0.16 51 9615 0.16 25 9600 0.00 23 — — —
10417 10417 0.00 47 10417 0.00 23 10473 0.53 21 10417 0.00 5
19.2k 19.23k 0.16 25 19.23k 0.16 12 19.20k 0.00 11 — — —
57.6k 55556 -3.55 8 — — — 57.60k 0.00 3 — — —
115.2k — — — — — — 115.2k 0.00 1 — — —
表 16-5: 各種非同期モードにおける baud レート ( 続き )
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 197
PIC18F/LF1XK50
baudレート
SYNC = 0、BRGH = 1、BRG16 = 1または SYNC = 1、BRG16 = 1
FOSC = 48.000 MHz FOSC = 18.432 MHz FOSC = 12.000 MHz FOSC = 11.0592 MHz
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
300 300 0.00 39999 300.0 0.00 15359 300 0.00 9999 300.0 0.00 9215
1200 1200 0.00 9999 1200 0.00 3839 1200 0.00 2499 1200 0.00 2303
2400 2400 0.00 4999 2400 0.00 1919 2400 0.00 1249 2400 0.00 1151
9600 9600 0.00 1249 9600 0.00 479 9615 0.16 311 9600 0.00 287
10417 10417 0.00 1151 10425 0.08 441 10417 0.00 287 10433 0.16 264
19.2k 19.20k 0.00 624 19.20k 0.00 239 19.23k 0.16 155 19.20k 0.00 143
57.6k 57.69k 0.16 207 57.60k 0.00 79 57.69k 0.16 51 57.60k 0.00 47
115.2k 115.38k 0.16 103 115.2k 0.00 39 115.38k 0.16 25 115.2k 0.00 23
baudレート
SYNC = 0、BRGH = 1、BRG16 = 1または SYNC = 1、BRG16 = 1
FOSC = 8.000 MHz FOSC = 4.000 MHz FOSC = 3.6864 MHz FOSC = 1.000 MHz
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
実際の
レート
%誤差
SPBRGH:SPBRG(10 進数 )
300 300.0 0.00 6666 300.0 0.01 3332 300.0 0.00 3071 300.1 0.04 832
1200 1200 -0.02 1666 1200 0.04 832 1200 0.00 767 1202 0.16 207
2400 2401 0.04 832 2398 0.08 416 2400 0.00 383 2404 0.16 103
9600 9615 0.16 207 9615 0.16 103 9600 0.00 95 9615 0.16 25
10417 10417 0.00 191 10417 0.00 95 10473 0.53 87 10417 0.00 23
19.2k 19.23k 0.16 103 19.23k 0.16 51 19.20k 0.00 47 19.23k 0.16 12
57.6k 57.14k -0.79 34 58.82k 2.12 16 57.60k 0.00 15 — — —
115.2k 117.6k 2.12 16 111.1k -3.55 8 115.2k 0.00 7 — — —
表 16-5: 各種非同期モードにおける baud レート ( 続き )
DS41350D_JP - p. 198 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
16.3.1 自動 baud レート検出
EUSART モジュールは baud レートの自動検出 / 校正をサポートしています。
自動 baud レート検出 (ABD) モードでは、BRG へのクロックが逆方向になります。BRG が入力 RX 信号にクロックを供給するのではなく、RX 信号が BRG のタイミングを生成します。baud レート ジェネレータを使用して、LIN バスの同期文字である 55h (ASCII「U」)の周期を計測します。この文字は、ストップビットのエッジを含め 5 つの立ち上がりエッジがあるのが特長です。
BAUDCONレジスタのABDENビットをセットすると、自動 baudレート校正シーケンスが開始します(図 16-6)。ABD シーケンスの実行中、EUSART ステートマシンはアイドルのまま保持されます。スタートビット直後の受信ラインの 初の立ち上がりエッジで、SPBRGが BRG カウンタクロックを使用してカウントを開始します ( 表 16-6 参照 )。5 つ目の立ち上がりエッジは、8番目のビット周期の 後にRXピンで発生します。この時点で、SPBRGH:SPBRG レジスタペア内には正しい BRG 周期を累計した値が格納されており、ABDENビットは自動的にクリアされ、RCIF 割り込みフラグがセットされます。RCIF 割り込みをクリアするには、RCREG に対して読み出しを実行する必要があります。RCREG の内容は破棄します。SPBRGH レジスタを使用しないモードで校正を行う場合、SPBRGH レジスタの 00h をユーザがチェックすれば、SPBRG レジスタがオーバーフローしていない事を確認できます。
BRG の自動 baud レート クロックは、BRG16 ビットと BRGH ビットによって決まります ( 表 16-6 参照 )。ABD モードでは、SPBRGH および SPBRG レジスタはBRG16 ビットの設定に関係なく 16 ビットカウンタとして使用します。baud レート周期の校正時、SPBRGHおよび SPBRG レジスタは BRG ベース クロックレー
トの 1/8 のクロックで動作します。こうして得られたバイトの計測値は、 高クロック時の平均ビット時間に等しくなります。
表 16-6: BRG カウンタのクロックレート
図 16-6: 自動 baud レート校正
Note 1: ABDENビットとWUEビットを両方セットした場合、自動 baud レート検出はブレーク文字直後のバイトで実行されます(16.3.3「ブレークによる自動ウェイクアップ」参照 )。
2: 入力文字の baud レートが選択した BRGクロック源のレンジ内となるように、ユーザの責任で設定する必要があります。オシレータ周波数と EUSART の baud レートの組み合わせによっては、使用できないものもあります。
3: 自動baudレート プロセスでは、自動baudレート カウンタが 1 からカウントを開始します。精度を重視する場合、自動 baudレート シーケンスの完了時にSPBRGH:SPBRG レジスタペアから 1 を引いてください。
BRG16 BRGH BRG ベースクロック
BRG ABDクロック
0 0 FOSC/64 FOSC/512
0 1 FOSC/16 FOSC/128
1 0 FOSC/16 FOSC/128
1 1 FOSC/4 FOSC/32
Note: ABD シーケンスでは、SPBRG およびSPBRGHレジスタはBRG16ビットの設定に関係なく 16 ビットカウンタとして使用します。
BRG Value
RX pin
ABDEN bit
RCIF bit
bit 0 bit 1
(Interrupt)
ReadRCREG
BRG Clock
Start
Auto ClearedSet by User
XXXXh 0000h
Edge #1
bit 2 bit 3Edge #2
bit 4 bit 5Edge #3
bit 6 bit 7Edge #4
Stop bit
Edge #5
001Ch
Note 1: ABD シーケンスを実行するには、EUSART モジュールを非同期モードに設定する必要があります。
SPBRG XXh 1Ch
SPBRGH XXh 00h
RCIDL
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 199
PIC18F/LF1XK50
16.3.2 自動 baud レートのオーバーフロー
自動 baud レート検出時、RX ピンで 5 つ目の立ち上がりエッジを検出する前に baud レート カウントがオーバーフローすると、BAUDCON レジスタの ABDOVFビットがセットされます。ABDOVF ビットは、カウンタの値が SPBRGH:SPBRG レジスタペアの 16 ビットに格納できる 大カウントを超えた事を示します。ABDOVF がセットされた後も、カウンタは RX ピンで5 つ目の立ち上がりエッジを検出するまでカウントを継続します。RX ピンで 5 つ目の立ち上がりエッジを検出すると、ハードウェアが RCIF 割り込みフラグをセットし、BAUDCON レジスタの ABDEN ビットをクリアします。その後、RCREG レジスタを読み出すとRCIF フラグをクリアできます。BAUDCON レジスタの ABDOVF フラグは、ソフトウェアで直接クリアできます。
RCIFフラグがセットされる前に自動baudレート検出を終了するには、ABDEN ビットをクリアしてからBAUDCON レジスタの ABDOVF ビットをクリアします。ABDEN ビットを先にクリアしないと、ABDOVFビットはセットされたままとなります。
16.3.3 ブレークによる自動ウェイクアップ
スリープモード中は、EUSART へのクロックは全て停止されます。このため、baud レート ジェネレータもアクティブでなくなり、文字を正しく受信できなくなります。自動ウェイクアップ機能を利用すると、RX/DTラインのアクティビティによってコントローラをウェイクアップできます。この機能は、非同期モードでのみ使用できます。
自動ウェイクアップ機能を有効にするには、BAUDCONレジスタの WUE ビットをセットします。このビットをセットすると RX/DT での通常の受信シーケンスは無効になり、EUSART はアイドル状態のまま、CPU のモードとは関係なくウェイクアップ イベントの発生を監視します。RX/DT ラインが high から low に遷移するとウェイクアップ イベントとなります ( これは、LIN プロトコルの同期ブレークまたはウェイクアップ信号文字の開始に相当します )。
ウェイクアップ イベントが発生すると同時に、EUSARTモジュールは RCIF 割り込みを生成します。この割り込みは、CPU が通常の動作モードの場合は Q クロックに同期して発生し ( 図 16-7)、デバイスがスリープモードの場合は非同期に発生します (図 16-8)。RCREGレジスタを読み出すと、割り込み条件がクリアされます。
ブレークの 後に RX ラインが low から high に遷移すると、WUE ビットは自動的にクリアされます。これにより、ユーザはブレークイベントの終了を知る事ができます。この時点で EUSART モジュールはアイドルモードになり、次の文字の受信を待ちます。
16.3.3.1 特別な注意事項
ブレーク文字
ウェイクアップ イベント時の文字エラーや文字フラグメントを防止するため、ウェイクアップ文字は全て「0」とする必要があります。
ウェイクアップを有効にすると、データストリームのlow 時間とは関係なくこの機能が働きます。WUE ビットをセットした場合に「0」以外の有効な文字を受信すると、スタートビットから 初の立ち上がりエッジまでの low 時間がウェイクアップ イベントとして解釈されます。文字の残りのビットはフラグメント文字として受信され、後続の文字によってフレーミング エラーまたはオーバーランエラーが発生する事があります。
このため、 初に送信する文字は全て「0」である必要があります。この状態を 10 ビット以上の期間持続する必要があります。LIN バスでは 13 ビット期間を推奨しますが、標準の RS-232 デバイスでは任意のビット期間でかまいません。
オシレータのスタートアップ時間
LP、XT、HS/PLL モード等、特に起動時間の長いオシレータを使用しているアプリケーションでは、オシレータの起動時間を考慮する必要があります。十分な長さの同期ブレーク文字 (またはウェイクアップ信号 )を送信したら、選択したオシレータが起動するまで十分な間隔を置いてからEUSARTを適切に初期化するようにしてください。
WUE ビット
ウェイクアップ イベントが発生すると、RCIF ビットのセットによって受信割り込みが発生します。WUEビットは、RX/DT の立ち上がりエッジでハードウェアによってクリアされます。その後、RCREG レジスタを読み出してその内容を破棄すると、割り込み条件はソフトウェアによってクリアされます。
実際のデータが失われないようにするには、WUEビットをセットする前に RCIDL ビットをチェックして、受信動作中でない事を確認します。受信動作中でなければ、スリープモードに移行する直前に WUE ビットをセットします。
DS41350D_JP - p. 200 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 16-7: 通常動作時の自動ウェイクアップ ビット (WUE) のタイミング
図 16-8: スリープ時の自動ウェイクアップ ビット (WUE) のタイミング
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1Q2 Q3 Q4
OSC1
WUE bit
RX/DT Line
RCIF
Bit set by user Auto Cleared
Cleared due to User Read of RCREG
Note 1: WUE ビットをセットしている間は、EUSART はアイドルのままです。
Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1Q2Q3 Q4 Q1Q2 Q3Q4 Q1 Q2 Q3 Q4 Q1Q2 Q3 Q4
OSC1
WUE bit
RX/DT Line
RCIF
Bit Set by User Auto Cleared
Cleared due to User Read of RCREGSleep Command Executed
Note 1
Note 1: ウェイクアップ イベントの際にオシレータの起動に長い時間がかかる場合、stposc信号がまだアクティブな間に WUE ビットが自動的にクリアされる事があります。このシーケンスは Q クロックの有無の影響は受けません。
2: WUE ビットをセットしている間は、EUSART はアイドルのままです。
Sleep Ends
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 201
PIC18F/LF1XK50
16.3.4 ブレーク文字のシーケンス
EUSART モジュールには、LIN バス規格で必須とされる特殊なブレーク文字シーケンスを送信する機能があります。ブレーク文字は、スタートビット、12 ビットの「0」、ストップビットの順で構成されます。
ブレーク文字を送信するには、まず TXSTA レジスタの SENDB および TXEN ビットをセットします。次に、TXREG に書き込みを実行するとブレーク文字の送信が開始します。TXREG に書き込んだデータの値は無視され、全て「0」として送信されます。
対応するストップビットを送信したら、SENDB ビットはハードウェアによって自動的にリセットされます。このため、ブレーク文字の後に送信するバイト(LIN 規格の場合は主に同期文字 ) を送信 FIFO にあらかじめ読み込んでおく事が可能です。
TXSTA レジスタの TRMT ビットは、通常の送信時と同様に、送信動作がアクティブかアイドルかを示します。ブレーク文字シーケンスのタイミングについては、図 16-9 を参照してください。
16.3.4.1 ブレークおよび同期文字の送信シーケンス
以下のシーケンスにより、メッセージ フレーム ヘッダ (ブレーク文字+自動 baudレート同期バイト )が開始します。このシーケンスは、LIN バスマスタの代表的なものです。
1. EUSART を任意のモードに設定する。
2. TXEN および SENDB ビットをセットしてブレーク シーケンスを有効にする。
3. TXREG にダミー文字を読み込んで送信を開始する ( 読み込んだ値は無視される )。
4. TXREG に「55h」を書き込んで送信 FIFO バッファに同期文字を読み込む。
5. ブレークの送信が完了したら、SENDB ビットがハードウェアによってリセットされ、同期文字が送信される。
TXREG が空になった事が TXIF によって示されると、次のデータバイトをTXREGに書き込む事ができます。
16.3.5 ブレーク文字の受信
拡張 EUSART モジュールには、ブレーク文字の受信方法が 2 通りあります。
1 つは、RCSTA レジスタの FERR ビットと RCREGが示す受信データを使用してブレーク文字を検出する方法です。baud レート ジェネレータは、目標の baudレートに初期化されているものと仮定します。
以下の条件が揃うと、ブレーク文字を受信した事になります。
• RCIF ビットがセット
• FERR ビットがセット
• RCREG = 00h
もう 1 つの方法は、自動ウェイクアップ機能 (16.3.3「ブレークによる自動ウェイクアップ」参照 ) を使用します。自動ウェイクアップ機能を有効にすると、EUSART は RX/DT の次の 2 つの遷移をサンプリングし、RCIF 割り込みを生成して、次のデータバイトとその後の割り込みを受信します。
通常は、ブレーク文字の後に自動 baud レート検出機能を有効にします。どちらの方法の場合も、ユーザはEUSART をスリープモードにする前に BAUDCON レジスタの ABDEN ビットをセットできます。
図 16-9: ブレーク文字シーケンスの送信
Write to TXREGDummy Write
BRG Output(Shift Clock)
Start bit bit 0 bit 1 bit 11 Stop bit
Break
TXIF bit(Transmit
interrupt Flag)
TX (pin)
TRMT bit(Transmit Shift
Reg. Empty Flag)
SENDB(send Break
control bit)
SENDB Sampled Here Auto Cleared
DS41350D_JP - p. 202 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
16.4 EUSART 同期モード
一般に、同期シリアル通信は 1 つのマスタと 1 つまたは複数のスレーブで構成されるシステムで使用します。マスタデバイスは baud レート生成に必要な回路を持ち、システム内の全てのデバイスにクロックを供給します。スレーブデバイスは内部クロック生成回路を持たず、マスタから供給されるクロックを使用します。
同期モードでは、双方向データラインとクロックラインの 2 本の信号線を使用します。スレーブは、マスタから供給される外部クロックを使用して受信 / 送信用のシフトレジスタに対してシリアルデータのシフト入力 / 出力を実行します。データラインは双方向であるため、同期動作は半二重のみです。半二重では、マスタとスレーブのどちらからもデータを送受信できますが、両方が同時に送信する事はできません。EUSARTモジュールはマスタデバイスとしてもスレーブデバイスとしても動作が可能です。
同期送信では、スタートビットとストップビットは使用しません。
16.4.1 同期マスタモード
EUSART モジュールを同期マスタモードとするには、以下のようにビットを設定します。
• SYNC = 1
• CSRC = 1
• SREN = 0 ( 送信の場合 )、SREN = 1 ( 受信の場合 )
• CREN = 0 ( 送信の場合 )、CREN = 1 ( 受信の場合 )• SPEN = 1
TXSTA レジスタの SYNC ビットをセットすると、デバイスが同期モードになります。TXSTA レジスタのCSRC ビットをセットすると、デバイスがマスタになります。RCSTA レジスタの SREN および CREN ビットをクリアするとデバイスが送信モードになり、それ以外の設定では受信モードになります。RCSTA レジスタのSPENビットをセットするとEUSARTが有効になります。RX/DT または TX/CK ピンをアナログ周辺モジュールと共用している場合、対応する ANSEL ビットをクリアしてアナログI/O機能を無効にする必要があります。
RX/DT および TX/CK ピンに対応する TRIS ビットはセットしておく必要があります。
16.4.1.1 マスタクロック
同期データ転送には、データと同期した専用のクロックラインを使用します。マスタとしてコンフィグレーションされたデバイスが、TX/CK ラインでクロックを送信します。EUSART を同期送信または同期受信モードに設定すると、TX/CK ピン出力ドライバが自動的に有効になります。シリアル データ ビットはリーディング エッジで変化し、そのクロックのトレーリング エッジでデータ ビットが有効になります。各データビットで 1 クロックサイクルが生成されます。データビットの数だけクロックサイクルが生成されます。
16.4.1.2 クロック極性
Microwire との互換性を維持するために、クロック極性は選択可能になっています。クロック極性はBAUDCON レジスタの CKTXP ビットで選択します。CKTXP ビットをセットするとクロックのアイドル状態が high になります。CKTXP ビットをセットした場合、データは各クロックの立ち下がりエッジで変化し、各クロックの立ち上がりエッジでサンプリングされます。CKTXP ビットをクリアするとクロックのアイドル状態が low になります。この場合、データは各クロックの立ち上がりエッジで変化し、各クロックの立ち下がりエッジでサンプリングされます。
16.4.1.3 同期マスタ送信
データはデバイスの RX/DT ピンから送信されます。EUSART を同期マスタ送信モードに設定すると、RX/DT および TX/CK ピン出力ドライバが自動的に有効になります。
TXREG レジスタに文字を書き込むと送信が開始します。TSR 内に以前の文字が一部でも残っている場合、その文字の 後のビットが送信されるまで新しい文字データは TXREG に保持されます。これが 初の文字の場合、または TSR 内に以前の文字が全く残っていない場合、TXREG のデータがただちに TSR レジスタに転送されます。TXREG から TSR にデータが転送されたら、その直後に文字の送信が開始します。
各データビットはマスタクロックのリーディングエッジで変化し、次のクロックのリーディング エッジまで有効です。
16.4.1.4 データ極性
送受信データの極性は、BAUDCONレジスタのDTRXPビットで制御できます。このビットが既定値「0」の場合、送受信データは正論理になります。DTRXP ビットを「1」にセットするとデータが反転し、送受信データは負論理になります。
Note: TSR レジスタはデータメモリにマッピングされていないため、ユーザからはアクセスできません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 203
PIC18F/LF1XK50
16.4.1.5 同期マスタ送信の実行手順 :
1. 目標のbaudレートに合わせて、SPBRGH:SPBRGレジスタペア、BRGH ビット、BRG16 ビットを初期化する (16.3「EUSART baud レート ジェネレータ (BRG)」参照 )。
2. SYNC、SPEN、CSRC ビットをセットして同期マスタ シリアルポートを有効にする。RX/DT およびTX/CK I/Oピンに対応するTRISビットをセットする。
3. SRENおよびCRENビットをクリアして受信モードを無効にする。
4. TXEN ビットをセットして、送信モードを有効にする。
5. 9ビット送信を行う場合、TX9ビットをセットする。
6. 割り込みを使用する場合、TXIE、GIE、PEIE 割り込みイネーブルビットをセットする。
7. 9 ビット送信を選択した場合、TX9D ビットに 9ビット目を読み込む。
8. TXREG レジスタにデータを読み込むと送信が開始する。
図 16-10: 同期送信
図 16-11: 同期送信 (TXEN を利用 )
bit 0 bit 1 bit 7
Word 1
bit 2 bit 0 bit 1 bit 7RX/DT
Write toTXREG Reg
TXIF bit(Interrupt Flag)
TXEN bit‘1’ ‘1’
Word 2
TRMT bit
Write Word 1 Write Word 2
Note: 同期マスタモード、SPBRG = 0、2 つの 8 ビットワードを連続送信
pin
TX/CK pin
TX/CK pin
(SCKP = 0)
(SCKP = 1)
RX/DT pin
TX/CK pin
Write toTXREG reg
TXIF bit
TRMT bit
bit 0 bit 1 bit 2 bit 6 bit 7
TXEN bit
DS41350D_JP - p. 204 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 16-7: 同期マスタ送信に関連するレジスタ
16.4.1.6 同期マスタ受信
データは RX/DT ピンで受信します。EUSART を同期マスタ受信モードに設定した場合、RX/DT ピンに対応する TRIS ビットをセットしてこのピンの出力ドライバを無効にする必要があります。
同期モードでは、シングル受信イネーブルビット(RCSTA レジスタの SREN ビット ) または連続受信イネーブルビット (RCSTA レジスタの CREN ビット ) のいずれかをセットすると受信が有効になります。
SREN をセットして CREN をクリアすると、1 文字のデータビットの数だけクロックサイクルが生成されます。1 文字の受信が完了したら SREN ビットは自動的にクリアされます。CREN をセットすると、CREN をクリアするまでクロックが連続生成されます。1 文字の受信中にCREN をクリアするとCKクロックがただちに停止し、一部のみ受信した文字は破棄されます。SREN と CREN を両方セットすると、 初の文字の受信が完了した時点で SREN がクリアされ、以後はCREN が使用されます。
受信を開始するには、SREN または CREN のいずれかをセットします。TX/CK クロックピンのトレーリングエッジで RX/DT ピンのデータをサンプリングし、受信シフトレジスタ (RSR) にシフト入力します。1 文字全体を RSR に受信したら RCIF ビットがセットされ、この文字が 2 文字受信 FIFO に自動的に転送されます。受信 FIFO の先頭文字の下位 8 ビットが RCREG に格納されます。受信 FIFO 内に読み出していない文字が残っている間は、RCIF ビットはセットされたままです。
16.4.1.7 スレーブクロック
同期データ転送には、データと同期した専用のクロックラインを使用します。スレーブとしてコンフィグレーションされたデバイスが、TX/CK ラインでクロックを受信します。デバイスを同期スレーブ送信または受信モードに設定した場合、TX/CK ピンに対応するTRIS ビットをセットしてこのピンの出力ドライバを無効にする必要があります。シリアル データ ビットはリーディング エッジで変化し、そのクロックのトレーリング エッジでデータ ビットが有効になります。1 クロックサイクルで1ビットのデータを転送します。データビットの数だけクロックサイクルを受信します。
16.4.1.8 受信オーバーランエラー
受信 FIFO バッファには 2 文字まで格納できます。RCREG を読み出して FIFO にアクセスする前に 3 文字目を 後まで受信すると、オーバーランエラーが発生します。オーバーランエラーになると、RCSTA レジスタの OERR ビットがセットされます。FIFO 内の以前のデータが上書きされる事はありません。既にFIFO バッファ内にある 2 文字は読み出す事ができますが、それ以降の文字はオーバーランエラーが解消されるまで受信できません。OERR ビットは、オーバーラン条件を解消する事によってのみクリアできます。SREN ビットがセット、CREN ビットがクリアの時にオーバーランエラーが発生した場合、RCREG を読み出すとエラーが解消されます。CREN ビットがセットされている時にオーバーランエラーが発生した場合、RCSTA レジスタの CREN ビットをクリアするか、SPEN ビットをクリアして EUSART をリセットするとエラー条件が解消されます。
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の記載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 289
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
TXREG EUSART 送信レジスタ 289
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 289
BAUDCON ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN 289
SPBRGH EUSART baud レート ジェネレータ レジスタ、上位バイト 289
SPBRG EUSART baud レート ジェネレータ レジスタ、下位バイト 289
凡例 : — = 未実装ビット、「0」として読み出し。網掛けのビットは同期マスタ送信には使用しません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 205
PIC18F/LF1XK50
16.4.1.9 9 ビット文字の受信
EUSART は 9 ビット文字の受信をサポートしています。RCSTA レジスタの RX9 ビットをセットすると、EUSART は 1 文字の受信につき 9 ビットを RSR にシフト入力します。RCSTA レジスタの RX9D ビットには、受信 FIFO の先頭にある、読み出されていない文字の 9 ビット目 ( 上位データビット ) を格納します。受信 FIFO バッファから 9 ビットデータを読み出す場合、RCREG の下位 8 ビットより前に RX9D データビットを読み出す必要があります。
16.4.1.10 同期マスタ受信の実行手順 :
1. 適切なbaudレートに合わせて、SPBRGH:SPBRGレジスタペアを初期化する。必要に応じて BRGHおよびBRG16ビットをセットまたはクリアして、目標の baud レートに設定する。
2. SYNC、SPEN、CSRC ビットをセットして同期マスタ シリアルポートを有効にする。RX/DT およびTX/CKピンに対応するTRISビットをセットして、これらのピンの出力ドライバを無効にする。
3. CRENおよびSRENビットがクリアされている事を確認する。
4. 割り込みを使用する場合、INTCON レジスタのGIE および PEIE ビットをセットし、RCIE ビットをセットする。
5. 9ビット受信を行う場合、RX9ビットをセットする。
6. SREN ビットをセットするか、連続受信の場合はCREN ビットをセットすると受信が開始する。
7. 1 文字の受信が完了すると、割り込みフラグビット RCIF がセットされる。RCIE 割り込みイネーブルビットもセットしている場合、割り込みが発生する。
8. 9 ビット受信が有効な場合は RCSTA レジスタを読み出して 9 ビット目を取得し、受信中にエラーが発生したかどうかを確認する。
9. RCREG レジスタを読み出して、8 ビットの受信データを読み出す。
10. オーバーランエラーが発生した場合、RCSTA レジスタの CREN ビットをクリアするか、SPENビットをクリアして EUSART をリセットしてエラーを解消する。
図 16-12: 同期受信 ( マスタモード、SREN)
CREN bit
RX/DT
Write tobit SREN
SREN bit
RCIF bit(Interrupt)
ReadRXREG
‘0’
bit 0 bit 1 bit 2 bit 3 bit 4 bit 5 bit 6 bit 7
‘0’
Note: このタイミング チャートは、同期マスタモードで SREN = 1、BRGH = 0とした場合を示しています。
TX/CK pin
TX/CK pin
pin
(SCKP = 0)
(SCKP = 1)
DS41350D_JP - p. 206 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 16-8: 同期マスタ受信に関連するレジスタ
16.4.2 同期スレーブモード
EUSART モジュールを同期スレーブモードとして設定するには、以下のようにビットを設定します。
• SYNC = 1
• CSRC = 0
• SREN = 0 ( 送信の場合 )、SREN = 1 ( 受信の場合 )
• CREN = 0 ( 送信の場合 )、CREN = 1 ( 受信の場合 )• SPEN = 1
TXSTA レジスタの SYNC ビットをセットすると、デバイスが同期モードになります。TXSTAレジスタのCSRCビットをクリアすると、デバイスがスレーブになります。RCSTA レジスタの SREN および CREN ビットをクリアするとデバイスが送信モードになり、それ以外の設定では受信モードになります。RCSTA レジスタのSPEN ビットをセットすると EUSART が有効になります。RX/DT または TX/CK ピンをアナログ周辺モジュールと共用している場合、対応する ANSEL ビットをクリアしてアナログ I/O 機能を無効にする必要があります。
RX/DT および TX/CK ピンに対応する TRIS ビットをセットして、これらのピンの出力ドライバを無効にします。
16.4.2.1 EUSART 同期スレーブ送信
同期マスタモードと同期スレーブモードの送信動作は基本的に共通です ( 16.4.1.3「同期マスタ送信」参照 )が、スリープモードの場合のみ異なります。
TXREG に 2 ワードを書き込んだ後に SLEEP命令を実行すると、以下の動作となります。
1. 初の 1 文字がただちに TSR レジスタに転送され、送信される。
2. 2 番目の文字は TXREG レジスタに残る。
3. TXIF ビットはセットされない。
4. 初の 1 文字が TSR からシフト出力されると、TXREG レジスタから TSR に 2 番目の文字が転送され、この時点で TXIF ビットがセットされる。
5. PEIEおよびTXIEビットが両方ともセットされている場合、割り込みによってデバイスがスリープからウェイクアップし、次の命令を実行する。GIEビットもセットされている場合、プログラムが割り込みサービスルーチンを呼び出す。
16.4.2.2 同期スレーブ送信の実行手順 :
1. SYNC および SPEN ビットをセットし、CSRCビットをクリアする。RX/DT および TX/CK I/O ピンに対応する TRIS ビットをセットする。
2. CREN および SREN ビットをクリアする。
3. 割り込みを使用する場合、INTCON レジスタのGIE および PEIE ビットをセットし、TXIE ビットをセットする。
4. 9ビット送信を行う場合、TX9ビットをセットする。
5. TXEN ビットをセットして、送信を有効にする。
6. 9ビット送信を選択した場合、 上位ビット(MSb)を TX9D ビットに読み込む。
7. 下位 8 ビットを TXREG レジスタに書き込むと送信が開始する。
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の記載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 289
RCREG EUSART 受信レジスタ 289
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 289
BAUDCON ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN 289
SPBRGH EUSART baud レート ジェネレータ レジスタ、上位バイト 289
SPBRG EUSART baud レート ジェネレータ レジスタ、下位バイト 289
凡例 : — = 未実装ビット、「0」として読み出し。網掛けのビットは同期マスタ受信には使用しません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 207
PIC18F/LF1XK50
表 16-9: 同期スレーブ送信に関連するレジスタ
16.4.2.3 EUSART 同期スレーブ受信
同期マスタモードと同期スレーブモードの受信動作は基本的に共通です (16.4.1.6「同期マスタ受信」) が、以下の例外があります。
• スリープ
• CREN ビットは常にセットされるため、レシーバがアイドルにならない
• SREN ビットはスレーブモードでは使用しない
スリープモードに移行する前にCRENビットをセットしておくと、スリープモード時でも文字を受信できます。文字を受信すると、RSR レジスタから RCREG レジスタへデータが転送されます。RCIEイネーブルビットがセットされている場合、割り込みによってデバイスがスリープからウェイクアップし、次の命令を実行します。GIE ビットもセットされている場合、プログラムが割り込みベクタに分岐します。
16.4.2.4 同期スレーブ受信の実行手順 :
1. SYNC および SPEN ビットをセットし、CSRCビットをクリアする。RX/DT および TX/CK I/Oピンに対応する TRIS ビットをセットする。
2. 割り込みを使用する場合、INTCON レジスタのGIE および PEIE ビットをセットし、RCIE ビットをセットする。
3. 9 ビット受信を行う場合、RX9 ビットをセットする。
4. CREN ビットをセットして受信を有効にする。
5. 受信が完了すると、RCIF ビットがセットされる。RCIE ビットをセットしている場合、割り込みが発生する。
6. 9 ビットモードを有効にしている場合、RCSTAレジスタの RX9D ビットから 上位ビット(MSb) を取得する。
7. RCREG レジスタを読み出し、受信 FIFO から下位 8 ビットを取得する。
8. オーバーランエラーが発生した場合、RCSTAレジスタの CREN ビットをクリアするか、SPENビットをクリアして EUSART をリセットしてエラーを解消する。
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の記載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 289
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
TXREG EUSART 送信レジスタ 289
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 289
BAUDCON ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN 289
SPBRGH EUSART baud レート ジェネレータ レジスタ、上位バイト 289
SPBRG EUSART baud レート ジェネレータ レジスタ、下位バイト 289
凡例 : — = 未実装ビット、「0」として読み出し。網掛けのビットは同期スレーブ送信には使用しません。
DS41350D_JP - p. 208 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 16-10: 同期スレーブ受信に関連するレジスタ
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の記載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
RCSTA SPEN RX9 SREN CREN ADDEN FERR OERR RX9D 289
RCREG EUSART 受信レジスタ 289
TXSTA CSRC TX9 TXEN SYNC SENDB BRGH TRMT TX9D 289
BAUDCON ABDOVF RCIDL DTRXP CKTXP BRG16 — WUE ABDEN 289
SPBRGH EUSART baud レート ジェネレータ レジスタ、上位バイト 289
SPBRG EUSART baud レート ジェネレータ レジスタ、下位バイト 289
凡例 : — = 未実装ビット、「0」として読み出し。網掛けのビットは同期スレーブ受信には使用しません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 209
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 210 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
17.0 A/Dコンバータ (ADC)モジュール
A/D コンバータは、アナログ入力信号を 10 ビットのバイナリ値に変換します。本デバイスで使用するアナログ入力は、多重化して 1 つのサンプルホールド回路に入力します。サンプルホールド回路の出力をADC の入力に接続します。ADC は逐次比較方式によって 10ビットのバイナリ値を生成し、この変換結果を A/D 変換結果レジスタ (ADRESL および ADRESH) に格納します。
ADC の電圧リファレンスは、VDD または外部リファレンスピンに印加された電圧のいずれかをソフトウェアで選択できます。
ADC は変換完了時に割り込みを生成できます。この割り込みを使用して、デバイスをスリープモードからウェイクアップできます。
図 17-1 に、ADC のブロック図を示します。
図 17-1: ADC のブロック図
ADC
AN4
AVDD
VREF+
ADON
GO/DONE
CHS<3:0>
ADRESH ADRESL
10
10
ADFM
VSS
AN5
AN6
AN7
AN3
AN8
AN9
AN10
AN11
AVSS
VREF-
NVCFG[1:0] = 00
FVR
0000
0001
0010
0011
0100
0101
0111
0110
1000
1001
1010
1011
1100
1101
1110
1111
Unused
Unused
0 = Left Justify1 = Right Justify
Unused
Unused
Unused
DAC
NVCFG[1:0] = 01
FVR
PVCFG[1:0] = 00
PVCFG[1:0] = 01
PVCFG[1:0] = 10
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 211
PIC18F/LF1XK50
17.1 ADC の設定
ADC の設定と使用に際しては、以下の機能を考慮する必要があります。
• ポートの設定
• チャンネル選択
• ADC 電圧リファレンスの選択
• ADC のクロック源
• 割り込み制御
• 変換結果のフォーマット
17.1.1 ポートの設定
A/D ポートピンは ANSEL、ANSELH、TRISA、TRISB、TRISE レジスタで設定します。ポートピンをアナログ入力として使用する場合、対応する ANSx ビットをセットしてデジタル入力バッファを無効にし、TRISxビットをセットしてデジタル出力ドライバを無効にする必要があります。TRISx ビットをクリアした場合、デジタル出力レベル(VOHまたはVOL)が変換されます。
A/D 変換処理は、ANSx ビットおよび TRIS ビットの状態とは無関係に実行されます。
17.1.2 チャンネル選択
サンプルホールド回路にどのチャンネルを接続するかは、ADCON0 レジスタの CHS ビットで設定します。
チャンネルを変更したら、次に変換を開始するまでに遅延が必要です。詳細は、17.2「ADC の動作」を参照してください。
17.1.3 ADC 電圧リファレンス
ADCON1レジスタのPVCFGおよびNVCFGビットで正電圧リファレンスと負電圧リファレンスをそれぞれ個別に制御できます。正電圧リファレンスは、VDD、FVR、外部電圧ソースのいずれかに設定できます。負電圧リファレンスは、VSS または外部電圧ソースのいずれかに設定できます。
17.1.4 アクイジション時間の選択と設定
GO/DONE ビットがセットされるたびに発生するアクイジション時間は、ADCON2 レジスタを使ってユーザが設定できます。
アクイジション時間は、ADCON2 レジスタのACQT<2:0> ビットで設定します。アクイジション時間は、2 ~ 20 TAD の間で設定できます。GO/DONEビットをセットすると、ADC モジュールはここで指定したアクイジション時間入力のサンプリングを継続した後、自動的に変換を開始します。アクイジション時間はプログラミング済みであるため、チャンネルを選択後アクイジション時間の経過を待たずに GO/DONEビットをセットできます。
ACQT<2:0> = 000の場合、アクイジションを手動で実行します。GO/DONE ビットをセットすると、サンプリングが停止し、変換が開始します。入力チャンネルを選択してからGO/DONEビットをセットするまでの間、ユーザの責任で適切なアクイジション時間を確保する必要があります。アクイジション時間をプログラミングできないデバイスとの互換性を維持するため、ACQT<2:0> ビットのリセット時の既定値はこの設定です。
いずれの場合も、変換が完了すると GO/DONE ビットがクリアされ、ADIF フラグがセットされ、ADC は現在選択されているチャンネルのサンプリングを再開します。アクイジション時間をプログラミングした場合、アクイジション時間が終了して変換が開始するタイミングを知る方法はありません。
17.1.5 変換クロック
ADCのクロック源は、ADCON2レジスタのADCSビットを使用してソフトウェアで選択できます。クロックは以下の 7 種類から選択できます。
• FOSC/2
• FOSC/4
• FOSC/8
• FOSC/16
• FOSC/32
• FOSC/64
• FRC ( 専用の内部オシレータ )
1 ビットの変換に必要な時間を TAD と定義します。図 17-3 に示すように、10 ビット全体の変換には11 TAD が必要です。
正しく変換を行うには、TAD の仕様を正しく満たす必要があります。詳細は、表 27-9「A/D 変換の条件」を参照してください。表 17-1 に、正しい ADC クロックの選択例を示します。
Note 1: PORT レジスタを読み出すと、対応するANSx ビットがセットされたピンは全てクリア (low レベル ) として読み出されます。ただし、デジタル入力として設定されたピン (ANSx ビットをクリアしてTRISx ビットをセットしたピン ) のアナログ変換は正確に実行されます。
2: 対応する ANSx ビットをクリアしたピンにアナログ電圧を印加すると、デジタル入力バッファにデバイスの仕様上限を超える電流が流れる事があります。
Note: FRC を使用する場合を除き、システムクロック周波数を変更するとADCクロック周波数も変化するため、ADC の結果に悪影響を与える可能性があります。
DS41350D_JP - p. 212 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
17.1.6 割り込み
ADC モジュールは、A/D 変換完了時に割り込みを生成できます。PIR1 レジスタの ADIF ビットが ADC 割り込みフラグビットで、 PIE1 レジスタの ADIE ビットがADC 割り込みイネーブルビットです。ADIF ビットはソフトウェアでクリアする必要があります。
この割り込みは、デバイスが動作中でもスリープ時でも生成できます。デバイスがスリープ時には、割り込みによってデバイスがウェイクアップします。スリープからウェイクアップすると、SLEEP命令の次の命令が必ず実行されます。スリープからウェイクアップ後にインラインコード実行を再開させたい場合、グローバル割り込みを無効にしておく必要があります。グローバル割り込みを有効にしている場合、実行は割り込みサービスルーチンに切り換わります。詳細は、17.1.6「割り込み」を参照してください。
表 17-1: ADC クロック周期 (TAD) とデバイスの動作周波数の関係
17.1.7 変換結果のフォーマット
10 ビット A/D 変換の結果は、右詰めまたは左詰めのいずれかのフォーマットで出力できます。出力フォーマットは ADCON2 レジスタの ADFM ビットで設定します。
図 17-2 に、2 つの出力フォーマットを示します。
図 17-2: 10 ビット A/D 変換結果のフォーマット
Note: ADC 割り込みの状態にかかわらず、変換完了時には必ずADIFビットがセットされます。
ADC クロック周期 (TAD) デバイスの動作周波数 (FOSC)
ADC クロック源 ADCS<2:0> 48 MHz 16 MHz 4 MHz 1 MHz
FOSC/2 000 41.67 ns(2) 125 ns(2) 500 ns(2) 2.0 s
FOSC/4 100 83.33 ns(2) 250 ns(2) 1.0 s 4.0 s
FOSC/8 001 167 ns(2) 500 ns(2) 2.0 s 8.0 s(3)
FOSC/16 101 333 ns(2) 1.0 s 4.0 s 16.0 s(3)
FOSC/32 010 667 ns(2) 2.0 s 8.0 s(3) 32.0 s(3)
FOSC/64 110 1.33 s 4.0 s 16.0 s(3) 64.0 s(3)
FRC x11 1-4 s(1,4) 1-4 s(1,4) 1-4 s(1,4) 1-4 s(1,4)
凡例 : 網掛けの値は推奨レンジ外
Note 1: FRC ソースの TAD 時間は 1.7 s (typ.) です。
2: これらの値は TAD 時間の 小要件を満たしていません。
3: より高速の変換を実行するには、他のクロック源の選択を推奨します。
4: デバイスの周波数が 1 MHz より高い場合、スリープ時に変換を実行する場合のみ FRC クロック源を使用してください。
ADRESH ADRESL
(ADFM = 0) MSB LSB
bit 7 bit 0 bit 7 bit 0
10 ビット A/D 変換結果 未実装ビット : 「0」として読み出し
(ADFM = 1) MSB LSB
bit 7 bit 0 bit 7 bit 0
未実装ビット :「0」として読み出し 10 ビット A/D 変換結果
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 213
PIC18F/LF1XK50
17.2 ADC の動作
17.2.1 変換の開始
ADC モジュールを有効にするには、ADCON0 レジスタの ADON ビットを「1」にセットする必要があります。ADCON0 レジスタの GO/DONE ビットを「1」にセットすると、ADCON2 レジスタの ACQT ビットの設定に応じて、A/D 変換がただちに開始するか、アクイジション時間が経過してから A/D 変換が開始します。
図 17-3 に、GO ビットをセットして ACQT<2:0> ビットをクリアした後の ADC の動作を示します。SLEEPモードへの移行を可能にするため変換は次の命令の後に開始します。
図 17-4 には、GO ビットをセットして ACQT<2:0>ビットを「010」( 変換開始前のアクイジション時間 =4 TAD) に設定した場合の ADC の動作を示します。
図 17-3: A/D 変換の TAD サイクル (ACQT<2:0> = 000、TACQ = 0)
図 17-4: A/D 変換の TAD サイクル (ACQT<2:0> = 010、TACQ = 4 TAD)
Note: ADC を ON にする命令と同じ命令で GO/DONEビットをセットしないでください。詳細は、17.2.9「A/D 変換の手順」を参照してください。
TAD1 TAD2 TAD3 TAD4 TAD5 TAD6 TAD7 TAD8 TAD11
Set GO bit
Holding capacitor is disconnected from analog input (typically 100 ns)
TAD9 TAD10TCY - TAD
ADRESH:ADRESL is loaded, GO bit is cleared, ADIF bit is set, holding capacitor is connected to analog input.
Conversion starts
b0b9 b6 b5 b4 b3 b2 b1b8 b7
On the following cycle:
2 TAD
Discharge
1 2 3 4 5 6 7 8 11
Set GO bit
(Holding capacitor is disconnected from analog input)
9 10
Conversion starts
1 2 3 4
(Holding capacitor continuesacquiring input)
TACQT Cycles TAD Cycles
AutomaticAcquisition
Time
b0b9 b6 b5 b4 b3 b2 b1b8 b7
ADRESH:ADRESL is loaded, GO bit is cleared, ADIF bit is set, holding capacitor is connected to analog input.
On the following cycle:
2 TAD
Discharge
DS41350D_JP - p. 214 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
17.2.2 変換の完了
変換が完了すると、ADC モジュールは以下の動作を実行します。
• GO/DONE ビットをクリアする
• ADIF フラグビットをセットする
• ADRESH:ADRESL レジスタに新しい変換結果を書き込む
17.2.3 放電
放電フェイズは、コンデンサアレイの値を初期化するために使用します。コンデンサアレイは、毎サンプル後に放電されます。この回路は直前の計測値に基づいて充電 / 放電を行うのではなく常にコンデンサアレイを充電するため、この機能はユニティゲイン アンプの適化に役立ちます。
17.2.4 変換の中止
変換を完了前に中止するには、GO/DONE ビットをソフトウェアでクリアします。ADRESH:ADRESL レジスタには、途中まで完了した A/D 変換サンプルが書き込まれます。変換が完了していないビットには、前回の変換結果のビットがそのまま残ります。
17.2.5 次の変換開始までの遅延
A/D 変換が完了または中止してから次のアクイジションを開始するまでには 2 TAD の待ち時間が必要です。この待ち時間の後、現在選択しているチャンネルがサンプルホールド コンデンサに再び接続され、次のアクイジションが開始します。
17.2.6 電力管理モード時の ADC の動作
自動アクイジション時間と A/D 変換クロックを選択する際は、電力管理モードでのクロック源と周波数も考慮に入れる必要があります。
デバイスが電力管理モードの時も ADC を動作させたい場合、そのモードで使用するクロック源に合わせてADCON2 レジスタの ACQT<2:0> および ADCS<2:0>ビットを更新する必要があります。電力管理モードになると、A/D アクイジションまたは変換を開始できます。変換が開始したら、処理が完了するまでデバイスは同じクロック源で動作を継続する必要があります。
必要なら、変換中にデバイスを対応するアイドルモードに移行する事もできます。デバイスのクロック周波数が 1 MHz 未満の場合、ADC のクロック源に FRC を選択してください。
17.2.7 スリープ時の ADC の動作
ADC モジュールはスリープ時にも動作できます。そのためには、ADC クロック源を FRC に設定する必要があります。クロック源に FRC を選択した場合、ADC が変換を開始するまでの待ち時間は通常より 1 命令サイクル分だけ長くなります。これは SLEEP命令の実行を可能にし、変換時のシステムノイズが軽減されます。ADC 割り込みを有効にしている場合、A/D 変換が完了するとデバイスはスリープモードからウェイクアップします。ADC 割り込みを無効にしている場合、変換が完了すると ADON ビットがセットされたまま ADC モジュールは OFF になります。
ADCクロック源がFRC以外の場合、SLEEP命令によって現在の変換が中断され、ADON ビットがセットされたまま ADC モジュールは OFF になります。
17.2.8 特殊イベントトリガ
CCP1 の特殊イベントトリガを使用すると、ソフトウェアを使用しなくても定期的な ADC 計測を実行できます。このトリガが発生すると、GO/DONE ビットがハードウェアによってセットされ、Timer1 またはTimer3 カウンタが 0 にリセットされます。
特殊イベントトリガを使用しても、A/D 変換のタイミングが保証される訳ではありません。ADC のタイミング条件を満たしているかどうかはユーザの責任において確認してください。
詳細は、14.3.4「特殊イベントトリガ」を参照してください。
Note: デバイスをリセットすると、全てのレジスタがリセット状態となります。従って、ADC モジュールは OFF になり、未実行の変換は全て中止されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 215
PIC18F/LF1XK50
17.2.9 A/D 変換の手順
以下は ADC を使って A/D 変換を行う手順の例です。
1. ポートを設定する :
• ピン出力ドライバを無効にする (TRISレジスタ参照 )
• ピンをアナログに設定する
2. ADC モジュールを設定する :
• ADC 変換クロックを選択する
• 電圧リファレンスを設定する
• ADC 入力チャンネルを選択する
• 変換結果のフォーマットを選択する
• アクイジション遅延を選択する
• ADC モジュールを ON にする
3. ADC 割り込みを設定する ( オプション ):
• ADC 割り込みフラグをクリアする
• ADC 割り込みを有効にする
• 周辺割り込みを有効にする
• グローバル割り込みを有効にする (1)
4. 必要なアクイジション時間が経過するまで待つ(2)
5. GO/DONE ビットをセットして変換を開始する
6. 以下のいずれかの方法で、ADC変換の完了を待つ:
• GO/DONE ビットをポーリングする
• ADC 割り込みを待つ ( 割り込みが許可されている場合 )
7. A/D 変換結果を読み出す
8. ADC割り込みフラグをクリアする (割り込みが有効の場合は必須 )
例 17-1: A/D 変換
Note 1: スリープからウェイクアップ後にインラインコード実行を再開させたい場合、グローバル割り込みを禁止しておく必要があります。
2: ACQT ビットで遅延を 0 に設定している場合、ソフトウェア遅延が必要です。17.3
「A/D アクイジションの要件」を参照してください。
;This code block configures the ADC;for polling, Vdd and Vss as reference, Frc clock and AN4 input.;;Conversion start & polling for completion ; are included.;MOVLW B’10101111’ ;right justify, Frc,MOVWF ADCON2 ; & 12 TAD ACQ timeMOVLW B’00000000’ ;ADC ref = Vdd,VssMOVWF ADCON1 ;BSF TRISC,0 ;Set RC0 to inputBSF ANSEL,4 ;Set RC0 to analogMOVLW B’00010001’ ;AN4, ADC onMOVWF ADCON0 ;BSF ADCON0,GO ;Start conversionADCPoll:BTFSC ADCON0,GO ;Is conversion done?BRA ADCPoll ;No, test again; Result is complete - store 2 MSbits in; RESULTHI and 8 LSbits in RESULTLOMOVFF ADRESH,RESULTHIMOVFF ADRESL,RESULTLO
DS41350D_JP - p. 216 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
17.2.10 ADC 関連レジスタの定義
ADC の動作設定には以下のレジスタを使用します。
Note: アナログピンの制御は ANSEL およびANSELH レジスタで行います。ANSEL および ANSELH レジスタの詳細は、レジスタ 9-14 とレジスタ 9-15 を参照してください。
レジスタ 17-1: ADCON0: A/D 制御レジスタ 0
U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— — CHS3 CHS2 CHS1 CHS0 GO/DONE ADON
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-6 未実装 : 「0」として読み出し
bit 5-2 CHS<3:0>: アナログチャンネル選択ビット
0000 = 予約0001 = 予約0010 = 予約0011 = AN30100 = AN40101 = AN50110 = AN60111 = AN71000 = AN81001 = AN91010 = AN101011 = AN111100 = 予約1101 = 予約1110 = DAC1111 = FVR
bit 1 GO/DONE: A/D 変換ステータスビット
1 = A/D 変換サイクルが進行中。このビットをセットすると A/D 変換サイクルが開始する。 このビットは、A/D 変換が完了するとハードウェアによって自動的にクリアされる。0 = A/D 変換サイクルが完了 ( 進行中でない )
bit 0 ADON: ADC イネーブルビット
1 = ADC を有効にする0 = ADC を無効にし、消費電流をゼロにする
Note 1: 未実装の入力チャンネルはフローティング状態であるため、予約チャンネルを選択すると予期しない結果となります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 217
PIC18F/LF1XK50
レジスタ 17-2: ADCON1: A/D 制御レジスタ 1
U-0 U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0
— — — — PVCFG1 PVCFG0 NVCFG1 NVCFG0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-4 実装なし : 「0」として読み出し
bit 3-2 PVCFG<1:0>: 正電圧リファレンス選択ビット
00 = 正電圧リファレンスを VDD から内部供給する01 = 正電圧リファレンスを VREF+ ピンから外部供給する10 = 正電圧リファレンスを FVR から内部供給する11 = 予約
bit 1-0 NVCFG<1:0>: 負電圧リファレンス選択ビット
00 = 負電圧リファレンスを VSS から内部供給する01 = 負電圧リファレンスを VREF- ピンから外部供給する10 = 予約11 = 予約
DS41350D_JP - p. 218 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 17-3: ADCON2: A/D 制御レジスタ 2
R/W-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
ADFM — ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 ADFM: A/D 変換結果フォーマット選択ビット
1 = 右詰め0 = 左詰め
bit 6 実装なし : 「0」として読み出し
bit 5-3 ACQT<2:0>: A/D アクイジション時間選択ビット : アクイジション時間とは、GO/DONE ビットがセットされてから変換が開始するまでの間、A/D サンプルホールド コンデンサが A/D チャンネルに接続されている時間
000 = 0(1)
001 = 2 TAD
010 = 4 TAD
011 = 6 TAD
100 = 8 TAD
101 = 12 TAD
110 = 16 TAD
111 = 20 TAD
bit 2-0 ADCS<2:0>: A/D 変換クロック選択ビット
000 = FOSC/2001 = FOSC/8010 = FOSC/32011 = FRC(1) ( 専用の内部オシレータのクロック、公称 600 kHz)100 = FOSC/4101 = FOSC/16110 = FOSC/64111 = FRC(1) ( 専用の内部オシレータのクロック、公称 600 kHz)
Note 1: ADC のクロック源に FRC を選択した場合、GO/DONE ビットをセットしてから変換を開始するまでの遅延が 1 命令サイクル分だけ長くなり、SLEEP命令の実行を可能にします。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 219
PIC18F/LF1XK50
レジスタ 17-4: ADRESH: ADC 変換結果レジスタ HIGH (ADRESH) ADFM = 0
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
ADRES9 ADRES8 ADRES7 ADRES6 ADRES5 ADRES4 ADRES3 ADRES2
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-0 ADRES<9:2>: A/D 変換結果レジスタビット
10 ビット変換結果の上位 8 ビット
レジスタ 17-5: ADRESL: ADC 変換結果レジスタ LOW (ADRESL) ADFM = 0
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
ADRES1 ADRES0 — — — — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-6 ADRES<1:0>: A/D 変換結果レジスタビット
10 ビット変換結果の下位 2 ビット
bit 5-0 予約 : 使用不可
レジスタ 17-6: ADRESH: ADC 変換結果レジスタ HIGH (ADRESH) ADFM = 1
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
— — — — — — ADRES9 ADRES8
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-2 予約 : 使用不可
bit 1-0 ADRES<9:8>: A/D 変換結果レジスタビット
10 ビット変換結果の上位 2 ビット
レジスタ 17-7: ADRESL: ADC 変換結果レジスタ LOW (ADRESL) ADFM = 1
R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
ADRES7 ADRES6 ADRES5 ADRES4 ADRES3 ADRES2 ADRES1 ADRES0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-0 ADRES<7:0>: A/D 変換結果レジスタビット
10 ビット変換結果の下位 8 ビット
DS41350D_JP - p. 220 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
17.3 A/D アクイジションの要件
ADC の仕様上の精度を実現するには、サンプルホールド コンデンサ(CHOLD)を入力チャンネルの電圧レベルまで完全に充電する必要があります。図 17-5 に、アナログ入力モデルを示します。ソース インピーダンス(RS)と内部サンプリング スイッチ (RSS)インピーダンスは、コンデンサ CHOLD の充電時間に直接影響します。サンプリング スイッチ (RSS) インピーダンスはデバイス電圧 (VDD) により変化します ( 図 17-5 参照 )。アナログソースの 大推奨インピーダンスは 10 kです。ソース インピーダンスが低下すると、アクイジション時間が短くなります。アナログ入力チャンネル
を選択 ( または変更 ) したら、変換開始前に A/D アクイジションを実行する必要があります。 小アクイジション時間は、式 17-1 で求める事ができます。この式では、1/2 LSb 誤差の適用を前提としています (ADCは 1024 ステップ )。1/2 LSb の誤差は、仕様上の分解能を ADC で実現できる 大許容誤差です。
式 17-1: アクイジション時間の例
TACQ Amplifier Settling Time Hold Capacitor Charging Time Temperature Coefficient+ +=
TAMP TC TCOFF+ +=
13.5pF 1k 700 10k+ + – ln(0.0004885)=
1.20= µs
;[1] VCHOLD charged to within 1/2 lsb
;[2] VCHOLD charge response to VAPPLIED
;combining [1] and [2]
The value for TC can be approximated with the following equations:
Solving for TC:
Therefore:
Assumptions: Temperature = 50C and external impedance of 10k 3.0V VDD
= 5µs + TC + [(Temperature - 25C)(0.05µs/C)]
TACQ = 5µs + 1.20µs + [(50C - 25C)(0.05µs/C)]
= 7.45µs
VAPPLIED 1 e
Tc–RC---------
–
VAPPLIED 1 12047------------–
=
VAPPLIED 1 12047------------–
VCHOLD=
VAPPLIED 1 e
TC–RC----------
–
VCHOLD=
TC CHOLD RIC RSS RS+ + ln(1/2047)–=
Note 1: 基準電圧 (VREF) は自己相殺されるため、上式には影響しません。
2: サンプルホールド コンデンサ (CHOLD) は変換完了のたびに放電されます。
3: アナログソースの 大推奨インピーダンスは10 kです。これは、ピンのリーク電流仕様を満たすために 必要です。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 221
PIC18F/LF1XK50
図 17-5: アナログ入力モデル
図 17-6: ADC の伝達関数
CPINVA
Rs ANx
5 pF
VD
D
VT = 0.6V
VT = 0.6V I LEAKAGE(1)
RIC 1k
SamplingSwitch
SS Rss
CHOLD = 13.5 pF
VSS/VREF-
2.5V
Rss (k)
2.0V1.5V
.1 1 10
VDD
DischargeSwitch
3.0V3.5V
100
Note 1: 27.0「電気的仕様」参照
凡例 : CPIN = 入力静電容量
VT = しきい値電圧
ILEAKAGE = 各種接合によるピン部位のリーク電流
RIC = 配線抵抗
SS = サンプリング スイッチ
CHOLD = サンプル / ホールド静電容量
3FFh
3FEh
AD
C O
utpu
t C
ode
3FDh
3FCh
004h
003h
002h
001h
000h
Full-Scale
3FBh
1/2 LSB ideal
VSS/VREF- Zero-ScaleTransition
VDD/VREF+
Transition
1/2 LSB ideal
Full-Scale Range
Analog Input Voltage
DS41350D_JP - p. 222 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 17-2: ADC に関連するレジスタ
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の記載ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR1 — ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF 290
PIE1 — ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE 290
IPR1 — ADIP RCIP TXIP SSPIP CCP1IP TMR2IP TMR1IP 290
ADRESH A/D 変換結果レジスタ、上位バイト 289
ADRESL A/D 変換結果レジスタ、下位バイト 289
ADCON0 — — CHS3 CHS2 CHS1 CHS0 GO/DONE ADON 289
ADCON1 — — — — PVCFG1 PVCFG0 NVCFG1 NVCFG0 289
ADCON2 ADFM — ACQT2 ACQT1 ACQT0 ADCS2 ADCS1 ADCS0 289
ANSEL ANS7 ANS6 ANS5 ANS4 ANS3 — — — 290
ANSELH — — — — ANS11 ANS10 ANS9 ANS8 290
TRISA – – TRISA5 TRISA4 – – – – 290
TRISB TRISB7 TRISB6 TRISB5 TRISB4 – – – – 290
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
凡例 : — = 未実装ビット、「0」として読み出し。網掛けのビットは A/D 変換には使用しません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 223
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 224 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
18.0 コンパレータ モジュール
コンパレータは、2 つのアナログ電圧を比較してその相対的な大きさをデジタル値で表現する事によって、2 つのアナログ回路を 1 つのデジタル回路に接続する役割を果たします。コンパレータが提供するアナログ機能はプログラム実行から独立しているため、ミクストシグナル ( アナログ信号とデジタル信号が混在する環境 ) において、きわめて有用な構成要素です。アナログ コンパレータ モジュールには、以下の機能があります。
• 独立したコンパレータ制御
• 入力選択をプログラム可能
• コンパレータ出力を内部 / 外部で利用可能
• 出力極性をプログラム可能
• 入力状態変化時割り込み
• スリープからのウェイクアップ
• 速度 / 電力をプログラミングにより 適化可能
• PWM シャットダウン
• プログラマブルおよび固定の電圧リファレンス
18.1 コンパレータの概要
図 18-1 に、シングル コンパレータの構成およびアナログ入力レベルとデジタル出力の関係を示します。VIN+ のアナログ電圧が VIN- のアナログ電圧よりも低い場合、コンパレータ出力はデジタル low レベルです。VIN+ のアナログ電圧が VIN- のアナログ電圧よりも高い場合、コンパレータ出力はデジタルhighレベルです。
図 18-1: シングル コンパレータ
–
+VIN+
VIN-出力
出力
VIN+VIN-
Note: コンパレータ出力の黒い部分は、入力オフセットと応答時間によって変動する範囲を表しています。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 225
PIC18F/LF1XK50
図 18-2: コンパレータ C1 の概略ブロック図
Note 1: C1ON = 0の場合、C1 コンパレータは XOR ゲートに「0」を出力します。
2: Q1 と Q3 は、4 相システムクロック (FOSC) の位相です。
3: スリープモードでは Q1 は high に保持されます。
4: 正方向のパルスがビットの立ち下がりおよび立ち上がりエッジの両方で発生します。
MUX
C1
C1POL
C1OUT To PWM Logic
0
1
2
3
C1ON(1)
C1CH<1:0>2
0
1
C1R
MUX
RD_CM1CON0
Set C1IF
To
C1VIN-
C1VIN+
AGND
C12IN1-
C12IN2-
C12IN3-
C1IN+
D Q
ENQ1
Data Bus
D Q
ENCL
Q3*RD_CM1CON0
NReset
+
-
0
1MUX
VREF
C1RSEL
FVR
C1SP
C1VREF C1OE
C12OUT
0
1
C1SYNC
From TMR1L[0](4)
D Q
SYNCC1OUT
C2OE
DS41350D_JP - p. 226 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 18-3: コンパレータ C2 の概略ブロック図
MUXC2
C2POL
C2OUT To PWM Logic
0
1
2
3
C2ON(1)
C2CH<1:0>2 D Q
EN
D Q
EN
CL
RD_CM2CON0
Q3*RD_CM2CON0
Q1
Set C2IF
To
NRESETC2VIN-
C2VIN+
C12OUT pin
AGND
C12IN1-
C12IN2-
C12IN3-
Data Bus
Note 1: C2ON = 0の場合、C2 コンパレータは XOR ゲートに「0」を出力します。
2: Q1 と Q3 は、4 相システムクロック (FOSC) の位相です。
3: スリープモードでは Q1 は high に保持されます。
4: 正方向のパルスがビットの立ち下がりおよび立ち上がりエッジの両方で発生します。
0
1
C2R
MUXC2IN+
0
1MUX
VREF
C2RSEL
FVR
C2SP
C2VREF
0
1
C2SYNCC20E
D Q
SYNCC2OUTFrom TMR1L[0](4)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 227
PIC18F/LF1XK50
18.2 コンパレータの制御
コンパレータ C1 は CM1CON0 レジスタ、コンパレータ C2 は CM2CON0 レジスタを使用してそれぞれ個別に構成、制御できます。コンパレータC2にはCM2CON1制御レジスタもあり、これを使用して Timer1 との連動を制御したり、2 つのコンパレータ出力を同時に読み出したりできます。
CM1CON0 および CM2CON0 レジスタ (18-1、18-2 参照 ) には、以下の制御ビットとステータスビットがあります。
• 有効化
• 入力選択
• リファレンス選択
• 出力選択
• 出力極性
• 速度選択
18.2.1 コンパレータの有効化
CMxCON0 レジスタの CxON ビットをセットすると、コンパレータの動作が有効になります。CxON ビットをクリアするとコンパレータが無効になり、消費電流は 小になります。
18.2.2 コンパレータ入力の選択
コンパレータの反転入力は、CMxCON0 レジスタのCxCH<1:0> ビットを使用して 4 つのアナログ入力ピンから選択します。
18.2.3 コンパレータのリファレンスの選択
コンパレータの非反転入力に内部電圧リファレンスとアナログ入力ピンのどちらを接続するかをCMxCON0レジスタの CxR ビットで設定します。内部電圧リファレンス モジュールの詳細は、21.0「電圧リファレンス」を参照してください。
18.2.4 コンパレータ出力の選択
コンパレータの出力は、CMxCON0レジスタのCxOUTビットまたは CM2CON1 レジスタの MCxOUT ビットを読み出す事によって観察する事ができます。出力を外部に接続して使用するには、以下の条件を満たす必要があります。
• CMxCON0 レジスタの CxOE ビットがセットされている
• 対応する TRIS ビットがクリアされている
• CMxCON0 レジスタの CxON ビットがセットされている
コンパレータ出力ピン (C12OUT) は 2 つのコンパレータで共用します。優先順位は、C1OE および C2OEビットの状態で決定します。
表 18-1: コンパレータ出力の優先順位
18.2.5 コンパレータ出力の極性
コンパレータの出力を反転する事は、コンパレータの入力を入れ換える事と機能的に等価です。コンパレータ出力の極性を反転するには、CMxCON0 レジスタのCxPOL ビットをセットします。CxPOL ビットをクリアすると、非反転の出力になります。
表 18-2 に、入力条件と極性設定の組み合わせに対する出力状態を示します。
18.2.6 コンパレータ速度の選択
コンパレータの動作速度と消費電力のバランスは、プログラム実行中に CxSP 制御ビットで 適化できます。このビットの既定値「1」では、通常速度のモードが選択されます。CxSP ビットを「0」にクリアすると、コンパレータの伝搬速度を引き下げてデバイスの消費電力を抑える事ができます。
18.3 コンパレータの応答時間
コンパレータの入力ソースまたは基準電圧を切り換えた後、コンパレータ出力が不定となる期間があります。この期間を応答時間と呼びます。コンパレータの応答時間は、電圧リファレンスのセトリング タイムとは別のものです。このため、コンパレータの入力が変化した時の総応答時間を求めるには、これら 2 つの時間を両方とも考慮する必要があります。詳細は、27.0「電気的仕様」のコンパレータおよび電圧リファレンスの仕様を参照してください。
Note: CxIN+ ピンと C12INx- ピンをアナログ入力として使用するには、ANSEL レジスタの該当するビットをセットすると共に、対応するTRISビットもセットして出力ドライバを無効にする必要があります。
C1OE C2OE C12OUT
0 0 I/O
0 1 C2OUT
1 0 C1OUT
1 1 C2OUT
Note 1: CxOE ビットは PORT データラッチよりも優先されます。CxON をセットしただけではポートの設定は影響を受けません。
2: コンパレータの内部出力は各命令サイクルでラッチされます。特に指定のない限り、外部出力はラッチされません。
表 18-2: コンパレータの入力条件に対する出力状態
入力条件 CxPOL CxOUT
CxVIN- > CxVIN+ 0 0
CxVIN- < CxVIN+ 0 1
CxVIN- > CxVIN+ 1 1
CxVIN- < CxVIN+ 1 0
DS41350D_JP - p. 228 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
18.4 コンパレータ割り込みの動作
コンパレータの出力値が変化した時はいつでもコンパレータ割り込みフラグをセットできます。出力値の変化は、2 つのラッチと 1 つの XOR ゲートで構成された不一致回路で検出します ( 図 18-2、図 18-3 参照 )。CMxCON0 レジスタを読み出した時に、片方のラッチがコンパレータ出力レベルに更新されます。このラッチの値は、次に CMxCON0 レジスタを読み出すか、リセットが発生するまで保持されます。不一致回路のもう一方のラッチは、Q1 システムクロックごとに更新します。コンパレータ出力の変化が、Q1 クロックサイクルで動作するもう一方のラッチを経由して出力されると、不一致条件が発生します。この時点で不一致回路の 2 つのラッチの出力レベルが反対になり、これが XOR ゲートで検出されて割り込み回路に送られます。不一致条件は、CMxCON0 レジスタを読み出すか、コンパレータ出力が元の状態に戻るまで続きます。
コンパレータ割り込みは、不一致回路のレベルではなくエッジによってセットされます。つまり、CMxCON0レジスタへの読み出し / 書き込みを実行して不一致レジスタをクリアしなくても割り込みフラグをリセットできます。不一致レジスタがクリアされると、コンパレータが元の状態に戻った時だけ割り込みが発生し、それ以外では割り込みは発生しません。
実際にどのような変化が起こったかを判断するには、CMxCON0レジスタまたはCM2CON1レジスタからコンパレータ出力の状態に関する情報をソフトウェアで読み出して保持しておく必要があります。詳細は、図 18-4 と図 18-5 を参照してください。
PIR2 レジスタの CxIF ビットがコンパレータ割り込みフラグです。このビットは、ソフトウェアで「0」にクリアしてリセットする必要があります。このレジスタに「1」を書き込んで割り込みを発生させる事もできます。
ミッドレンジ互換モードでコンパレータ割り込みを有効にするにはPIE2レジスタのCxIEビットと INTCONレジスタの PEIE および GIE ビットをいずれもセットする必要があります。これらのビットのいずれかがクリアの場合、割り込み条件の発生時に PIR2 レジスタの CxIF ビットはセットされますが、割り込みは有効になりません。
18.4.1 不一致ラッチのプリセット
コンパレータ不一致ラッチは、コンパレータを有効にする前に任意の状態にプリセットしておく事ができます。コンパレータが OFF の時には、CxPOL ビットでCxOUT のレベルを制御します。CxON ビットをクリアした状態で、CxOUT のレベルが非割り込みレベルとなるようにCxPOLビットを設定します。次に、CxONビットをセットするのと同じ命令で任意の CxPOL レベルに設定します。レジスタへの書き込みは全てRead-Modify-Write 形式で実行されるため、不一致回路のラッチは命令の Read サイクルでクリアされ、CxONおよびCxPOLビットは 後のWriteサイクルで実際に設定されます。
図 18-4: コンパレータ割り込みのタイミング(CMxCON0 を読み出さない場合 )
図 18-5: コンパレータ割り込みのタイミング(CMxCON0 を読み出す場合 )
Note 1: CMxCON0 レジスタに対して書き込みを行っても、不一致条件は解消されます。これは、書き込みサイクルの先頭では必ず読み出し動作が実行されるためです。
2: コンパレータ割り込みは、CxOE の状態に関係なく正しく動作します。
Note 1: 読み出しを実行中 (Q2 サイクルの開始時点 ) に CMxCON0 レジスタ (CxOUT) が変化した場合、PIR2 レジスタの CxIF 割り込みフラグがセットされない事があります。
2: どちらかのコンパレータを 初に有効にした際、コンパレータ モジュールのバイアス回路が安定するまでは正しいコンパレータ出力が得られない事があります。バイアス回路が安定するまで約 1 s 待ち、不一致条件と割り込みフラグをクリアしてからコンパレータ割り込みを有効にしてください。
Q1
Q3
CxIN+
CxOUT
Set CxIF (edge)
CxIF
TRT
Reset by Software
Q1
Q3
CxIN+
CxOUT
Set CxIF (edge)
CxIF
TRT
Reset by SoftwareCleared by CMxCON0 Read
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 229
PIC18F/LF1XK50
18.5 スリープ時の動作
スリープモードになる前にコンパレータを有効にした場合、スリープ時もコンパレータが動作します。コンパレータ モジュールのみの消費電流は、27.0「電気的仕様」に記載してあります。コンパレータを使用してデバイスをウェイクアップしない場合、コンパレータをOFFにするとスリープモードの消費電力を 小にできます。CMxCON0 レジスタの CxON ビットをクリアすると、コンパレータを個別に OFF にできます。
コンパレータの出力変化によりデバイスをスリープからウェイクアップできます。コンパレータを使用してデバイスをスリープからウェイクアップするには、PIE2 レジスタの CxIE ビットと INTCON レジスタのPEIE ビットをセットする必要があります。スリープからウェイクアップすると、デバイスは必ず SLEEP命令の次の命令を実行します。INTCON レジスタの GIEビットもセットしている場合、デバイスは次に割り込みサービスルーチンを実行します。
18.6 リセットの影響
デバイスをリセットすると、CMxCON0 およびCM2CON1 レジスタがリセット状態に戻ります。これにより、両方のコンパレータと電圧リファレンスはOFF になります。
DS41350D_JP - p. 230 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 18-1: CM1CON0: コンパレータ 1 制御レジスタ 0
R/W-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
C1ON C1OUT C1OE C1POL C1SP C1R C1CH1 C1CH0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 C1ON: コンパレータ C1 イネーブルビット
1 = コンパレータ C1 を有効にする0 = コンパレータ C1 を無効にする
bit 6 C1OUT: コンパレータ C1 出力ビット
C1POL = 1 ( 極性反転 ) の場合 :C1VIN+ > C1VIN- なら C1OUT = 0C1VIN+ < C1VIN- なら C1OUT = 1C1POL = 0 ( 極性非反転 ) の場合 :C1VIN+ > C1VIN- なら C1OUT = 1C1VIN+ < C1VIN- なら C1OUT = 0
bit 5 C1OE: コンパレータ C1 出力イネーブルビット
C2OE = 0 (C2 出力が無効 ) の場合
0 = C1OUT は内部のみ1 = C1OUT を C12OUT ピンに出力 (1) C2OE = 1 (C2 出力が有効 ) の場合
0 = C1OUT は内部のみ1 = C2OUT を C12OUT ピンに出力 (1)
bit 4 C1POL: コンパレータ C1 出力極性選択ビット
1 = C1OUT の論理を反転する0 = C1OUT の論理を反転しない
bit 3 C1SP: コンパレータ C1 速度 / 電力選択ビット
1 = C1 は通常電力の高速モードで動作0 = C1 は低消費電力の低速モードで動作
bit 2 C1R: コンパレータ C1 リファレンス選択ビット ( 非反転入力 )
1 = C1VIN+ に C1VREF 出力を接続0 = C1VIN+ に C1IN+ ピンを接続
bit 1-0 C1CH<1:0>: コンパレータ C1 チャンネル選択ビット
00 = C1VIN- に AGND を接続01 = C1VIN- に C1 の C12IN1- ピンを接続10 = C1VIN- に C1 の C12IN2- ピンを接続11 = C1VIN- に C1 の C12IN3- ピンを接続
Note 1: コンパレータ出力を有効にするには、C1OE = 1、C1ON = 1、対応するポートの TRIS ビット = 0の3 つの条件を全て満たす必要があります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 231
PIC18F/LF1XK50
レジスタ 18-2: CM2CON0: コンパレータ 2 制御レジスタ 0
R/W-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
C2ON C2OUT C2OE C2POL C2SP C2R C2CH1 C2CH0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 C2ON: コンパレータ C2 イネーブルビット
1 = コンパレータ C2 を有効にする0 = コンパレータ C2 を無効にする
bit 6 C2OUT: コンパレータ C2 出力ビット
C2POL = 1 ( 極性反転 ) の場合 :C2VIN+ > C2VIN- なら C2OUT = 0C2VIN+ < C2VIN- なら C2OUT = 1C2POL = 0 ( 極性非反転 ) の場合 :C2VIN+ > C2VIN- なら C2OUT = 1C2VIN+ < C2VIN- なら C2OUT = 0
bit 5 C2OE: コンパレータ C2 出力イネーブルビット
1 = C2OUT を C12OUT ピンに出力 (1)
0 = C2OUT は内部のみ
bit 4 C2POL: コンパレータ C2 出力極性選択ビット
1 = C2OUT の論理を反転する0 = C2OUT の論理を反転しない
bit 3 C2SP: コンパレータ C2 速度 / 消費電力選択ビット
1 = C2 は通常消費電力の高速モードで動作0 = C2 は低消費電力の低速モードで動作
bit 2 C2R: コンパレータ C2 リファレンス選択ビット ( 非反転入力 )
1 = C2VIN+ に C2VREF を接続0 = C2VIN+ に C2IN+ ピンを接続
bit 1-0 C2CH<1:0>: コンパレータ C2 チャンネル選択ビット
00 = C2VIN- に AGND を接続01 = C2VIN- に C2 の C12IN1- ピンを接続10 = C2VIN- に C2 の C12IN2- ピンを接続11 = C2VIN- に C2 の C12IN3- ピンを接続
Note 1: コンパレータ出力を有効にするには、C2OE = 1、C2ON = 1、対応するポートの TRIS ビット = 0の3 つの条件を全て満たす必要があります。
DS41350D_JP - p. 232 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
18.7 アナログ入力接続に関する注意事項
図 18-6 に、アナログ入力回路の概略図を示します。アナログ入力ピンはデジタル入力と同じ接続を共用しているため、VDD と VSS には逆バイアスの ESD 保護ダイオードが接続されています。従って、アナログ入力は VSS と VDD の間の値である事が必要です。入力電圧がこのレンジから± 0.6 V を越えて逸脱すると、片方のダイオードに順バイアスがかかり、ラッチアップが発生する事があります。
アナログソースの 大ソース インピーダンスは 10 kを推奨します。また、アナログ入力ピンにコンデンサやツェナー ダイオード等の外付け部品を接続する場合、精度の低下を 小限に抑えるためになるべくリーク電流の小さいものを使用するようにしてください。
図 18-6: アナログ入力モデル
Note 1: PORT レジスタを読み出す場合、アナログ入力として設定したピンは全て「0」として読み出されます。デジタル入力として設定したピンは、入力仕様に基づいてアナログ入力に変換されます。
2: デジタル入力として指定したピンにアナログ電圧を印加すると、入力バッファに仕様を超える電流が流れる場合があります。
VA
Rs < 10K
CPIN5 pF
VDD
VT 0.6V
VT 0.6V
RIC
ILEAKAGE(1)
Vss
AIN
凡例 : CPIN = 入力静電容量ILEAKAGE = 各種接合によるピン部位のリーク電流RIC = 配線抵抗RS = ソース インピーダンスVA = アナログ電圧VT = しきい値電圧
Note 1: 27.0「電気的仕様」参照
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 233
PIC18F/LF1XK50
18.8 コンパレータのその他の機能
コンパレータには、上記以外にも 4 つの機能があります。
• 2 つのコンパレータ出力の同時読み出し
• 内部リファレンスの選択
• ヒステリシスの選択
• 出力の同期
18.8.1 2つのコンパレータ出力の同時読み出し
CM2CON1レジスタのMC1OUTおよびMC2OUTビットには、2 つのコンパレータ出力がそのままミラーコピーされます。2 つのレジスタを読み出さなくても 1つのレジスタから 2 つの出力を同時に読み出せるため、タイミング スキューの問題が発生しません。
18.8.2 内部リファレンスの選択
各コンパレータの非反転入力に接続する内部電圧リファレンスは、固定電圧リファレンス (FVR) と可変コンパレータ電圧リファレンス (CVREF)のいずれかを選択できます。どちらのリファレンスをコンパレータ電圧リファレンス出力 (CXVREF) に接続するかは、CM2CON レジスタの CxRSEL ビットで選択します。選択したリファレンスは、さらに CMxCON0 レジスタのCxRビットによる選択を経てコンパレータに接続されます。詳細は、21.1「電圧リファレンス」および図 18-2、図 18-3 を参照してください。
18.8.3 コンパレータのヒステリシス
コンパレータ Cx には選択可能なヒステリシスがあります。CM2CON1 レジスタの CxHYS ビットをセットすると、ヒステリシスが有効になります。詳細は、27.0「電気的仕様」を参照してください。
18.8.4 コンパレータ出力と TIMER1 の同期
CM2CON1 レジスタの CxSYNC ビットをセットすると、コンパレータ Cx の出力が Timer1 と同期します。Cx 出力を有効にすると、Timer1 ソースクロックの立ち上がりエッジで Cx 出力がラッチします。Timer1 でプリスケーラを使用している場合、プリスケーラ適用後のクロックに対してコンパレータ出力がラッチします。競合状態を防ぐため、コンパレータ出力は Timer1クロック源の立ち上がりエッジでラッチされ、Timer1はクロック源の立ち上がりエッジでインクリメントします。詳細は、コンパレータのブロック図 ( 図 18-2、図 18-3) およびTimer1のブロック図 (図 18-2)を参照してください。
Note 1: CM2CON1レジスタを読み出してC1OUTまたは C2OUT の状態を取得しても、コンパレータ割り込みの不一致レジスタには影響しません。
DS41350D_JP - p. 234 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 18-3: CM2CON1: コンパレータ 2 制御レジスタ 1
R-0 R-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
MC1OUT MC2OUT C1RSEL C2RSEL C1HYS C2HYS C1SYNC C2SYNC
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 MC1OUT: C1OUT ミラーコピー ビット
bit 6 MC2OUT: C2OUT ミラーコピー ビット
bit 5 C1RSEL: コンパレータ C1 リファレンス選択ビット
1 = C1VREF 入力に FVR を接続
0 = C1VREF 入力に CVREF を接続
bit 4 C2RSEL: コンパレータ C2 リファレンス選択ビット
1 = C2VREF 入力に FVR を接続
0 = C2VREF 入力に CVREF を接続
bit 3 C1HYS: コンパレータ C1 ヒステリシス イネーブルビット
1 = コンパレータ C1 のヒステリシスを有効にする0 = コンパレータ C1 のヒステリシスを無効にする
bit 2 C2HYS: コンパレータ C2 ヒステリシス イネーブルビット
1 = コンパレータ C2 のヒステリシスを有効にする0 = コンパレータ C2 のヒステリシスを無効にする
bit 1 C1SYNC: C1 出力同期モードビット
1 = C1 出力を TMR1 クロックの立ち上がりエッジに同期させる0 = C1 出力を非同期とする
bit 0 C2SYNC: C2 出力同期モードビット
1 = C2 出力を TMR1 クロックの立ち上がりエッジに同期させる0 = C2 出力を非同期とする
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 235
PIC18F/LF1XK50
表 18-3: コンパレータ モジュールに関連するレジスタ
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の記載ページ
CM1CON0 C1ON C1OUT C1OE C1POL C1SP C1R C1CH1 C1CH0 290
CM2CON0 C2ON C2OUT C2OE C2POL C2SP C2R C2CH1 C2CH0 290
CM2CON1 MC1OUT MC2OUT C1RSEL C2RSEL C1HYS C2HYS C1SYNC C2SYNC 290
REFCON0 FVR1EN FVR1ST FVR1S1 FVR1S0 — — — — 289
REFCON1 D1EN D1LPS DAC1OE --- D1PSS1 D1PSS0 — D1NSS 289
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 287
PIR2 OSCFIF C1IF C2IF EEIF BCLIF USBIF TMR3IF — 290
PIE2 OSCFIE C1IE C2IE EEIE BCLIE USBIE TMR3IE — 290
IPR2 OSCFIP C1IP C2IP EEIP BCLIP USBIP TMR3IP — 290
PORTC RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0 290
LATC LATC7 LATC6 LATC5 LATC4 LATC3 LATC2 LATC1 LATC0 290
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
ANSEL ANS7 ANS6 ANS5 ANS4 ANS3 — — — 290
凡例 : — = 未実装ビット、「0」として読み出し。網掛けのビットはコンパレータ モジュールには使用しません。
DS41350D_JP - p. 236 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
19.0 電力管理モード
PIC18F/LF1XK50 には合計 7 つの動作モードがあり、効率よく電力を管理できるようになっています。これらのモードを使い分ける事によって、リソースに制約のあるアプリケーション ( バッテリ駆動の機器等 ) において選択的に消費電力を節減する事ができます。
電力管理モードは、以下の 3 つに大別できます。
• ランモード
• アイドルモード • スリープモード
これらのモードは、デバイスのどの部分にクロックを供給するか、場合によってはそのクロックの速度を定義します。ランモードとアイドルモードでは 3 つのクロック源 ( プライマリ、セカンダリ、内部オシレータブロック)のいずれかを使用できますが、スリープモードではクロック源を使用しません。
これらの電力管理モードには、従来の PIC® マイクロコントローラ デバイスに搭載されていたいくつかの省電力機能が含まれています。例えば、コントローラのクロック源をプライマリ オシレータから Timer1 オシレータに切り換える機能もその 1 つです。また、従来の全ての PIC® マイクロコントローラ デバイスに含まれていたスリープモードも、本デバイスに搭載されています。このモードではデバイスクロックが全て停止します。
19.1 電力管理モードの選択
電力管理モードを選択するには、以下の 2 つの点を考慮する必要があります。
• CPU にクロックを供給するかどうか
• どのクロック源を選択するか
CPUへのクロック供給はOSCCONレジスタの IDLENビットで、クロック源の選択は OSCCON レジスタのSCS<1:0> ビットでそれぞれ選択します。各モードのビット設定、クロック源、影響を受けるモジュールを表 19-1 にまとめます。
19.1.1 クロック源
電力管理モードで使用するクロック源は、SCS<1:0>ビットを使用して以下の 3 つから選びます。
• FOSC<3:0> コンフィグレーション ビットで設定したプライマリ クロック
• セカンダリ クロック (Timer1 オシレータ )• 内部オシレータ ブロック
19.1.2 電力管理モードへの移行
電力管理モードを切り換えるには、まず OSCCON レジスタに値を書き込みます。SCS<1:0> ビットでクロック源を選択し、どのランモード / アイドルモードを使用するかを決定します。これらのビットを変更すると、新しいクロック源が既に動作している場合はただちにクロック源が切り換わります。切り換え時にも、クロック遷移の遅延が発生します。詳細は、2.8「クロックの切り換え」を参照してください。
アイドル / スリープモードへは SLEEP 命令の実行によって移行します。どちらのモードに移行するかは、OSCCON レジスタの IDLEN ビットの設定によって決まります。
切り換え前後のモードの組み合わせによっては、これら全てのビットを変更しなくてもモードを切り換えられる場合があります。多くの場合、SLEEP 命令を発行する前にオシレータ選択ビットまたは IDLEN ビットを変更するだけでモードを切り換える事ができます。IDLENビットが既に正しく設定されていれば、SLEEP 命令を実行するだけでモードを切り換える事ができます。
表 19-1: 電力管理モード
モード
OSCCON ビットモジュールへのクロック供給
利用可能なクロック / オシレータソース
IDLEN(1) SCS<1:0> CPU 周辺モジュール
スリープ 0 N/A OFF OFF なし – 全てのクロックが停止
PRI_RUN N/A 00 クロック供給あり
クロック供給あり
プライマリ – LP、XT、HS、RC、EC、内部オシレータ ブロック (2)
( 省電力機能を使用しない通常の実行モード )
SEC_RUN N/A 01 クロック供給あり
クロック供給あり
セカンダリ – Timer1 オシレータ
RC_RUN N/A 1x クロック供給あり
クロック供給あり
内部オシレータ ブロック (2)
PRI_IDLE 1 00 OFF クロック供給あり
プライマリ – LP、XT、HS、HSPLL、RC、EC
SEC_IDLE 1 01 OFF クロック供給あり
セカンダリ – Timer1 オシレータ
RC_IDLE 1 1x OFF クロック供給あり
内部オシレータ ブロック (2)
Note 1: IDLEN は、SLEEP命令実行時の値です。
2: HFINTOSC および HFINTOSC ポストスケーラ、LFINTOSC ソースを含みます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 237
PIC18F/LF1XK50
19.1.3 SLEEP 命令の複数の機能
SLEEP 命令によってどの電力管理モードになるかは、命令実行時のOSCCONレジスタの IDLENビットの設定によって決まります。IDLEN ビットがクリアの時にSLEEP 命令を実行すると、全てのクロックが停止し、消費電力は 小になります。IDLEN ビットをセットした状態で SLEEP命令を実行すると、システムクロックから周辺モジュールへのクロック供給は継続しますが、CPU へのクロック供給は停止します。
19.2 ランモード
ランモードでは、コアと周辺モジュールの両方にクロックを供給します。ランモードには、クロック源の違いによって 3 つの種類があります。
19.2.1 PRI_RUN モード
PRI_RUN は、省電力機能を使用しない通常の実行モードです。デバイスのリセット時には、2 段階起動が有効でない限り、既定でこのモードになります (詳細は、2.12「2 段階起動モード」参照 )。このモードでは、CONFIGHコンフィグレーション レジスタの FOSC ビットで設定したオシレータでデバイスが動作します。
19.2.2 SEC_RUN モード
SEC_RUN モードでは、外部セカンダリ オシレータがCPU と周辺モジュールにクロックを供給します。このモードでは、高精度のクロック源を使用しながら消費電力を低減できます。
OSCCON レジスタの SCS<1:0> ビットを「01」にセットすると、SEC_RUN モードに移行します。SEC_RUNモードになると、以下の動作が実行されます。
• メイン クロック源が外部セカンダリ オシレータに切り換わる
• 外部プライマリ オシレータは停止する
• T1CON レジスタの T1RUN ビットがセットされる
• OSTS ビットがクリアされる
19.2.3 RC_RUN モード
RC_RUN モードでは、内部オシレータが CPU と周辺モジュールにクロックを供給します。このモードでは、外部プライマリ オシレータは停止します。RC_RUN モードでシステムクロックに LFINTOSC を選択した場合、消費電力は全てのランモードの中で 小となります。
SCS1 ビットをセットすると、RC_RUN モードに移行します。クロック源をプライマリ オシレータから内部オシレータに切り換えると、プライマリ オシレータは停止し、OSTS ビットがクリアされます。IRCF ビットは随時変更が可能で、この値を書き換えるとただちにクロック速度が変化します。
Note: SEC_RUN モードに移行するには、外部セカンダリ オシレータが動作開始済みである事が必要です。SCS<1:0> を「01」にセットしても、T1OSCEN ビットがセットされていないと SEC_RUN モードに切り換わりません。T1OSCEN ビットをセットして外部セカンダリ オシレータが動作を開始すると SEC_RUN モードに切り換わります。
DS41350D_JP - p. 238 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
19.3 スリープモード
PIC18F/LF1XK50 の電力管理モードの 1 つであるスリープモードは、従来の全ての PIC® マイクロコントローラに搭載されていたスリープモードと同じものです。OSCCON レジスタの IDLEN ビットをクリアした状態で SLEEP命令を実行すると、このモードに移行します。スリープモードになると現在選択中のオシレータは停止し ( 図 19-1 参照 )、全てのクロック源ステータスビットがクリアされます。
ランモードまたはアイドルモードからスリープモードに移行する場合、クロックの切り換えは不要です。これは、コントローラがスリープモードに移行するとクロックを必要としないためです。WDT を有効にした場合、LFINTOSC ソースは動作を継続します。Timer1オシレータを有効に設定している場合、Timer1 オシレータも動作を継続します。
スリープモードで ( 割り込み、リセット、WDT タイムアウト等の要因によって ) ウェイクアップ イベントが発生しても、SCS<1:0> ビットで選択したクロック源が動作を開始するまでデバイスにはクロックが供給されません ( 図 19-2 参照 )。ただし、2 段階起動またはフェイルセーフ クロック モニタ (FSCM) のいずれか(24.0「CPU の特殊機能」参照 ) を有効にしている場合、内部オシレータ ブロックからクロックが供給されます。どちらの場合も、プライマリ クロックがデバイスにクロックを供給している場合は OSTS ビットがセットされます。IDLEN および SCS ビットは、ウェイクアップの影響を受けません。
19.4 アイドルモード
アイドルモードでは CPU へのクロック供給のみが選択的に停止し、周辺モジュールは動作を継続します。3 つのアイドルモードを使い分ける事によって、消費電力をさらに細かく管理する事ができます。
IDLEN ビットを「1」にセットした状態で SLEEP命令を実行すると、周辺モジュールは SCS<1:0> ビットで選択したクロック源で動作しますが、CPU へのクロック供給は停止します。クロック源ステータスビットは影響を受けません。IDLEN をセットして SLEEP 命令を実行すると、現在のランモードと同じクロック源を使用したアイドルモードへ簡単に切り換える事ができます。
WDT を有効にした場合、LFINTOSC ソースは動作を継続します。Timer1 オシレータを有効に設定している場合、Timer1 オシレータも動作を継続します。
CPU による命令実行は停止しているため、アイドルモードから復帰するには割り込み、WDT タイムアウト、リセットのいずれかを必要とします。これらのウェイクアップ イベントが発生すると、TCSD の遅延時間の後、CPU はコード実行を開始します。CPU は、現在のアイドルモードと同じクロック源でコード実行を再開します。例えば、RC_IDLE モードからウェイクアップすると RC_RUN モードになり、内部オシレータ ブロックが CPU と周辺モジュールにクロックを供給します。ウェイクアップ後も、IDLEN および SCSビットは変化しません。
アイドルモードまたはスリープモードの時に WDT がタイムアウトになると WDT ウェイクアップとなり、SCS<1:0> ビットの現在の設定に基づいたランモードに復帰します。
図 19-1: スリープモードへの移行時の遷移タイミング
図 19-2: スリープからのウェイクアップ時の遷移タイミング (HSPLL)
Q4Q3Q2
OSC1
Peripheral
Sleep
Program
Q1Q1
Counter
Clock
CPUClock
PC + 2PC
Q3 Q4 Q1 Q2
OSC1
Peripheral
Program PC
PLL Clock
Q3 Q4
Output
CPU Clock
Q1 Q2 Q3 Q4 Q1 Q2
Clock
Counter PC + 6PC + 4
Q1 Q2 Q3 Q4
Wake Event
Note1: TOST = 1024 TOSC、TPLL = 約 2 ms。図に示したこれら 2 つの時間の長さの比は、実際とは異なります。
TOST(1)TPLL(1)
OSTS bit set
PC + 2
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 239
PIC18F/LF1XK50
19.4.1 PRI_IDLE モード
このモードは、他の 2 つの低消費電力アイドルモードとは異なり、プライマリ クロックが停止しません。このため、クロック源の「ウォームアップ」や他のオシレータからの切り換えなしに高精度なプライマリ クロック源を使用して高速にデバイスの動作を再開でき、高いタイミング精度が要求されるアプリケーションに適しています。
PRI_RUN モードにおいて、IDLEN ビットをセットした状態でSLEEP命令を実行するとPRI_IDLEモードに移行します。その他のランモードから PRI_IDLE モードに移行するには、まず IDLEN ビットをセットし、SCS ビットをクリアした後に SLEEP 命令を実行します。このモードでは CPU は動作を停止しますが、周辺モジュールには FOSC<3:0> コンフィグレーションビットで指定したプライマリ クロック源からのクロック供給が継続します。OSTS ビットはセットされたままです ( 図 19-3 参照 )。
ウェイクアップ イベントが発生すると、CPU はプライマリ クロック源で動作を再開します。ウェイクアップ イベントが発生してからコード実行が開始するまでの間には、TCSD の遅延時間が必要です。これは、CPUが命令を実行できるようになるまでに必要な時間です。ウェイクアップ後も、OSTS ビットはセットされたままです。IDLEN および SCS ビットは、ウェイクアップの影響を受けません ( 図 19-4 参照 )。
19.4.2 SEC_IDLE モード
SEC_IDLE モードでは、CPU は動作を停止しますが、周辺モジュールには Timer1 オシレータからのクロック供給が継続します。SEC_RUN モードにおいて、IDLEN ビットをセットした状態で SLEEP 命令を実行すると SEC_IDLE モードに移行します。その他のランモードから SEC_IDLE モードに移行するには、まずIDLEN ビットをセットし、SCS<1:0> ビットを「01」にセットしてから SLEEP命令を実行します。クロック源が Timer1 オシレータに切り換わるとプライマリ オシレータは停止し、OSTS ビットがクリア、T1RUNビットがセットされます。
ウェイクアップ イベントが発生しても、周辺モジュールは Timer1 オシレータで動作を継続します。ウェイクアップ イベントの発生からTCSDの遅延時間の後、CPUは Timer1 オシレータでコード実行を開始します。IDLENおよびSCSビットはウェイクアップの影響を受けず、Timer1 オシレータは動作を継続します ( 図 19-4参照 )。
図 19-3: アイドルモードへの移行時の遷移タイミング
図 19-4: アイドルモードからランモードへのウェイクアップ時の遷移タイミング
Note: SEC_IDLEモードに移行するには、Timer1オシレータが動作を開始開始済みである事が必要です。SLEEP 命令の実行時にT1OSCEN ビットがセットされていない場合、メイン システム クロックはそれ以前に選択したモードのまま動作を継続し、対応するアイドルモード (PRI_IDLEまたは RC_IDLE) に移行します。
Q1
Peripheral
Program PC PC + 2
OSC1
Q3 Q4 Q1
CPU Clock
Clock
Counter
Q2
OSC1
Peripheral
Program PC
CPU Clock
Q1 Q3 Q4
Clock
Counter
Q2
Wake Event
TCSD
DS41350D_JP - p. 240 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
19.4.3 RC_IDLE モード
RC_IDLE モードでは、CPU の動作は停止しますが、周辺モジュールには内部オシレータ ブロックのHFINTOSC のマルチプレクサから出力されるクロックが供給されます。このモードでは、アイドル期間中の消費電力を制御できます。
RC_RUN モードにおいて、IDLEN ビットをセットした状態で SLEEP命令を実行すると RC_IDLE モードになります。その他のランモードから RC_IDLE モードに移行するには、まず IDLEN ビットをセットし、SCS1ビットをセットした後に SLEEP命令を実行します。なお、将来のデバイスとソフトウェア互換性を確保するため、SCS0 もクリアしておく事を推奨します ( 現状値は無視されます )。SLEEP命令を実行する前に IRCFビットを変更し、HFINTOSC のマルチプレクサから高いクロック周波数を選択して使用する事もできます。クロック源を HFINTOSC のマルチプレクサに切り換えると、プライマリ オシレータは停止し、OSTS ビットがクリアされます。
IRCF ビットをゼロ以外の値にセットするか、またはINTSRC ビットをセットすると、HFINTOSC 出力が有効になります。HFINTOSC 出力が安定した後、TIOBST
の遅延時間が経過すると IOSF ビットがセットされます。HFINTOSC ソースが安定するまでの間も、周辺モジュールへのクロック供給は継続します。SLEEP命令を実行する前に IRCF ビットがゼロ以外の値だった場合、または INTSRC がセットされていた場合、HFINTOSCソースが既に安定していればHFIOFSビットはセットされたままとなります。IRCF ビットとINTSRC ビットが全てクリアの場合は HFINTOSC 出力は有効にならず、HFIOFS ビットもクリアのままとなります。
ウェイクアップ イベントが発生しても、周辺モジュールは HFINTOSC のマルチプレクサから出力されるクロックで動作を継続します。ウェイクアップ イベントの発生から TCSD の遅延時間の後、CPU は HFINTOSCのマルチプレクサからのクロックでコード実行を開始します。ウェイクアップ後も、IDLEN および SCS ビットは変化しません。WDTまたはフェイルセーフ クロック モニタ (FSCM) のいずれかが有効な場合、LFINTOSC ソースは動作を継続します。
19.5 アイドル / スリープモードの終了
スリープモードまたはアイドルモードは、以下のいずれかのトリガによって終了します。
• 割り込み
• リセット
• ウォッチドッグ タイマのタイムアウト
ここでは、アイドル / スリープモードを終了させるトリガについて説明します。クロック供給サブシステムの動作については、各電力管理モードの説明 (19.2「ランモード」、19.3「スリープモード」 、 19.4「アイドルモード」) を参照してください。
19.5.1 割り込みによる終了
利用可能な全ての割り込みは、デバイスをアイドルまたはスリープモードからランモードに移行させる事ができます。この機能を使用するには、INTCON またはPIE レジスタで割り込み要因のイネーブルビットをセットしておく必要があります。その割り込みイネーブルビットが PIE レジスタに含まれる場合、PEIE ビットも必ずセットしておきます。これで、対応する割り込みフラグビットがセットされるとアイドル / スリープモード終了シーケンスが開始します。
割り込みによってアイドル / スリープモードが終了した場合、必ず SLEEP 命令の直後の命令が実行されます。INTCON レジスタの GIE/GIEH ビットがセットされている場合、コード実行は次に割り込みベクタに分岐します。それ以外の場合、コード実行は分岐せずに継続します (7.0「割り込み」参照 )。
スリープ /アイドルモードを終了してCPUがコード実行を開始できるようになるまでには、ウェイクアップイベントの後に TCSD の遅延時間が必要です。この遅延時間が経過した後の 初のクロックサイクルで命令実行が再開します。
19.5.2 WDT タイムアウトによる終了
WDT タイムアウト後の動作は、どの電力管理モードでWDT タイムアウトが発生したかによって異なります。
デバイスがコードを実行していない時 ( アイドルまたはスリープモード ) に WDT タイムアウトになると、これらのモードが終了します (19.2「ランモード」、19.3「スリープモード」参照 )。コード実行中 ( ランモード )に WDT タイムアウトになると、WDT リセットとなります (24.2「ウォッチドッグ タイマ (WDT)」参照 )。
WDT タイマとポストスケーラは、以下のいずれかの動作によってクリアされます。
• SLEEP命令の実行
• CLRWDT命令の実行
• フェイルセーフ クロック モニタ (FSCM) 有効時に、現在選択中のクロック源が失われた場合
• 内部オシレータをデバイスのクロック源に使用している時に OSCCON レジスタの IRCF ビットを変更した場合
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 241
PIC18F/LF1XK50
19.5.3 リセットによる終了
リセットによってスリープ / アイドルモードが終了すると、コード実行はアドレス 0 から再開します。詳細は、23.0「リセット」を参照してください。
リセットからコード実行開始までの遅延時間は、ウェイクアップ前後のクロック源およびオシレータの種類によって異なります。これらの遅延を表 19-2 にまとめます。
19.5.4 オシレータ スタートアップ遅延を伴わないアイドル / スリープモードの終了
OST を一切起動せずにアイドル / スリープモードを終了できる場合もあります。これには、以下の 2 つの場合があります。
• PRI_IDLE モード ( プライマリ クロック源が停止していない ) の場合
• プライマリ クロック ソースが LP、XT、HS、HSPLL モード以外の場合
これらの場合には、プライマリ クロック源が既に動作している (PRI_IDLE モード ) か、または元々オシレータ スタートアップ遅延を必要としない (RC、EC、INTOSC、INTOSCIO モード ) ため、オシレータ スタートアップ遅延も発生しません。ただし、スリープ / アイドルモードを終了する際は、ウェイクアップ イベントが発生してから CPU がコード実行を開始できるようになるまでに TCSD の遅延時間が必要である事には変わりありません。命令実行は、この遅延が経過した後の 初のクロックサイクルで再開されます。
表 19-2: リセットによるスリープ / アイドルモードからのウェイクアップに必要な遅延時間( クロック源別に分類 )
ウェイクアップ前のクロック源
ウェイクアップ後の クロック源
モード終了時の遅延時間
クロック レディ ステータス ビット
(OSCCON)
デバイスのプライマリ クロック(PRI_IDLE モード )
LP、XT、HS
TCSD(1) OSTSHSPLL
EC、RC
HFINTOSC(2) IOSF
T1OSC または LFINTOSC(1)
LP、XT、HS TOST(3)
OSTSHSPLL TOST + tPLL(3)
EC、RC TCSD(1)
HFINTOSC(1) TIOBST(4) IOSF
HFINTOSC(2)
LP、XT、HS TOST(4)
OSTSHSPLL TOST + tPLL(3)
EC、RC TCSD(1)
HFINTOSC(1)なし IOSF
なし( スリープモード )
LP、XT、HS TOST(3)
OSTSHSPLL TOST + tPLL(3)
EC、RC TCSD(1)
HFINTOSC(1) TIOBST(4) IOSF
Note 1: TCSD はスリープ / アイドルモードからのウェイクアップ時に必要な遅延時間ですが、他の必要な遅延時間と並行して経過します (19.4「アイドルモード」参照 )。リセット時の HFINTOSC の既定値は 1 MHzです。
2: HFINTOSC の 16 MHz ソースとポストスケーラによって生成された周波数の両方を含みます。
3: TOST はオシレータ スタートアップ タイマです。tPLL は PLL ロックアウト タイマ ( パラメータ F12) です。
4: HFINTOSC が安定化するまでの期間 TIOBST の間も、コード実行は継続されます。
DS41350D_JP - p. 242 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
20.0 SR ラッチ
このモジュールには、複数のセット / リセット入力と選択可能なラッチ出力を備えた SR ラッチが 1 つ用意されています。SR ラッチモジュールには以下の機能があります。
• 入力選択をプログラム可能
• SR ラッチ出力を内部 / 外部で利用可能
• Q および Q 出力を選択可能
• ファームウェアによるセット / リセット
20.1 ラッチの動作
このラッチは、クロック源に依存しない SR ラッチです。セット / リセット入力はいずれも正論理です。ラッチのセット / リセットには、CxOUT、INT1 ピン、可変クロックを使用できます。この他、SRCON0 レジスタの SRPS および SRPR ビットを使用して SR ラッチをセットまたはリセットする事もできます。ラッチはリセットを優先するため、セット入力とリセット入力がどちらもhighの場合はリセット状態になります。SRPSビットと SRPR ビットはどちらも自己リセット型であるため、これらのビットのいずれかに 1 回書き込みを実行するだけでラッチのセットまたはリセットが完了します。
20.2 ラッチ出力
ラッチ出力は、SRCON0 レジスタの SRQEN およびSRNQEN ビットで選択します。SR ラッチの出力をI/O ピンに直接出力できるのは、同時に 1 つまでです。出力の優先度は、SRCON0 レジスタの SRQEN およびSRNQEN ビットの状態で決定します。
表 20-1: SR ラッチ出力の制御
対応するポートの TRIS ビットをクリアして、ポートピンの出力ドライバを有効にしておく必要があります。
20.3 リセットの影響
デバイスにどのようなリセットが発生しても、SRラッチは初期化されません。ラッチ出力をピンに出力する前に、ユーザのファームウェアでラッチ出力を初期化する必要があります。
図 20-1: SR ラッチの概略ブロック図
SRLEN SRQEN SRNQEN ポート I/O に出力される SR ラッチ
0 X X I/O
1 0 0 I/O
1 0 1 Q
1 1 0 Q
1 1 1 Q
SRPS
S
R
Q
Q
Note 1: R = 1かつ S = 1の場合、Q = 0、Q = 12: パルス ジェネレータは、2 Q ステートのパルス幅を生成します。
3: 出力は単なる参考用として記載したものです。詳細は、I/O ポートピンのブロック図を参照してください。
4: これらの名前は、コンパレータ出力の接続元を表しています。
PulseGen(2)
SRLATCH(1)
SRNQEN
SRQ pin(3)
SRQENSRNQEN
SRSPE
SRSC2E
INT1
SRSCKESRCLK
SYNCC2OUT(4)
SRSC1ESYNCC1OUT(4)
SRPR PulseGen(2)
SRRPE
SRRC2E
INT1
SRRCKESRCLK
SYNCC2OUT(4)
SRRC1ESYNCC1OUT(4)
SRLEN
SRLEN
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 243
PIC18F/LF1XK50
表 20-2: SRCLK の周波数一覧
SRCLK 分周比 FOSC = 20 MHz FOSC = 16 MHz FOSC = 8 MHz FOSC = 4 MHz FOSC = 1 MHz
111 512 25.6 s 32 s 64 s 128 s 512 s
110 256 12.8 s 16 s 32 s 64 s 256 s
101 128 6.4 s 8 s 16 s 32 s 128 s
100 64 3.2 s 4 s 8 s 16 s 64 s
011 32 1.6 s 2 s 4 s 8 s 32 s
010 16 0.8 s 1 s 2 s 4 s 16 s
001 8 0.4 s 0.5 s 1 s 2 s 8 s
000 4 0.2 s 0.25 s 0.5 s 1 s 4 s
レジスタ 20-1: SRCON0: SR ラッチ制御レジスタ
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
SRLEN SRCLK2 SRCLK1 SRCLK0 SRQEN SRNQEN SRPS SRPR
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット C = クリアのみ可能ビット
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 SRLEN: SR ラッチ イネーブルビット (1)
1 = SR ラッチを有効にする0 = SR ラッチを無効にする
bit 6-4 SRCLK<2:0>(1): SR ラッチ クロック分周ビット
000 = 周辺サイクルクロックを 1/4 分周001 = 周辺サイクルクロックを 1/8 分周010 = 周辺サイクルクロックを 1/16 分周011 = 周辺サイクルクロックを 1/32 分周100 = 周辺サイクルクロックを 1/64 分周101 = 周辺サイクルクロックを 1/128 分周110 = 周辺サイクルクロックを 1/256 分周111 = 周辺サイクルクロックを 1/512 分周
bit 3 SRQEN: SR ラッチ Q 出力イネーブルビット
SRNQEN = 0の場合
1 = Q を RC4 ピンに出力する0 = Q を内部のみで使用する
bit 2 SRNQEN: SR ラッチ Q 出力イネーブルビット
1 = Q を RC4 ピンに出力する0 = Q を内部のみで使用する
bit 1 SRPS: SR ラッチのパルスセット入力
1 = パルス入力0 = 常に「0」として読み出し
bit 0 SRPR: SR ラッチのパルスリセット入力
1 = パルス入力0 = 常に「0」として読み出し
Note 1: SR ラッチを有効にした状態で SRCLK ビットを変更すると、ラッチのセット / リセット入力のトリガが誤って発生する事があります。
DS41350D_JP - p. 244 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 20-3: SR ラッチに関連するレジスタ
レジスタ 20-2: SRCON1: SR ラッチ制御レジスタ 1
R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
SRSPE SRSCKE SRSC2E SRSC1E SRRPE SRRCKE SRRC2E SRRC1E
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット C = クリアのみ可能ビット
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 SRSPE: SR ラッチ ペリフェラル セット イネーブルビット
1 = INT1 ピンのステータスで SR ラッチをセット0 = INT1 ピンのステータスは SR ラッチに影響しない
bit 6 SRSCKE: SR ラッチ セット クロック イネーブルビット
1 = SR ラッチのセット入力を SRCLK のパルスと同期する 0 = SR ラッチのセット入力を SRCLK のパルスと同期しない
bit 5 SRSC2E: SR ラッチ C2 セット イネーブルビット
1 = C2 コンパレータの出力で SR ラッチをセット0 = C2 コンパレータの出力は SR ラッチに影響しない
bit 4 SRSC1E: SR ラッチ C1 セット イネーブルビット
1 = C1 コンパレータの出力で SR ラッチをセット0 = C1 コンパレータの出力は SR ラッチに影響しない
bit 3 SRRPE: SR ラッチ ペリフェラル リセット イネーブルビット
1 = INT1 ピンで SR ラッチをリセット0 = INT1 ピンは SR ラッチに影響しない
bit 2 SRRCKE: SR ラッチ リセット クロック イネーブルビット
1 = SR ラッチのリセット入力を SRCLK のパルスと同期する 0 = SR ラッチのリセット入力を SRCLK のパルスと同期しない
bit 1 SRRC2E: SR ラッチ C2 リセット イネーブルビット
1 = C2 コンパレータの出力で SR ラッチをリセット0 = C2 コンパレータの出力は SR ラッチに影響しない
bit 0 SRRC1E: SR ラッチ C1 リセット イネーブルビット
1 = C1 コンパレータの出力で SR ラッチをリセット0 = C1 コンパレータの出力は SR ラッチに影響しない
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の記載ページ
SRCON0 SRLEN SRCLK2 SRCLK1 SRCLK0 SRQEN SRNQEN SRPS SRPR 290
SRCON1 SRSPE SRSCKE SRSC2E SRSC1E SRRPE SRRCKE SRRC2E SRRC1E 290
CM2CON1 MC1OUT MC2OUT C1RSEL C2RSEL C1HYS C2HYS C1SYNC C2SYNC 290
INTCON3 INT2IP INT1IP — INT2IE INT1IE — INT2IF INT1IF 287
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
凡例 : 網掛けのビットは SR ラッチには使用しません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 245
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 246 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
21.0 電圧リファレンス
以下の 2 つの独立した電圧リファレンスを使用できます。
• プログラマブルな電圧リファレンス
• 1.024 V の固定電圧リファレンス
21.1 電圧リファレンス
電圧リファレンス モジュールは、コンパレータおよびDACモジュール用の電圧リファレンスを内部で生成します。このモジュールには、以下の特長があります。
• コンパレータの動作から独立
• 32 レベルの電圧レンジ
• VSS にクランプした出力
• VDD に比例した電圧
• 1.024 V の固定基準電圧 (FVR)
電圧リファレンス モジュールの設定は、REFCON1 レジスタ (レジスタ 21-2)で行ないます (図 21-1参照 )。
21.1.1 独立動作
電圧リファレンス モジュールは、コンパレータの構成から独立して動作します。REFCON1レジスタのD1ENビットをセットすると、VREF 分圧器に電流が流れ、電圧リファレンスが有効になります。D1EN ビットをクリアすると VREF 分圧器に電流が流れなくなり、電圧リファレンス モジュールの消費電力が 小限に抑えられます。
21.1.2 出力電圧の選択
VREF 電圧リファレンスは32レベルの電圧レンジから選択できます。32 のレベルは、REFCON2 レジスタのDAC1R<4:0> ビットで設定します。
VREF 出力電圧は以下の式で求めます。
式 21-1: VREF 出力電圧
21.1.3 VDD に比例した出力
コンパレータ電圧リファレンスはVDDから生成されるため、VREF 出力は VDD の変動に合わせて変化します。コンパレータ電圧リファレンスの試験済み絶対精度は、27.0「電気的仕様」を参照してください。
21.1.4 電圧リファレンスの出力
REFCON1 レジスタの DAC1OE ビットを「1」にセットすると、VREF電圧リファレンスをデバイスのCVREF
ピンに出力できます。基準電圧を VREF ピンに出力するように設定すると、そのピンのデジタル出力バッファおよびデジタル入力しきい値検出器は自動的に無効になります。基準電圧出力として設定された CVREF
ピンを読み出すと、常に「0」が返されます。
CVREF ピンを外部に接続し基準電圧を出力する場合、電流駆動能力に制約があるため、バッファを使用する必要があります。図 21-2 に、バッファの使用例を示します。
21.1.5 スリープ時の動作
割り込みまたはウォッチドッグ タイマのタイムアウトによってデバイスがウェイクアップしても、RECON1 レジスタの内容は変化しません。スリープモード時の消費電流を 小にするには、電圧リファレンスを無効にします。
21.1.6 リセットの影響
デバイスをリセットすると、以下のような影響があります。
• 電圧リファレンスが無効になる
• 固定電圧リファレンスが無効になる
• CVREF ピンから VREF が出力されなくなる
• 電圧レンジ選択ビット (DAC1R<4:0>) がクリアされる
VOUT VSOURCE VSOURCE – x DAC1R[4:0]
25
-------------------------------- VSOURCE+
= -
IF D1EN = 1
IF D1EN = 0 & D1LPS = 1 & DAC1R[4:0] = 11111:
VOUT VSOURCE = +
IF D1EN = 0 & D1LPS = 1 & DAC1R[4:0] = 00000:
VOUT VSOURCE = -
+ -
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 247
PIC18F/LF1XK50
21.2 FVR リファレンス モジュール
FVR リファレンスは、VDD から独立した安定な固定電圧リファレンスで、公称出力電圧は 1.024 V です。REFCON0 レジスタの FVR1EN ビットを「1」にセットすると、FVR リファレンスが有効になります。FVR電圧リファレンスは、コンパレータまたは ADC の入力チャンネルに接続できます。
21.2.1 FVR の安定化期間
固定電圧リファレンス モジュールを有効にしても、リファレンスと増幅回路はすぐには安定しません。従って、モジュールが安定するまでユーザプログラムで若干の遅延を確保する必要があります。FVR リファレンスが安定したかどうかは、REFCON0 レジスタのFVR1ST ビットの状態で知る事ができます。 小遅延の要件については、27.0「電気的仕様」を参照してください。
図 21-1: 電圧リファレンスのブロック図
16
-to
-1 M
UX
DAC1R<4:0>
R
VDD
VREF+
D1PSS<1:0> = 00
D1NSS = 0
VREF- D1NSS = 1
R
R
R
R
R
R
32 STEPS
VREF
FVR1
D1PSS<1:0> = 01
D1PSS<1:0> = 10
CVREF pin
DAC1OE
FVR1S<1:0>
X1X2X4
2
FVR
+
_FVR1ENFVR1ST
1.024V FixedReference
D1EN
D1LPS
R
D1EN
D1LPS
DS41350D_JP - p. 248 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 21-2: 電圧リファレンスの出力バッファの例
レジスタ 21-1: REFCON0: リファレンス制御レジスタ 0
R/W-0 R-0 R/W-0 R/W-1 U-0 U-0 U-0 U-0
FVR1EN FVR1ST FVR1S1 FVR1S0 — — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 FVR1EN: 固定電圧リファレンス 1 イネーブルビット
0 = FVR を無効にする
1 = FVR を有効にする
bit 6 FVR1ST: 固定電圧リファレンス 1 安定状態ビット
0 = FVR が安定していない
1 = FVR が安定している
bit 5-4 FVR1S<1:0>: 固定電圧リファレンス 1 電圧選択ビット
00 = 予約 ( 使用不可 )01 = 1.024 V (x1)10 = 2.048 V (x2)11 = 4.096 V (x4)
bit 3-0 未実装ビット :「0」として読み出し
Buffered CVRef Output+–
CVREF
Module
Voltage Reference
Output Impedance
R(1)
CVREF
Note 1: R は、電圧リファレンスのコンフィグレーション ビット CVR<3:0> と CVRR によって決まります。
PIC18F1XK50/PIC18LF1XK50
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 249
PIC18F/LF1XK50
レジスタ 21-2: REFCON1: リファレンス制御レジスタ 1
R/W-0 R/W-0 R/W-0 U-0 R/W-0 R/W-0 U-0 R/W-0
D1EN D1LPS DAC1OE --- D1PSS1 D1PSS0 --- D1NSS
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 D1EN: DAC 1 イネーブルビット
0 = DAC 1 を無効にする
1 = DAC 1 を有効にする
bit 6 D1LPS: DAC 1 ローパワー電圧ステート選択ビット
0 = VDAC = DAC1 の負リファレンス ソースを選択
1 = VDAC = DAC1 の正リファレンス ソースを選択
bit 5 DAC1OE: DAC 1 電圧出力イネーブルビット
1 = DAC 1 の電圧レベルを RC2/AN6/P1D/C12IN2-/CVREF/INT2 ピンにも出力
0 = DAC 1 の電圧レベルを RC2/AN6/P1D/C12IN2-/CVREF/INT2 ピンから切断
bit 4 未実装ビット : 「0」として読み出し
bit 3-2 D1PSS<1:0>: DAC 1 正入力選択ビット00 = VDD
01 = VREF+10 = FVR 出力
11 = 予約 ( 使用不可 )
bit 1 未実装ビット : 「0」として読み出し
bit 0 D1NSS: DAC1 負入力選択ビット0 = VSS
1 = VREF-
レジスタ 21-3: REFCON2: リファレンス制御レジスタ 2
U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
--- --- --- DAC1R4 DAC1R3 DAC1R2 DAC1R1 DAC1R0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-5 未実装ビット : 「0」として読み出し
bit 4-0 DAC1R<4:0>: DAC1 電圧出力選択ビット
VOUT = ((VSOURCE+) - (VSOURCE-))*(DAC1R<4:0>/(2^5)) + VSOURCE-
Note 1: 共通のレジスタ レイアウトで任意のビット数を使用できるようにするため、出力選択ビットは常に右詰めとします。
DS41350D_JP - p. 250 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 21-1: 電圧リファレンスに関連するレジスタ
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の記載ページ
REFCON0 FVR1EN FVR1ST FVR1S1 FVR1S0 — — — — 289
REFCON1 D1EN D1LPS DAC1OE --- D1PSS1 D1PSS0 — D1NSS 289
REFCON2 — — — DAC1R4 DAC1R3 DAC1R2 DAC1R1 DAC1R0 289
TRISC TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0 290
凡例 : 網掛けのビットはコンパレータ電圧リファレンスには使用しません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 251
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 252 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
22.0 USB (UNIVERSAL SERIAL BUS)
本セクションでは、USB モジュールについて詳しく説明します。このモジュールの性質上、USB の知識が必要です。USB の概要については 22.10「USB の概要」でも説明しますが、これはアプリケーション設計のための参考情報として記載したものに過ぎません。設計者の方は、USB Implementers Forum (USB-IF) が正式に公開している 新の USB 仕様を参照するようにしてください。本書執筆時点での 新 USB 仕様はリビジョン 2.0 です。
22.1 USB モジュールの概要
PIC18F1XK50/PIC18LF1XK50 は、フルスピードおよびロースピード互換の USB シリアル インターフェイス エンジン (SIE)を内蔵しており、USBホストとPIC®
MCU の間で高速通信を行う事ができます。SIE は、内部トランシーバを利用して USB に直接接続できます。
性能を改善すめるための特別なハードウェアを装備しています。まず、デバイスのデータメモリ空間には、マイクロコントローラ コアと SIE の両方から DMA アクセスが可能なデュアルアクセス ポート メモリ (USBRAM) があります。また、USB RAM 空間におけるエンドポイントのメモリ使用方法をユーザが自由にプログラムできるように、バッファ ディスクリプタも提供されます。図 22-1 に、USB モジュールとその機能概要を示します。
図 22-1: USB モジュールとオプション
256 byteUSB RAM
USBSIE
USB Control and
Transceiver
P
P
D+D-
Internal Pull-ups
External 3.3VSupply
FSENUPUEN
USB Clock from theOscillator Module
OptionalExternal
Pull-ups(1)
(Low(Full
PIC18F1XK50/PIC18LF1XK50 Family
USB BusFS
Speed) Speed)
Note 1: 外付けのプルアップ抵抗を使用する場合は内部プルアップ抵抗を無効にします (UPUEN = 0)。
2: PIC18F13K50/PIC18F14K50 のみ
Configuration
VUSB
3.3V LDO Regulator(2)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 253
PIC18F/LF1XK50
22.2 USB のステータスと制御
USB モジュールの動作は、3 つの制御レジスタにより設定、管理します。さらに、以下 14 個のレジスタを使用して USB トランザクションを管理します。
• USB 制御レジスタ (UCON)• USB コンフィグレーション レジスタ (UCFG)• USB 転送ステータス レジスタ (USTAT)• USB デバイスアドレス レジスタ (UADDR)• フレーム番号レジスタ (UFRMH:UFRML)• エンドポイント イネーブル レジスタ 0 ~ 7 (UEPn)
22.2.1 USB 制御レジスタ (UCON)
USB 制御レジスタ ( レジスタ 22-1) は、転送実行中のUSBモジュールの挙動を制御するためのビットを格納します。これらのビットで制御できる挙動には、以下のものがあります。
• USB モジュール イネーブル
• ピンポンバッファ ポインタ リセット
• サスペンドモードの制御
• パケット転送ディセーブル
さらに USB 制御レジスタは、バスにシングルエンド ゼロが発生した事を知らせるステータスビット「SE0」(UCON<5>) も格納します。USB モジュールを有効にしたら、このビットを監視して差動データラインにシングルエンド ゼロが発生していないかどうかを確認するようにしてください。これにより、 初のパワーアップ状態と USB リセット信号を区別する事ができます。
USB モジュール全体の動作は、USBEN ビット(UCON<3>) で制御します。このビットをセットするとUSB モジュールが有効になり、バッファ ディスクリプタ テーブル (BDT) 内の PPBI ビットは全て「0」にリセットされます。また、内部プルアップ抵抗を使用する場合、USBEN ビットをセットすると内部プルアップが有効になります。このため、USBEN ビットは USB バスへの接続 / 切断をソフトウェアで切り換える手段として使用できます。USBEN ビットをクリアするとステータスビットと制御ビットの設定は全て無視されますが、USBEN ビットをセットして USB モジュールを有効にする前にこれらのビットを完全に設定しておく必要があります。USBEN ビットは、アクティブなクロック源から USB モジュールにクロックを供給するまではセットできません。クロック源に PLL を使用する場合、PLLを有効にして2 ms以上 (PLLがロックするまでの時間 )経過してからUSBENビットをセットしてください。
レジスタ 22-1: UCON: USB 制御レジスタ
U-0 R/W-0 R-x R/C-0 R/W-0 R/W-0 R/W-0 U-0
— PPBRST SE0 PKTDIS USBEN(1) RESUME SUSPND —
bit 7 bit 0
凡例 : C = クリア可能ビット
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 未実装ビット : 「0」として読み出し
bit 6 PPBRST: ピンポンバッファ リセット ビット
1 = バッファ ディスクリプタ (BD) の偶数バンクに対するピンポンバッファ ポインタを全てリセットする0 = ピンポンバッファ ポインタをリセットしない
bit 5 SE0: ライブ シングルエンド ゼロ フラグビット
1 = USB バスでシングルエンド ゼロを検出0 = シングルエンド ゼロの検出なし
bit 4 PKTDIS: パケット転送ディセーブルビット
1 = SIEトークンおよびパケットの処理を無効にする(SETUPトークンを受信すると自動的にセットされる)0 = SIE トークンおよびパケットの処理を有効にする
bit 3 USBEN: USB モジュール イネーブルビット (1)
1 = USB モジュールおよび周辺回路を有効にする ( デバイスを接続状態にする )0 = USB モジュールおよび周辺回路を無効にする ( デバイスを切断状態にする )
bit 2 RESUME: レジューム シグナリング イネーブルビット
1 = レジューム信号を送出する0 = レジューム 信号を送出しない
bit 1 SUSPND: サスペンド USB ビット
1 = USB モジュールと周辺回路を省電力モードにして SIE のクロックを停止する0 = USB モジュールと周辺回路を通常動作にし、SIE のクロックを設定済みのレートにする
bit 0 未実装ビット : 「0」として読み出し
Note 1: 適切なクロック源から USB モジュールにクロックが供給されていない場合、このビットはセットできません。
DS41350D_JP - p. 254 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
PPBRST ビット (UCON<6>) は、ダブル バッファリング モード ( ピンポンバッファ ) を使用する場合のリセット状態を制御します。PPBRST ビットをセットすると、ピンポンバッファ ポインタは全て偶数バッファに設定されます。PPBRST ビットはファームウェアでクリアする必要があります。このビットは、ピンポンバッファを使用しないバッファリング モードでは無視されます。
PKTDIS ビット (UCON<4>) は、SIE がパケットの送受信を無効にした事を示すフラグビットです。SETUPトークンを受信してセットアップ処理が許可されると、SIE はこのビットをセットします。マイクロコントローラはこのビットをクリアできますが、セットはできません。このビットをクリアすると、SIE はパケットの送受信を再開できます。バッファ ディスクリプタテーブル内に未処理のイベントが残っている場合、これらが利用可能である事が USTAT レジスタの FIFOバッファ内に示されます。
RESUME ビット (UCON<2>) を使用すると、USB モジュールからレジューム信号を送出してリモートウェイクアップを実行できます。有効なリモート ウェイクアップを生成するには、ファームウェアでRESUME ビットを 10 ms の間セットしてからクリアする必要があります。レジューム信号送出の詳細は、「Universal Serial Bus Specification Revision 2.0」を参照してください。
SUSPND ビット (UCON<1>) をセットすると、USB モジュールと周辺回路が低消費電力モードに移行します。SIE への入力クロックも停止します。IDLEIF 割り込みが発生したらソフトウェアでこのビットをセットする必要があります。ACTVIF 割り込みが発生したら、マイクロコントローラのファームウェアでこのビットをリセットします。このビットがセットされている間、デバイスは USB バスに接続したままですが、トランシーバ出力はアイドルです。VUSB ピンにかかる電圧は、このビットの値で決まります。IDLEIF 要求の前にこのビットをセットすると、バスの挙動は予測不能になります。
22.2.2 USB コンフィグレーション レジスタ(UCFG)
USB バスの通信を開始する前に、USB モジュールに関連する内部 / 外部ハードウェアを正しく設定しておく必要があります。この設定は、主に UCFG レジスタ( レジスタ 22-2) で行います。UFCG レジスタには以下のビットが含まれ、USB モジュールのシステムレベルの挙動のほとんどをこのレジスタで制御します。
• バス速度 ( フルスピード / ロースピード )• 内蔵プルアップ抵抗イネーブル
• ピンポンバッファの使用
UTEYE ビット (UCFG<7>) は、USB モジュールのテストとデバッグ、USB 認証に使用するアイパターン生成を有効化します
22.2.2.1 内部トランシーバ
USB モジュールは、USB 2.0 フルスピード / ロースピード互換のトランシーバを内蔵しており、内部でSIE に接続しています。この特長は、低コストシングルチップ アプリケーションに適しています。USB モジュールを有効にすると (USBEN = 1)、内部トランシーバも有効になります。トランシーバの速度はFSEN ビット (UCFG<2>) で制御します。このビットをセットするとフルスピード動作となります。
内蔵 USB プルアップ抵抗は、UPUEN ビット(UCFG<4>) で制御します。内蔵プルアップ抵抗は、内蔵トランシーバが有効な場合のみ使用できます。
内部 USB トランシーバには、VUSB ピンから電力を供給します。USB シグナリング レベルの仕様に適合するため、VUSB には 3.0 ~ 3.6 V の電源から電力を供給する必要があります。3.3 V 電源を使用し、パスコンに高品質のセラミック コンデンサを使用すると、電気的信号品質は 高となります。このコンデンサは、パッケージの同じ側にある VUSB ピンと VSS ピンのなるべく近くに配置する必要があります (20 ピン PDIP、SOIC、SSOP、QFN パッケージではコンデンサのグランドを VSS ピン 20 に接続 )。
D+ および D- 信号ラインは、USB コネクタまたはケーブル ( ハードワイヤ アプリケーションの場合 ) のそれぞれのピンに直接接続できます。D+ および D- ドライバはスルーレートが制御されており、出力インピーダンスが USB ケーブルの特性 インピーダンスと整合するように設計されているため、外付けの抵抗、コンデンサ、磁気部品は一切必要ありません。
USB 仕様に適合するため、配線パターンの長さは30 cm 未満とします。また、この配線パターンを USBケーブルの特性インピーダンスに整合するように設計する事が理想的です。
Note: サスペンドモード中は、バスパワー USBデバイスの消費電流は 500 A (typ.) に制限されます。PIC デバイスと周辺回路の消費電流の合計をこの範囲内に抑える必要があります。デバイスがサスペンドモードに移行したら、消費電流を 小限に抑えるように注意します。
Note: USB の速度、トランシーバ、プルアップ抵抗の設定は、USB モジュールのセットアップ フェイズでのみ行うべきです。USB モジュールを有効にしたまま、これらの設定を変更すべきではありません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 255
PIC18F/LF1XK50
レジスタ 22-2: UCFG: USB コンフィグレーション レジスタ
R/W-0 U-0 U-0 R/W-0 U-0 R/W-0 R/W-0 R/W-0
UTEYE — — UPUEN(1) — FSEN(1) PPB1 PPB0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 UTEYE: USB アイパターン テスト イネーブルビット
1 = アイパターン テストを有効にする0 = アイパターン テストを無効にする
bit 6-5 未実装ビット : 「0」として読み出し
bit 4 UPUEN: USB 内蔵プルアップ イネーブルビット (1)
1 = 内蔵プルアップ抵抗を有効にする (FSEN = 1の場合は D+ のプルアップ、FSEN = 0の場合はD- のプルアップ )
0 = 内蔵プルアップ抵抗を無効にする
bit 3 未実装ビット : 「0」として読み出し
bit 2 FSEN: フルスピード イネーブルビット (1)
1 = フルスピード デバイス : トランシーバのエッジレートを制御、48 MHz の入力クロックが必要0 = ロースピード デバイス : トランシーバのエッジレートを制御、6 MHz の入力クロックが必要
bit 1-0 PPB<1:0>: ピンポンバッファ コンフィグレーション ビット
11 = エンドポイント 1 ~ 15 で偶数 / 奇数ピンポンバッファを有効にする10 = 全てのエンドポイントで偶数 / 奇数ピンポンバッファを有効にする01 = OUT エンドポイント 0 で偶数 / 奇数ピンポンバッファを有効にする00 = 偶数 / 奇数ピンポンバッファを無効にする
Note 1: USB モジュールを有効にした状態で UPUEN および FSEN ビットを変更しないでください。これらの値は、USB モジュールを有効にする前に設定しておく必要があります。
DS41350D_JP - p. 256 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
22.2.2.2 内部プルアップ抵抗
PIC18F1XK50/PIC18LF1XK50 は、ロースピード / フルスピード USB の要件を満たしたプルアップ抵抗を内蔵しています。内部プルアップ抵抗は、UPUEN ビット (UCFG<4>) を使って有効にします。内部プルアップ抵抗とその制御方法については、図 22-1 を参照してください。
22.2.2.3 外付けプルアップ抵抗
外付けのプルアップ抵抗も使用できます。この場合、VUSB ピンを使用して D+ または D- をプルアップします。使用するプルアップ抵抗の値は、USB仕様で1.5 k(±5%) と規定されています。図 22-2 に例を示します。
図 22-2: 外部回路
22.2.2.4 ピンポンバッファの設定
ピンポンバッファをどのように使用するかは、PPB<1:0> ビットで設定します。ピンポンバッファの詳細は、22.4.4「ピンポン バッファリング」を参照してください。
22.2.2.5 アイパターン テスト イネーブル
UCFG<7> ビットをセットすると、USB モジュールで自動アイパターン テストを生成できます。アイパターン出力は、USB モジュールの設定に基づいて観察します。つまり SIE のクロック設定、プルアップ抵抗、トランシーバのモードをあらかじめ設定しておく必要があります。また、USB モジュールも有効にしておく必要があります。
UTEYE ビットをセットすると、USB モジュールは受信から送信への切り換え状態をエミュレートし、J-K-J-K ビットシーケンス ( フルスピードの場合はK-J-K-J) の送信を開始します。アイパターン テストモードを有効にしている間、このシーケンスが繰り返し生成されます。
UTEYE ビットは、USB モジュールを実際の USB システムに接続した状態では決してセットしないでください。このテストモードは、USB 認証テスト前のボード検証用に用意されたものです。基板パターン、インピーダンス不整合、近接する他のシステム部品等の要因がUSB 信号にどう影響するかをシステム設計者が評価するための機能です。このテストは、受信から送信への遷移を適切にテストするためのものではありません。アイパターン テストは複雑な USB 認証テストの代用にはなりませんが、初期のシステムデバッグには役立ちます。
Note: 正式な USB 仕様では、USB ケーブルの+5 V VBUS ラインに電流を供給してはならない事になっています。また、+5 VVBUS ラインが 1.17 V 未満の時、USB デバイスが D+ および D- データラインに電流を供給する事も禁止されています。従って、完全にバスパワー方式のアプリケーション以外では、VBUS が 1.17 V を超えるまで USB モジュールおよび D+ または D- データラインのプルアップ抵抗を有効にしないよう、VBUS ラインを監視しておく必要があります。VBUS ラインを任意の5 V耐性I/Oピンに接続して監視します。
PIC®
MicrocontrollerHost
Controller/HUB
VUSB
D+
D-
Note: 上図は、内蔵レギュレータと外付けプルアップ
抵抗を使用したフルスピード構成の代表的な
接続例です。
1.5 k
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 257
PIC18F/LF1XK50
22.2.3 USB ステータス レジスタ (USTAT)
USTAT レジスタは SIE 内のトランザクション ステータスを通知します。SIE が USB 転送完了割り込みを生成したら、USTAT を読み出して転送の状態を確認する必要があります。USTAT には、転送エンドポイント番号、方向、ピンポンバッファ ポインタ値 ( ピンポンバッファを使用している場合のみ ) が含まれます。
USTAT レジスタは、SIE が管理する 4 バイトのステータス FIFO の読み出し用のウィンドウです。マイクロコントローラが転送を処理している間に、SIE は別のエンドポイントを処理する事ができます ( 図 22-3)。SIE は、バッファを使用したデータの読み書き処理を完了すると、USTAT レジスタを更新します。トランザクション完了割り込みを処理する前に別の USB 転送が実行された場合、SIE は次の転送のステータスをステータス FIFO に格納します。
転送完了フラグビット TRNIF をクリアすると、SIE はFIFO を 1 つ前に進めます。FIFO 保持レジスタにある次のデータが有効な場合、SIE は TRNIF をクリアしてから 6 TCY 以内に再び割り込みをアサートします。それ以上データがない場合、TRNIF はクリアされたままとなり、USTAT のデータは信頼できなくなります。
図 22-3: USTAT FIFO
Note: USTAT レジスタの値は、TRNIF 割り込みフラグがアサートされてから2 SIEクロック後に有効になります。
システムクロックが48 MHzでロースピード動作の場合、TRNIF 割り込みを受信してからUSTATレジスタのデータを処理するまでの間に遅延時間が必要な場合があります。
Note: USTAT FIFO がフルの時にエンドポイントのリクエストを受信したら、SIE は自動的に NAK をホストに返します。
Data Bus
USTAT from SIE
4-Byte FIFOfor USTAT
Clearing TRNIFAdvances FIFO
レジスタ 22-3: USTAT: USB ステータス レジスタ
U-0 U-0 R-x R-x R-x R-x R-x U-0
— — ENDP2 ENDP1 ENDP0 DIR PPBI(1) —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-6 未実装 : 「0」として読み出し
bit 5-3 ENDP<2:0>: 後にアクティビティのあったエンドポイントの符号化番号ビット( 後の USB 転送によって更新された BDT の番号を表す )
111 = エンドポイント 7110 = エンドポイント 6....001 = エンドポイント 1000 = エンドポイント 0
bit 2 DIR: 後の BD 方向インジケータ ビット
1 = 後のトランザクションが IN トークン0 = 後のトランザクションが OUT または SETUP トークン
bit 1 PPBI: ピンポン BD ポインタ インジケータ ビット (1)
1 = 後のトランザクションを奇数 BD バンクに対して実行0 = 後のトランザクションを偶数 BD バンクに対して実行
bit 0 未実装 : 「0」として読み出し
Note 1: このビットは、偶数および奇数 BD レジスタが使用可能なエンドポイントでのみ有効です。
DS41350D_JP - p. 258 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
22.2.4 USB エンドポイント制御
USBモジュールには双方向のエンドポイントが8つあり、それぞれに個別の制御レジスタ UEPn (「n」はエンドポイント番号 ) があります。UEPn レジスタに含まれる制御ビットの内容は、エンドポイント番号にかかわらず共通です。レジスタ 22-4 に、UEPn レジスタの内容を示します。
EPHSHK ビット (UEPn<4>) はエンドポイントのハンドシェイクを制御し、このビットをセットすると USBハンドシェイクが有効になります。通常、このビットはアイソクロナス エンドポイントを使用する場合を除き、常にセットされます。
EPCONDIS ビット (UEPn<3>) は、そのエンドポイントでの USB コントロール転送 (SETUP) を有効または無効に設定します。このビットをクリアするとSETUPトランザクションが有効になります。INおよびOUTトランザクションも有効にするには、対応する EPINEN
および EPOUTEN ビットをセットする必要があります。USB 仕様はエンドポイント 0 を既定のコントロール エンドポイントと定義しており、エンドポイント 0の EPCONDIS ビットは常にクリアしておく必要があります。
EPOUTEN ビット (UEPn<2>) は、ホストからの USBOUT トランザクションを有効または無効に設定します。このビットをセットすると OUT トランザクションが有効になります。同様に、EPINEN ビット (UEPn<1>)はホストからの USB IN トランザクションの有効または無効を設定します。
EPSTALL ビット (UEPn<0>) は、エンドポイントのSTALL 状態を示します。あるエンドポイントで STALLが発行されると、そのエンドポイント ペアの EPSTALLビットが SIE によってセットされます。このビットは、ファームウェアでクリアするか SIE がリセットされるまでセットされたままとなります。
レジスタ 22-4: UEPn: USB エンドポイント n 制御レジスタ (UEP0 ~ UEP7)
U-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL(1)
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-5 未実装ビット : 「0」として読み出し
bit 4 EPHSHK: エンドポイント ハンドシェイク イネーブルビット
1 = エンドポイントのハンドシェイクを有効にする0 = エンドポイントのハンドシェイクを無効にする (主にアイソクロナス エンドポイント用の設定 )
bit 3 EPCONDIS: 双方向エンドポイント制御ビット
EPOUTEN = 1かつ EPINEN = 1の場合 :1 = エンドポイント n のコントロール転送を無効にする。IN および OUT 転送のみを許可0 = エンドポイント n のコントロール (SETUP) 転送を有効にする、IN および OUT 転送も許可
bit 2 EPOUTEN: エンドポイント送信イネーブルビット
1 = エンドポイント n の送信 (OUT) を有効にする0 = エンドポイント n の送信 (OUT) を無効にする
bit 1 EPINEN: エンドポイント受信イネーブルビット
1 = エンドポイント n の受信 (IN) を有効にする0 = エンドポイント n の受信 (IN) を無効にする
bit 0 EPSTALL: エンドポイント ストール イネーブルビット (1)
1 = エンドポイント n をストールする 0 = エンドポイント n をストールしない
Note 1: エンドポイント n が有効な場合のみ有効。無効な場合、ビットは無視される
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 259
PIC18F/LF1XK50
22.2.5 USB アドレス レジスタ (UADDR)
USB アドレスレジスタは一意の USB アドレスを格納し、USB モジュールがアクティブになるとこのアドレスをデコードします。URSTIF による USB リセットを受信した場合、またはマイクロコントローラからリセットを受信した場合、UADDR は 00h にリセットされます。USB アドレスは、USB セットアップ フェイズ ( エニュメレーション ) でマイクロチップ社の USBファームウェア サポートの一部としてマイクロコントローラによって書き込まれます。
22.2.6 USB フレーム番号レジスタ(UFRMH:UFRML)
フレーム番号レジスタは、11 ビットのフレーム番号を格納します。下位 8 ビットは UFRML レジスタに格納し、上位 3 ビットは UFRMH レジスタに格納します。SOF トークンを受信すると、このレジスタペアに現在のフレーム番号が格納されます。これらのレジスタは、マイクロコントローラからは読み出し専用です。フレーム番号レジスタは主にアイソクロナス転送で使用します。UFRMH:UFRML レジスタペアの内容は、48 MHz のSIE クロックがアクティブな時のみ有効です (SUSPND(UCON<1>) ビット = 1の時は内容が不正確 )。
22.3 USB RAM
USB データは、USB RAM と呼ばれるメモリ空間を利用してマイクロコントローラ コアとSIEの間を移動します。USB RAM は、通常のデータメモリ空間のバンク 2 (200h ~ 2FFh) にマッピングされた特別なデュアルアクセス メモリで、合計 256 バイトです ( 図 22-4)。
バンク 2 (200h ~ 27Fh) はエンドポイント バッファ
制御専用です。使用するバッファリングの種類によっ
ては、8 バイト分を残してバンク 2 の全てのバイトを
USB バッファ空間としても使用できます。
USB RAM は、マイクロコントローラからデータメモリとして利用できますが、SIE がアクセス中のアドレスはマイクロコントローラからアクセスできません。マイクロコントローラとSIEが同じバッファに同時にアクセスしないように、セマフォ メカニズムによる調停機能が用意されています。詳細は、22.4.1.1「バッファのオーナーシップ」を参照してください。
図 22-4: データメモリ空間への USB RAM の実装
200h
2FFh
Buffer Descriptors,
USB Data or User Data
SFRs
1FFh
000h
F60h
FFFh
Banks 2
(USB RAM)
F5FhF53hF52h
300h
Banks 3to 14
User Data
Unused
Banks 15
USB Data or User Data
27Fh
280h
Banks 0to 1
DS41350D_JP - p. 260 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
22.4 バッファ ディスクリプタとバッファ ディスクリプタ テーブル
バンク 2 のレジスタは、バッファ ディスクリプタ テーブル (BDT)と呼ばれる構造体を使用してエンドポイント バッファを制御する目的でのみ使用します。BDT により、ユーザは長さや構成の異なる各種エンドポイント バッファを柔軟に設定、制御する事ができます。
BDT は複数のバッファ ディスクリプタ (BD) で構成され、これらを用いて USB RAM 空間内の実際のバッファを定義および制御します。BD は以下の 4 つのレジスタで構成されます (「n」は BD の番号で、0 ~ 31)。
• BDnSTAT: BD ステータス レジスタ
• BDnCNT: BD バイトカウント レジスタ
• BDnADRL: BD 下位アドレスレジスタ
• BDnADRH: BD 上位アドレスレジスタ
BD は常に、BDnSTAT:BDnCNT:BDnADRL:BDnADRHの順に並んだ 4 バイトのブロックとして構成されます。BDnSTAT のアドレスは、常に 200h からのオフセット(4n – 1) (16 進数、n は BD 番号 ) となります。
使用するバッファリング構成に応じて (22.4.4「ピンポン バッファリング」)、バッファ ディスクリプタは大で 16 組、17 組、32 組のいずれかとなります。BDTの長さは 低でも 8 バイト必要です。これは、全てのデバイスが初期設定用に双方向 ( 入力 / 出力 ) のエンドポイント0を持つ事がUSB仕様で定められているためです。エンドポイントとバッファリングの構成にもよりますが、BDT の長さは 大 128 バイトまでです。
バッファ ディスクリプタのステータスおよびアドレスレジスタは特殊機能レジスタ (SFR) と見なす事もできますが、通常のマイクロコントローラの SFR がバンク15 にマッピングされているのに対し、これらはハードウェアにマッピングされていません。特定の BD に対応するエンドポイントが有効になっていない場合、そのレジスタは使用されません。その場合、これらのレジスタは未実装アドレスとしてではなく、利用可能なRAM に見えます。UEPn<1> ビットをセットしてエンドポイントを有効にした場合のみ、これらのアドレスのメモリは BD レジスタとして機能します。データメモリ空間のアドレス全般に共通する事ですが、デバイスに何らかのリセットが発生すると BD レジスタも不定値となります。
図 22-5 に、280h から開始する 64 バイトバッファのBD の例を示します。BD レジスタセットは、対応するエンドポイントがUEPn レジスタで有効に設定されている場合のみ有効です。BD レジスタは全て USB RAM内にあります。各エンドポイントの BD は、エンドポイントを有効にする前に正しく設定しておく必要があります。
22.4.1 BD のステータスと設定
バッファ ディスクリプタはエンドポイント バッファのサイズを定義するだけでなく、バッファの設定と制御も行ないます。バッファの設定は、主に BD ステータス (BDnSTAT) レジスタで行ないます。各 BD には、それぞれの BD 番号に対応した専用の BDnSTAT レジスタがあります。
図 22-5: バッファ ディスクリプタの例
他の制御レジスタとは異なり、BDnSTAT レジスタのビット構成はコンテクストによって異なります。つまり、マイクロコントローラと USB モジュールのどちらが現在 BD とバッファの更新を行えるかによって、2 種類のビット構成が存在します。両者で共通するビット定義は 3 つのみです。
22.4.1.1 バッファのオーナーシップ
CPU と USB モジュールがバッファと BD を共用するため、メモリ内の BD と関連するバッファをどちらが更新するかをシンプルなセマフォ メカニズムで区別しています。
この役割を果たすのが UOWN ビット (BDnSTAT<7>)で、メモリ内の BD と関連するバッファをどちらが更新可能かを区別するセマフォとして機能します。BDnSTATの2つのビット構成で共通するのは、UOWNビットのみです。
UOWN ビットをクリアすると、マイクロコントローラコアがBDエントリのオーナーになります。UOWNビットをセットすると、USB モジュールが BD エントリとバッファメモリのオーナーになります。この時、マイクロコントローラ コアは BD または対応するデータバッファを変更する事はできません。ただし、SIE がバッファのオーナーの時もマイクロコントローラはBDnSTAT を読み出す事はできます ( 逆に、マイクロコントローラがオーナーの時にSIEが読み出す事も可能)。
バッファ ディスクリプタの意味は、現在のオーナーがどちらかによって異なります。USB モジュールをオーナーに設定する前に、ユーザはBDnSTATビットでUSBモジュールの基本動作を設定できます。この時、バイトカウントとバッファアドレスのレジスタも設定できます。
UOWNビットをセットしたらSIEがBDの値を上書きする可能性があるため、以前 BD に書き込んだ値は使用できなくなります。トークン PID と転送カウントBDnCNT が更新されると、BDnSTAT レジスタも SIEによって更新されます。
200h
USB Data
Buffer
Buffer
BD0STAT
BD0CNT
BD0ADRL
BD0ADRH
201h
202h
203h
280h
2BFh
Descriptor
Note: 上図はメモリ空間の縮尺比が一定ではあり
ません。
40h
00h
05hStarting
Size of Block
(xxh)
RegistersAddress Contents
Address
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 261
PIC18F/LF1XK50
エンドポイントの設定を行う際は、BDT の中でもBDnSTAT バイトを必ず 後に設定します。トランザクションが完了すると UOWN ビットは SIE によってクリアされます。
UOWN ビットがセットされている時にアクセスをブロックするメカニズムは、ハードウェアとして実装されていません。従って、SIE がオーナーの時にマイクロコントローラがメモリを書き換えようとすると予期しない挙動をすることがあります。同様に、SIE がオーナーの時にマイクロコントローラからメモリを読み出すと、不正確なデータとなります。
22.4.1.2 BDnSTAT レジスタ (CPU モード )
UOWN = 0の時は、マイクロコントローラ コアが BDのオーナーとなります。この時、BDnSTAT レジスタの他の 7 つのビットは制御ビットとして機能します。
データトグル同期イネーブルビット DTSEN (BDnSTAT<3>) は、データトグルのパリティチェックを制御します。DTSEN ビットをセットすると、SIE によるデータトグル同期が有効になります。データトグル同期を有効にすると、SIE はデータパケットのパリティと DTS (BDnSTAT<6>) の値を照合します。到着時にパケットの同期が正しくないデータは無視されます。このデータは USB RAM には書き込まれず、USB転送完了割り込みフラグもセットされません。ただし、受信の確認応答として SIE からホストに ACK トークンが返されます。表 22-1 に DTSEN ビットが SIE に与える影響をまとめます。
バッファストール ビットBSTALL (BDnSTAT<2>)はコントロール転送をサポートします ( 通常は、エンドポイント 0 で 1 回のストール )。また、このビットは USB仕様書の第 9 章で定義されている SET_FEATURE/CLEAR_FEATURE コマンド ( 主に、既定のコントロール エンドポイント以外のエンドポイントに対する連続ストール ) もサポートします。
BSTALL ビットはバッファストールの有効と無効を切り換えます。BSTALL ビットをセットすると、SIE は受信したトークンがそのアドレスの BD を使用する場合にホストに STALL トークンを返します。ホストに対して STALL が発行されると、対応する UEPn 制御レジスタの EPSTALL ビットがセットされ、STALL 割り込みが発生します。SETUP トークンを受信するまでUOWN ビットはセットされたままで、BD も変化しません。SETUP トークンを受信すると STALL 条件がクリアされ、BDのオーナーシップがマイクロコントローラ コアに返されます。
BD<9:8>ビット (BDnSTAT<1:0>)にはSIEバイトカウントの 上位 2 ビットを格納し、下位 8 ビットは対応する BDnCNT レジスタに格納します。詳細は、22.4.2
「BD バイトカウント」を参照してください。
表 22-1: DTSEN ビットが奇数 / 偶数 (DATA0/DATA1) パケットの受信に与える影響
ホストからのOUT パケット
BDnSTAT の設定 パケット受信後のデバイスの応答
DTSEN DTS ハンドシェイク UOWN TRNIF BDnSTAT と USTAT の状態
DATA0 1 0 ACK 0 1 更新される
DATA1 1 0 ACK 1 0 更新されない
DATA0 1 1 ACK 1 0 更新されない
DATA1 1 1 ACK 0 1 更新される
DATA0 または DATA1 0 x ACK 0 1 更新される
DATA0 または DATA1 ( エラーあり )
x x NAK 1 0 更新されない
凡例 : x = ドントケア
DS41350D_JP - p. 262 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 22-5: BDnSTAT: バッファ ディスクリプタnステータス レジスタ(BD0STAT~ BD31STAT)、CPU モード ( データをサイドに書き込み )
R/W-x R/W-x U-0 U-0 R/W-x R/W-x R/W-x R/W-x
UOWN(1) DTS(2) —(3) —(3) DTSEN BSTALL BC9 BC8
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 UOWN: USB オーナービット (1)
0 = マイクロコントローラ コアが BD および対応するバッファのオーナー
bit 6 DTS: データトグル同期ビット (2)
1 = データ 1 パケット0 = データ 0 パケット
bit 5-4 未実装ビット : これらのビットは常に「0」にプログラミングしておく必要があります (3)。
bit 3 DTSEN: データトグル同期イネーブルビット
1 = データトグル同期を有効にする。同期の値が不正なデータパケットは無視される(ただしSETUPトランザクションは例外で、データトグル ビットが一致しなくても許可される )
0 = データトグル同期を実行しない
bit 2 BSTALL: バッファストール イネーブルビット
1 = バッファストールを有効にする。特定位置のBDを使用するようなトークンを受信するとSTALLハンドシェイクが発行される (UOWN ビットはセットされたままで、BD の値は変化しない )
0 = バッファストールを無効にする
bit 1-0 BC<9:8>: バイトカウント 9、8 ビット
バイトカウント ビットは、IN トークンで送信するバイト数、または OUT トークンで受信するバイト数を表します。BC<7:0> の値と組み合わせて、0 ~ 1023 の範囲の有効なバイトカウントを表現します。
Note 1: このビットは、USB モジュールを有効にする前にユーザが任意の値に初期化しておく必要があります。
2: このビットは、DTSEN = 1以外では無視されます。
3: これらのビットがセットされていると、USB 通信は動作しません。従って、これらのビットは常に「0」のままにしておく必要があります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 263
PIC18F/LF1XK50
22.4.1.3 BDnSTAT レジスタ (SIE モード )
SIE が BD およびバッファのオーナーになると、BDnSTAT のほとんどのビットが別の意味を持つようになります。レジスタ 22-6 にこの時のレジスタの設定を示します。UOWN ビットをセットすると、それ以前にこのレジスタにユーザが書き込んだデータや制御設定は、SIE からのデータによって上書きされます。
SIE は、BDnSTAT<5:3> に格納されたトークンパケット ID (PID) の値で BDnSTAT レジスタを更新します。対応するBDnCNTレジスタの転送カウントも更新されます。8 ビットレジスタからオーバーフローした値は転送カウントの上位 2 ビットにキャリーオーバーし、BDnSTAT<1:0> に格納されます。
22.4.2 BD バイトカウント
バイトカウントは、IN 転送で送信されるバイトの総数を表します。IN 転送が終了したら、SIE はホストに送信済みバイト数を返します。
OUT 転送の場合、バイトカウントは受信および USBRAM に保存が可能な 大バイト数を表します。OUT転送が終了したら、SIE は実際に受信したバイト数を返します。受信バイト数が対応するバイトカウントを上回る場合、データパケットは拒否され、NAK ハンドシェイクが開始されます。この場合、バイトカウントは更新されません。
10 ビットのバイトカウントは 2 つのレジスタにまたがって格納されます。バイトカウントの下位 8 ビットは BDnCNT レジスタに格納します。上位 2 ビットをBDnSTAT<1:0> に格納します。これにより、有効範囲0 ~ 1023 のバイトカウントを表現します。
22.4.3 BD アドレスのチェック
BD アドレス レジスタ ペアには、対応するエンドポイント バッファの開始 RAM アドレスを格納します。BDのアドレスの正しさを確認するハードウェアのメカニズムは実装していません。
BD アドレスの値が USB RAM 内のアドレスを指し示していない場合、または他のエンドポイントのバッファ内のアドレスを指し示している場合、データは失われるか上書きされます。同様に、使用中の BD のアドレスが受信バッファ (OUT エンドポイント ) と重複した場合、予期しない結果となる事があります。USBアプリケーションを開発する際は、ユーザコードの中にソフトウェア ベースのアドレスチェック ルーチンを組み込んでください。
レジスタ 22-6: BDnSTAT: バッファ ディスクリプタnステータス レジスタ(BD0STAT ~ BD31STAT)、SIE モード ( サイドから MCU にデータを返送 )
R/W-x U-x R/W-x R/W-x R/W-x R/W-x R/W-x R/W-x
UOWN: — PID3 PID2 PID1 PID0 BC9 BC8
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 UOWN: USB オーナービット
1 = SIE が BD および対応するバッファのオーナー
bit 6 予約 : SIE はこのビットに書き込みを行わない
bit 5-2 PID<3:0>: パケット ID ビット
後の転送で受信したトークン PID の値 (IN、OUT、SETUP トランザクションのみ )
bit 1-0 BC<9:8>: バイトカウント 9、8 ビット
OUT 転送で実際に受信したバイト数、または IN 転送で実装に送信したバイト数を SIE がこれらのビットに書き込みます。
DS41350D_JP - p. 264 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
22.4.4 ピンポン バッファリング
1 つのエンドポイントで 2 つの BD エントリ ( 偶数転送用の BD エントリと奇数転送用の BD エントリ ) を使用する場合、これをピンポンバッファと呼びます。ピンポンバッファを使用すると、CPU が BD を処理中に SIE が別の BD を処理できます。このように BD をダブル バッファリングする事により、USB バスにおける送受信のスループットが 大限に向上します。
USBモジュールは以下の4つの動作モードをサポートしています。
• ピンポンバッファを使用しない
• OUT エンドポイント 0 のみピンポンバッファを使用する
• 全てのエンドポイントでピンポンバッファを使用する
• エンドポイント 0 以外の全てのエンドポイントでピンポンバッファを使用する
ピンポンバッファの設定は、UCFG レジスタのPPB<1:0> ビットで行います。
USB モジュールは、各エンドポイントのピンポンポインタを個別に追跡管理します。USB モジュールを有効にすると、全てのポインタが偶数 BD にリセットされます。転送が完了して SIE が UOWN ビットをクリアしたら、ポインタが奇数 BD に切り換わります。次にトランザクションが完了したら、ポインタは再び偶数 BD に切り換わり、以後同様に切り換えが繰り返されます。
後のトランザクションの偶数 / 奇数ステータスは、USTAT レジスタの PPBI ビットに格納されます。PPBRST ビットを使用すると、全てのピンポンポインタを偶数にリセットできます。
図 22-6 に、4 つの動作モードと USB RAM におけるBD のマッピングを示します。
BD と各エンドポイントの関係は、バッファリングの設定で固定されています。BD とエンドポイントの対応関係の詳細は、表 22-2 を参照してください。このような固定関係となっているため、エンドポイントを連続して有効にしないと BDT にすき間が発生します。理論上は、無効なエンドポイントの BD はバッファ空間として使用できます。ただし実際には、何らかの方法で BD のアドレスチェックを行わない限り、このようにして生じた BDT のすき間は使用しないことを推奨します。
図 22-6: 各バッファリング モードにおけるバッファ ディスクリプタ テーブルのマッピング
EP1 IN Even
EP1 OUT Even
EP1 OUT Odd
EP1 IN Odd
Descriptor
Descriptor
Descriptor
Descriptor
EP1 IN
EP7 IN
EP1 OUT
EP0 OUT
PPB<1:0> = 00
EP0 IN
EP1 IN
No Ping-Pong
EP7 IN
EP0 IN
EP0 OUT Even
PPB<1:0> = 01
EP0 OUT Odd
EP1 OUT
Ping-Pong Buffer
EP7 IN Odd
EP0 IN Even
EP0 OUT Even
PPB<1:0> = 10
EP0 OUT Odd
EP0 IN Odd
Ping-Pong Buffers
Descriptor
Descriptor
Descriptor
Descriptor
Descriptor
Descriptor
Descriptor
Descriptor
Descriptor
Descriptor
Descriptor
Descriptor
200h
2FFh 2FFh 2FFh
200h 200h
23Fh
243h
Availableas
Data RAM Availableas
Data RAM
Maximum Memory Used: 64 bytesMaximum BDs: 16 (BD0 to BD15)
Maximum Memory Used: 68 bytesMaximum BDs: 17 (BD0 to BD16)
Maximum Memory Used: 128 bytesMaximum BDs: 32 (BD0 to BD31)
Note: 上図メモリ空間の縮尺比は不定です。
Descriptor
Descriptor
Descriptor
Descriptor
Buffers on EP0 OUT on all EPs
EP1 IN Even
EP1 OUT Even
EP1 OUT Odd
EP1 IN Odd
Descriptor
Descriptor
Descriptor
Descriptor
EP7 IN Odd
EP0 OUT
PPB<1:0> = 11
EP0 IN
Ping-Pong Buffers
Descriptor
Descriptor
Descriptor
2FFh
200h
Maximum Memory Used: 120 bytesMaximum BDs:
30 (BD0 to BD29)
on all other EPsexcept EP0
Availableas
Data RAM
277h27Fh
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 265
PIC18F/LF1XK50
表 22-2: 各バッファリング モードにおけるバッファ ディスクリプタの割り当て
表 22-3: USB バッファ ディスクリプタ テーブルのレジスタ一覧
エンド
ポイント
エンドポイントに割り当てられる BD
モード 0( ピンポンなし )
モード 1(EP0 OUT のみピンポン )
モード 2( 全ての EP でピンポン )
モード 3(EP0 以外の全ての EP で
ピンポン )
Out In Out In Out In Out In
0 0 1 0 (E)、1 (O) 2 0 (E)、1 (O) 2 (E)、3 (O) 0 1
1 2 3 3 4 4 (E)、5 (O) 6 (E)、7 (O) 2 (E)、3 (O) 4 (E)、5 (O)
2 4 5 5 6 8 (E)、9 (O) 10 (E)、11 (O) 6 (E)、7 (O) 8 (E)、9 (O)
3 6 7 7 8 12 (E)、13 (O) 14 (E)、15 (O) 10 (E)、11 (O) 12 (E)、13 (O)
4 8 9 9 10 16 (E)、17 (O) 18 (E)、19 (O) 14 (E)、15 (O) 16 (E)、17 (O)
5 10 11 11 12 20 (E)、21 (O) 22 (E)、23 (O) 18 (E)、19 (O) 20 (E)、21 (O)
6 12 13 13 14 24 (E)、25 (O) 26 (E)、27 (O) 22 (E)、23 (O) 24 (E)、25 (O)
7 14 15 15 16 28 (E)、29 (O) 30 (E)、31 (O) 26 (E)、27 (O) 28 (E)、29 (O)
凡例 : (E) = 偶数トランザクション バッファ、(O) = 奇数トランザクション バッファ
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
BDnSTAT(1) UOWN DTS(4) PID3(2) PID2(2) PID1(2)
DTSEN(3)PID0(2)
BSTALL(3)BC9 BC8
BDnCNT(1)バイトカウント
BDnADRL(1)バッファ下位アドレス
BDnADRH(1)バッファ上位アドレス
Note 1: バッファ ディスクリプタ レジスタ名の「n」は 0 ~ 31 の値をとります。ここでは、32 個のレジスタを総称して「n」と簡単に表記しています。これらのレジスタのリセット値は全て不定 (xxxx xxxx) です。
2: SIE がレジスタのオーナーになったら (UOWN ビットをセット )、SIE は BDnSTAT レジスタの bit 5 ~ 2を使用して PID<3:0> の値を返します。SIE がレジスタのオーナーになると、それまでに DTSEN およびBSTALL ビットに書き込んだ値は無効になります。
3: SIE がバッファ ディスクリプタのオーナーになる前 (UOWN ビットがクリアの時 ) は、BDnSTAT レジスタの bit 5 ~ 2 を使用して DTSEN と BSTALL を設定します。
4: DTSEN = 1以外では、このビットは無視されます。
DS41350D_JP - p. 266 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
22.5 USB 割り込み
USB モジュールは複数の割り込みを生成できます。これら全ての割り込み要因に対処するため、USB モジュールにはマイクロコントローラの割り込みロジック構造に似た、専用の割り込みロジック構造が用意されています。USB 割り込みには、有効と無効を切り換えるための制御レジスタと、割り込みをトラップするためのフラグレジスタがそれぞれ 1 つずつあります。全ての割り込み要因は、マイクロコントローラの割り込みロジックで 1 つの USB 割り込み要求 USBIF (PIR2<2>) に集約されます。
図 22-7 に、USB モジュールの割り込みロジックを示します。USB モジュールでは、割り込みレジスタが2 つの階層に分かれています。上位レベルは全体的な
USB ステータス割り込みで構成されており、これらはUIE レジスタにイネーブルビット、UIR レジスタにフラグビットがあります。下位レベルは USB エラー条件で構成されており、これらはUEIRレジスタにイネーブルビット、UEIE レジスタにフラグビットがあります。これらのいずれか 1 つでも割り込みが発生すると、上位レベルでUSBエラー割り込みフラグ (UERRIF)がセットされます。
割り込みを使用すると、USB トランザクションで発生する所定のイベントをトラップできます。図 22-8 に、USB フレーム内の一般的なイベントとそれに対応する割り込みを示します。
図 22-7: USB 割り込みロジックの構造
図 22-8: USB トランザクションと割り込みイベントの例
BTSEFBTSEE
BTOEFBTOEE
DFN8EFDFN8EE
CRC16EFCRC16EE
CRC5EFCRC5EE
PIDEFPIDEE
SOFIFSOFIE
TRNIFTRNIE
IDLEIFIDLEIE
STALLIFSTALLIE
ACTVIFACTVIE
URSTIFURSTIE
UERRIF
UERRIE
USBIF
Second Level USB Interrupts(USB Error Conditions)
UEIR (Flag) and UEIE (Enable) Registers
Top Level USB Interrupts(USB Status Interrupts)
UIR (Flag) and UIE (Enable) Registers
USB Reset
SOFRESET SETUP DATA STATUS SOF
SETUPToken Data ACK
OUT Token Empty Data ACKStart-of-Frame (SOF)
IN Token Data ACK
SOFIF
URSTIF
1 ms Frame
Differential Data
From Host From Host To Host
From Host To Host From Host
From Host From Host To Host
Transaction
Control Transfer(1)
TransactionComplete
Note 1: ここに示したコントロール転送は単なる例であり、これらのイベントは全てのトランザクションで発生する可能性があります。通常、コントロール転送は複数のフレームにまたがります。
Set TRNIF
Set TRNIF
Set TRNIF
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 267
PIC18F/LF1XK50
22.5.1 USB 割り込みステータス レジスタ(UIR)
UIR レジスタ ( レジスタ 22-7) は、各 USB ステータス割り込み要因のフラグビットで構成されます。これらの各割り込み要因に対応する割り込みイネーブルビットは、UIE レジスタにあります。全ての USB ステータスフラグの論理和が取られ、マイクロコントローラの割り込み用の USBIF 割り込みフラグが生成されます。
SIE によってセットされた割り込みフラグビットは、ソフトウェアで「0」を書き込んでクリアする必要があります。ファームウェアのデバッグ時には、フラグビットをソフトウェアでセットする事もできます。
レジスタ 22-7: UIR: USB 割り込みステータス レジスタ
U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-0 R/W-0
— SOFIF STALLIF IDLEIF(1) TRNIF(2) ACTVIF(3) UERRIF(4) URSTIF
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 未実装ビット : 「0」として読み出し
bit 6 SOFIF: SOF (Start-of-Frame) トークン割り込みビット
1 = SIE が SOF トークンを受信した0 = SIE が SOF トークンを受信していない
bit 5 STALLIF: STALL ハンドシェイク割り込みビット
1 = SIE が STALL ハンドシェイクを送信した0 = STALL ハンドシェイクが送信されていない
bit 4 IDLEIF: アイドル検出割り込みビット (1)
1 = アイドル状態 (3 ms 以上アイドル状態が持続 ) を検出0 = アイドル状態の検出なし
bit 3 TRNIF: トランザクション完了割り込みビット (2)
1 = 未処理トランザクションの処理が完了、USTAT レジスタからエンドポイントの情報を読み出す0 = 未処理トランザクションの処理が完了していない、または未処理トランザクションが存在しない
bit 2 ACTVIF: バス アクティビティ検出割り込みビット (3)
1 = D+/D- ラインでアクティビティを検出した0 = D+/D- ラインでアクティビティを検出していない
bit 1 UERRIF: USB エラー条件割り込みビット (4)
1 = マスクされていないエラー条件が発生した0 = マスクされていないエラー条件は発生していない
bit 0 URSTIF: USB リセット割り込みビット
1 = 有効な USB リセットが発生した。UADDR レジスタに 00h を読み込み0 = USB リセットが発生していない
Note 1: アイドル状態を検出したら、USB モジュールをサスペンドモードに移行する事ができます。
2: このビットをクリアすると USTAT FIFO が前に進みます (IN、OUT、SETUP トークンでのみ有効 )。
3: 通常、このビットは UIDLE 割り込みイベントを検出した後のみマスクが解除されます。
4: このビットは、UEIE レジスタで有効に設定したエラー条件でのみセットされます。このビットはステータスビット専用であり、ユーザがセット / クリアする事はできません。
DS41350D_JP - p. 268 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
22.5.1.1 バス アクティビティ検出割り込みビット (ACTVIF)
USB モジュールがサスペンド状態の場合、またはサスペンドからウェイクアップした直後は ACTVIF ビットをクリアできません。内部ハードウェア ステートマシンが同期するまで数クロックサイクル待ってから、ファームウェアで ACTVIF ビットをクリアする必要があります。内部ハードウェアが同期する前に ACTVIFビットをクリアしても、ACTVIF ビットの値が変化しない事があります。また、USB モジュールがクロック源に 48 MHz PLL を使用している場合、SUSPND ビッ
トをクリアしても 48 MHz PLL がロックするまでUSBモジュールは動作しません。例 22-1 に ACTVIF フラグをアプリケーション コードでクリアする方法を示します。
USB バス アイドル状態からレジュームする際は、ACTVIF 割り込みが 1 回しか発生しません。ユーザファームウェアで ACTVIF ビットをクリアした場合、バストラフィックが継続していてもこのビットはすぐにセット状態には戻りません。バストラフィックのない状態が持続してもう一度 IDLEIF状態にならないと、再び ACTVIF 割り込みを生成する事はできません。
例 22-1: ACTVIF ビット (UIR<2>) のクリア方法
アセンブリ :
BCF UCON, SUSPNDLOOP:
BTFSS UIR, ACTVIFBRA DONEBCF UIR, ACTVIFBRA LOOP
DONE:
C:
UCONbits.SUSPND = 0;
while (UIRbits.ACTVIF) { UIRbits.ACTVIF = 0; }
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 269
PIC18F/LF1XK50
22.5.2 USB 割り込みイネーブル レジスタ(UIE)
UIE レジスタ ( レジスタ 22-8) は、USB ステータス割り込み要因に対応したイネーブルビットを格納します。これらのビットをセットすると、UIR レジスタの対応する割り込み要因が有効になります。
このレジスタのビット値は、割り込み条件の発生をマイクロコントローラの割り込みロジックに伝達するかどうかのみを制御します。割り込み条件が成立するとイネーブルビットの設定にかかわらず割り込みフラグビットがセットされるため、フラグビットをポーリングすれば割り込みを生成せずにサービスルーチンを実行する事ができます。
レジスタ 22-8: UIE: USB 割り込みイネーブル レジスタ
U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
— SOFIE STALLIE IDLEIE TRNIE ACTVIE UERRIE URSTIE
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 未実装ビット : 「0」として読み出し
bit 6 SOFIE: SOF (Start-of-Frame) トークン割り込みイネーブルビット
1 = SOF トークン割り込みを許可する0 = SOF トークン割り込みを禁止する
bit 5 STALLIE: STALL ハンドシェイク割り込みイネーブルビット
1 = STALL 割り込みを許可する0 = STALL 割り込みを禁止する
bit 4 IDLEIE: アイドル検出割り込みイネーブルビット
1 = アイドル検出割り込みを許可する0 = アイドル検出割り込みを禁止する
bit 3 TRNIE: トランザクション完了割り込みイネーブルビット
1 = トランザクション割り込みを許可する0 = トランザクション割り込みを禁止する
bit 2 ACTVIE: バス アクティビティ検出割り込みイネーブルビット
1 = バス アクティビティ検出割り込みを許可する0 = バス アクティビティ検出割り込みを禁止する
bit 1 UERRIE: USB エラー割り込みイネーブルビット
1 = USB エラー割り込みを許可する0 = USB エラー割り込みを禁止する
bit 0 URSTIE: USB リセット割り込みイネーブルビット
1 = USB リセット割り込みを許可する0 = USB リセット割り込みを禁止する
DS41350D_JP - p. 270 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
22.5.3 USB エラー割り込みステータス レジスタ (UEIR)
UEIR レジスタ ( レジスタ 22-9) は、USB モジュール内のエラー割り込み要因のフラグビットを格納します。これらの割り込み要因は、UEIE レジスタの対応する割り込みイネーブルビットで制御します。全てのUSB エラーフラグの論理和が取られ、割り込みロジックの 上位レベルで USB エラー割り込みフラグ(UERRIF) が生成されます。
各エラービットは、エラー条件が検出されるとただちにセットされます。このため、通常割り込みはトークンの処理終了に対応しません。
SIE によってセットされた割り込みフラグビットは、ソフトウェアで「0」を書き込んでクリアする必要があります。
レジスタ 22-9: UEIR: USB エラー割り込みステータス レジスタ
R/C-0 U-0 U-0 R/C-0 R/C-0 R/C-0 R/C-0 R/C-0
BTSEF — — BTOEF DFN8EF CRC16EF CRC5EF PIDEF
bit 7 bit 0
凡例 :
R = 読み出し可能ビット C = クリア可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 BTSEF: ビットスタッフ エラー フラグビット
1 = ビットスタッフ エラーを検出した0 = ビットスタッフ エラーを検出しない
bit 6-5 未実装ビット : 「0」として読み出し
bit 4 BTOEF: バス ターンアラウンド タイムアウト エラー フラグビット
1 = バス ターンアラウンド タイムアウトが発生した ( 直前の EOP からアイドル状態が 16 ビット時間を超過 )
0 = バス ターンアラウンド タイムアウトが発生していない
bit 3 DFN8EF: データフィールド サイズ エラー フラグビット
1 = データフィールドのバイト数が整数でない0 = データフィールドのバイト数が整数である
bit 2 CRC16EF: CRC16 エラー フラグビット
1 = CRC16 のチェックに失敗した0 = CRC16 のチェックに合格した
bit 1 CRC5EF: CRC5 ホストエラー フラグビット
1 = CRC5 エラーにより、トークンパケットが拒否された0 = トークンパケットが正しく受信された
bit 0 PIDEF: PID チェックエラー フラグビット
1 = PID チェックに失敗した0 = PID チェックに合格した
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 271
PIC18F/LF1XK50
22.5.4 USB エラー割り込みイネーブル レジスタ (UEIE)
UEIE レジスタ ( レジスタ 22-10) は、USB エラー割り込み要因のイネーブルビットを格納します。これらのビットをセットすると、UEIR レジスタ内のエラー割り込み要因を個別に有効にして、割り込みロジック上位レベルの UERR ビットに伝達する事ができます。
UIE レジスタ同様、これらのイネーブルビットは、割り込み条件の発生をマイクロコントローラの割り込みロジックに伝達するかのみを制御します。割り込み条件が成立するとイネーブルビットの設定にかかわらずフラグビットがセットされるため、フラグビットをポーリングすれば割り込みを発生させずにサービスルーチンを実行する事ができます。
レジスタ 22-10: UEIE: USB エラー割り込みイネーブル レジスタ
R/W-0 U-0 U-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0
BTSEE — — BTOEE DFN8EE CRC16EE CRC5EE PIDEE
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 BTSEE: ビットスタッフ エラー割り込みイネーブルビット
1 = ビットスタッフ エラー割り込みを許可する0 = ビットスタッフ エラー割り込みを禁止する
bit 6-5 未実装ビット : 「0」として読み出し
bit 4 BTOEE: バス ターンアラウンド タイムアウト エラー割り込みイネーブルビット
1 = バス ターンアラウンド タイムアウト エラー割り込みを許可する0 = バス ターンアラウンド タイムアウト エラー割り込みを禁止する
bit 3 DFN8EE: データフィールド サイズ エラー割り込みイネーブルビット
1 = データフィールド サイズ エラー割り込みを許可する0 = データフィールド サイズ エラー割り込みを禁止する
bit 2 CRC16EE: CRC16 エラー割り込みイネーブルビット
1 = CRC16 エラー割り込みを許可する0 = CRC16 エラー割り込みを禁止する
bit 1 CRC5EE: CRC5 ホストエラー割り込みイネーブルビット
1 = CRC5 ホストエラー割り込みを許可する0 = CRC5 ホストエラー割り込みを禁止する
bit 0 PIDEE: PID チェックエラー割り込みイネーブルビット
1 = PID チェックエラー割り込みを許可する0 = PID チェックエラー割り込みを禁止する
DS41350D_JP - p. 272 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
22.6 USB 電源モード
電源の要件や構成は USB アプリケーションによって様々です。一般的な電源モードとしては、バスパワーのみ、セルフパワーのみ、セルフパワー主体のデュアルパワーがあります。ここでは、ごく一般的なケースについて説明します。また、USB トランシーバの消費電流の推定方法についても説明します。
22.6.1 バスパワーのみ
バスパワーのみのモードでは、アプリケーションで必要な電源は全て USB バスから供給します ( 図 22-9)。これは、デバイスの電源モードとして もシンプルな方式です。
USB 2.0 仕様の突入電流の条件を満たすには、VBUS とグランド間の総実効静電容量を 10 µF 以下とする必要があります。この条件を満たさない場合、何らかの突入電流制限が必要になります。詳細は、USB 2.0 仕様書のセクション 7.2.4 を参照してください。
USB 2.0 仕様では、全ての USB デバイスが低消費電力サスペンドモードをサポートする事も必要です。USB サスペンドモードでは、デバイスが USB ケーブルの 5 V VBUS ラインから消費できる電流は 500 A 以下 (リモート ウェイクアップに対応したハイパワー デバイスでは 2.5 mA 以下 ) と定められています。
ホストは USB デバイスに対する全ての USB トラフィックを 3 ms 以上停止し、USB デバイスをサスペンド モードに移行させます。この時、UIR レジスタのIDLEIF ビットがセットされます。
USB サスペンドモード中も D+ または D- のプルアップ抵抗はアクティブにしておく必要があるため、その消費電流も含めてサスペンドモード時の消費電流を500 A/2.5 mA 以内に抑える必要があります。
図 22-9: バスパワーのみ
22.6.2 セルフパワーのみ
セルフパワーのみのモードでは、USB アプリケーションは外部電源で動作するため、USB バスからの電力はほとんど消費しません。図 22-10 に例を示します。
USB 仕様の条件を満たすには、ホストが VBUS を highに駆動するまでUSBモジュール (およびD+またはD-のプルアップ抵抗 ) を有効にしてはなりません。
アプリケーションから USB ケーブルの 5 V VBUS ピンには決して電流を供給しないでください。
図 22-10: セルフパワーのみ
VDD
VUSB
VSS
VBUS
VDD
VUSB
VSS
VSELF
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 273
PIC18F/LF1XK50
22.6.3 セルフパワー主体のデュアルパワー
アプリケーションによっては、デュアルパワー動作が必要です。デュアルパワー モードでは、アプリケーションは通常セルフパワーで動作し、自己給電が不可能な場合のみ USB からの給電に切り換えます。図 22-11 に、セルフパワー モードと USB バスパワーモードを自動的に切り換えるセルフパワー主体のデュアルパワーの簡単な例を示します。
デュアルパワー デバイスは、突入電流とサスペンドモード電流に関する要件も全て満たす必要があります。また、VBUSがhighに駆動される前にUSBモジュールを有効にしてはなりません。これらの要件の詳細は、22.6.1「バスパワーのみ」と 22.6.2「セルフパワーのみ」を参照してください。また、デュアルパワー デバイスから USB ケーブルの 5 V VBUS ピンには決して電流を供給しないでください。
図 22-11: デュアルパワーの例
22.6.4 USB トランシーバの消費電流
USB トランシーバの消費電流は、USB ケーブルの特性インピーダンス、ケーブルの長さ、VUSB 供給電圧、USB ケーブルを流れる実際のデータパターンによって変化します。ケーブルが長いほど静電容量が大きくなり、出力状態をスイッチングする際の消費電力は全体的に大きくなります。
「IN」トラフィック データパターンの方が「OUT」トラフィック データパターンよりも消費電流ははるかに大きくなります。これは、OUT トラフィックではホスト側が USB ケーブルを駆動するのに対し、IN トラフィックではPIC® デバイスがUSBケーブルを駆動する必要があるためです。
USB ケーブルで転送されるデータは、NRZI で符号化されます。NRZI 符号化方式では、ビットが「0」の時にトランシーバの出力状態 (「J」状態または「K」状態 ) が反転します。NRZI で符号化したビットが「1」の場合、トランシーバの出力状態は変化しません(ビット スタッフィングで変化する場合を除く )。従って、データ ビットの値が「0」の IN トラフィックの場合は出力状態を変化させるためにトランシーバが USBケーブルを充放電する必要があるため、消費電流はも大きくなります。
NRZI 符号化およびビット スタッフィングの詳細はUSB 2.0 仕様書のセクション 7.1 に記載されています。ただし、PIC18F1XK50/PIC18LF1XK50を使用してUSBアプリケーションを設計するには、そこまで詳細な知識は不要です。特に、ビット スタッフィング / アンスタッフィング、NRZI 符号化 / 復号化、CRC生成 / チェックについては SIE がハードウェアで処理します。
トランシーバの総消費電流はアプリケーションによって異なります。式 22-1 を使うと、フルスピード アプリケーションの消費電流を予測できます。
例 22-2 に、この式を理論上のアプリケーションに使用した例を示します。
Note: USB バスからデバイスに供給できる電流には制限があるため、注意が必要です。USB 2.0 仕様では、ローパワー デバイスの場合 100 mA まで、ハイパワー デバイスの場合 500 mA までと制限されています。
VDD
VUSB
VSS
VBUS
VSELF~5V
~5V
100 k
DS41350D_JP - p. 274 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
式 22-1: USB トランシーバ消費電流の予測
例 22-2: USB トランシーバの消費電流の計算方法
IXCVR = + IPULLUP(60 mA • VUSB • PZERO • PIN • LCABLE)
(3.3V • 5m)
凡例 : VUSB: VUSB ピンに印加される電圧 (V) (3.0 ~ 3.6 V)
PZERO: PIC® デバイスが送信する IN トラフィックのうち、値が「0」のビットの割合 (10 進数 )
PIN: バス帯域幅全体のうち、IN トラフィックに使用する帯域幅の割合 (10 進数 )
LCABLE: USB ケーブルの長さ ( 単位 : m)USB 2.0 仕様では、フルスピード アプリケーションで使用できるケー
ブルは 5 m 以内と規定されています。
IPULLUP: 定格 1.5 k のプルアップ抵抗 ( 有効にした場合 ) が USB ケーブルに供給する必要のある電流。USBケーブルのホストまたはハブ側には定格 15 kの抵抗 (14.25 ~ 24.8 k) があり、D+ および D- ライン
を両方共グランドにプルダウンします。このため、バス アイドル状態 ( パケット転送の合間や USB サ
スペンド モード時等 ) でも最大 218 A の静止電流が流れます (3.3 V 時 )。
また、IPULLUP はバス トラフィックの状態によっても変化します。USB 帯域幅を最大限に利用した場合
(IN/OUT トラフィックに関わらずラインをほぼ常時「K」ステートに駆動するようなデータの場合 )、最
大 2.2 mA に達します。
ここでは、以下の条件を仮定したアプリケーションを例に、USB トランシーバの消費電流を計算します。
• VUSB と VDD には 3.3 V を印加し、コア電圧レギュレータを有効にする。
• このアプリケーションはフルスピード アプリケーションで、1 つの割り込み IN エンドポイントを使用する。このエンドポイントから 1 ms ごとに 64 バイトのパケットを送信する。送信バイト数は制限しない。このアプリケーションで OUT エンドポイントへのトラフィックがあるかどうかは問わない。
• アプリケーションの回路基板では標準の USB「タイプ B」または「ミニ B」コネクタを使用する。
この場合、IN エンドポイントを流れるデータの値に制約がないため、PZERO = 100% = 1 とします。これは、理論上 64 kBps のデータのバイト値が全て 00h となる可能性があるためです。「0」ビットでは USB トランシーバの出力状態が切り換わるため、ケーブルの充放電に必要な消費電流が多くなります。今回の例では、理論上送信データビットの値が全て「0」となる可能性があります。通常は「1」と「0」が混ざって現れるため、これが理論上の最大値です。
このアプリケーションでは、1.5 MBps (12 Mbps) の全帯域幅のうち 64 kBps を IN トラフィックに使用するため、以下の式が成り立ちます。
また、このアプリケーションでは標準の「タイプ B」または「ミニ B」コネクタを採用しているため、エンドユーザは最長 5 m のケーブルを使用できます。従って、ワーストケースのケーブル長は以下の通りです。
LCABLE = 5 m
IPULLUP = 2.2 mA と仮定します。IPULLUP の実際の値は 218 A 程度と予測されますが、ここでは最悪値を想定しておきます。USB 帯域幅は、ハブを経由してルートポートに接続している全てのデバイスで共有します。このアプリケーションを接続した USB 1.1 ハブに他のデバイスが接続されている場合、バス上を流れるホストから他のデバイス宛てのトラフィックもこのアプリケーションから見える可能性があります。ソースに関係なく、何らかのトラフィックが存在すると IPULLUP の値はベース値の 218 A より大きくなるため、最悪値の 2.2 mA を想定しておきます。
従って、以下の式で消費電流を求める事ができます。
この式で求めた値は近似値であり、実際にはガードバンドを追加するか、実際のアプリケーションでテストする事を推奨します。PIC18F1XK50/PIC18LF1XK50 のその他の消費電流 ( コアの動作、他の I/O ラインの駆動、各種モジュールの動作に必要な消費電流の合計 ) にトランシーバの消費電流を加算したものが全体の消費電流となります。
Pin =64 kBps
1.5 MBps = 4.3% = 0.043
IXCVR = + 2.2 mA = 4.8 mA(60 mA • 3.3V • 1 • 0.043 • 5m)
(3.3V • 5m)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 275
PIC18F/LF1XK50
22.7 オシレータ
USB モジュールにはクロックに関するいくつかの要件があります。フルスピード動作の場合、48 MHz のクロック源が必要です。ただしその場合でも、マイクロコントローラ コアやその他の周辺モジュールは48 MHz クロックで動作する必要はありません。利用可能なクロック オプションの詳細は、2.11「USB 動作」を参照してください。
22.8 D+/D- ピンの状態変化割り込み
PIC18F/LF1XK50 は、D+ および D- データピンの両方で状態変化割り込み機能をサポートしています。この機能を利用すると、デバイスを USB ホスト / ハブに接続した時に電圧レベルの変化を検出する事ができます。
USB ホスト / ハブは、D+ および D- ピンに 15 Kのプルダウン抵抗があります。PIC18F/LF1XK50 をバスに接続すると、D+ および D- ピンは電圧の変化を検出できます。バスから切断した際にピンの状態を high に維持するには、各ピンに外付け抵抗が必要です。
状態変化割り込み機能を利用するには、USB モジュールを無効 (USBEN = 0) にしておく必要があります。USB モジュールを有効にすると (USBEN = 1)、D+ および D- ピンの状態変化割り込みは自動的に無効になります。詳細は、7.11「PORTA と PORTB の状態変化割り込み」を参照してください。
22.9 USB ファームウェアとドライバ
マイクロチップ社は、USB ファームウェアやドライバサポート等、アプリケーション固有のリソースを数多く提供しています。 新のファームウェアとドライバサポートについては、www.microchip.com を参照してください。
表 22-4: USB モジュールの動作に関連するレジスタ (1)
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 詳細ページ
INTCON GIE/GIEH PEIE/GIEL TMR0IE INT0IE RABIE TMR0IF INT0IF RABIF 69
IPR2 OSCFIP C1IP C2IP EEIP BCL1IP USBIP TMR3IP — 77
PIR2 OSCFIF C1IF C2IF EEIF BCL1IF USBIF TMR3IF — 73
PIE2 OSCFIE C1IE C2IE EEIE BCL1IE USBIE TMR3IE — 75
UCON — PPBRST SE0 PKTDIS USBEN RESUME SUSPND — 254
UCFG UTEYE — — UPUEN — FSEN PPB1 PPB0 256
USTAT — ENDP3 ENDP2 ENDP1 ENDP0 DIR PPBI — 258
UADDR — ADDR6 ADDR5 ADDR4 ADDR3 ADDR2 ADDR1 ADDR0 260
UFRML FRM7 FRM6 FRM5 FRM4 FRM3 FRM2 FRM1 FRM0 254
UFRMH — — — — — FRM10 FRM9 FRM8 254
UIR — SOFIF STALLIF IDLEIF TRNIF ACTVIF UERRIF URSTIF 268
UIE — SOFIE STALLIE IDLEIE TRNIE ACTVIE UERRIE URSTIE 270
UEIR BTSEF — — BTOEF DFN8EF CRC16EF CRC5EF PIDEF 271
UEIE BTSEE — — BTOEE DFN8EE CRC16EE CRC5EE PIDEE 272
UEP0 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL 259
UEP1 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL 259
UEP2 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL 259
UEP3 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL 259
UEP4 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL 259
UEP5 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL 259
UEP6 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL 259
UEP7 — — — EPHSHK EPCONDIS EPOUTEN EPINEN EPSTALL 259
凡例 : — = 未実装ビット、「0」として読み出し。網掛けのビットは USB モジュールには使用しません。
Note 1: この表には、データメモリ空間のバンク 15 にハードウェア マッピングされた SFR のみを記載しています。バンク 4にマッピングされたバッファ ディスクリプタ レジスタは厳密には SFR と異なるため、別の表 22-3 にまとめています。
DS41350D_JP - p. 276 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
22.10 USB の概要
ここでは USB の基本的な概念と、USB デバイスの設計に役立つ情報を紹介します。ただし、USB 仕様およびクラス仕様に関する膨大な情報をここに掲載することはできません。詳細については必ず www.usb.org で公開されている USB 仕様を確認してください。既にUSB の詳細を把握している方も、USB の基礎と概要を再確認する意味でこのセクションを一読する事をお勧めします。
22.10.1 階層型フレームワーク
図 22-12 に示すように、USB デバイスの機能は階層型フレームワークで構成されます。各階層は、デバイス内の機能レベルに対応しています。デバイス以外で上位の階層となるのがコンフィグレーションです。1 つのデバイスに複数のコンフィグレーションを設定する事もできます。例えば、デバイスによってはセルフパワーのみのモードとバスパワーのみのモードに基づいて複数の電力要件を定義する事もあります。
各コンフィグレーションには複数のインターフェイスを設定できます。各インターフェイスでそのコンフィグレーションの特定のモードをサポートできます。
インターフェイスの下の階層がエンドポイントです。データのやりとりはこの階層で直接行います。エンドポイントは双方向で 大 16 個まで持つ事ができます。エンドポイント0は常にコントロール エンドポイントです。既定値ではデバイスをバスに接続した際、エンドポイント 0 を使用してデバイスのコンフィグレーションを行ないます。
22.10.2 フレーム
USB バスでは、情報をフレームと呼ばれる 1 ms のタイムスロットにグループ化して通信を行ないます。1 つのフレームには、複数のデバイスとエンドポイントに対するトランザクションを混載できます。図 22-8にフレーム内のトランザクションの例を示します。
22.10.3 転送
USB仕様では、以下4種類の転送が定義されています。
• アイソクロナス転送 : 大量のデータ ( 大1023バイト ) をリアルタイムに転送するのに適した方式です。ただし、データのエラーチェックは行いません。音声信号等、わずかなデータロスであれば問題にならないストリーミング アプリケーションに適しています。
• バルク転送 : バルク転送も大量のデータ転送に使用するモードですが、転送のリアルタイム性が保証されない代わりにデータのエラーチェックを行う点がアイソクロナス転送と異なります。
• インタラプト転送 : 少量のデータブロックをリアルタイムに転送でき、データのエラーチェックも行われる転送モードです。
• コントロール転送 : デバイスのセットアップ制御に使用する転送モードです。
フルスピード デバイスではこれら4つの転送モードを全てサポートしますが、ロースピード デバイスで使用できるのはインタラプト転送とコントロール転送のみです。
22.10.4 電源
電源は USB バスから供給されます。USB 仕様はバスパワーの要件を定義しています。デバイスはセルフパワーまたはバスパワーで動作します。セルフパワー デバイスは外部電源で動作し、バスパワー デバイスはUSB バスから供給される電力で動作します。
図 22-12: USB の階層
Device
Configuration
Interface
Endpoint
Interface
Endpoint Endpoint Endpoint Endpoint
To other Configurations (if any)
To other Interfaces (if any)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 277
PIC18F/LF1XK50
USB 仕様はバスから供給できる電力の上限を定義しています。各デバイスに対しては、約 5 V で 100 mAの供給を保証します (1 単位負荷 )。さらに電力が必要な場合、 大 500 mA まで要求できます。ただし 1 単位負荷を超える電力は単なるリクエストであり、ホストやハブから必ず要求通りの電流が供給されるとは限りません。このため、消費電流が 1 単位負荷を超えるデバイスは、必要に応じて 1 単位負荷以下のローパワー コンフィグレーションを備えておく必要があります。
USB 仕様はサスペンドモードも定義しています。サスペンド時の消費電流は、1 秒当たり平均 500 A 以内に抑える必要があります。バス アクティビティのない( すなわち SOF トークンのない ) 状態が 3 ms 継続したら、デバイスはサスペンド状態に移行する必要があります。サスペンドモードに移行したら、10 ms 以内にデバイスの消費電流を引き下げる必要があります。同様に、デバイスがウェイクアップ信号を送出する場合、消費電流がサスペンド時の上限を超えてから10 ms以内にウェイクアップ信号を送出する必要があります。
22.10.5 エニュメレーション
デバイスを 初にバスに接続すると、ホストはデバイスを識別するためにエニュメレーション処理を開始します。これは、ホストからデバイスに問い合わせを実行し、消費電力、データレートおよびサイズ、プロトコル等、デバイスに関する情報を取得し、これらの情報をディスクリプタに格納するというものです。代表的なエニュメレーションの流れは以下の通りです。
1. USB リセット : デバイスをリセットする。この状態では、デバイスはコンフィグレーションが行われておらず、アドレスもない ( アドレス 0)。
2. デバイス ディスクリプタの取得 : ホストがデバイス ディスクリプタの一部を要求する。
3. USBリセット : もう一度デバイスをリセットする。
4. アドレスの設定 : ホストがデバイスにアドレスを割り当てる。
5. デバイス ディスクリプタの取得 : ホストがデバイス ディスクリプタを取得し、メーカー、デバイスの種類、コントロール パケットの 大サイズ等の情報を収集する。
6. コンフィグレーション ディスクリプタを取得する。
7. その他のディスクリプタを取得する。
8. コンフィグレーションを実行する。
実際のエニュメレーション処理の内容はホストによって異なります。
22.10.6 ディスクリプタ
標準ディスクリプタには全部で 8種類がありますが、このデバイスで特に重要なのは以下に説明する 5 つです。
22.10.6.1 デバイス ディスクリプタ
デバイス ディスクリプタには、メーカー名、製品番号、シリアル番号、デバイスクラス、コンフィグレーションの数等、全般的な情報を記述します。デバイス ディスクリプタは、各デバイスに 1 つのみです。
22.10.6.2 コンフィグレーション ディスクリプタ
コンフィグレーション ディスクリプタには、デバイスの電力消費量や、このコンフィグレーションでサポートするインターフェイスの数等の情報を記述します。1 つのデバイスで複数のコンフィグレーションを持つ事ができます ( 低消費電力用と通常の消費電力用等 )。
22.10.6.3 インターフェイス ディスクリプタ
インターフェイス ディスクリプタには、このインターフェイスで使用するエンドポイントの数とインターフェイスのクラスを記述します。1 つのコンフィグレーションに複数のインターフェイスを設定する事ができます。
22.10.6.4 エンドポイント ディスクリプタ
エンドポイント ディスクリプタには、転送の種類(22.10.3「転送」) と方向、エンドポイントに関するその他の情報を記述します。1 つのデバイスに多数のエンドポイントを設定できる他、同じエンドポイントを複数のコンフィグレーションで共用する事もできます。
22.10.6.5 ストリング ディスクリプタ
上述のディスクリプタの多くは、1 つまたは複数のストリング ディスクリプタを参照します。ストリングディスクリプタには、それぞれの階層 (22.10.1「階層型フレームワーク」) に関する情報を自然言語の文字列で記述します。しばしば、これらの文字列をホストに表示する事で、ユーザがデバイスを識別できるようにします。ストリング ディスクリプタは Unicode 形式でエンコードされます。また、メモリを節約するためにストリング ディスクリプタを省略する事もできます。
22.10.7 バス速度
USB デバイスは、バスへの接続状態と動作速度をホストに通知する必要があります。そこで、バスアタッチイベントの際に 1.5 k の抵抗をバスに接続する事によってこの通知を行うようにしています。
D+ ラインと D- ラインのどちらを 3.3 V にプルアップするかは、デバイスの動作速度によって異なります。ロースピード デバイスの場合、プルアップ抵抗を D-ラインに接続します。フルスピード デバイスの場合、プルアップ抵抗を D+ ラインに接続します。
22.10.8 クラス仕様とドライバ
USB 仕様にはクラス仕様が含まれており、これらのサポートはオペレーティング システム ベンダによるオプションです。クラスには、オーディオ、マスストレージ、コミュニケーション、ヒューマン インターフェイス (HID) 等があります。ほとんどの場合、USB デバイスと「対話」するにはホスト側にドライバが必要です。カスタム アプリケーションでは、ドライバの新規開発が必要となる事もあります。しかし一般的なデバイスクラスに対しては、一般的なホストシステム向けのドライバが提供されている場合がほとんどです。そのようなドライバがあれば、再利用が可能です。
DS41350D_JP - p. 278 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
23.0 リセット
PIC18F/LF1XK50 のリセットには、以下の種類があります。
a) パワーオン リセット (POR) b) 通常動作時の MCLR リセット
c) 電源管理モード時の MCLR リセット d) コード実行中のウォッチドッグ タイマ (WDT)
リセット
e) プログラム可能なブラウンアウト リセット (BOR)f) RESET命令
g) スタックフル リセット
h) スタック アンダーフロー リセット
ここでは、MCLR、POR、BOR によって発生するリセット、および各種スタートアップ タイマの動作について説明します。スタックリセット イベントについては 3.1.2.4「スタックフルおよびスタック アンダーフローによるリセット」で説明しています。WDT リセットについては 24.2「ウォッチドッグ タイマ (WDT)」で説明します。
図 23-1 に、内蔵リセット回路の概略ブロック図を示します。
23.1 RCON レジスタ
デバイスリセット イベントは、RCON レジスタ ( レジスタ 23-1) を使って監視します。このレジスタの下位5 ビットは、発生したリセットイベントの種類を示します。ほとんどの場合、これらのビットはイベントによってのみクリアされ、イベント発生後にアプリケーションでセットする必要があります。これらのフラグビットの状態を全て読み出す事によって、発生したリセットの種類を特定できます。詳細は、23.6「レジスタのリセット状態」で説明します。
RCONレジスタは、割り込みの優先度を設定する IPENビットと、BOR をソフトウェア制御するためのSBOREN ビットという 2 つの制御ビットも格納します。割り込みの優先度については 7.0「割り込み」で説明します。BOR については 23.4「ブラウンアウトリセット (BOR)」で説明します。
図 23-1: 内蔵リセット回路の概略ブロック図
External Reset
MCLR
VDD
OSC1
WDTTime-out
VDD RiseDetect
OST/PWRT
LFINTOSC
POR Pulse
OST(2)
10-bit Ripple Counter
PWRT(2)
11-bit Ripple Counter
Enable OST(1)
Enable PWRT
Note 1: 各種状態におけるタイムアウトは、表 23-2 を参照してください。
2: PWRT および OST カウンタは POR と BOR によってリセットされます (23.3、23.4 参照 )。
Brown-outReset
BOREN
RESETInstruction
StackPointer
Stack Full/Underflow Reset
Sleep( )_IDLE
1024 Cycles
65.5 ms32 s
MCLRE
S
R QChip_Reset
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 279
PIC18F/LF1XK50
レジスタ 23-1: RCON: リセット制御レジスタ
R/W-0 R/W-1 U-0 R/W-1 R-1 R-1 R/W-0 R/W-0
IPEN SBOREN(1) — RI TO PD POR(2) BOR
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7 IPEN: 割り込み優先度イネーブルビット
1 = 割り込みに対する優先度レベルの設定を有効にする0 = 割り込みに対する優先度レベルの設定を無効にする
bit 6 SBOREN: ソフトウェア BOR イネーブルビット (1)
BOREN<1:0> = 01の場合 :1 = BOR を有効にする0 = BOR を無効にする
BOREN<1:0> = 00、10、または 11の場合 :ビットは無効、「0」として読み出し
bit 5 未実装ビット : 「0」として読み出し
bit 4 RI: RESET命令フラグビット
1 = RESET命令は実行されていない ( ファームウェアまたはパワーオン リセットによってセットされる )
0 = RESET命令が実行され、デバイスがリセットされた (コードによってリセットされた後はファームウェアによってセットする必要がある )
bit 3 TO: ウォッチドッグ タイムアウト フラグビット
1 = パワーアップ、CLRWDT命令または SLEEP命令によってセット 0 = WDT タイムアウトが発生した
bit 2 PD: パワーダウン検出フラグビット
1 = パワーアップまたは CLRWDT命令によってセット0 = SLEEP命令の実行によってセット
bit 1 POR: パワーオン リセット ステータス ビット (2)
1 = パワーオン リセットは発生していない0 = パワーオン リセットが発生した ( パワーオン リセットの発生後、ソフトウェアによってセット
する必要がある )
bit 0 BOR: ブラウンアウト リセット ステータス ビット (3)
1 = ブラウンアウト リセットは発生していない ( ファームウェアによってのみセットできる )0 = ブラウンアウト リセットが発生した (POR またはブラウンアウト リセットの発生後、ファーム
ウェアによってセットする必要がある )
Note 1: SBOREN が有効に設定されている場合、リセット状態は「1」になります。それ以外の場合は「0」です。
2: POR 時の実際のリセット値は、デバイスリセットの種類によって決まります。詳細は、このレジスタの注記および 23.6「レジスタのリセット状態」を参照してください。
3: 表 23-3 を参照してください。
DS41350D_JP - p. 280 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
23.2 マスタクリア (MCLR)
MCLR ピンは、デバイスを外部からリセットする際に使用します。このピンを low に保持すると、リセットが発生します。このデバイスの MCLR リセット回路はノイズフィルタを備え、微小パルスを無視します。
WDT を含めいずれの内部リセットも、MCLR ピンをlow に駆動する事はありません。
PIC18F/LF1XK50 では、コンフィグレーション ビットMCLRE で MCLR 入力を無効にできます。MCLR を無効にすると、このピンはデジタル入力になります。詳細は、9.1「PORTA、TRISA、LATA レジスタ」を参照してください。
23.3 パワーオン リセット (POR)
VDD が一定のしきい値を超えると、デバイス内部でパワーオン リセット パルスが生成されます。これにより、デバイスは VDD が十分に立ち上がってから起動できます。
POR 回路を使用するには、VDD と MCLR ピンの間に抵抗 (1 ~ 10 k) を挟みます。これにより、外付けのRC 部品を使用せずにパワーオン リセット遅延を確保できます。
デバイスがリセット状態を終了して通常動作を開始する際、デバイスの動作パラメータ ( 電圧、周波数、温度等 ) は正常動作の要件を満たす必要があります。これらの条件を満たさない場合、動作条件が満たされるまでデバイスをリセット状態に維持する必要があります。
POR イベントが発生すると、RCON レジスタの PORビットに記録されます。このビットは、POR イベントが発生すると「0」になりますが、他のリセットイベントでは変化しません。また、POR ビットはいかなるハードウェア イベントによっても「1」になる事はありません。POR イベントを繰り返し検出するには、POR 発生後にこのビットをソフトウェアで「1」にセットする必要があります。
図 23-2: 外部パワーオン リセット回路(VDD 電源の立ち上がりが遅い場合 )
Note 1: 外部パワーオン リセット回路が必要になるの
は、VDD 電源の立ち上がりが極端に遅い場合
のみです。VDD 降下時にコンデンサを急速に
放電できるよう、ダイオード D を使用します。
2: R の電圧降下がデバイスの電気的仕様に違反
しないよう、R < 40 kとする事を推奨します。
3: R1 1 kとすると、静電気放電 (ESD) や電気
的オーバーストレス(EOS)によってMCLR/VPP
ピンの絶縁破壊が発生した場合に、外付けコン
デンサ C から MCLR に流れこむ電流を制限で
きます。
C
R1RD
VDD
MCLR
VDD
PIC® MCU
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 281
PIC18F/LF1XK50
23.4 ブラウンアウト リセット (BOR)
PIC18F/LF1XK50 の BOR 回路では、様々な設定や省電力オプションを利用できます。BOR は、コンフィグレーション レジスタ CONFIG2L の BORV<1:0> および BOREN<1:0> ビットで制御します。BOR の設定は全部で 4 通りあります ( 表 23-1 参照 )。
BORのしきい値電圧はBORV<1:0>ビットで設定します。BOR が有効な場合 (BOREN<1:0> が「00」以外の場合 )、VDD が VBOR を下回る状態が TBOR より長く続くとデバイスはリセットされます。VDD が VBOR を下回る時間が TBOR より短い場合、リセットが発生するかどうかは確定しません。VDD が VBOR を上回るまで、デバイスはブラウンアウト リセット状態のままとなります。
パワーアップ タイマが有効な場合、VDD が VBOR を上回った時点からカウントを開始し、TPWRT の間デバイスをリセット状態に保ちます。パワーアップ タイマの動作中に VDD が VBOR を下回ると、デバイスは再びブラウンアウト リセット状態に戻り、パワーアップ タイマは初期化されます。次に VDD が VBOR を上回った時点からパワーアップ タイマによる遅延が再び加算されます。
BOR とパワーアップ タイマ (PWRT) は別々に設定します。BOR リセットを有効にしても、PWRT は自動的には有効になりません。
23.4.1 ソフトウェア制御による BOR
BOREN<1:0> = 01の場合、BOR の有効 / 無効をユーザ ソフトウェアで制御できます。この切り換えは、RCON レジスタの制御ビット SBOREN で行います。SBOREN をセットすると、上述の BOR 機能が有効になります。SBOREN をクリアすると BOR は完全に無効になります。SBOREN ビットはこのモードでのみ有効で、それ以外のモードでは常に「0」として読み出されます。
BOR をソフトウェアで制御できれば、BOR の設定を変更するためにデバイスを再プログラムしなくても環境に合わせてユーザ アプリケーションを柔軟に調整できます。また、BOR 回路の消費電流もなくす事ができるため、ソフトウェアでデバイスの消費電力を調整できる利点もあります。一般に、BOR 回路の消費電流はごくわずかですが、ローパワー アプリケーションでは問題となる場合もあります。
23.4.2 BOR の検出
BOR 有効時、BOR または POR イベントが発生するとBOR ビットは常に「0」にリセットされます。このため、BOR の状態を読み出して BOR イベントが発生したかどうかを判断するのは困難です。POR と BOR の状態を同時に確認する方がより確実です。POR イベント発生直後はPORとBORビットの両方がソフトウェアによって「1」にリセットされます。それに対して、BOR が「0」で POR が「1」の場合、BOR イベントが発生したと判断できます。
23.4.3 スリープモード時の BOR の無効化
BOREN<1:0> = 10 の場合、BOR はハードウェアによって制御され、動作も前述の通りです。デバイスがスリープモードに移行すると BOR は自動的に無効になります。その後、デバイスがスリープモードからその他の動作モードに戻ると、BOR は自動的に有効な状態に戻ります。
こうする事で、(BOR をもっとも必要とする ) コード実行中にブラウンアウト状態からデバイスを保護できます。しかも、スリープモード時に BOR 回路が消費する電流もなくす事ができます。
表 23-1: BOR の設定
Note: BORをソフトウェアで制御する場合でも、BOR リセットのしきい値電圧はコンフィグレーション ビットBORV<1:0>で設定します。ソフトウェアでしきい値を変更する事はできません。
BOR の設定 SBOREN の状態
(RCON<6>)BOR の動作
BOREN1 BOREN0
0 0 利用不可 BOR は無効です。有効にするにはコンフィグレーション ビットの再プログラミングが必要です。
0 1 利用可 BOR の有効 / 無効をソフトウェアで切り換えます。SBOREN ビットで制御します。
1 0 利用不可 BOR をハードウェアで制御し、実行モードとアイドルモードで有効化します。スリープモードで無効化します。
1 1 利用不可 BOR は有効です。無効にするにはコンフィグレーション ビットの再プログラミングが必要です。
DS41350D_JP - p. 282 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
23.5 デバイスリセット タイマ
PIC18F/LF1XK50には3種類のタイマを内蔵しており、これらを使い分ける事でパワーオン リセット プロセスを制御します。これらのタイマは、コード実行前にデバイスのクロックを安定させる事を主な目的としています。タイマの種類は、以下の通りです。
• パワーアップ タイマ (PWRT)
• オシレータ スタートアップ タイマ (OST)
• PLL ロック タイムアウト
23.5.1 パワーアップ タイマ (PWRT)
PIC18F/LF1XK50のパワーアップ タイマ (PWRT)は、LFINTOSCをクロック源とする 11ビットのカウンタです。このタイマにより、約 2048 x 32 s = 65.6 msの遅延を確保します。PWRT がカウント中は、デバイスはリセット状態のままとなります。
PWRT による遅延時間は、LFINTOSC のクロックによって変化する他、温度やプロセスばらつきの影響も受けるため、チップごとに異なります。詳細は、27.0「電気的仕様」を参照してください。
PWRT は、コンフィグレーション ビット PWRTEN をクリアすると有効になります。
23.5.2 オシレータ スタートアップ タイマ(OST)
オシレータ スタートアップ タイマ (OST) は、PWRTタイマの遅延時間が終了後、さらにオシレータ (OSC1入力 )1024 サイクル分の遅延を追加します。これにより、水晶またはセラミック振動子が起動して安定するまでの時間を確保します。
OST による遅延が確保されるのは XT、LP、HS、HSPLLモードのいずれかにおいて、パワーオン リセットが発生した場合、または外部オシレータが停止する電源管理モードから復帰した場合のみです。
23.5.3 PLL ロック タイムアウト
PLL モードで PLL を有効にした場合、パワーオン リセット後のタイムアウト シーケンスは他のオシレータ モードとは若干異なります。PLL がメイン オシレータ周波数にロックするのに十分な時間を確保できるよう、専用のタイマを使用して固定の遅延時間を生成します。この PLL ロック タイムアウト (TPLL) は 2 ms(typ.) で、オシレータ スタートアップ タイムアウトの後に追加します。
23.5.4 タイムアウト シーケンス
パワーアップ後のタイムアウト シーケンスは以下の通りです。
1. POR パルスがクリアになった後、PWRT タイムアウトが開始する ( 有効時 )。
2. 続いて、OST が開始する。
タイムアウトの合計時間は、オシレータの設定とPWRT の状態によって異なります。図 23-3、図 23-4、図 23-5、図 23-6、図 23-7 はいずれもパワーアップ タイマを有効にし、デバイスが HS オシレータ モードの時のパワーアップ後のタイムアウト シーケンスを示しています。図 23-3 ~ 23-6 は、XT および LP モード時のタイムアウト シーケンスでもあります。RC モードで PWRT を無効にしたデバイスの場合、パワーアップ後のタイムアウトはゼロです。
タイムアウトは POR パルスを起点に発生するため、MCLRを十分長い時間lowに維持すると、その間に全てのタイムアウト シーケンスが終了し、その後で MCLRをhighにするとただちにプログラム実行が開始します( 図 23-5)。この方法は、テスト時や並列に動作する複数の PIC18F1XK50/PIC18LF1XK50を同期させる場合に便利です。
表 23-2: 各種状態におけるタイムアウト
オシレータ設定
パワーアップ (2) およびブラウンアウト 電源管理モード終了時PWRTEN = 0 PWRTEN = 1
HSPLL 66 ms(1) + 1024 TOSC + 2 ms(2) 1024 TOSC + 2 ms(2) 1024 TOSC + 2 ms(2)
HS、XT、LP 66 ms(1) + 1024 TOSC 1024 TOSC 1024 TOSC
EC、ECIO 66 ms(1) — —
RC、RCIO 66 ms(1) — —
INTIO1、INTIO2 66 ms(1) — —
Note 1: パワーアップ タイマ (PWRT) の遅延時間は 66 ms (65.5 ms) ( 定格 ) です。2: PLL のロックに必要な時間は 2 ms ( 定格 ) です。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 283
PIC18F/LF1XK50
図 23-3: パワーアップ後のタイムアウト シーケンス(MCLRをVDDに接続、VDD立ち上がり時間 < TPWRT)
図 23-4: パワーアップ後のタイムアウト シーケンス (MCLR を VDD に接続しない ): 例 1
図 23-5: パワーアップ後のタイムアウト シーケンス (MCLR を VDD に接続しない ): 例 2
TPWRT
TOST
VDD
MCLR
INTERNAL POR
PWRT TIME-OUT
OST TIME-OUT
INTERNAL RESET
TPWRT
TOST
VDD
MCLR
INTERNAL POR
PWRT TIME-OUT
OST TIME-OUT
INTERNAL RESET
VDD
MCLR
INTERNAL POR
PWRT TIME-OUT
OST TIME-OUT
INTERNAL RESET
TPWRT
TOST
DS41350D_JP - p. 284 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 23-6: 立ち上がり時間が遅い場合 (MCLR を VDD に接続、VDD 立ち上がり時間 > TPWRT)
図 23-7: PLL を有効にした場合の POR 後のタイムアウト シーケンス (MCLR を VDD に接続 )
VDD
MCLR
INTERNAL POR
PWRT TIME-OUT
OST TIME-OUT
INTERNAL RESET
0V
5V
TPWRT
TOST
TPWRT
TOST
VDD
MCLR
INTERNAL POR
PWRT TIME-OUT
OST TIME-OUT
INTERNAL RESET
PLL TIME-OUT
TPLL
Note: TOST = 1024 クロックサイクル
TPLL 2 ms (max.)。PWRT タイマの先頭から 3 段分
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 285
PIC18F/LF1XK50
23.6 レジスタのリセット状態
レジスタの中には、リセットによって値が変化しないものもあります。そのようなレジスタは POR 時の状態が不明であり、その他のリセットによって状態が変化する事もありません。それ以外のレジスタは、発生したリセットの種類に応じた「リセット状態」に戻ります。
WDT ウェイクアップは通常動作の再開と見なされるため、ほとんどのレジスタが影響を受けません。RCONレジスタのステータス ビット RI、TO、PD、POR、BOR がセットされるかクリアされるかは、リセットの発生状況によって異なります ( 表 23-3 参照 )。これらのビットを使用すると、リセットの種類をソフトウェアで判定できます。
表 23-4 に、全ての特殊機能レジスタのリセット状態を示します。この表では、「パワーオン リセット / ブラウンアウト リセット時」、「マスタクリア /WDT リセット時」、「WDT ウェイクアップ時」の 3 種類に分けてリセット状態を示します。
表 23-3: RCON レジスタのステータスビットの意味と初期化状態
リセットの種類プログラム カウンタ
RCON レジスタ STKPTR レジスタ
SBOREN RI TO PD POR BOR STKFUL STKUNF
パワーオン リセット 0000h 1 1 1 1 0 0 0 0
RESET命令 0000h u(2) 0 u u u u u u
ブラウンアウト リセット 0000h u(2) 1 1 1 u 0 u u
電源管理実行モード時の MCLR 0000h u(2) u 1 u u u u u
電源管理アイドル / スリープモード時の MCLR
0000h u(2) u 1 0 u u u u
フルパワーまたは電源管理ランモード時の WDT タイムアウト
0000h u(2) u 0 u u u u u
フルパワー実行時の MCLR 0000h u(2) u u u u u u u
スタックフル リセット(STVREN = 1)
0000h u(2) u u u u u 1 u
スタック アンダーフロー リセット (STVREN = 1)
0000h u(2) u u u u u u 1
スタック アンダーフロー エラー(STVREN = 0 でリセットでない場合 )
0000h u(2) u u u u u u 1
電源管理アイドル / スリープモード時の WDT タイムアウト
PC + 2 u(2) u 0 0 u u u u
割り込みによる電源管理モードの終了時
PC + 2(1) u(2) u u 0 u u u u
凡例 : u = 不変
Note 1: GIEH または GIEL ビットがセットされている状態で割り込みによってウェイクアップした場合、PC には割り込みベクタ (008h または 0018h) が読み込まれます。
2: ソフトウェア BOR が有効な場合 ( コンフィグレーション ビット BOREN<1:0> = 01かつ SBOREN = 1)、リセットの種類が POR の場合のみリセット状態は「1」となり、それ以外のリセットの場合は不変です。ソフトウェア BOR が無効な場合、リセット状態は常に「0」です。
DS41350D_JP - p. 286 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 23-4: 全レジスタの初期化状態
レジスタ アドレスパワーオン リセット、
ブラウンアウト リセット
MCLR リセット、WDT リセット、RESET命令、
スタックリセット
WDT ウェイクアップ、 割り込みによるウェイク
アップ
TOSU FFFh ---0 0000 ---0 0000 ---0 uuuu(3)
TOSH FFEh 0000 0000 0000 0000 uuuu uuuu(3)
TOSL FFDh 0000 0000 0000 0000 uuuu uuuu(3)
STKPTR FFCh 00-0 0000 uu-0 0000 uu-u uuuu(3)
PCLATU FFBh ---0 0000 ---0 0000 ---u uuuu
PCLATH FFAh 0000 0000 0000 0000 uuuu uuuu
PCL FF9h 0000 0000 0000 0000 PC + 2(2)
TBLPTRU FF8h ---0 0000 ---0 0000 ---u uuuu
TBLPTRH FF7h 0000 0000 0000 0000 uuuu uuuu
TBLPTRL FF6h 0000 0000 0000 0000 uuuu uuuu
TABLAT FF5h 0000 0000 0000 0000 uuuu uuuu
PRODH FF4h xxxx xxxx uuuu uuuu uuuu uuuu
PRODL FF3h xxxx xxxx uuuu uuuu uuuu uuuu
INTCON FF2h 0000 000x 0000 000u uuuu uuuu(1)
INTCON2 FF1h 1111 -1-1 1111 -1-1 uuuu -u-u(1)
INTCON3 FF0h 11-0 0-00 11-0 0-00 uu-u u-uu(1)
INDF0 FEFh N/A N/A N/A
POSTINC0 FEEh N/A N/A N/A
POSTDEC0 FEDh N/A N/A N/A
PREINC0 FECh N/A N/A N/A
PLUSW0 FEBh N/A N/A N/A
FSR0H FEAh ---- 0000 ---- 0000 ---- uuuu
FSR0L FE9h xxxx xxxx uuuu uuuu uuuu uuuu
WREG FE8h xxxx xxxx uuuu uuuu uuuu uuuu
INDF1 FE7h N/A N/A N/A
POSTINC1 FE6h N/A N/A N/A
POSTDEC1 FE5h N/A N/A N/A
PREINC1 FE4h N/A N/A N/A
PLUSW1 FE3h N/A N/A N/A
凡例 : u = 不変、x = 未知、- = 未実装、「0」として読み出し、q = 条件による網掛けのセルは、本デバイスにその条件が適用されない事を示します。
Note 1: INTCONx または PIRx レジスタの 1 つまたは複数のビットが影響を受けます ( ウェイクアップを実行するため )。
2: 割り込みによってウェイクアップし、GIEL または GIEH ビットがセットされている場合、PC には割り込みベクタ (0008h または 0018h) が読み込まれます。
3: 割り込みによってウェイクアップし、GIEL または GIEH ビットがセットされている場合、TOSU、TOSH、TOSL には 新の PC の値が読み込まれます。STKPTR の参照先は、ハードウェア スタックの次のアドレスに更新されます。
4: 各条件下でのリセット値は、表 23-3 を参照してください。5: CONFIG3H の PBADEN ビットが「0」の場合、ANSELH レジスタのビットは全て「0」に初期化されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 287
PIC18F/LF1XK50
FSR1H FE2h ---- 0000 ---- 0000 ---- uuuu
FSR1L FE1h xxxx xxxx uuuu uuuu uuuu uuuu
BSR FE0h ---- 0000 ---- 0000 ---- uuuu
INDF2 FDFh N/A N/A N/A
POSTINC2 FDEh N/A N/A N/A
POSTDEC2 FDDh N/A N/A N/A
PREINC2 FDCh N/A N/A N/A
PLUSW2 FDBh N/A N/A N/A
FSR2H FDAh ---- 0000 ---- 0000 ---- uuuu
FSR2L FD9h xxxx xxxx uuuu uuuu uuuu uuuu
STATUS FD8h ---x xxxx ---u uuuu ---u uuuu
TMR0H FD7h 0000 0000 0000 0000 uuuu uuuu
TMR0L FD6h xxxx xxxx uuuu uuuu uuuu uuuu
T0CON FD5h 1111 1111 1111 1111 uuuu uuuu
OSCCON FD3h 0011 qq00 0011 qq00 uuuu uuuu
OSCCON2 FD2h ---- -10x ---- -10x ---- -uuu
WDTCON FD1h ---- ---0 ---- ---0 ---- ---u
RCON(4)FD0h 0q-1 11q0 0q-q qquu uq-u qquu
TMR1H FCFh xxxx xxxx uuuu uuuu uuuu uuuu
TMR1L FCEh xxxx xxxx uuuu uuuu uuuu uuuu
T1CON FCDh 0000 0000 u0uu uuuu uuuu uuuu
TMR2 FCCh 0000 0000 0000 0000 uuuu uuuu
PR2 FCBh 1111 1111 1111 1111 1111 1111
T2CON FCAh -000 0000 -000 0000 -uuu uuuu
SSPBUF FC9h xxxx xxxx uuuu uuuu uuuu uuuu
SSPADD FC8h 0000 0000 0000 0000 uuuu uuuu
SSPSTAT FC7h 0000 0000 0000 0000 uuuu uuuu
SSPCON1 FC6h 0000 0000 0000 0000 uuuu uuuu
SSPCON2 FC5h 0000 0000 0000 0000 uuuu uuuu
表 23-4: 全レジスタの初期化状態 ( 続き )
レジスタ アドレスパワーオン リセット、
ブラウンアウト リセット
MCLR リセット、WDT リセット、RESET命令、
スタックリセット
WDT ウェイクアップ、 割り込みによるウェイク
アップ
凡例 : u = 不変、x = 未知、- = 未実装、「0」として読み出し、q = 条件による網掛けのセルは、本デバイスにその条件が適用されない事を示します。
Note 1: INTCONx または PIRx レジスタの 1 つまたは複数のビットが影響を受けます ( ウェイクアップを実行するため )。
2: 割り込みによってウェイクアップし、GIEL または GIEH ビットがセットされている場合、PC には割り込みベクタ (0008h または 0018h) が読み込まれます。
3: 割り込みによってウェイクアップし、GIEL または GIEH ビットがセットされている場合、TOSU、TOSH、TOSL には 新の PC の値が読み込まれます。STKPTR の参照先は、ハードウェア スタックの次のアドレスに更新されます。
4: 各条件下でのリセット値は、表 23-3 を参照してください。5: CONFIG3H の PBADEN ビットが「0」の場合、ANSELH レジスタのビットは全て「0」に初期化されます。
DS41350D_JP - p. 288 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
ADRESH FC4h xxxx xxxx uuuu uuuu uuuu uuuu
ADRESL FC3h xxxx xxxx uuuu uuuu uuuu uuuu
ADCON0 FC2h --00 0000 --00 0000 --uu uuuu
ADCON1 FC1h ---- 0000 ---- 0000 ---- uuuu
ADCON2 FC0h 0-00 0000 0-00 0000 u-uu uuuu
CCPR1H FBFh xxxx xxxx uuuu uuuu uuuu uuuu
CCPR1L FBEh xxxx xxxx uuuu uuuu uuuu uuuu
CCP1CON FBDh 0000 0000 0000 0000 uuuu uuuu
REFCON2 FBCh ---0 0000 ---0 0000 ---u uuuu
REFCON1 FBBh 000- 00-0 000- 00-0 uuu- uu-u
REFCON0 FBAh 0001 00-- 0001 00-- uuuu uu--
PSTRCON FB9h ---0 0001 ---0 0001 ---u uuuu
BAUDCON FB8h 0100 0-00 0100 0-00 uuuu u-uu
PWM1CON FB7h 0000 0000 0000 0000 uuuu uuuu
ECCP1AS FB6h 0000 0000 0000 0000 uuuu uuuu
TMR3H FB3h xxxx xxxx uuuu uuuu uuuu uuuu
TMR3L FB2h xxxx xxxx uuuu uuuu uuuu uuuu
T3CON FB1h 0000 0000 uuuu uuuu uuuu uuuu
SPBRGH FB0h 0000 0000 0000 0000 uuuu uuuu
SPBRG FAFh 0000 0000 0000 0000 uuuu uuuu
RCREG FAEh 0000 0000 0000 0000 uuuu uuuu
TXREG FADh 0000 0000 0000 0000 uuuu uuuu
TXSTA FACh 0000 0010 0000 0010 uuuu uuuu
RCSTA FABh 0000 000x 0000 000x uuuu uuuu
EEADR FAAh 0000 0000 0000 0000 uuuu uuuu
EEDATA FA8h 0000 0000 0000 0000 uuuu uuuu
EECON2 FA7h 0000 0000 0000 0000 0000 0000
EECON1 FA6h xx-0 x000 uu-0 u000 uu-0 u000
表 23-4: 全レジスタの初期化状態 ( 続き )
レジスタ アドレスパワーオン リセット、
ブラウンアウト リセット
MCLR リセット、WDT リセット、RESET命令、
スタックリセット
WDT ウェイクアップ、 割り込みによるウェイク
アップ
凡例 : u = 不変、x = 未知、- = 未実装、「0」として読み出し、q = 条件による網掛けのセルは、本デバイスにその条件が適用されない事を示します。
Note 1: INTCONx または PIRx レジスタの 1 つまたは複数のビットが影響を受けます ( ウェイクアップを実行するため )。
2: 割り込みによってウェイクアップし、GIEL または GIEH ビットがセットされている場合、PC には割り込みベクタ (0008h または 0018h) が読み込まれます。
3: 割り込みによってウェイクアップし、GIEL または GIEH ビットがセットされている場合、TOSU、TOSH、TOSL には 新の PC の値が読み込まれます。STKPTR の参照先は、ハードウェア スタックの次のアドレスに更新されます。
4: 各条件下でのリセット値は、表 23-3 を参照してください。5: CONFIG3H の PBADEN ビットが「0」の場合、ANSELH レジスタのビットは全て「0」に初期化されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 289
PIC18F/LF1XK50
IPR2 FA2h 1111 111- 1111 111- uuuu uuu-
PIR2 FA1h 0000 000- 0000 000- uuuu uuu-(1)
PIE2 FA0h 0000 000- 0000 000- uuuu uuu-
IPR1 F9Fh -111 1111 -111 1111 -uuu uuuu
PIR1 F9Eh -000 0000 -000 0000 -uuu uuuu(1)
PIE1 F9Dh -000 0000 -000 0000 -uuu uuuu
OSCTUNE F9Bh 0000 0000 0000 0000 uuuu uuuu
TRISC F95h 1111 1111 1111 1111 uuuu uuuu
TRISB F94h 1111 ---- 1111 ---- uuuu ----
TRISA F93h --11 ---- --11 ---- --uu ----
LATC F8Bh xxxx xxxx uuuu uuuu uuuu uuuu
LATB F8Ah xxxx ---- uuuu ---- uuuu ----
LATA F89h --xx ---- --uu ---- --uu ----
PORTC F82h xxxx xxxx uuuu uuuu uuuu uuuu
PORTB F81h xxxx ---- uuuu ---- uuuu ----
PORTA F80h --xx x-xx --xx x-xx --uu u-uu
ANSELH(5)F7Fh ---- 1111 ---- 1111 ---- uuuu
ANSEL F7Eh 1111 1--- 1111 1--- uuuu u---
IOCB F7Ah 0000 ---- 0000 ---- uuuu ----
IOCA F79h --00 0-00 --00 0-00 --uu u-uu
WPUB F78h 1111 ---- 1111 ---- uuuu ----
WPUA F77h --11 1--- --11 1--- --uu u---
SLRCON F76h ---- -111 ---- -111 ---- -uuu
SSPMSK F6Fh 1111 1111 1111 1111 uuuu uuuu
CM1CON0 F6Dh 0000 0000 0000 0000 uuuu uuuu
CM2CON1 F6Ch 0000 0000 0000 0000 uuuu uuuu
CM2CON0 F6Bh 0000 0000 0000 0000 uuuu uuuu
SRCON1 F69h 0000 0000 0000 0000 uuuu uuuu
SRCON0 F68h 0000 0000 0000 0000 uuuu uuuu
表 23-4: 全レジスタの初期化状態 ( 続き )
レジスタ アドレスパワーオン リセット、
ブラウンアウト リセット
MCLR リセット、WDT リセット、RESET命令、
スタックリセット
WDT ウェイクアップ、 割り込みによるウェイク
アップ
凡例 : u = 不変、x = 未知、- = 未実装、「0」として読み出し、q = 条件による網掛けのセルは、本デバイスにその条件が適用されない事を示します。
Note 1: INTCONx または PIRx レジスタの 1 つまたは複数のビットが影響を受けます ( ウェイクアップを実行するため )。
2: 割り込みによってウェイクアップし、GIEL または GIEH ビットがセットされている場合、PC には割り込みベクタ (0008h または 0018h) が読み込まれます。
3: 割り込みによってウェイクアップし、GIEL または GIEH ビットがセットされている場合、TOSU、TOSH、TOSL には 新の PC の値が読み込まれます。STKPTR の参照先は、ハードウェア スタックの次のアドレスに更新されます。
4: 各条件下でのリセット値は、表 23-3 を参照してください。5: CONFIG3H の PBADEN ビットが「0」の場合、ANSELH レジスタのビットは全て「0」に初期化されます。
DS41350D_JP - p. 290 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
UCON F64h -0x0 000- -0x0 000- -uuu uuu-
USTAT F63h -xxx xxx- -xxx xxx- -uuu uuu-
UIR F62h -000 0000 -000 0000 -uuu uuuu
UCFG F61h 0--0 -000 0--0 -000 u--u -uuu
UIE F60h -000 0000 -000 0000 -uuu uuuu
UEIR F5Fh 0--0 0000 0--0 0000 u--u uuuu
UFRMH F5Eh ---- -xxx ---- -xxx ---- -uuu
UFRML F5Dh xxxx xxxx xxxx xxxx uuuu uuuu
UADDR F5Ch -000 0000 -000 0000 -uuu uuuu
UEIE F5Bh 0--0 0000 0--0 0000 u--u uuuu
UEP7 F5Ah ----0 0000 ----0 0000 ----u uuuu
UEP6 F59h ----0 0000 ----0 0000 ----u uuuu
UEP5 F58h ----0 0000 ----0 0000 ----u uuuu
UEP4 F57h ----0 0000 ----0 0000 ----u uuuu
UEP3 F56h ----0 0000 ----0 0000 ----u uuuu
UEP2 F55h ----0 0000 ----0 0000 ----u uuuu
UEP1 F54h ----0 0000 ----0 0000 ----u uuuu
UEP0 F53h ----0 0000 ----0 0000 ----u uuuu
表 23-4: 全レジスタの初期化状態 ( 続き )
レジスタ アドレスパワーオン リセット、
ブラウンアウト リセット
MCLR リセット、WDT リセット、RESET命令、
スタックリセット
WDT ウェイクアップ、 割り込みによるウェイク
アップ
凡例 : u = 不変、x = 未知、- = 未実装、「0」として読み出し、q = 条件による網掛けのセルは、本デバイスにその条件が適用されない事を示します。
Note 1: INTCONx または PIRx レジスタの 1 つまたは複数のビットが影響を受けます ( ウェイクアップを実行するため )。
2: 割り込みによってウェイクアップし、GIEL または GIEH ビットがセットされている場合、PC には割り込みベクタ (0008h または 0018h) が読み込まれます。
3: 割り込みによってウェイクアップし、GIEL または GIEH ビットがセットされている場合、TOSU、TOSH、TOSL には 新の PC の値が読み込まれます。STKPTR の参照先は、ハードウェア スタックの次のアドレスに更新されます。
4: 各条件下でのリセット値は、表 23-3 を参照してください。5: CONFIG3H の PBADEN ビットが「0」の場合、ANSELH レジスタのビットは全て「0」に初期化されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 291
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 292 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
24.0 CPU の特殊機能
PIC18F/LF1XK50 は、外付け部品を省いて 小限のコストで 大限の信頼性を実現するために、以下の機能を備えています。
• オシレータの選択
• リセット :
- パワーオン リセット (POR)
- パワーアップ タイマ (PWRT)
- オシレータ スタートアップ タイマ (OST)
- ブラウンアウト リセット (BOR)
• 割り込み
• ウォッチドッグ タイマ (WDT)
• コード保護機能
• ID ロケーション
• インサーキット シリアル プログラミング ™
オシレータは、アプリケーションの周波数、電力、精度、コストに合わせて柔軟に構成できます。これらのオプションの詳細は、2.0「オシレータ モジュール」で説明しています。
デバイスのリセットと割り込みの詳細は、本データシートの別のセクションで詳しく説明します。
リセット用のパワーアップ タイマとオシレータ スタートアップ タイマに加えて、PIC18F/LF1XK50 はウォッチドッグ タイマを備えています。このタイマはコンフィグレーション ビットで常時有効にできる他、ソフトウェアで有効 / 無効を制御する事もできます。
また、内部 RC オシレータによりフェイルセーフ クロック モニタ (FSCM) と 2 段階起動も実現しています。FSCM は外部クロックをバックグラウンドで監視し、障害発生時に自動的に内部RCオシレータのクロックに切り換える機能です。2 段階起動とは、プライマリ クロック源がスタートアップ遅延中に、内部 RC オシレータを使用する事でほぼ瞬時にコード実行を開始する機能です。
これらの機能は全てコンフィグレーション レジスタのビットで有効 / 無効の切り換え、設定を行います。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 293
PIC18F/LF1XK50
24.1 コンフィグレーション ビット
コンフィグレーション ビットをプログラムする (「0」として読み出し ) か、プログラムしない (「1」として読み出し ) 事によって、デバイスを様々に設定できます。これらのビットは、プログラム メモリの 300000hから始まるアドレスにマッピングされています。
アドレス 300000h は、ユーザプログラム メモリ空間外です。このアドレスはコンフィグレーション メモリ空間 (300000h ~ 3FFFFFh) に属しており、テーブルの読み書きによってのみアクセスできます。
コンフィグレーション レジスタのプログラミングは、フラッシュメモリのプログラミングと同様の方法で行います。EECON1 レジスタの WR ビットをセットすると、自己タイマによるコンフィグレーション レジスタへの書き込みが開始します。通常動作モードでは、TBLWT 命令で TBLPTR ポインタの参照先をコンフィグレーション レジスタに指定して、コンフィグレーション レジスタへの書き込み用アドレスとデータを設定します。WR ビットをセットすると、コンフィグレーション レジスタへのロング ライトが開始します。コンフィグレーション レジスタへの書き込みは1バイト単位で実行されます。コンフィグレーション セルへの書き込みまたは消去を行うには、TBLWT命令を使用してセルに「1」または「0」を書き込みます。フラッシュ プログラミングの詳細は、4.5「フラッシュ プログラムメモリへの書き込み」を参照してください。
表 24-1: コンフィグレーション ビットとデバイス ID
ファイル名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0既定値 /
未プログラミング
時の値
300000h CONFIG1L — — USBDIV CPUDIV1 CPUDIV0 — — — --00 0---
300001h CONFIG1H IESO FCMEN PCLKEN PLLEN FOSC3 FOSC2 FOSC1 FOSC0 0010 0111
300002h CONFIG2L — — — BORV1 BORV0 BOREN1 BOREN0 PWRTEN ---1 1111
300003h CONFIG2H — — — WDTPS3 WDTPS2 WDTPS1 WDTPS0 WDTEN ---1 1111
300005h CONFIG3H MCLRE — — — HFOFST — — — 1--- 1---
300006h CONFIG4L BKBUG(2) ENHCPU — — BBSIZ LVP — STVREN -0-- 01-1
300008h CONFIG5L — — — — — — CP1 CP0 ---- --11
300009h CONFIG5H CPD CPB — — — — — — 11-- ----
30000Ah CONFIG6L — — — — — — WRT1 WRT0 ---- --11
30000Bh CONFIG6H WRTD WRTB WRTC — — — — — 111- ----
30000Ch CONFIG7L — — — — — — EBTR1 EBTR0 ---- --11
30000Dh CONFIG7H — EBTRB — — — — — — -1-- ----
3FFFFEh DEVID1(1) DEV2 DEV1 DEV0 REV4 REV3 REV2 REV1 REV0 qqqq qqqq(1)
3FFFFFh DEVID2(1) DEV10 DEV9 DEV8 DEV7 DEV6 DEV5 DEV4 DEV3 0000 1100
凡例 : x = 未知、u = 変化なし、– = 未実装、q = 条件による 網掛けの欄は未実装、「0」として読み出し
Note 1: DEVID1 の値は、レジスタ 24-13 を参照してください。DEVID レジスタは読み出し専用で、ユーザは書き込みできません。
2: BKBUG は ICD デバイスでのみ使用します。それ以外の場合、このビットは未実装で「1」として読み出されます。
DS41350D_JP - p. 294 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 24-1: CONFIG1L: コンフィグレーション レジスタ 1 LOW U-0 U-0 R/P-0 R/P-0 R/P-0 U-0 U-0 U-0
— — USBDIV CPUDIV1 CPUDIV0 — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット P = プログラム可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 x = ビットは未知
bit 7-6 未実装ビット : 「0」として読み出し
bit 5 USBDIV: USB クロック選択ビットロースピード USB 動作時のクロック源を選択1 = OSC1/OSC2 を 2 分周した USB クロックを供給0 = OSC1/OSC2 オシレータ ブロックから分周なしで USB クロックを直接供給
bit 4-3 CPUDIV<1:0>: CPU システムクロック選択ビット11 = CPU システムクロックを 4 分周する10 = CPU システムクロックを 3 分周する01 = CPU システムクロックを 2 分周する00 = CPU システムクロックを分周しない
bit 2-0 未実装ビット : 「0」として読み出し
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 295
PIC18F/LF1XK50
レジスタ 24-2: CONFIG1H: コンフィグレーション レジスタ 1 HIGH
R/P-0 R/P-0 R/P-1 R/P-0 R/P-0 R/P-1 R/P-1 R/P-1
IESO FCMEN PCLKEN PLLEN FOSC3 FOSC2 FOSC1 FOSC0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット P = プログラム可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 x = ビットは未知
bit 7 IESO: 内部 / 外部オシレータ切り換えビット1 = オシレータ切り換えモードを有効にする0 = オシレータ切り換えモードを無効にする
bit 6 FCMEN: フェイルセーフ クロック モニタ イネーブルビット1 = フェイルセーフ クロック モニタを有効にする0 = フェイルセーフ クロック モニタを無効にする
bit 5 PCLKEN: プライマリ クロック イネーブルビット1 = プライマリ クロックを有効にする0 = プライマリ クロックをソフトウェアで制御する
bit 4 PLLEN: 4 X PLL イネーブルビット1 = オシレータの周波数を 4 逓倍する0 = PLL をソフトウェアで制御する
bit 3-0 FOSC<3:0>: オシレータ選択ビット1111 = 外部 RC オシレータ (OSC2 は CLKOUT 機能 )1110 = 外部 RC オシレータ (OSC2 は CLKOUT 機能 )1101 = EC ( 低電力 )1100 = EC ( 低電力、OSC2 は CLKOUT 機能 )1011 = EC ( 中電力 )1010 = EC ( 中電力、OSC2 は CLKOUT 機能 )1001 = 内部 RC オシレータ (OSC2 は CLKOUT 機能 )1000 = 内部 RC オシレータ0111 = 外部 RC オシレータ0110 = 外部 RC オシレータ (OSC2 は CLKOUT 機能 )0101 = EC ( 高電力 )0100 = EC ( 高電力、OSC2 は CLKOUT 機能 )0011 = 外部 RC オシレータ (OSC2 は CLKOUT 機能 )0010 = HS オシレータ0001 = XT オシレータ0000 = LP オシレータ
DS41350D_JP - p. 296 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 24-3: CONFIG2L: コンフィグレーション レジスタ 2 LOW
U-0 U-0 U-0 R/P-1 R/P-1 R/P-1 R/P-1 R/P-1
— — — BORV1(1) BORV0(1) BOREN1(2) BOREN0(2) PWRTEN(2)
bit 7 bit 0
凡例 :
R = 読み出し可能ビット P = プログラム可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 x = ビットは未知
bit 7-5 未実装ビット :「0」として読み出し
bit 4-3 BORV<1:0>: ブラウンアウト リセット電圧ビット (1)
11 = VBOR を 1.9 V ( 定格 ) に設定10 = VBOR を 2.2 V ( 定格 ) に設定01 = VBOR を 2.7 V ( 定格 ) に設定00 = VBOR を 3.0 V ( 定格 ) に設定
bit 2-1 BOREN<1:0>: ブラウンアウト リセット イネーブルビット (2)
11 = ブラウンアウト リセットをハードウェアのみで有効にする (SBOREN は無効 )10 = ブラウンアウト リセットをハードウェアのみで有効にし、スリープモードで無効にする
(SBOREN は無効 ) 01 = ブラウンアウト リセットを有効にし、ソフトウェアで制御する (SBOREN が有効 ) 00 = ブラウンアウト リセットをハードウェアでもソフトウェアでも無効にする
bit 0 PWRTEN: パワーアップ タイマ イネーブルビット (2)
1 = PWRT を無効にする 0 = PWRT を有効にする
Note 1: 仕様は、表 27-5 を参照してください。2: パワーアップ タイマはブラウンアウト リセットから独立しているため、これらの機能は個別に制御でき
ます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 297
PIC18F/LF1XK50
レジスタ 24-4: CONFIG2H: コンフィグレーション レジスタ 2 HIGH
U-0 U-0 U-0 R/P-1 R/P-1 R/P-1 R/P-1 R/P-1
— — — WDTPS3 WDTPS2 WDTPS1 WDTPS0 WDTEN
bit 7 bit 0
凡例 :
R = 読み出し可能ビット P = プログラム可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 x = ビットは未知
bit 7-5 未実装ビット :「0」として読み出し
bit 4-1 WDTPS<3:0>: ウォッチドッグ タイマ ポストスケーラ選択ビット1111 = 1:32,7681110 = 1:16,3841101 = 1:8,1921100 = 1:4,0961011 = 1:2,0481010 = 1:1,0241001 = 1:5121000 = 1:2560111 = 1:1280110 = 1:640101 = 1:320100 = 1:160011 = 1:80010 = 1:40001 = 1:20000 = 1:1
bit 0 WDTEN: ウォッチドッグ タイマ イネーブルビット1 = WDT を常に有効にする。SWDTEN ビットは無効となる0 = WDT を WDTCON レジスタの SWDTEN ビットで制御する
DS41350D_JP - p. 298 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 24-5: CONFIG3H: コンフィグレーション レジスタ 3 HIGH
R/P-1 U-0 U-0 U-0 R/P-1 U-0 U-0 U-0
MCLRE — — — HFOFST — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット P = プログラム可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 x = ビットは未知
bit 7 MCLRE: MCLR ピン イネーブルビット 1 = MCLR ピンを有効にし、RA3 入力ピンを無効にする0 = RA3 入力ピンを有効にし、MCLR を無効にする
bit 6-4 未実装ビット :「0」として読み出し
bit 3 HFOFST: HFINTOSC 高速起動ビット1 = オシレータが安定するのを待たずに HFINTOSC が CPU へのクロック供給を開始する0 = HFINTOSC が安定してからシステムクロックを供給する
bit 2-0 未実装ビット :「0」として読み出し
レジスタ 24-6: CONFIG4L: コンフィグレーション レジスタ 4 LOW
R/W-1(1) R/W-0 U-0 U-0 R/P-0 R/P-1 U-0 R/P-1
BKBUG ENHCPU — — BBSIZ LVP — STVREN
bit 7 bit 0
凡例 :
R = 読み出し可能ビット P = プログラム可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 x = ビットは未知
bit 7 BKBUG: バックグラウンド デバッガ イネーブルビット (1)
1 = バックグラウンド デバッガを無効にする 0 = バックグラウンド デバッガを有効にする
bit 6 ENHCPU: 拡張 CPU イネーブルビット1 = 拡張 CPU を有効にする 0 = 拡張 CPU を無効にする
bit 5-4 未実装ビット :「0」として読み出し
bit 3 BBSIZ: ブートブロック サイズ選択ビット1 = PIC18F14K50/PIC18LF14K50 のブートブロック サイズを 2 kW にする
(PIC18F13K50/PIC18LF13K50 は 1 kW)0 = PIC18F14K50/PIC18LF14K50 のブートブロック サイズを 1 kW にする
(PIC18F13K50/PIC18LF13K50 は 512 W)
bit 2 LVP: 単電源 ICSP™ イネーブルビット1 = 単電源 ICSP を有効にする 0 = 単電源 ICSP を無効にする
bit 1 未実装ビット :「0」として読み出し
bit 0 STVREN: スタックフル / アンダーフロー リセット イネーブルビット1 = スタックフル / アンダーフローでリセットする 0 = スタックフル / アンダーフローでリセットしない
Note 1: BKBUG は ICD デバイスでのみ使用します。それ以外の場合、このビットは未実装で「1」として読み出されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 299
PIC18F/LF1XK50
レジスタ 24-7: CONFIG5L: コンフィグレーション レジスタ 5 LOW
U-0 U-0 U-0 U-0 U-0 U-0 R/C-1 R/C-1
— — — — — — CP1 CP0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 C = クリアのみ可能ビット
bit 7-2 未実装ビット :「0」として読み出し
bit 1 CP1: コード保護ビット1 = ブロック 1 のコードを保護しない 0 = ブロック 1 のコードを保護する
bit 0 CP0: コード保護ビット1 = ブロック 0 のコードを保護しない 0 = ブロック 0 のコードを保護する
レジスタ 24-8: CONFIG5H: コンフィグレーション レジスタ 5 HIGH
R/C-1 R/C-1 U-0 U-0 U-0 U-0 U-0 U-0
CPD CPB — — — — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 C = クリアのみ可能ビット
bit 7 CPD: データ EEPROM コード保護ビット1 = データ EEPROM のコードを保護しない0 = データ EEPROM のコードを保護する
bit 6 CPB: ブートブロック コード保護ビット1 = ブートブロックのコードを保護しない0 = ブートブロックのコードを保護する
bit 5-0 未実装ビット :「0」として読み出し
DS41350D_JP - p. 300 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 24-9: CONFIG6L: コンフィグレーション レジスタ 6 LOW
U-0 U-0 U-0 U-0 U-0 U-0 R/C-1 R/C-1
— — — — — — WRT1 WRT0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 C = クリアのみ可能ビット
bit 7-2 未実装ビット :「0」として読み出し
bit 1 WRT1: 書き込み保護ビット1 = ブロック 1 を書き込み保護しない0 = ブロック 1 を書き込み保護する
bit 0 WRT0: 書き込み保護ビット1 = ブロック 0 を書き込み保護しない0 = ブロック 0 を書き込み保護する
レジスタ 24-10: CONFIG6H: コンフィグレーション レジスタ 6 HIGH
R/C-1 R/C-1 R-1 U-0 U-0 U-0 U-0 U-0
WRTD WRTB WRTC(1) — — — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 C = クリアのみ可能ビット
bit 7 WRTD: データ EEPROM 書き込み保護ビット1 = データ EEPROM を書き込み保護しない0 = データ EEPROM を書き込み保護する
bit 6 WRTB: ブートブロック書き込み保護ビット1 = ブートブロックを書き込み保護しない0 = ブートブロックを書き込み保護する
bit 5 WRTC: コンフィグレーション レジスタ書き込み保護ビット (1)
1 = コンフィグレーション レジスタを書き込み保護しない0 = コンフィグレーション レジスタを書き込み保護する
bit 4-0 未実装ビット :「0」として読み出し
Note 1: このビットは、通常の実行モード時には読み出し専用で、プログラムモード時のみ書き込みが可能です。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 301
PIC18F/LF1XK50
レジスタ 24-11: CONFIG7L: コンフィグレーション レジスタ 7 LOW
U-0 U-0 U-0 U-0 U-0 U-0 R/C-1 R/C-1
— — — — — — EBTR1 EBTR0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 C = クリアのみ可能ビット
bit 7-2 未実装ビット :「0」として読み出し
bit 1 EBTR1: テーブル読み出し保護ビット1 = ブロック 1 を他のブロックで実行されるテーブル読み出しから保護しない 0 = ブロック 1 を他のブロックで実行されるテーブル読み出しから保護する
bit 0 EBTR0: テーブル読み出し保護ビット1 = ブロック 0 を他のブロックで実行されるテーブル読み出しから保護しない 0 = ブロック 0 を他のブロックで実行されるテーブル読み出しから保護する
レジスタ 24-12: CONFIG7H: コンフィグレーション レジスタ 7 HIGH
U-0 R/C-1 U-0 U-0 U-0 U-0 U-0 U-0
— EBTRB — — — — — —
bit 7 bit 0
凡例 :
R = 読み出し可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 C = クリアのみ可能ビット
bit 7 未実装ビット :「0」として読み出し
bit 6 EBTRB: ブートブロック テーブル読み出し保護ビット1 = ブートブロックを他のブロックで実行されるテーブル読み出しから保護しない0 = ブートブロックを他のブロックで実行されるテーブル読み出しから保護する
bit 5-0 未実装ビット :「0」として読み出し
DS41350D_JP - p. 302 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
レジスタ 24-13: DEVID1: PIC18F1XK50/PIC18LF1XK50 デバイス ID レジスタ 1
R R R R R R R R
DEV2 DEV1 DEV0 REV4 REV3 REV2 REV1 REV0
bit 7 bit 0
凡例 :
R = 読み出し可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 C = クリアのみ可能ビット
bit 7-5 DEV<2:0>: デバイス ID ビット010 = PIC18F13K50011 = PIC18F14K50
bit 4-0 REV<4:0>: リビジョン ID ビットデバイスのリビジョンを示す
レジスタ 24-14: DEVID2: PIC18F1XK50/PIC18LF1XK50 デバイス ID レジスタ 2
R R R R R R R R
DEV10 DEV9 DEV8 DEV7 DEV6 DEV5 DEV4 DEV3
bit 7 bit 0
凡例 :
R = 読み出し可能ビット U = 未実装ビット、「0」として読み出し
-n = デバイス未プログラム時の値 C = クリアのみ可能ビット
bit 7-0 DEV<10:3>: デバイス ID ビットDEVID1 レジスタの DEV<2:0> ビットと合わせてデバイスの製品番号を表す0010 0000 = PIC18F1XK50/PIC18LF1XK50
Note 1: DEV<10:3>は他のデバイスでも同じ事があります。DEV<10:0>ビット全体で一意のデバイスを表します。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 303
PIC18F/LF1XK50
24.2 ウォッチドッグ タイマ (WDT)
PIC18F/LF1XK50 では、WDT のクロック源にはLFINTOSC を使用します。WDT を有効にするとLFINTOSC も有効になります。WDT の周期は 4 ms (定格)で、安定性はLFINTOSCオシレータと同じです。
WDT の周期 4 ms を 16 ビット ポストスケーラで逓倍します。WDT ポストスケーラの出力は、CONFIG2Hレジスタのビットでマルチプレクサを制御して選択します。出力可能な周期は、4 ms ~ 131.072 s (2.18 min)の範囲です。WDT とポストスケーラがクリアされるのは、SLEEP または CLRWDT 命令を実行した場合、OSCCON レジスタの IRCF ビットを変更した場合、クロック障害が発生した場合です。
図 24-1: WDT のブロック図
Note 1: CLRWDTおよびSLEEP命令を実行した時点で WDT とポストスケーラ値がクリアされます。
2: OSCCONレジスタの IRCFビットの設定を変更すると、WDT とポストスケーラ値がクリアされます。
3: CLRWDT命令を実行すると、ポストスケーラ値がクリアされます。
LFINTOSC Source
WDT
Wake-up
Reset
WDT Counter
Programmable Postscaler1:1 to 1:32,768
Enable WDT
WDTPS<3:0>
SWDTENWDTEN
CLRWDT
4
from Power
Reset
All Device Resets
Sleep
128
Change on IRCF bitsManaged Modes
DS41350D_JP - p. 304 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
24.2.1 制御レジスタ
レジスタ 24-15 に、WDTCON レジスタを示します。このレジスタは読み書き可能で、コンフィグレーション ビットで WDT を無効にしている場合に限り、このレジスタの制御ビットを利用して WDT の有効 / 無効をソフトウェアで切り換える事ができます。
表 24-2: ウォッチドッグ タイマ関連レジスタ一覧
24.3 プログラムの検証とコード保護
PIC18 フラッシュ デバイスのコード保護の全体構造は、他の PIC® MCU とは大きく異なります。
ユーザ プログラムメモリは5つのブロックに分かれています。そのうちの 1 つが、0.5 KB または 2 KB ( デバイスにより異なる ) のブートブロックです。残りのメモリは、バイナリ境界で個々のブロックに分割されています。
5 つのブロックには、それぞれコード保護に関する以下の 3 つのビットがあります。
• コード保護ビット (CPn)
• 書き込み保護ビット (WRTn)
• 外部ブロック テーブル読み出しビット (EBTRn)
図 24-2 に、8、16、32 KB の各デバイスのプログラムメモリ構成、各ブロックに対応するコード保護ビットを示します。表 24-3 に、各ビットの実際の位置を示します。
レジスタ 24-15: WDTCON: ウォッチドッグ タイマ制御レジスタ
U-0 U-0 U-0 U-0 U-0 U-0 U-0 R/W-0
— — — — — — — SWDTEN(1)
bit 7 bit 0
凡例 :
R = 読み出し可能ビット W = 書き込み可能ビット U = 未実装ビット、「0」として読み出し
-n = POR 時の値 「1」 = ビットをセット 「0」 = ビットをクリア x = ビットは未知
bit 7-1 未実装ビット :「0」として読み出し
bit 0 SWDTEN: WDT ソフトウェア イネーブル / ディセーブルビット (1) 1 = WDT を有効にする0 = WDT を無効にする ( リセット値 )
Note 1: コンフィグレーション ビット WDTEN をセットしている場合、このビットは無効です。
名称 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0リセット値の記載ページ
RCON IPEN SBOREN — RI TO PD POR BOR 280
WDTCON — — — — — — — SWDTEN 288
CONFIG2H WDTPS3 WDTPS2 WDTPS1 WDTPS0 WDTEN 298
凡例 : — = 未実装ビット、「0」として読み出し。網掛けのビットはウォッチドッグ タイマには使用しません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 305
PIC18F/LF1XK50
図 24-2: PIC18F/LF1XK50 のプログラムメモリとコード保護
デバイス
アドレス( 開始 / 終了 )
14K50 13K50
BBSIZ = 1 BBSIZ = 0 BBSIZ = 1 BBSIZ = 0
0000h01FFh
ブートブロック、2 KW CPB、WRTB、EBTRB
ブートブロック、1 KW CPB、WRTB、EBTRB
ブートブロック、1 KW CPB、WRTB、EBTRB
ブートブロック、0.512 KW CPB、WRTB、
EBTRB
0200h03FFh
ブロック 01.512 KW
CP0、WRT0、EBTR00400h05FFh
ブロック 03 KW
CP0、WRT0、EBTR0
ブロック 01 KW
CP0、WRT0、EBTR00600h07FFh
0800h0FFFh
ブロック 02 KW
CP0、WRT0、EBTR0
ブロック 12 KW
CP1、WRT1、EBTR1
ブロック 12 KW
CP1、WRT1、EBTR1
1000h1FFFh
ブロック 14 KW
CP1、WRT1、EBTR1
ブロック 14 KW
CP1、WRT1、EBTR1
全て「0」として読み出し
全て「0」として読み出し
2000h27FFh
全て「0」として読み出し
全て「0」として読み出し
2800h2FFFh
3000h37FFh
3800h3FFFh
4000h47FFh
4800h4FFFh
5000h57FFh
5800h5FFFh
6000h67FFh
6800h6FFFh
7000h77FFh
7800h7FFFh
8000hFFFFh
Note: テスト メモリマッピングの要件については、テストのセクションを参照してください。
DS41350D_JP - p. 306 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 24-3: コード保護関連レジスタ一覧
24.3.1 プログラムメモリのコード保護
プログラムメモリは、テーブル読み出し / テーブル書き込み命令を使用してどのアドレスからでも読み書きが行えます。デバイス ID は、テーブル読み出し命令による読み出しが可能です。コンフィグレーション レジスタは、テーブル読み出し / テーブル書き込み命令を使って読み書きが行えます。
通常の実行モードでは、CPn ビットは意味を持ちません。CPn ビットは、外部からの読み書きを禁止します。コンフィグレーション ビット WRTn を 「0」にすると、ユーザ メモリブロックをテーブル書き込みから保護できます。テーブル読み出しは、EBTRn ビットで制御します。ユーザ メモリブロックの EBTRn ビットを「0」にクリアすると、そのブロック内で実行される TBLRD
命令は許可されます。ブロック外部で実行されるテーブル読み出し命令は禁止され、「0」として読み出されます。図 24-3 ~図 24-5 に、テーブル読み書きの保護について示します。
図 24-3: テーブル書き込み (WRTn) 禁止
ファイル名 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0
300008h CONFIG5L — — — — — — CP1 CP0
300009h CONFIG5H CPD CPB — — — — — —
30000Ah CONFIG6L — — — — — — WRT1 WRT0
30000Bh CONFIG6H WRTD WRTB WRTC — — — — —
30000Ch CONFIG7L — — — — — — EBTR1 EBTR0
30000Dh CONFIG7H — EBTRB — — — — — —
凡例 : 網掛けのビットは未実装です。
Note: コード保護ビットは、「1」の状態から「0」への書き込みのみ可能です。「0」の状態のビットに「1」を書き込む事はできません。コード保護ビットが「1」になるのは、チップ全体の消去またはブロック消去を実行した場合のみです。チップ全体の消去とブロック消去はICSPまたは外部プログラマからのみ実行できます。
000000h
0007FFh000800h
001FFFh002000h
003FFFh004000h
005FFFh006000h
007FFFh
WRTB, EBTRB = 11
WRT0, EBTR0 = 01
WRT1, EBTR1 = 11
WRT2, EBTR2 = 11
WRT3, EBTR3 = 11
TBLWT*
TBLPTR = 0008FFh
PC = 001FFEh
TBLWT*PC = 005FFEh
Register Values Program Memory Configuration Bit Settings
結果 : WRTn = 0の場合、ブロック n に対するテーブル書き込みは全て禁止されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 307
PIC18F/LF1XK50
図 24-4: 外部ブロックからのテーブル読み出し (EBTRn) 禁止
図 24-5: 外部ブロックからのテーブル読み出し (EBTRn) 許可
WRTB, EBTRB = 11
WRT0, EBTR0 = 10
WRT1, EBTR1 = 11
WRT2, EBTR2 = 11
WRT3, EBTR3 = 11
TBLRD*
TBLPTR = 0008FFh
PC = 003FFEh
結果 : EBTRn = 0の場合、ブロック n に対する外部ブロックからのテーブル読み出しは全て禁止されます。TABLAT レジスタは、「0」の値を返します。
Register Values Program Memory Configuration Bit Settings
000000h
0007FFh000800h
001FFFh002000h
003FFFh004000h
005FFFh006000h
007FFFh
WRTB, EBTRB = 11
WRT0, EBTR0 = 10
WRT1, EBTR1 = 11
WRT2, EBTR2 = 11
WRT3, EBTR3 = 11
TBLRD*
TBLPTR = 0008FFh
PC = 001FFEh
Register Values Program Memory Configuration Bit Settings
結果 : EBTRBn = 0でも、ブロック n 内部で実行したテーブル読み出しは許可されます。TABLAT レジスタは、TBLPTR のアドレスのデータ値を返します。
000000h
0007FFh000800h
001FFFh002000h
003FFFh004000h
005FFFh006000h
007FFFh
DS41350D_JP - p. 308 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
24.3.2 データ EEPROM のコード保護
データ EEPROM 全体を外部からの読み書きから保護するには、CPD ビットと WRTD ビットを使用します。CPD ビットは、データ EEPROM に対する外部からの読み書きを禁止します。WRTD ビットは、データEEPROM に対する内部および外部からの書き込みを禁止します。保護ビットの設定にかかわらず、通常の動作時にはCPUは常にデータEEPROMを読み出す事ができます。
24.3.3 コンフィグレーション レジスタの保護
コンフィグレーション レジスタは書き込み保護が可能です。コンフィグレーション レジスタの書き込み保護は WRTC ビットで制御します。通常の実行モードでは、WRTC ビットは読み出し専用です。WRTC への書き込みは、ICSP または外部プログラマからのみ可能です。
24.4 ID ロケーション
ユーザがチェックサムやその他のコード識別番号を格納する領域として、8 つのメモリ位置 (200000h ~200007h)が IDロケーションとして確保されています。これらのロケーションは、通常の実行モード時 (TBLRDおよび TBLWT 命令を使用 ) およびプログラム / ベリファイ時に読み書きが可能です。デバイスのコード保護が有効な場合も、ID ロケーションを読み出す事ができます。
24.5 インサーキット シリアル プログラミング
PIC18F/LF1XK50 は、実際のアプリケーション回路に実装した状態でシリアル プログラミングが可能です。ICSP は、クロックとデータの 2 本のライン、および電源、グランド、書き込み電圧の 3 本のラインのみで簡単に利用できます。この機能を利用すると、未プログラムのデバイスを実装したボードを製造し、製品の出荷直前にマイクロコントローラへの書き込みを実行する事ができます。また、ファームウェアの 新バージョンへの更新、カスタマイズも可能です。
24.6 インサーキット デバッガ
DEBUGコンフィグレーション ビット (BKBUG)に「0」を書き込むと、インサーキット デバッガ機能が有効になります。この機能を利用すると、MPLAB® IDE を使用して簡単なデバッグが実行できます。マイクロコントローラでこの機能を有効にすると、一部の汎用リソースが使用できなくなります。表 24-4 に、バックグラウンド デバッガで必要になるリソースを示します。
表 24-4: デバッガで使用するリソース
マイクロコントローラのインサーキット デバッグ機能を利用するには、以下のピンに ICSP 接続を実装する必要があります。
• MCLR/VPP/RA3
• VDD
• VSS
• RA0
• RA1
これらのピンに、マイクロチップ社または他の開発ツールベンダから提供されるインサーキット デバッガ モジュールを接続します。
24.7 単電源 ICSP プログラミング
コンフィグレーション ビット LVP を使用すると、単電源 ICSP プログラミング ( 以前は低電圧 ICSP プログラミング、LVP と呼ばれていたもの ) を有効にできます。単電源 ICSP プログラミングを有効にすると、MCLR/VPP/RA3 ピンに高い電圧を印加しなくてもマイクロコントローラへの書き込みが行えます。ただし、RC3/PGM ピンはプログラミング モードへの切り換え制御に使用するため、汎用 I/O ピンとしては使用できなくなります。
単電源 ICSP プログラミング モードで書き込みを実行中は、MCLR/VPP/RA3 ピンに通常の実行モードと同様に VDD を印加します。プログラミング モードに移行するには、PGM ピンに VDD を印加します。
単電源 ICSP プログラミング モードを使用しない場合、LVP ビットをクリアできます。クリアすると、RC3/PGM がデジタル I/O ピンの RC3 として利用できるようになります。LVP ビットは、標準の高電圧プログラミング (MCLR/VPP/RA3 ピンに VIHH を印加 ) によってのみセットまたはクリアできます。LVP を無効にしたらデバイスへの書き込みは標準の高電圧プログラミングでしか実行できなくなります。
コード保護が有効になっていないメモリは、ブロック消去または行単位の消去を実行した後、所定の VDD で書き込みができます。コード保護を有効にしているメモリを消去するには、ブロック消去を使用する必要があります。
I/O ピン : RA0、RA1
スタック : 2 段
プログラムメモリ : 512 バイト
データメモリ : 10 バイト
Note 1: LVP ビットや PGM ピンの状態に関係なく、MCLR ピンに VIHH を印加すると高電圧のプログラミングをいつでも実行できます。
2: 工場出荷時の未プログラム デバイスおよび消去済みデバイスでは、既定値で単電源 ICSP が有効になっています。
3: 単電源 ICSP プログラミングを有効にすると、RC3 ピンは汎用 I/O ピンとして使用できなくなります。
4: LVP を有効にした場合、PGM ピンを外部で VSS にプルダウンすると通常のプログラム実行モードになります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 309
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 310 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
25.0 命令セットの概要
PIC18F/LF1XK50 は、75 個の PIC18 コア標準命令セットに加えて、再帰コードやソフトウェア スタックを利用するコード向けに 適化済みの 8 つの新しい拡張命令をサポートします。この拡張命令セットについては、本セクション後半で説明します。
25.1 標準命令セット
PIC18標準命令セットは以前のPIC® MCUの命令から大幅に強化されていますが、これらの PIC® MCU から容易に移行できるよう互換性も維持しています。ほとんどの命令は 1 プログラムメモリ ワード (16 ビット )ですが、2 プログラムメモリ ワードを必要とする命令が 4 つあります。
1 ワード命令は、命令の種類を表す 1 つのオペコードと、命令の動作を詳しく指定する 1 つまたは複数のオペランドから成り、全体で 16 ビットワードです。
この命令セットは非常に高い直交性があり、以下の 4種類があります。
• バイト指向命令
• ビット指向命令
• リテラル命令
• 制御命令
表 25-2 に、PIC18 命令セットをバイト指向命令、ビット指向命令、リテラル命令、制御命令の順に示します。表 25-1には、オペコード フィールドの説明を示します。
バイト指向命令の多くは、以下の 3 つのオペランドを使用します。
1. ファイルレジスタ (「f」と表記 )
2. 結果格納先 (「d」と表記 )
3. アクセス先メモリ (「a」と表記 )
ファイルレジスタ「f」には、命令で使用するファイルレジスタを指定します。結果格納先「d」は、演算の結果を格納する場所を指定します。「d」 = 0 の場合は演算結果を WREG レジスタに格納します。「d」 = 1 の場合は演算結果を「f」で指定したファイルレジスタに格納します。
ビット指向命令は必ず以下の 3 つのオペランドを使用します。
1. ファイルレジスタ (「f」と表記 )
2. ファイルレジスタ内のビット (「b」と表記 )
3. アクセス先メモリ (「a」と表記 )
ビットフィールド「b」は演算の対象となるビットの番号を指定し、ファイルレジスタ「f」はそのビットが存在するファイルの番号を表します。
リテラル命令で使用するオペランドには、以下の種類があります。
• ファイルレジスタに読み込むリテラル値 (「k」と表記 )
• リテラル値を読み込む FSR レジスタ (「f」と表記 )
• オペランド不要 (「—」と表記 )
制御命令で使用するオペランドには、以下の種類があります。
• プログラム メモリのアドレス (「n」と表記 )
• CALLまたは RETURN命令のモード (「s」と表記 )
• テーブル読み書き命令のモード (「m」と表記 )
• オペランド不要 (「—」と表記 )
命令は基本的には 1 ワードですが、2 ワード命令が4 つだけあります。これらの命令は、32 ビットの情報を収めるため 2 ワードです。2 ワード目の上位 4 ビットは「1」です。このため、2 ワード目のみを単独の命令として実行すると、NOPとして実行されます。
1 ワード命令は、基本的には全て 1 命令サイクルで実行されます。ただし、条件付きテストの結果が真の場合または命令実行の結果プログラム カウンタが変化した場合は 2 命令サイクルかかり、2 サイクル目の命令は NOPとして実行されます。
2 ワード命令の実行には 2 命令サイクルが必要です。
1 命令サイクルは、オシレータの 4 周期に相当します。従って、オシレータの周波数が 4 MHz なら、命令実行時間は標準で 1 s です。条件付きテストの結果が真の場合、または命令実行の結果プログラム カウンタが変化した場合の命令実行時間は 2 s です。2 ワードの分岐命令に必要な時間は 3 s です ( 条件付きテストの結果が真の場合 )。
図 25-1 に、命令の全般的な形式を示します。この例では、16 進数を全て「nnh」と表記しています。
表 25-2に、マイクロチップ社のアセンブラ(MPASMTM)で認識できる標準命令セットの一覧を示します。
各命令については、25.1.1「標準命令セット」で詳しく説明します。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 311
PIC18F/LF1XK50
表 25-1: オペコードのフィールドの説明
フィールド 説明
a RAM アクセスビット
a = 0: アクセス RAM 内の RAM アドレス (BSR レジスタは無視 )a = 1: BSR レジスタで RAM バンクを指定
bbb 8 ビット ファイルレジスタ内のビットアドレス (0 ~ 7)BSR バンク セレクト レジスタです。RAM バンクを選択します。
C、DC、Z、OV、N ALU ステータスビット : C (CARRY)、DC (DIGIT CARRY)、Z (ZERO)、OV (OVERFLOW)、N (NEGATIVE)d 格納先選択ビット
d = 0: 結果を WREG に格納
d = 1: 結果をファイルレジスタ f に格納
dest 格納先 : WREG レジスタまたは指定したレジスタファイルのアドレス
f 8 ビット レジスタファイルのアドレス (00h ~ FFh) または 2 ビットの FSR 指示子 (0h ~ 3h)fs コピー元の 12 ビット レジスタファイルのアドレス (000h ~ FFFh) fd コピー先の 12 ビット レジスタファイルのアドレス (000h ~ FFFh) GIE グローバル割り込みイネーブルビット
k リテラル フィールド、定数データ、ラベル (8/12/20 ビットのいずれか )label ラベル名
mm テーブルの読み書き命令の TBLPTR レジスタのモードです。
テーブルに対する読み書き命令でのみ使用します。
* レジスタ変更なし ( テーブル読み書きの場合の TBLPTR 等 )*+ 命令実行後にレジスタをインクリメントする ( テーブル読み書きの場合の TBLPTR 等 )*- 命令実行後にレジスタをデクリメントする ( テーブル読み書きの場合の TBLPTR 等 )+* 命令実行前にレジスタをインクリメントする ( テーブル読み書きの場合の TBLPTR 等 )n 相対分岐命令の相対アドレス (2 の補数 ) または
CALL/BRANCHおよび RETURN命令の直接アドレス
PC プログラム カウンタ
PCL プログラム カウンタ下位バイト
PCH プログラム カウンタ中位バイト
PCLATH プログラム カウンタ中位バイト用ラッチ
PCLATU プログラム カウンタ 上位バイト用ラッチ
PD パワーダウン ビット
PRODH 乗算命令の結果の上位バイト
PRODL 乗算命令の結果の下位バイト
s 高速コール / リターン モード選択ビット
s = 0: シャドウレジスタへの保存、復元を行わない
s = 1: 特定レジスタの値をシャドウレジスタに保存、復元する ( 高速モード )TBLPTR 21 ビット テーブルポインタ ( プログラムメモリのアドレスを指し示す )TABLAT 8 ビット テーブルラッチ
TO タイムアウト ビット
TOS Top-of-Stack
u 未使用または変化なし
WDT ウォッチドッグ タイマ
WREG ワーキング レジスタ ( アキュムレータ )x ドントケア (「0」または「1」) です。アセンブラは x = 0でコードを生成します。マイクロチップ社の
ソフトウェア ツール全般との互換性のために、この値を推奨します。
zs レジスタファイル ( ソース ) の間接アドレッシングに使用する 7 ビットのオフセット値
zd レジスタファイル ( 格納先 ) の間接アドレッシングに使用する 7 ビットのオフセット値
{ } オプションの引数
[text] インデックス付きアドレス
(text) textの内容
[expr]<n> ポインタ exprが指し示すレジスタの bit n 割り当て先
< > レジスタのビットフィールド
左項は右項に属する
italics ユーザ定義語 (Courier フォント )
DS41350D_JP - p. 312 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 25-1: 命令の一般的な形式
Byte-oriented file register operations
15 10 9 8 7 0
d = 0 for result destination to be WREG register
OPCODE d a f (FILE #)
d = 1 for result destination to be file register (f)a = 0 to force Access Bank
Bit-oriented file register operations
15 12 11 9 8 7 0
OPCODE b (BIT #) a f (FILE #)
b = 3-bit position of bit in file register (f)
Literal operations
15 8 7 0
OPCODE k (literal)
k = 8-bit immediate value
Byte to Byte move operations (2-word)
15 12 11 0
OPCODE f (Source FILE #)
CALL, GOTO and Branch operations
15 8 7 0
OPCODE n<7:0> (literal)
n = 20-bit immediate value
a = 1 for BSR to select bankf = 8-bit file register address
a = 0 to force Access Banka = 1 for BSR to select bankf = 8-bit file register address
15 12 11 0
1111 n<19:8> (literal)
15 12 11 0
1111 f (Destination FILE #)
f = 12-bit file register address
Control operations
Example Instruction
ADDWF MYREG, W, B
MOVFF MYREG1, MYREG2
BSF MYREG, bit, B
MOVLW 7Fh
GOTO Label
15 8 7 0
OPCODE n<7:0> (literal)
15 12 11 0
1111 n<19:8> (literal)
CALL MYFUNC
15 11 10 0
OPCODE n<10:0> (literal)
S = Fast bit
BRA MYFUNC
15 8 7 0
OPCODE n<7:0> (literal) BC MYFUNC
S
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 313
PIC18F/LF1XK50
表 25-2: PIC18FXXXX 命令セット
ニーモニック、
オペランド説明 サイクル
16 ビット命令ワード 影響を受ける
ステータスNotes
MSb LSb
バイト指向命令
ADDWFADDWFCANDWFCLRFCOMFCPFSEQCPFSGTCPFSLTDECFDECFSZDCFSNZINCFINCFSZINFSNZIORWFMOVFMOVFF
MOVWFMULWFNEGFRLCFRLNCFRRCFRRNCFSETFSUBFWB
SUBWFSUBWFB
SWAPFTSTFSZXORWF
f, d, af, d, af, d, af, af, d, af, af, af, af, d, af, d, af, d, af, d, af, d, af, d, af, d, af, d, afs, fd
f, af, af, af, d, af, d, af, d, af, d, af, af, d, a
f, d, af, d, a
f, d, af, af, d, a
Add WREG and fAdd WREG and CARRY bit to fAND WREG with fClear fComplement fCompare f with WREG, skip =Compare f with WREG, skip >Compare f with WREG, skip <Decrement fDecrement f, Skip if 0Decrement f, Skip if Not 0Increment fIncrement f, Skip if 0Increment f, Skip if Not 0Inclusive OR WREG with fMove fMove fs (source) to 1st word
fd (destination) 2nd wordMove WREG to fMultiply WREG with fNegate fRotate Left f through CarryRotate Left f (No Carry)Rotate Right f through CarryRotate Right f (No Carry)Set fSubtract f from WREG with borrow Subtract WREG from fSubtract WREG from f with borrowSwap nibbles in fTest f, skip if 0Exclusive OR WREG with f
111111 (2 or 3)1 (2 or 3)1 (2 or 3)11 (2 or 3)1 (2 or 3)11 (2 or 3)1 (2 or 3)112
111111111
11
11 (2 or 3)1
001000100001011000010110011001100000001001000010001101000001010111001111011000000110001101000011010001100101
01010101
001101100001
01da00da01da101a11da001a010a000a01da11da11da10da11da10da00da00daffffffff111a001a110a01da01da00da00da100a01da
11da10da
10da011a10da
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffff
ffffffffffff
ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
ffffffff
ffffffffffff
C, DC, Z, OV, NC, DC, Z, OV, NZ, NZZ, NNoneNoneNoneC, DC, Z, OV, NNoneNoneC, DC, Z, OV, NNoneNoneZ, NZ, NNone
NoneNoneC, DC, Z, OV, NC, Z, NZ, NC, Z, NZ, NNoneC, DC, Z, OV, N
C, DC, Z, OV, NC, DC, Z, OV, N
NoneNoneZ, N
1, 21, 21,221, 2441, 21, 2, 3, 41, 2, 3, 41, 21, 2, 3, 441, 21, 21
1, 2
1, 2
1, 2
1, 2
41, 2
Note 1: PORT レジスタの値を同じ PORT レジスタによって変更する場合 ( 例 : MOVF PORTB, 1, 0)、これらのピンの入力レ
ベルが使用されます。例えば、入力ピンのデータラッチが「1」で、そのピンが外部デバイスによって low に駆動され
ている場合、データは「0」として上書きされます。
2: この命令を TMR0 レジスタに対して実行した場合 ( かつ、「d」の指定が可能な場合に「d」 = 1の時 )、TMR0 にプリス
ケーラが割り当てられているとプリスケーラもクリアされます。
3: プログラム カウンタ (PC) が変更された場合、または条件付きテストの結果が真の場合、命令実行には 2 サイクルが
必要です。2 サイクル目は NOPとして実行されます。
4: 一部の命令は、2 ワード命令です。これらの命令の 2 ワード目は、命令の 1 ワード目によって 2 ワード目の 16 ビット
に埋め込まれた情報を読み出す場合を除き、NOPとして実行されます。これにより、全てのプログラムメモリ アドレ
スで命令の有効性が維持されます。
DS41350D_JP - p. 314 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
ビット指向命令
BCFBSFBTFSCBTFSSBTG
f, b, af, b, af, b, af, b, af, d, a
Bit Clear fBit Set fBit Test f, Skip if ClearBit Test f, Skip if SetBit Toggle f
111 (2 or 3)1 (2 or 3)1
10011000101110100111
bbbabbbabbbabbbabbba
ffffffffffffffffffff
ffffffffffffffffffff
NoneNoneNoneNoneNone
1, 21, 23, 43, 41, 2
制御命令
BCBNBNCBNNBNOVBNZBOVBRABZCALL
CLRWDTDAWGOTO
NOPNOPPOPPUSHRCALLRESETRETFIE
RETLWRETURNSLEEP
nnnnnnnnnn, s
——n
————n
s
ks—
Branch if CarryBranch if NegativeBranch if Not CarryBranch if Not NegativeBranch if Not OverflowBranch if Not ZeroBranch if OverflowBranch Unconditionally Branch if ZeroCall subroutine 1st word
2nd wordClear Watchdog TimerDecimal Adjust WREGGo to address 1st word
2nd wordNo OperationNo OperationPop top of return stack (TOS)Push top of return stack (TOS)Relative CallSoftware device ResetReturn from interrupt enable
Return with literal in WREG Return from SubroutineGo into Standby mode
1 (2)1 (2)1 (2)1 (2)1 (2)1 (2)1 (2)21 (2)2
112
1111212
221
1110111011101110111011101110110111101110111100000000111011110000111100000000110100000000
000000000000
00100110001101110101000101000nnn0000110skkkk000000001111kkkk0000xxxx000000001nnn00000000
110000000000
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkkkkkkkk00000000kkkkkkkk0000xxxx00000000nnnn11110001
kkkk00010000
nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnkkkkkkkk01000111kkkkkkkk0000xxxx01100101nnnn1111000s
kkkk001s0011
NoneNoneNoneNoneNoneNoneNoneNoneNoneNone
TO, PDCNone
NoneNoneNoneNoneNoneAllGIE/GIEH, PEIE/GIELNoneNoneTO, PD
4
表 25-2: PIC18FXXXX 命令セット ( 続き )
ニーモニック、
オペランド説明 サイクル
16 ビット命令ワード 影響を受ける
ステータスNotes
MSb LSb
Note 1: PORT レジスタの値を同じ PORT レジスタによって変更する場合 ( 例 : MOVF PORTB, 1, 0)、これらのピンの入力レ
ベルが使用されます。例えば、入力ピンのデータラッチが「1」で、そのピンが外部デバイスによって low に駆動され
ている場合、データは「0」として上書きされます。
2: この命令を TMR0 レジスタに対して実行した場合 ( かつ、「d」の指定が可能な場合に「d」 = 1の時 )、TMR0 にプリス
ケーラが割り当てられているとプリスケーラもクリアされます。
3: プログラム カウンタ (PC) が変更された場合、または条件付きテストの結果が真の場合、命令実行には 2 サイクルが
必要です。2 サイクル目は NOPとして実行されます。
4: 一部の命令は、2 ワード命令です。これらの命令の 2 ワード目は、命令の 1 ワード目によって 2 ワード目の 16 ビット
に埋め込まれた情報を読み出す場合を除き、NOPとして実行されます。これにより、全てのプログラムメモリ アドレ
スで命令の有効性が維持されます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 315
PIC18F/LF1XK50
リテラル命令
ADDLWANDLWIORLWLFSR
MOVLBMOVLWMULLWRETLWSUBLWXORLW
kkkf, k
kkkkkk
Add literal and WREGAND literal with WREGInclusive OR literal with WREGMove literal (12-bit) 2nd word to FSR(f) 1st wordMove literal to BSR<3:0>Move literal to WREGMultiply literal with WREGReturn with literal in WREG Subtract WREG from literalExclusive OR literal with WREG
1112
111211
00000000000011101111000000000000000000000000
11111011100111100000000111101101110010001010
kkkkkkkkkkkk00ffkkkk0000kkkkkkkkkkkkkkkkkkkk
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
C, DC, Z, OV, NZ, NZ, NNone
NoneNoneNoneNoneC, DC, Z, OV, NZ, N
データメモリ プログラムメモリ命令
TBLRD*TBLRD*+TBLRD*-TBLRD+*TBLWT*TBLWT*+TBLWT*-TBLWT+*
Table ReadTable Read with post-incrementTable Read with post-decrementTable Read with pre-incrementTable WriteTable Write with post-incrementTable Write with post-decrementTable Write with pre-increment
2
2
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
10001001101010111100110111101111
NoneNoneNoneNoneNoneNoneNoneNone
表 25-2: PIC18FXXXX 命令セット ( 続き )
ニーモニック、
オペランド説明 サイクル
16 ビット命令ワード 影響を受ける
ステータスNotes
MSb LSb
Note 1: PORT レジスタの値を同じ PORT レジスタによって変更する場合 ( 例 : MOVF PORTB, 1, 0)、これらのピンの入力レ
ベルが使用されます。例えば、入力ピンのデータラッチが「1」で、そのピンが外部デバイスによって low に駆動され
ている場合、データは「0」として上書きされます。
2: この命令を TMR0 レジスタに対して実行した場合 ( かつ、「d」の指定が可能な場合に「d」 = 1の時 )、TMR0 にプリス
ケーラが割り当てられているとプリスケーラもクリアされます。
3: プログラム カウンタ (PC) が変更された場合、または条件付きテストの結果が真の場合、命令実行には 2 サイクルが
必要です。2 サイクル目は NOPとして実行されます。
4: 一部の命令は、2 ワード命令です。これらの命令の 2 ワード目は、命令の 1 ワード目によって 2 ワード目の 16 ビット
に埋め込まれた情報を読み出す場合を除き、NOPとして実行されます。これにより、全てのプログラムメモリ アドレ
スで命令の有効性が維持されます。
DS41350D_JP - p. 316 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
25.1.1 標準命令セット
ADDLW ADD literal to W
構文 : ADDLW k
オペランド : 0 k 255
動作 : (W) + k W
影響を受ける
ステータス :N, OV, C, DC, Z
エンコード : 0000 1111 kkkk kkkk
説明 : W の内容を 8 ビットのリテラル「k」に加算し、その結果を W レジスタに格
納する。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :Q1 Q2 Q3 Q4
デコード リテラル
「k」を
読み出し
データを
処理
W に書き
込み
例 : ADDLW 15h
命令実行前
W = 10h命令実行後
W = 25h
ADDWF ADD W to f
構文 : ADDWF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (W) + (f) dest
影響を受ける
ステータス :N, OV, C, DC, Z
エンコード : 0010 01da ffff ffff
説明 : W をレジスタ「f」に加算する。「d」 = 「0」の場合、結果を W レジスタに格納
する。「d」 = 「1」の場合、結果をレジ
スタ「f」に書き戻す ( 既定値 )。「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ「f」を読み出し
データを
処理
格納先に
書き込み
例 : ADDWF REG, 0, 0
命令実行前
W = 17hREG = 0C2h
命令実行後
W = 0D9hREG = 0C2h
Note: PIC18 の命令は全て、命令ニーモニックの前にオプションの引数としてラベルを指定する事によってシンボリック アドレッシングが可能です。この場合、命令の形式は「{ ラベル } 命令 引数」です。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 317
PIC18F/LF1XK50
ADDWFC ADD W and CARRY bit to f
構文 : ADDWFC f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (W) + (f) + (C) dest
影響を受ける
ステータス :N,OV, C, DC, Z
エンコード : 0010 00da ffff ffff
説明 : W レジスタにキャリーフラグとデータ
メモリのアドレス「f」の内容を加算す
る。「d」 = 「0」の場合、結果を W レ
ジスタに格納する。「d」 = 「1」の場
合、結果をデータメモリのアドレス
「f」に格納する。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSRを使用して GPR バンクを選択する
( 既定値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実
行される。詳細は、25.2.3「インデッ
クス付きリテラル オフセット モード
でのバイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : ADDWFC REG, 0, 1
命令実行前CARRY bit = 1REG = 02hW = 4Dh
命令実行後CARRY bit = 0REG = 02hW = 50h
ANDLW AND literal with W
構文 : ANDLW k
オペランド : 0 k 255
動作 : (W) .AND. k W
影響を受ける
ステータス :N, Z
エンコード : 0000 1011 kkkk kkkk
説明 : W レジスタの内容と 8 ビットのリテラ
ル「k」を AND 演算する。結果を W レ
ジスタに格納する。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」を
読み出し
データを
処理
W に
書き込み
例 : ANDLW 05Fh
命令実行前
W = A3h命令実行後
W = 03h
DS41350D_JP - p. 318 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
ANDWF AND W with f
構文 : ANDWF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (W) .AND. (f) dest
影響を受ける
ステータス :N, Z
エンコード : 0001 01da ffff ffff
説明 : W レジスタの内容とレジスタ「f」を
AND 演算する。「d」 = 「0」の場合、結
果を W レジスタに格納する。「d」 = 「1」の場合、結果をレジスタ「f」に書き戻
す ( 既定値 )。「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : ANDWF REG, 0, 0
命令実行前
W = 17hREG = C2h
命令実行後
W = 02hREG = C2h
BC Branch if Carry
構文 : BC n
オペランド : -128 n 127
動作 : CARRY ビットが「1」の場合(PC) + 2 + 2n PC
影響を受ける
ステータス :なし
エンコード : 1110 0010 nnnn nnnn
説明 : CARRY ビットが「1」の場合、プログ
ラムが分岐する。
PC には 2 の補数「2n」を加算する。
PC は次の命令をフェッチするためにイ
ンクリメントしているため、新しいア
ドレスは PC + 2 + 2n となる。この場
合、この命令は 2 サイクル命令となる。
ワード数 : 1
サイクル数 : 1(2)
Q サイクルの動作 :ジャンプする場合 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
PC に
書き込み
NOP NOP NOP NOP
ジャンプしない場合 :Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
NOP
例 : HERE BC 5
命令実行前PC = address (HERE)
命令実行後If CARRY = 1;
PC = address (HERE + 12)If CARRY = 0;
PC = address (HERE + 2)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 319
PIC18F/LF1XK50
BCF Bit Clear f
構文 : BCF f, b {,a}
オペランド : 0 f 2550 b 7a [0,1]
動作 : 0 f<b>
影響を受ける
ステータス :なし
エンコード : 1001 bbba ffff ffff
説明 : レジスタ「f」のビット「b」をクリア
する。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
レジスタ
「f」に
書き込み
例 : BCF FLAG_REG, 7, 0
命令実行前FLAG_REG = C7h
命令実行後FLAG_REG = 47h
BN Branch if Negative
構文 : BN n
オペランド : -128 n 127
動作 : NEGATIVE ビットが「1」の場合(PC) + 2 + 2n PC
影響を受ける
ステータス :なし
エンコード : 1110 0110 nnnn nnnn
説明 : NEGATIVE ビットが「1」の場合、
プログラムが分岐する。
PC には 2 の補数「2n」を加算する。
PC は次の命令をフェッチするためにイ
ンクリメントしているため、新しいア
ドレスは PC + 2 + 2n となる。この場
合、この命令は 2 サイクル命令となる。
ワード数 : 1
サイクル数 : 1(2)
Q サイクルの動作 :ジャンプする場合 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
PC に
書き込み
NOP NOP NOP NOP
ジャンプしない場合 :Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
NOP
例 : HERE BN Jump
命令実行前PC = address (HERE)
命令実行後If NEGATIVE = 1;
PC = address (Jump)If NEGATIVE = 0;
PC = address (HERE + 2)
DS41350D_JP - p. 320 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
BNC Branch if Not Carry
構文 : BNC n
オペランド : -128 n 127
動作 : CARRY ビットが「0」の場合(PC) + 2 + 2n PC
影響を受ける
ステータス :なし
エンコード : 1110 0011 nnnn nnnn
説明 : CARRY ビットが「0」の場合、プログ
ラムが分岐する。
PC には 2 の補数「2n」を加算する。
PC は次の命令をフェッチするためにイ
ンクリメントしているため、新しいア
ドレスは PC + 2 + 2n となる。この場
合、この命令は 2 サイクル命令となる。
ワード数 : 1
サイクル数 : 1(2)
Q サイクルの動作 :ジャンプする場合 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
PC に
書き込み
NOP NOP NOP NOP
ジャンプしない場合 :Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
NOP
例 : HERE BNC Jump
命令実行前PC = address (HERE)
命令実行後If CARRY = 0;
PC = address (Jump)If CARRY = 1;
PC = address (HERE + 2)
BNN Branch if Not Negative
構文 : BNN n
オペランド : -128 n 127
動作 : NEGATIVE ビットが「0」の場合(PC) + 2 + 2n PC
影響を受ける
ステータス :なし
エンコード : 1110 0111 nnnn nnnn
説明 : NEGATIVE ビットが「0」の場合、
プログラムが分岐する。
PC には 2 の補数「2n」を加算する。
PC は次の命令をフェッチするためにイ
ンクリメントしているため、新しいア
ドレスは PC + 2 + 2n となる。この場
合、この命令は 2 サイクル命令となる。
ワード数 : 1
サイクル数 : 1(2)
Q サイクルの動作 :ジャンプする場合 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
PC に
書き込み
NOP NOP NOP NOP
ジャンプしない場合 :Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
NOP
例 : HERE BNN Jump
命令実行前PC = address (HERE)
命令実行後If NEGATIVE = 0;
PC = address (Jump)If NEGATIVE = 1;
PC = address (HERE + 2)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 321
PIC18F/LF1XK50
BNOV Branch if Not Overflow
構文 : BNOV n
オペランド : -128 n 127
動作 : OVERFLOW ビットが「0」の場合(PC) + 2 + 2n PC
影響を受ける
ステータス :なし
エンコード : 1110 0101 nnnn nnnn
説明 : OVERFLOW ビットが「0」の場合、
プログラムが分岐する。
PC には 2 の補数「2n」を加算する。
PC は次の命令をフェッチするためにイ
ンクリメントしているため、新しいア
ドレスは PC + 2 + 2n となる。この場
合、この命令は 2 サイクル命令となる。
ワード数 : 1
サイクル数 : 1(2)
Q サイクルの動作 :ジャンプする場合 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
PC に
書き込み
NOP NOP NOP NOP
ジャンプしない場合 :Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
NOP
例 : HERE BNOV Jump
命令実行前PC = address (HERE)
命令実行後If OVERFLOW = 0;
PC = address (Jump)If OVERFLOW = 1;
PC = address (HERE + 2)
BNZ Branch if Not Zero
構文 : BNZ n
オペランド : -128 n 127
動作 : ZERO ビットが「0」の場合(PC) + 2 + 2n PC
影響を受ける
ステータス :なし
エンコード : 1110 0001 nnnn nnnn
説明 : ZERO ビットが「0」の場合、プログ
ラムが分岐する。
PC には 2 の補数「2n」を加算する。
PC は次の命令をフェッチするためにイ
ンクリメントしているため、新しいア
ドレスは PC + 2 + 2n となる。この場
合、この命令は 2 サイクル命令となる。
ワード数 : 1
サイクル数 : 1(2)
Q サイクルの動作 :ジャンプする場合 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
PC に
書き込み
NOP NOP NOP NOP
ジャンプしない場合 :Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
NOP
例 : HERE BNZ Jump
命令実行前PC = address (HERE)
命令実行後If ZERO = 0;
PC = address (Jump)If ZERO = 1;
PC = address (HERE + 2)
DS41350D_JP - p. 322 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
BRA Unconditional Branch
構文 : BRA n
オペランド : -1024 n 1023
動作 : (PC) + 2 + 2n PC
影響を受ける
ステータス :なし
エンコード : 1101 0nnn nnnn nnnn
説明 : PC に 2 の補数「2n」を加算する。PC は
次の命令をフェッチするためにインクリ
メントしているため、新しいアドレスは
PC + 2 + 2n となる。この命令は 2 サイク
ル命令である。
ワード数 : 1
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
PC に
書き込み
NOP NOP NOP NOP
例 : HERE BRA Jump
命令実行前PC = address (HERE)
命令実行後PC = address (Jump)
BSF Bit Set f
構文 : BSF f, b {,a}
オペランド : 0 f 2550 b 7a [0,1]
動作 : 1 f<b>
影響を受ける
ステータス :なし
エンコード : 1000 bbba ffff ffff
説明 : レジスタ「f」のビット「b」をセット
する。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
レジスタ
「f」に
書き込み
例 : BSF FLAG_REG, 7, 1
命令実行前FLAG_REG = 0Ah
命令実行後FLAG_REG = 8Ah
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 323
PIC18F/LF1XK50
BTFSC Bit Test File, Skip if Clear
構文 : BTFSC f, b {,a}
オペランド : 0 f 2550 b 7a [0,1]
動作 : (f<b>) = 0の場合にスキップ
影響を受ける
ステータス :なし
エンコード : 1011 bbba ffff ffff
説明 : レジスタ「f」のビット「b」が「0」の場
合、次の命令をスキップする。ビット
「b」が「0」の場合、現在の命令実行中
にフェッチした次の命令を破棄し、代わ
りに NOP命令を実行して 2 サイクル命
令とする。
「a」 = 「0」の場合、アクセスバンクを選
択する。「a」 = 「1」の場合、BSR を使用
して GPR バンクを選択する ( 既定値 )。「a」 = 「0」で拡張命令セットを有効にし
ている場合、f 95 (5Fh) ならこの命令は
常にインデックス付きリテラル オフセッ
ト アドレッシング モードで実行される。
詳細は、25.2.3「インデックス付きリテ
ラル オフセット モードでのバイト / ビッ
ト指向命令」参照。
ワード数 : 1
サイクル数 : 1(2)Note: スキップ先の命令が 2 ワード命
令の場合は 3 サイクルになる。
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
NOP
スキップする場合 :
Q1 Q2 Q3 Q4
NOP NOP NOP NOP
スキップ先が 2 ワード命令の場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
NOP NOP NOP NOP
例 : HEREFALSETRUE
BTFSC::
FLAG, 1, 0
命令実行前PC = address (HERE)
命令実行後If FLAG<1> = 0;
PC = address (TRUE)If FLAG<1> = 1;
PC = address (FALSE)
BTFSS Bit Test File, Skip if Set
構文 : BTFSS f, b {,a}
オペランド : 0 f 2550 b < 7a [0,1]
動作 : (f<b>) = 1の場合にスキップ
影響を受ける
ステータス :なし
エンコード : 1010 bbba ffff ffff
説明 : レジスタ「f」のビット「b」が「1」の
場合、次の命令をスキップする。ビット
「b」が「1」の場合、現在の命令実行中
にフェッチした次の命令を破棄し、代わ
りに NOP命令を実行して 2 サイクル命
令とする。
「a」 = 「0」の場合、アクセスバンクを選
択する。「a」 = 「1」の場合、BSR を使用
して GPR バンクを選択する ( 既定値 )。「a」 = 「0」で拡張命令セットを有効にし
ている場合、f 95 (5Fh) ならこの命令は
常にインデックス付きリテラル オフセッ
ト アドレッシング モードで実行される。
詳細は、25.2.3「インデックス付きリテ
ラル オフセット モードでのバイト / ビッ
ト指向命令」参照。
ワード数 : 1
サイクル数 : 1(2)Note: スキップ先の命令が 2 ワード命
令の場合は 3 サイクルになる。
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
NOP
スキップする場合 :
Q1 Q2 Q3 Q4
NOP NOP NOP NOP
スキップ先が 2 ワード命令の場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
NOP NOP NOP NOP
例 : HEREFALSETRUE
BTFSS::
FLAG, 1, 0
命令実行前PC = address (HERE)
命令実行後If FLAG<1> = 0;
PC = address (FALSE)If FLAG<1> = 1;
PC = address (TRUE)
DS41350D_JP - p. 324 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
BTG Bit Toggle f
構文 : BTG f, b {,a}
オペランド : 0 f 2550 b < 7a [0,1]
動作 : (f<b>) f<b>
影響を受ける
ステータス :なし
エンコード : 0111 bbba ffff ffff
説明 : データ メモリのアドレス「f」のビット
「b」を反転する。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
レジスタ
「f」に
書き込み
例 : BTG PORTC, 4, 0
命令実行前PORTC = 0111 0101 [75h]
命令実行後PORTC = 0110 0101 [65h]
BOV Branch if Overflow
構文 : BOV n
オペランド : -128 n 127
動作 : OVERFLOW ビットが「1」の場合(PC) + 2 + 2n PC
影響を受ける
ステータス :なし
エンコード : 1110 0100 nnnn nnnn
説明 : OVERFLOW ビットが「1」の場合、
プログラムが分岐する。
PC には 2 の補数「2n」を加算する。
PC は次の命令をフェッチするためにイ
ンクリメントしているため、新しいア
ドレスは PC + 2 + 2n となる。この場
合、この命令は 2 サイクル命令となる。
ワード数 : 1
サイクル数 : 1(2)
Q サイクルの動作 :ジャンプする場合 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
PC に
書き込み
NOP NOP NOP NOP
ジャンプしない場合 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
NOP
例 : HERE BOV Jump
命令実行前PC = address (HERE)
命令実行後If OVERFLOW = 1;
PC = address (Jump)If OVERFLOW = 0;
PC = address (HERE + 2)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 325
PIC18F/LF1XK50
BZ Branch if Zero
構文 : BZ n
オペランド : -128 n 127
動作 : ZERO ビットが「1」の場合(PC) + 2 + 2n PC
影響を受ける
ステータス :なし
エンコード : 1110 0000 nnnn nnnn
説明 : ZERO ビットが「1」の場合、プログ
ラムが分岐する。
PC には 2 の補数「2n」を加算する。
PC は次の命令をフェッチするためにイ
ンクリメントしているため、新しいア
ドレスは PC + 2 + 2n となる。この場
合、この命令は 2 サイクル命令となる。
ワード数 : 1
サイクル数 : 1(2)
Q サイクルの動作 :ジャンプする場合 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
PC に
書き込み
NOP NOP NOP NOP
ジャンプしない場合 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
データを
処理
NOP
例 : HERE BZ Jump
命令実行前PC = address (HERE)
命令実行後If ZERO = 1;
PC = address (Jump)If ZERO = 0;
PC = address (HERE + 2)
CALL Subroutine Call
構文 : CALL k {,s}
オペランド : 0 k 1048575s [0,1]
動作 : (PC) + 4 TOS,k PC<20:1>,s = 1の場合(W) WS,(Status) STATUSS,(BSR) BSRS
影響を受ける
ステータス :なし
エンコード :1 ワード目 (k<7:0>)2 ワード目 (k<19:8>)
11101111
110sk19kkk
k7kkkkkkk
kkkk0kkkk8
説明 : 2MB のメモリ空間全体を対象に、サブ
ルーチンを呼び出す。まず、リターン
アドレス (PC + 4) をリターンスタック
にプッシュする。「s」 = 1の場合、W、
STATUS、BSR レジスタもそれぞれの
シャドウレジスタの WS、STATUSS、BSRS にプッシュする。「s」 = 0の場
合、これらのレジスタは更新されない
( 既定値 )。次に、20 ビットの値「k」を PC<20:1> に読み込む。CALLは 2サイクル命令である。
ワード数 : 2
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」<7:0>を読み出し
PC をス
タックに
プッシュ
リテラル
「k」<19:8>を読み出
し、PC に
書き込み
NOP NOP NOP NOP
例 : HERE CALL THERE, 1
命令実行前PC = address (HERE)
命令実行後PC = address (THERE)TOS = address (HERE + 4)WS = WBSRS = BSRSTATUSS = Status
DS41350D_JP - p. 326 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
CLRF Clear f
構文 : CLRF f {,a}
オペランド : 0 f 255a [0,1]
動作 : 000h f1 Z
影響を受ける
ステータス :Z
エンコード : 0110 101a ffff ffff
説明 : 指定したレジスタの値をクリアする。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
レジスタ
「f」に
書き込み
例 : CLRF FLAG_REG, 1
命令実行前FLAG_REG = 5Ah
命令実行後FLAG_REG = 00h
CLRWDT Clear Watchdog Timer
構文 : CLRWDT
オペランド : なし
動作 : 000h WDT,000h WDT ポストスケーラ ,1 TO,1 PD
影響を受ける
ステータス :TO, PD
エンコード : 0000 0000 0000 0100
説明 : CLRWDT命令はウォッチドッグ タイマ
をリセットする。WDT のポストスケー
ラも同時にリセットする。ステータス レジスタの TO ビットと PD ビットが
セットされる。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード NOP データを
処理
NOP
例 : CLRWDT
命令実行前WDT Counter = ?
命令実行後WDT Counter = 00hWDT Postscaler = 0TO = 1PD = 1
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 327
PIC18F/LF1XK50
COMF Complement f
構文 : COMF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f) dest
影響を受ける
ステータス :N, Z
エンコード : 0001 11da ffff ffff
説明 : レジスタ「f」の内容の補数をとる。
「d」 = 「0」の場合、結果を W レジスタ
に格納する。「d」 = 「1」の場合、結果を
レジスタ「f」に書き戻す ( 既定値 )。「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : COMF REG, 0, 0
命令実行前REG = 13h
命令実行後REG = 13h
W = ECh
CPFSEQ Compare f with W, skip if f = W
構文 : CPFSEQ f {,a}
オペランド : 0 f 255a [0,1]
動作 : (f) – (W), (f) = (W) の場合スキップ ( 符号なし比較 )
影響を受ける
ステータス :なし
エンコード : 0110 001a ffff ffff
説明 : データメモリのアドレス「f」の内容と
W レジスタの内容を、符号なし減算を
実行して比較する。
「f」 = W ならフェッチした命令を破棄
し、代わりに NOPを実行して 2 サイク
ル命令とする。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1(2)Note: スキップ先の命令が 2 ワード命
令の場合は 3 サイクルになる。
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
NOP
スキップする場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
スキップ先が 2 ワード命令の場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
NOP NOP NOP NOP
例 : HERE CPFSEQ REG, 0NEQUAL :EQUAL :
命令実行前PC Address = HERE
W = ?REG = ?
命令実行後If REG = W;
PC = Address (EQUAL)If REG W;
PC = Address (NEQUAL)
DS41350D_JP - p. 328 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
CPFSGT Compare f with W, skip if f > W
構文 : CPFSGT f {,a}
オペランド : 0 f 255a [0,1]
動作 : (f) –W),(f) > (W) の場合スキップ ( 符号なし比較 )
影響を受ける
ステータス :なし
エンコード : 0110 010a ffff ffff
説明 : データメモリのアドレス「f」の内容と
W レジスタの内容を、符号なし減算を
実行して比較する。
「f」の内容の方が WREG の内容より大
きい場合はフェッチした命令を破棄し、
代わりに NOPを実行して 2 サイクル命
令とする。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1(2)Note: スキップ先の命令が 2 ワード命
令の場合は 3 サイクルになる。
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
NOP
スキップする場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
スキップ先が 2 ワード命令の場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
NOP NOP NOP NOP
例 : HERE CPFSGT REG, 0NGREATER :GREATER :
命令実行前PC = Address (HERE)
W = ?命令実行後
If REG W;PC = Address (GREATER)
If REG W;PC = Address (NGREATER)
CPFSLT Compare f with W, skip if f < W
構文 : CPFSLT f {,a}
オペランド : 0 f 255a [0,1]
動作 : (f) –W),(f) < (W) の場合スキップ ( 符号なし比較 )
影響を受ける
ステータス :なし
エンコード : 0110 000a ffff ffff
説明 : データメモリのアドレス「f」の内容と
W レジスタの内容を、符号なし減算を
実行して比較する。
「f」の内容の方が W レジスタの内容よ
り小さい場合はフェッチした命令を破
棄し、代わりに NOPを実行して 2 サイ
クル命令とする。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。
ワード数 : 1
サイクル数 : 1(2)Note: スキップ先の命令が 2 ワード命
令の場合は 3 サイクルになる。
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
NOP
スキップする場合 :
Q1 Q2 Q3 Q4
NOP NOP NOP NOP
スキップ先が 2 ワード命令の場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
NOP NOP NOP NOP
例 : HERE CPFSLT REG, 1NLESS :LESS :
命令実行前PC = Address (HERE)W = ?
命令実行後If REG < W;PC = Address (LESS)If REG W;PC = Address (NLESS)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 329
PIC18F/LF1XK50
DAW Decimal Adjust W Register
構文 : DAW
オペランド : なし
動作 : [W<3:0> > 9] または [DC = 1] の場合(W<3:0>) + 6 W<3:0>;それ以外の場合 (W<3:0>) W<3:0>;
[W<7:4> + DC > 9] または [C = 1] の場合(W<7:4>) + 6 + DC W<7:4>;それ以外の場合 (W<7:4>) + DC W<7:4>
影響を受ける
ステータス :C
エンコード : 0000 0000 0000 0111
説明 : DAW命令は、2 つの変数 ( いずれも
パック形式の BCD) を加算して W レジ
スタに格納した 8 ビットの値を調整し、
正しいパック形式の BCD の結果を生
成する。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード W レジスタ
を読み出し
データを
処理
W に
書き込み
例 1:DAW
命令実行前
W = A5hC = 0DC = 0
命令実行後
W = 05hC = 1DC = 0
例 2:
命令実行前
W = CEhC = 0DC = 0
命令実行後
W = 34hC = 1DC = 0
DECF Decrement f
構文 : DECF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f) – 1 dest
影響を受ける
ステータス :C, DC, N, OV, Z
エンコード : 0000 01da ffff ffff
説明 : レジスタ「f」の内容をデクリメントす
る。「d」 = 「0」の場合、結果を W レジ
スタに格納する。「d」 = 「1」の場合、結
果をレジスタ「f」に書き戻す ( 既定値 )。「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : DECF CNT, 1, 0
命令実行前CNT = 01hZ = 0
命令実行後CNT = 00hZ = 1
DS41350D_JP - p. 330 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
DECFSZ Decrement f, skip if 0
構文 : DECFSZ f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f) – 1 dest,結果 = 0の場合スキップ
影響を受ける
ステータス :なし
エンコード : 0010 11da ffff ffff
説明 : レジスタ「f」の内容をデクリメントす
る。「d」 = 「0」の場合、結果を W レジ
スタに格納する。「d」 = 「1」の場合、結
果をレジスタ「f」に書き戻す ( 既定値 )。結果が「0」の場合、フェッチ済みの
次の命令を破棄し、代わりに NOPを実
行して 2 サイクル命令とする。
「a」 = 「0」の場合、アクセスバンクを選
択する。「a」 = 「1」の場合、BSR を使
用してGPRバンクを選択する(既定値)。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実
行される。詳細は、25.2.3「インデッ
クス付きリテラル オフセット モード
でのバイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1(2)Note: スキップ先の命令が 2 ワード命
令の場合は 3 サイクルになる。
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
スキップする場合 :
Q1 Q2 Q3 Q4
NOP NOP NOP NOP
スキップ先が 2 ワード命令の場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
NOP NOP NOP NOP
例 : HERE DECFSZ CNT, 1, 1 GOTO LOOPCONTINUE
命令実行前PC = Address (HERE)
命令実行後CNT = CNT - 1If CNT = 0;
PC = Address (CONTINUE)If CNT 0;
PC = Address (HERE + 2)
DCFSNZ Decrement f, skip if not 0
構文 : DCFSNZ f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f) – 1 dest,結果 0の場合スキップ
影響を受ける
ステータス :なし
エンコード : 0100 11da ffff ffff
説明 : レジスタ「f」の内容をデクリメントする。
「d」 = 「0」の場合、結果を W レジスタ
に格納する。「d」 = 「1」の場合、結果を
レジスタ「f」に書き戻す ( 既定値 )。結果が「0」でなければフェッチ済み
の次の命令を破棄し、代わりに NOPを
実行して 2 サイクル命令とする。
「a」 = 「0」の場合、アクセスバンクを選
択する。「a」 = 「1」の場合、BSR を使
用してGPRバンクを選択する (既定値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実
行される。詳細は、25.2.3「インデッ
クス付きリテラル オフセット モード
でのバイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1(2)Note: スキップ先の命令が2ワード命
令の場合は 3 サイクルになる。
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
スキップする場合 :
Q1 Q2 Q3 Q4
NOP NOP NOP NOP
スキップ先が 2 ワード命令の場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
NOP NOP NOP NOP
例 : HERE DCFSNZ TEMP, 1, 0ZERO : NZERO :
命令実行前TEMP = ?
命令実行後TEMP = TEMP – 1,If TEMP = 0;
PC = Address (ZERO)If TEMP 0;
PC = Address (NZERO)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 331
PIC18F/LF1XK50
GOTO Unconditional Branch
構文 : GOTO k
オペランド : 0 k 1048575
動作 : k PC<20:1>
影響を受ける
ステータス :なし
エンコード :1 ワード目 (k<7:0>)2 ワード目 (k<19:8>)
11101111
1111k19kkk
k7kkkkkkk
kkkk0kkkk8
説明 : GOTOは、2 MB の全メモリ空間の任意
のアドレスへの無条件分岐を実行する。
20 ビットの値「k」を PC<20:1> に読
み込む。GOTOは常に 2 サイクル命令。
ワード数 : 2
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」<7:0>を読み出し
NOP リテラル
「k」 <19:8>を読み出
し、PC に
書き込み
NOP NOP NOP NOP
例 : GOTO THERE
命令実行後PC = Address (THERE)
INCF Increment f
構文 : INCF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f) + 1 dest
影響を受ける
ステータス :C, DC, N, OV, Z
エンコード : 0010 10da ffff ffff
説明 : レジスタ「f」の内容をインクリメント
する。「d」 = 「0」の場合、結果を Wレジスタに格納する。「d」 = 「1」の場
合、結果をレジスタ「f」に書き戻す
( 既定値 )。「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : INCF CNT, 1, 0
命令実行前CNT = FFhZ = 0C = ?DC = ?
命令実行後CNT = 00hZ = 1C = 1DC = 1
DS41350D_JP - p. 332 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
INCFSZ Increment f, skip if 0
構文 : INCFSZ f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f) + 1 dest,結果 = 0の場合スキップ
影響を受ける
ステータス :なし
エンコード : 0011 11da ffff ffff
説明 : レジスタ「f」の内容をインクリメントす
る。「d」 = 「0」の場合、結果を W レジ
スタに格納する。「d」 = 「1」の場合、結
果をレジスタ「f」に書き戻す ( 既定値 )。結果が「0」の場合、フェッチ済みの次
の命令を破棄し、代わりに NOPを実行
して 2 サイクル命令とする。
「a」 = 「0」の場合、アクセスバンクを選
択する。「a」 = 「1」の場合、BSR を使
用してGPRバンクを選択する (既定値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1(2)Note: スキップ先の命令が 2 ワード命
令の場合は 3 サイクルになる。
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
スキップする場合 :
Q1 Q2 Q3 Q4
NOP NOP NOP NOP
スキップ先が 2 ワード命令の場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
NOP NOP NOP NOP
例 : HERE INCFSZ CNT, 1, 0NZERO : ZERO :
命令実行前PC = Address (HERE)
命令実行後CNT = CNT + 1If CNT = 0;PC = Address (ZERO)If CNT 0;PC = Address (NZERO)
INFSNZ Increment f, skip if not 0
構文 : INFSNZ f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f) + 1 dest, skip if result 0
影響を受ける
ステータス :なし
エンコード : 0100 10da ffff ffff
説明 : レジスタ「f」の内容をインクリメントす
る。「d」 = 「0」の場合、結果を W レジ
スタに格納する。「d」 = 「1」の場合、結
果をレジスタ「f」に書き戻す ( 既定値 )。結果が「0」でなければフェッチ済みの
次の命令を破棄し、代わりに NOPを実
行して 2 サイクル命令とする。
「a」 = 「0」の場合、アクセスバンクを選
択する。「a」 = 「1」の場合、BSR を使
用してGPRバンクを選択する (既定値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1(2)Note: スキップ先の命令が 2ワード命
令の場合は 3 サイクルになる。
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
スキップする場合 :
Q1 Q2 Q3 Q4
NOP NOP NOP NOP
スキップ先が 2 ワード命令の場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
NOP NOP NOP NOP
例 : HERE INFSNZ REG, 1, 0ZERONZERO
命令実行前PC = Address (HERE)
命令実行後REG = REG + 1If REG 0;PC = Address (NZERO)If REG = 0;PC = Address (ZERO)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 333
PIC18F/LF1XK50
IORLW Inclusive OR literal with W
構文 : IORLW k
オペランド : 0 k 255
動作 : (W) .OR. k W
影響を受ける
ステータス :N, Z
エンコード : 0000 1001 kkkk kkkk
説明 : W レジスタの内容と 8 ビットのリテ
ラル「k」を OR 演算する。結果を Wレジスタに格納する。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」を
読み出し
データを
処理
W に書き込
み
例 : IORLW 35h
命令実行前
W = 9Ah命令実行後
W = BFh
IORWF Inclusive OR W with f
構文 : IORWF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (W) .OR. (f) dest
影響を受ける
ステータス :N, Z
エンコード : 0001 00da ffff ffff
説明 : W レジスタとレジスタ「f」の内容を OR演算する。「d」 = 「0」の場合、結果を
W レジスタに格納する。「d」 = 「1」の
場合、結果をレジスタ「f」に書き戻す
( 既定値 )。「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : IORWF RESULT, 0, 1
命令実行前RESULT = 13h
W = 91h命令実行後
RESULT = 13h
W = 93h
DS41350D_JP - p. 334 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
LFSR Load FSR
構文 : LFSR f, k
オペランド : 0 f 20 k 4095
動作 : k FSRf
影響を受ける
ステータス :なし
エンコード : 11101111
11100000
00ffk7kkk
k11kkkkkkk
説明 : 12 ビットのリテラル「k」を、「f」が
指し示す FSR に読み込む。
ワード数 : 2
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」の MSBを読み出し
データを
処理
FSRfH にリ
テラル「k」の MSB を
書き込み
デコード リテラル
「k」の LSBを読み出し
データを
処理 FSRfL にリ
テラル「k」を書き込み
例 : LFSR 2, 3ABh
命令実行後FSR2H = 03hFSR2L = ABh
MOVF Move f
構文 : MOVF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : f dest
影響を受ける
ステータス :N, Z
エンコード : 0101 00da ffff ffff
説明 : レジスタ「f」の内容を、「d」のステー
タスに応じて格納先に移動する。「d」 = 「0」の場合、結果を W レジスタに格納
する。「d」 = 「1」の場合、結果をレジ
スタ「f」に書き戻す ( 既定値 )。「f」の
アドレスは、256 バイト バンクの任意
の場所を指定できる。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
W に
書き込み
例 : MOVF REG, 0, 0
命令実行前REG = 22h
W = FFh命令実行後
REG = 22h
W = 22h
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 335
PIC18F/LF1XK50
MOVFF Move f to f
構文 : MOVFF fs,fd
オペランド : 0 fs 40950 fd 4095
動作 : (fs) fd
影響を受ける
ステータス :なし
エンコード :1 ワード目 ( ソース )2 ワード目 ( 格納先 )
11001111
ffffffff
ffffffff
ffffsffffd
説明 : ソースレジスタ「fs」の内容を格納先
レジスタ「fd」に移動する。
ソース「fs」と格納先「fd」のアドレス
はいずれも 4096 バイトのデータ空間
(000h ~ FFFh) の任意の場所を指定で
きる。
ソースと格納先のいずれかを W レジス
タとする事も可能 (特別な場合 )である。
MOVFFは、特にデータメモリのアド
レスを周辺レジスタ ( 送信バッファや
I/O ポート等 ) に移す際に使用する。
MOVFF命令では、PCL、TOSU、
TOSH、TOSL を格納先レジスタには使
用できない。
ワード数 : 2
サイクル数 : 2 (3)
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」 ( ソース ) を読み出し
データを
処理
NOP
デコード NOP
ダミー読み
出しなし
NOP レジスタ「f」 ( 格納先 ) に書き込み
例 : MOVFF REG1, REG2
命令実行前REG1 = 33hREG2 = 11h
命令実行後REG1 = 33hREG2 = 33h
MOVLB Move literal to low nibble in BSR
構文 : MOVLB k
オペランド : 0 k 255
動作 : k BSR
影響を受ける
ステータス :なし
エンコード : 0000 0001 kkkk kkkk
説明 : 8 ビットのリテラル「k」をバンク セレ
クト レジスタ (BSR) に読み込む。
k7:k4 の値にかかわらず、BSR<7:4> の
値は常に「0」である。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」を
読み出し
データを
処理
BSR にリテ
ラル「k」を
書き込み
例 : MOVLB 5
命令実行前BSR Register = 02h
命令実行後BSR Register = 05h
DS41350D_JP - p. 336 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
MOVLW Move literal to W
構文 : MOVLW k
オペランド : 0 k 255
動作 : k W
影響を受ける
ステータス :なし
エンコード : 0000 1110 kkkk kkkk
説明 : 8 ビットのリテラル「k」を W レジス
タに読み込む。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」を
読み出し
データを
処理
W に
書き込み
例 : MOVLW 5Ah
命令実行後
W = 5Ah
MOVWF Move W to f
構文 : MOVWF f {,a}
オペランド : 0 f 255a [0,1]
動作 : (W) f
影響を受ける
ステータス :なし
エンコード : 0110 111a ffff ffff
説明 : W レジスタからレジスタ「f」へデー
タを移動する。
「f」のアドレスは、256 バイト バンク
の任意の場所を指定できる。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
レジスタ
「f」に
書き込み
例 : MOVWF REG, 0
命令実行前
W = 4FhREG = FFh
命令実行後
W = 4FhREG = 4Fh
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 337
PIC18F/LF1XK50
MULLW Multiply literal with W
構文 : MULLW k
オペランド : 0 k 255
動作 : (W) x k PRODH:PRODL
影響を受ける
ステータス :なし
エンコード : 0000 1101 kkkk kkkk
説明 : W レジスタの内容と 8 ビットのリテ
ラル「k」とで符号なし乗算を実行す
る。16 ビットの結果を
PRODH:PRODL レジスタペアに格納
する。PRODH には上位バイトを格納
する。
W レジスタの内容は変化しない。
ステータスフラグは一切変化しない。
この演算では、オーバーフローもキャ
リーも不可能。結果がゼロになる事は
あっても、検出されない。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」を
読み出し
データを
処理
PRODH:PRODLレジスタ
に書き込み
例 : MULLW 0C4h
命令実行前
W = E2hPRODH = ?PRODL = ?
命令実行後
W = E2hPRODH = ADhPRODL = 08h
MULWF Multiply W with f
構文 : MULWF f {,a}
オペランド : 0 f 255a [0,1]
動作 : (W) x (f) PRODH:PRODL
影響を受ける
ステータス :なし
エンコード : 0000 001a ffff ffff
説明 : W レジスタの内容とアドレス「f」の
レジスタファイルとで符号なし乗算
を実行する。16 ビットの結果を
PRODH:PRODL レジスタペアに格納
する。PRODH には上位バイトを格納
する。W と「f」の内容はどちらも変
化しない。
ステータスフラグは一切変化しない。
この演算では、オーバーフローも
キャリーも不可能。結果がゼロにな
る事はあっても、検出されない。
「a」 = 「0」の場合、アクセスバンク
を選択する。「a」 = 「1」の場合、
BSR を使用して GPR バンクを選択
する ( 既定値 )。「a」 = 「0」で拡張命令セットを有効
にしている場合、f 95 (5Fh) ならこ
の命令は常にインデックス付きリテ
ラル オフセット アドレッシング モー
ドで実行される。詳細は、25.2.3「イ
ンデックス付きリテラル オフセット モードでのバイト / ビット指向命令」
参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
PRODH:PRODLレジスタ
に書き込み
例 : MULWF REG, 1
命令実行前
W = C4hREG = B5hPRODH = ?PRODL = ?
命令実行後
W = C4hREG = B5hPRODH = 8AhPRODL = 94h
DS41350D_JP - p. 338 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
NEGF Negate f
構文 : NEGF f {,a}
オペランド : 0 f 255a [0,1]
動作 : ( f ) + 1 f
影響を受ける
ステータス :N, OV, C, DC, Z
エンコード : 0110 110a ffff ffff
説明 : 2 の補数を使用してアドレス「f」の符
号を反転する。結果をデータメモリの
アドレス「f」に格納する。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSRを使用して GPR バンクを選択する
( 既定値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実
行される。詳細は、25.2.3「インデッ
クス付きリテラル オフセット モード
でのバイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
レジスタ
「f」に
書き込み
例 : NEGF REG, 1
命令実行前REG = 0011 1010 [3Ah]
命令実行後REG = 1100 0110 [C6h]
NOP No Operation
構文 : NOP
オペランド : なし
動作 : No operation
影響を受ける
ステータス :なし
エンコード : 00001111
0000xxxx
0000xxxx
0000xxxx
説明 : 何も行わない。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード NOP NOP NOP
例 :
なし
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 339
PIC18F/LF1XK50
POP Pop Top of Return Stack
構文 : POP
オペランド : なし
動作 : (TOS) bit bucket
影響を受ける
ステータス :なし
エンコード : 0000 0000 0000 0110
説明 : TOS の値をリターンスタックから取り
出して破棄する。これにより、その前
にリターンスタックにプッシュした値
が TOS の値になる。
この命令は、ユーザがリターンスタッ
クを適切に管理してソフトウェア スタックを実装するためのものである。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード NOP TOS の値を
ポップ
NOP
例 : POPGOTO NEW
命令実行前TOS = 0031A2hStack (1 level down) = 014332h
命令実行後TOS = 014332hPC = NEW
PUSH Push Top of Return Stack
構文 : PUSH
オペランド : なし
動作 : (PC + 2) TOS
影響を受ける
ステータス :なし
エンコード : 0000 0000 0000 0101
説明 : PC + 2 をリターンスタックの先頭に
プッシュする。それまでの TOS 値はス
タックの次の位置にプッシュされる。
この命令を使用して TOS を変更し、リ
ターンスタックにプッシュする事で、
ソフトウェア スタックを実装できる。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード PC + 2 を
リターン
スタックに
プッシュ
NOP NOP
例 : PUSH
命令実行前TOS = 345AhPC = 0124h
命令実行後PC = 0126hTOS = 0126hStack (1 level down) = 345Ah
DS41350D_JP - p. 340 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
RCALL Relative Call
構文 : RCALL n
オペランド : -1024 n 1023
動作 : (PC) + 2 TOS,(PC) + 2 + 2n PC
影響を受ける
ステータス :なし
エンコード : 1101 1nnn nnnn nnnn
説明 : 現在のアドレスから 大 1K までの範
囲でサブルーチンへジャンプする。
まず、リターンアドレス (PC + 2) をス
タックにプッシュする。次に、PC に
2 の補数「2n」を足す。PC は次の命令
をフェッチするためにインクリメント
しているため、新しいアドレスは
PC + 2 + 2n となる。この命令は 2 サ
イクル命令である。
ワード数 : 1
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「n」を
読み出し
PC を
スタックに
プッシュ
データを
処理
PC に
書き込み
NOP NOP NOP NOP
例 : HERE RCALL Jump
命令実行前PC = Address (HERE)
命令実行後PC = Address (Jump)TOS = Address (HERE + 2)
RESET Reset
構文 : RESET
オペランド : なし
動作 : MCLR リセットの影響を受ける全ての
レジスタとフラグをリセットする。
影響を受ける
ステータス :全て
エンコード : 0000 0000 1111 1111
説明 : この命令は、MCLR リセットを
ソフトウェアで実行する。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リセットを
開始
NOP NOP
例 : RESET
命令実行後Registers = Reset ValueFlags* = Reset Value
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 341
PIC18F/LF1XK50
RETFIE Return from Interrupt
構文 : RETFIE {s}
オペランド : s [0,1]
動作 : (TOS) PC,1 GIE/GIEH or PEIE/GIEL,s = 1の場合(WS) W,(STATUSS) Status,(BSRS) BSR,PCLATU, PCLATH は変更されない
影響を受ける
ステータス :GIE/GIEH, PEIE/GIEL.
エンコード : 0000 0000 0001 000s
説明 : 割り込みから戻る。スタックをポップ
して、TOS を PC に読み込む。割り込
みを有効にするには、高優先度または
低優先度のグローバル割り込みイネー
ブルビットをセットする。「s」 = 1の場
合、シャドウレジスタ WS、STATUSS、BSRS の内容をそれぞれ W、STATUS、BSR の各レジスタに読み込む。「s」 = 0の場合、これらのレジスタは更新され
ない ( 既定値 )。
ワード数 : 1
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード NOP NOP スタック
から PC を
ポップ
GIEH または
GIEL を
セット
NOP NOP NOP NOP
例 : RETFIE 1
割り込み後PC = TOSW = WSBSR = BSRSStatus = STATUSSGIE/GIEH, PEIE/GIEL = 1
RETLW Return literal to W
構文 : RETLW k
オペランド : 0 k 255
動作 : k W,(TOS) PC,PCLATU, PCLATH は変更されない
影響を受ける
ステータス :なし
エンコード : 0000 1100 kkkk kkkk
説明 : W レジスタに 8 ビットのリテラル
「k」を読み込む。TOS ( リターンアド
レス ) を PC に読み込む。上位アドレ
スラッチ (PCLATH) は変化しない。
ワード数 : 1
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」を
読み出し
データを
処理
スタック
から PC を
ポップし、
W に
書き込み
NOP NOP NOP NOP
例 :
CALL TABLE ; W contains table; offset value; W now has ; table value
:TABLE
ADDWF PCL ; W = offsetRETLW k0 ; Begin tableRETLW k1 ;
: :
RETLW kn ; End of table
命令実行前
W = 07h命令実行後
W = value of kn
DS41350D_JP - p. 342 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
RETURN Return from Subroutine
構文 : RETURN {s}
オペランド : s [0,1]
動作 : (TOS) PC,s = 1の場合(WS) W,(STATUSS) Status,(BSRS) BSR,PCLATU, PCLATH は変更されない
影響を受ける
ステータス :なし
エンコード : 0000 0000 0001 001s
説明 : サブルーチンから戻る。スタックを
ポップし、TOS を PC に読み込む。
「s」 = 1の場合、シャドウレジスタ
WS、STATUSS、BSRS の内容をそれ
ぞれ W、STATUS、BSR の各レジスタ
に読み込む。「s」 = 0の場合、これらの
レジスタは更新されない ( 既定値 )。
ワード数 : 1
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード NOP データを
処理
スタック
から PC を
ポップ
NOP NOP NOP NOP
例 : RETURN
命令実行後PC = TOS
RLCF Rotate Left f through Carry
構文 : RLCF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f<n>) dest<n + 1>,(f<7>) C,(C) dest<0>
影響を受ける
ステータス :C, N, Z
エンコード : 0011 01da ffff ffff
説明 : レジスタ「f」の内容を、CARRY フラ
グを含めて左へ 1 ビットローテートシ
フトする。「d」 = 「0」の場合、結果
を W レジスタに格納する。「d」 = 「1」の場合、結果をレジスタ「f」に
書き戻す ( 既定値 )。「a」 = 「0」の場合、アクセスバンク
を選択する。「a」 = 「1」の場合、
BSR を使用して GPR バンクを選択す
る ( 既定値 )。「a」 = 「0」で拡張命令セットを有効
にしている場合、f 95 (5Fh) ならこ
の命令は常にインデックス付きリテラ
ル オフセット アドレッシング モード
で実行される。詳細は、25.2.3「イン
デックス付きリテラル オフセット モードでのバイト / ビット指向命令」
参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : RLCF REG, 0, 0
命令実行前REG = 1110 0110C = 0
命令実行後REG = 1110 0110
W = 1100 1100C = 1
C register f
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 343
PIC18F/LF1XK50
RLNCF Rotate Left f (No Carry)
構文 : RLNCF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f<n>) dest<n + 1>,(f<7>) dest<0>
影響を受ける
ステータス :N, Z
エンコード : 0100 01da ffff ffff
説明 : レジスタ「f」の内容を 1 ビット左へ
ローテートシフトする。「d」 = 「0」の
場合、結果を W レジスタに格納する。
「d」 = 「1」の場合、結果をレジスタ
「f」に書き戻す ( 既定値 )。「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSRを使用して GPR バンクを選択する
( 既定値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの
命令は常にインデックス付きリテラル オフセット アドレッシング モードで
実行される。詳細は、25.2.3「イン
デックス付きリテラル オフセット モードでのバイト / ビット指向命令」
参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : RLNCF REG, 1, 0
命令実行前REG = 1010 1011
命令実行後REG = 0101 0111
register f
RRCF Rotate Right f through Carry
構文 : RRCF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f<n>) dest<n – 1>,(f<0>) C,(C) dest<7>
影響を受ける
ステータス :C, N, Z
エンコード : 0011 00da ffff ffff
説明 : レジスタ「f」の内容を、CARRY フラ
グを含めて右へ 1 ビットローテートシ
フトする。「d」 = 「0」の場合、結果を
W レジスタに格納する。「d」 = 「1」の
場合、結果をレジスタ「f」に書き戻す
( 既定値 )。「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : RRCF REG, 0, 0
命令実行前REG = 1110 0110C = 0
命令実行後REG = 1110 0110
W = 0111 0011C = 0
C register f
DS41350D_JP - p. 344 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
RRNCF Rotate Right f (No Carry)
構文 : RRNCF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f<n>) dest<n – 1>,(f<0>) dest<7>
影響を受ける
ステータス :N, Z
エンコード : 0100 00da ffff ffff
説明 : レジスタ「f」の内容を 1 ビット右へ
ローテートシフトする。「d」 = 「0」の
場合、結果を W レジスタに格納する。
「d」 = 「1」の場合、結果をレジスタ
「f」に書き戻す ( 既定値 )。「a」 = 「0」の場合、BSR の値にかかわ
らずアクセスバンクを選択する。「a」 = 「1」の場合、BSR の値でバンクを選択
する ( 既定値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 1: RRNCF REG, 1, 0
命令実行前REG = 1101 0111
命令実行後REG = 1110 1011
例 2: RRNCF REG, 0, 0
命令実行前
W = ?REG = 1101 0111
命令実行後
W = 1110 1011REG = 1101 0111
register f
SETF Set f
構文 : SETF f {,a}
オペランド : 0 f 255a [0,1]
動作 : FFh f
影響を受ける
ステータス :なし
エンコード : 0110 100a ffff ffff
説明 : 指定したレジスタの内容を FFh にセッ
トする。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
レジスタ
「f」に
書き込み
例 : SETF REG, 1
命令実行前REG = 5Ah
命令実行後REG = FFh
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 345
PIC18F/LF1XK50
SLEEP Enter Sleep mode
構文 : SLEEP
オペランド : なし
動作 : 00h WDT,0 WDT ポストスケーラ ,1 TO,0 PD
影響を受ける
ステータス :TO, PD
エンコード : 0000 0000 0000 0011
説明 : パワーダウン ステータスビット (PD)をクリアする。タイムアウト ステー
タスビット (TO) をセットする。
ウォッチドッグ タイマをポストス
ケーラを含めてクリアする。
オシレータを停止してプロセッサを
スリープモードにする。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード NOP データを
処理
スリープに
移行する
例 : SLEEP
命令実行前TO = ?PD = ?
命令実行後TO = 1 PD = 0
WDT によってウェイクアップした場合、このビットはクリ
アされる。
SUBFWB Subtract f from W with borrow
構文 : SUBFWB f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (W) – (f) – (C) dest
影響を受ける
ステータス :N, OV, C, DC, Z
エンコード : 0101 01da ffff ffff
説明 : Wレジスタからレジスタ「f」とCARRYフラグ ( ボロー ) を引く (2 の補数法 )。「d」 = 「0」の場合、結果を W レジスタに格納する。「d」 = 「1」の場合、結果をレジスタ「f」に格納する ( 既定値 )。
「a」 = 「0」の場合、アクセスバンクを選択する。「a」 = 「1」の場合、BSR を使用して GPR バンクを選択する ( 既定値 )。
「a」 = 「0」で拡張命令セットを有効にしている場合、f 95 (5Fh) ならこの命令は常にインデックス付きリテラル オフセット アドレッシング モードで実行される。詳細は、25.2.3「インデックス付きリテラル オフセット モードでのバイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ「f」を読み出し
データを処理
格納先に書き込み
例 1: SUBFWB REG, 1, 0
命令実行前REG = 3W = 2C = 1
命令実行後REG = FFW = 2C = 0Z = 0N = 1 ; result is negative
例 2: SUBFWB REG, 0, 0
命令実行前REG = 2W = 5C = 1
命令実行後REG = 2W = 3C = 1Z = 0N = 0 ; result is positive
例 3: SUBFWB REG, 1, 0
命令実行前REG = 1W = 2C = 0
命令実行後REG = 0W = 2C = 1Z = 1 ; result is zeroN = 0
DS41350D_JP - p. 346 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
SUBLW Subtract W from literal
構文 : SUBLW k
オペランド : 0 k 255
動作 : k – (W) W
影響を受ける
ステータス :N, OV, C, DC, Z
エンコード : 0000 1000 kkkk kkkk
説明 : 8 ビットのリテラル「k」から W レジ
スタの内容を引く。結果を W レジス
タに格納する。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」を
読み出し
データを
処理
W に
書き込み
例 1: SUBLW 02h
命令実行前W = 01hC = ?
命令実行後W = 01hC = 1 ; result is positiveZ = 0N = 0
例 2: SUBLW 02h
命令実行前W = 02hC = ?
命令実行後W = 00hC = 1 ; result is zeroZ = 1N = 0
例 3: SUBLW 02h
命令実行前W = 03hC = ?
命令実行後W = FFh ; (2」s complement)C = 0 ; result is negativeZ = 0N = 1
SUBWF Subtract W from f
構文 : SUBWF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f) – (W) dest
影響を受ける
ステータス :N, OV, C, DC, Z
エンコード : 0101 11da ffff ffff
説明 : レジスタ「f」から W レジスタの内容を引く (2 の補数法 )。「d」 = 「0」の場合、結果を W レジスタに格納する。「d」 = 「1」の場合、結果をレジスタ「f」に書き戻す ( 既定値 )。
「a」 = 「0」の場合、アクセスバンクを選択する。「a」 = 「1」の場合、BSR を使用して GPR バンクを選択する ( 既定値 )。
「a」 = 「0」で拡張命令セットを有効にしている場合、f 95 (5Fh) ならこの命令は常にインデックス付きリテラル オフセット アドレッシング モードで実行される。詳細は、25.2.3「インデックス付きリテラル オフセット モードでのバイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ「f」を読み出し
データを処理
格納先に書き込み
例 1: SUBWF REG, 1, 0
命令実行前REG = 3W = 2C = ?
命令実行後REG = 1W = 2C = 1 ; result is positiveZ = 0N = 0
例 2: SUBWF REG, 0, 0
命令実行前REG = 2W = 2C = ?
命令実行後REG = 2W = 0C = 1 ; result is zeroZ = 1N = 0
例 3: SUBWF REG, 1, 0
命令実行前REG = 1W = 2C = ?
命令実行後REG = FFh ;(2」s complement)W = 2C = 0 ; result is negativeZ = 0N = 1
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 347
PIC18F/LF1XK50
SUBWFB Subtract W from f with Borrow
構文 : SUBWFB f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f) – (W) – (C) dest
影響を受ける
ステータス :N, OV, C, DC, Z
エンコード : 0101 10da ffff ffff
説明 : レジスタ「f」から W レジスタとCARRY フラグを引く ( ボロー )(2 の補数法 )。「d」 = 「0」の場合、結果を Wレジスタに格納する。「d」 = 「1」の場合、結果をレジスタ「f」に書き戻す( 既定値 )。
「a」 = 「0」の場合、アクセスバンクを選択する。「a」 = 「1」の場合、BSR を使用して GPR バンクを選択する ( 既定値 )。
「a」 = 「0」で拡張命令セットを有効にしている場合、f 95 (5Fh) ならこの命令は常にインデックス付きリテラル オフセット アドレッシング モードで実行される。詳細は、25.2.3「インデックス付きリテラル オフセット モードでのバイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ「f」を読み出し
データを処理
格納先に書き込み
例 1: SUBWFB REG, 1, 0
命令実行前REG = 19h (0001 1001)W = 0Dh (0000 1101)C = 1
命令実行後REG = 0Ch (0000 1011)W = 0Dh (0000 1101)C = 1Z = 0N = 0 ; result is positive
例 2: SUBWFB REG, 0, 0
命令実行前REG = 1Bh (0001 1011)W = 1Ah (0001 1010)C = 0
命令実行後REG = 1Bh (0001 1011)W = 00hC = 1Z = 1 ; result is zeroN = 0
例 3: SUBWFB REG, 1, 0
命令実行前REG = 03h (0000 0011)W = 0Eh (0000 1101)C = 1
命令実行後REG = F5h (1111 0100)
; [2」s comp]W = 0Eh (0000 1101)C = 0Z = 0N = 1 ; result is negative
SWAPF Swap f
構文 : SWAPF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (f<3:0>) dest<7:4>,(f<7:4>) dest<3:0>
影響を受ける
ステータス :なし
エンコード : 0011 10da ffff ffff
説明 : レジスタ「f」の上位ニブルと下位ニブ
ルを入れ替える。「d」 = 「0」の場合、
結果を W レジスタに格納する。「d」 = 「1」の場合、結果をレジスタ「f」に格
納する ( 既定値 )。「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : SWAPF REG, 1, 0
命令実行前REG = 53h
命令実行後REG = 35h
DS41350D_JP - p. 348 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
TBLRD Table Read
構文 : TBLRD ( *; *+; *-; +*)
オペランド : なし
動作 : if TBLRD *,(Prog Mem (TBLPTR)) TABLAT;TBLPTR – No Change;if TBLRD *+,(Prog Mem (TBLPTR)) TABLAT;(TBLPTR) + 1 TBLPTR;if TBLRD *-,(Prog Mem (TBLPTR)) TABLAT;(TBLPTR) – 1 TBLPTR;if TBLRD +*,(TBLPTR) + 1 TBLPTR;(Prog Mem (TBLPTR)) TABLAT;
影響を受ける
ステータス :なし
エンコード : 0000 0000 0000 10nn nn=0 * =1 *+ =2 *- =3 +*
説明 : この命令は、プログラムメモリ (P.M.) の内
容の読み出しに使用する。プログラムメモリ
のアドレスは、テーブルポインタ (TBLPTR)と呼ぶポインタを使って指定する。
TBLPTR (21 ビットのポインタ ) は、プロ
グラムメモリをバイト単位で指定する。
TBLPTR では、2MB のアドレス範囲を指
定できる。
TBLPTR[0] = 0: プログラムメモリ ワードの LSB
TBLPTR[0] = 1: プログラムメモリ ワードの MSB
TBLRD命令では、TBLPTR の値を以下のよ
うに変更できる。
• 変更なし
• 読み出し後にインクリメントする
• 読み出し後にデクリメントする
• 読み出し前にインクリメントする
ワード数 : 1
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード NOP NOP NOP
NOP NOP( プログラムメモリを読み出し )
NOP NOP(TABLAT に書き込み )
TBLRD Table Read ( 続き )
例 1: TBLRD *+ ;
命令実行前TABLAT = 55hTBLPTR = 00A356hMEMORY (00A356h) = 34h
命令実行後TABLAT = 34hTBLPTR = 00A357h
例 2: TBLRD +* ;
命令実行前TABLAT = AAhTBLPTR = 01A357hMEMORY (01A357h) = 12hMEMORY (01A358h) = 34h
命令実行後TABLAT = 34hTBLPTR = 01A358h
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 349
PIC18F/LF1XK50
TBLWT Table Write
構文 : TBLWT ( *; *+; *-; +*)
オペランド : なし
動作 : if TBLWT*,(TABLAT) Holding Register;TBLPTR – No Change;if TBLWT*+,(TABLAT) Holding Register;(TBLPTR) + 1 TBLPTR;if TBLWT*-,(TABLAT) Holding Register;(TBLPTR) – 1 TBLPTR;if TBLWT+*,(TBLPTR) + 1 TBLPTR;(TABLAT) Holding Register;
影響を受ける
ステータス :なし
エンコード : 0000 0000 0000 11nnnn=0 * =1 *+ =2 *- =3 +*
説明 : この命令は、TBLPTR の下位 3 ビットを
使用して 8 つの保持レジスタのどれに
TABLAT を書き込むかを判断する。保持
レジスタは、プログラムメモリ (P.M.) の内容を書き込むために使用する ( フラッ
シュメモリへの書き込みの詳細は、4.0「フラッシュ プログラムメモリ」を参照 )。TBLPTR (21 ビットのポインタ ) は、プロ
グラムメモリをバイト単位で指定する。
TBLPTR では、2MB のアドレス範囲を指
定できる。TBLPTR の 下位ビットで、
プログラムメモリのどのアドレスのバイ
トにアクセスするかを選択する。
TBLPTR[0] = 0: プログラムメモリ ワードの LSB
TBLPTR[0] = 1: プログラムメモリ ワードの MSB
TBLWT命令では、TBLPTR の値を以下の
ように変更できる。
• 変更なし
• 書き込み後にインクリメントする
• 書き込み後にデクリメントする
• 書き込み前にインクリメントする
ワード数 : 1
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード NOP NOP NOP
NOP NOP
(TABLATを読み
出し )
NOP NOP
( 保持
レジスタに
書き込み )
TBLWT Table Write ( 続き )
例 1: TBLWT *+;
命令実行前TABLAT = 55hTBLPTR = 00A356hHOLDING REGISTER (00A356h) = FFh
命令実行 ( テーブル書き込み完了 ) 後TABLAT = 55hTBLPTR = 00A357hHOLDING REGISTER (00A356h) = 55h
例 2: TBLWT +*;
命令実行前TABLAT = 34hTBLPTR = 01389AhHOLDING REGISTER (01389Ah) = FFhHOLDING REGISTER (01389Bh) = FFh
命令実行 ( テーブル書き込み完了 ) 後TABLAT = 34hTBLPTR = 01389BhHOLDING REGISTER (01389Ah) = FFhHOLDING REGISTER (01389Bh) = 34h
DS41350D_JP - p. 350 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
TSTFSZ Test f, skip if 0
構文 : TSTFSZ f {,a}
オペランド : 0 f 255a [0,1]
動作 : f = 0の場合にスキップ
影響を受ける
ステータス :なし
エンコード : 0110 011a ffff ffff
説明 : 「f」 = 0の場合、現在の命令実行中に
フェッチした次の命令を破棄し、NOP命令を実行して 2 サイクル命令とする。
「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSRを使用して GPR バンクを選択する ( 既定値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1(2)Note: スキップ先の命令が 2 ワード命
令の場合は 3 サイクルになる。
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
NOP
スキップする場合 :
Q1 Q2 Q3 Q4
NOP NOP NOP NOP
スキップ先が 2 ワード命令の場合 :Q1 Q2 Q3 Q4
NOP NOP NOP NOP
NOP NOP NOP NOP
例 : HERE TSTFSZ CNT, 1NZERO :ZERO :
命令実行前PC = Address (HERE)
命令実行後If CNT = 00h,PC = Address (ZERO)If CNT 00h,PC = Address (NZERO)
XORLW Exclusive OR literal with W
構文 : XORLW k
オペランド : 0 k 255
動作 : (W) .XOR. k W
影響を受ける
ステータス :N, Z
エンコード : 0000 1010 kkkk kkkk
説明 : W レジスタの内容と 8 ビットのリテ
ラル「k」を XOR 演算する。結果を
W レジスタに格納する。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」を
読み出し
データを
処理
W に
書き込み
例 : XORLW 0AFh
命令実行前
W = B5h命令実行後
W = 1Ah
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 351
PIC18F/LF1XK50
XORWF Exclusive OR W with f
構文 : XORWF f {,d {,a}}
オペランド : 0 f 255d [0,1]a [0,1]
動作 : (W) .XOR. (f) dest
影響を受ける
ステータス :N, Z
エンコード : 0001 10da ffff ffff
説明 : W レジスタとレジスタ「f」の内容を
XOR 演算する。「d」 = 「0」の場合、
結果を W レジスタに格納する。「d」 = 「1」の場合、結果をレジスタ「f」に書
き戻す ( 既定値 )。「a」 = 「0」の場合、アクセスバンクを
選択する。「a」 = 「1」の場合、BSR を
使用して GPR バンクを選択する ( 既定
値 )。「a」 = 「0」で拡張命令セットを有効に
している場合、f 95 (5Fh) ならこの命
令は常にインデックス付きリテラル オフセット アドレッシング モードで実行
される。詳細は、25.2.3「インデック
ス付きリテラル オフセット モードでの
バイト / ビット指向命令」参照。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : XORWF REG, 1, 0
命令実行前REG = AFh
W = B5h命令実行後
REG = 1Ah
W = B5h
DS41350D_JP - p. 352 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
25.2 拡張命令セット
75 命令からなる PIC18 の標準命令セットに加え、PIC18F/LF1XK50 はコア CPU の機能を拡張する命令をサポートしています。間接アドレッシングとインデックス付きアドレッシングを強化する 8 つの拡張命令と、多くの PIC18 標準命令向けのインデックス付きリテラル オフセット アドレッシング モードです。
これらの拡張命令セットは、既定値では無効です。有効にするには、XINST コンフィグレーション ビットをセットする必要があります。
拡張命令セットの命令は全てリテラル命令に分類され、FSR を操作するか、FSR を使用してインデックス付きアドレッシングを行います。拡張命令のうち、ADDFSRと SUBFSRにはそれぞれ FSR2 を使用する命令も用意しています。これらの命令 (ADDULNK とSUBULNK) では、実行後に自動的にリターンできます。
拡張命令は、主に C 言語等の高級言語で作成した再入可能プログラムコード ( すなわち、再帰コードまたはソフトウェア スタックを使用するコード ) を 適化する目的で実装しています。これらの命令を利用すると、データ構造に対する演算を高級言語でも効率的に実行できます。例えば以下のような場合です。
• サブルーチン開始時と終了時における、ソフトウェア スタック空間の動的な割り当てと割り当て解除
• 関数ポインタの呼び出し
• ソフトウェア スタックポインタの操作
• ソフトウェア スタック内の変数の操作
表 25-3 に、拡張命令セットの命令一覧を示します。各命令の詳細は、25.2.2「拡張命令セット」で説明します。オペコード フィールドの説明は、表 25-1 (312ページ ) に示した PIC18 標準命令と共通です。
25.2.1 拡張命令の構文
拡張命令のほとんどはインデックス付き引数を使用し、ファイル セレクト レジスタの 1 つとオフセットを使用してソースまたは格納先のレジスタを指定します。命令の引数をインデックス付きアドレッシングに使用する場合、引数を角カッコ (“[ ]”) で囲みます。これによって、その引数をインデックスまたはオフセットとして使用する事を明示します。インデックスまたはオフセットの値を角カッコで囲まないと、MPASM™アセンブラでエラーが発生します。
拡張命令セットを有効にした場合、バイト指向命令とビット指向命令のインデックス引数を示すためにも角カッコを使用します。これ以外にもいくつかの構文の変更があります。詳細は、25.2.3.1「拡張命令有効時の PIC18 標準コマンドの構文」を参照してください。
表 25-3: PIC18 拡張命令セット
Note: 拡張命令セットとインデックス付きリテラル オフセット アドレッシング モードは C 言語で作成したアプリケーションの
適化を目的としています。これらの命令をアセンブラで直接使用する事は想定していません。ただし、コンパイラが生成したコードをチェックする際の参考として、各命令の構文を説明しています。
Note: 以前のドキュメントでは、PIC18 とそれ以前の命令セットにおけるオプションの引数を角カッコで表していました。今後は、オプションの引数は中カッコ (“{ }”) で表します。
ニーモニック、オペランド
説明 サイクル16 ビット命令ワード 影響を受ける
ステータスMSb LSb
ADDFSRADDULNKCALLWMOVSF
MOVSS
PUSHL
SUBFSRSUBULNK
f, kk
zs, fd
zs, zd
k
f, kk
Add literal to FSRAdd literal to FSR2 and returnCall subroutine using WREGMove zs (source) to 1st word fd (destination) 2nd wordMove zs (source) to 1st word zd (destination) 2nd wordStore literal at FSR2, decrement FSR2Subtract literal from FSRSubtract literal from FSR2 and return
1222
2
1
12
11101110000011101111111011111110
11101110
1000100000001011ffff1011xxxx1010
10011001
ffkk 11kk 00010zzzffff1zzzxzzzkkkk
ffkk11kk
kkkkkkkk0100zzzzffffzzzzzzzzkkkk
kkkkkkkk
NoneNoneNoneNone
None
None
NoneNone
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 353
PIC18F/LF1XK50
25.2.2 拡張命令セット
ADDFSR Add Literal to FSR
構文 : ADDFSR f, k
オペランド : 0 k 63f [ 0, 1, 2 ]
動作 : FSR(f) + k FSR(f)
影響を受ける
ステータス :なし
エンコード : 1110 1000 ffkk kkkk
説明 : 6 ビットのリテラル「k」を、「f」で
指定した FSR の内容に足す。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」を
読み出し
データを
処理
FSR に
書き込み
例 : ADDFSR 2, 23h
命令実行前FSR2 = 03FFh
命令実行後FSR2 = 0422h
ADDULNK Add Literal to FSR2 and Return
構文 : ADDULNK k
オペランド : 0 k 63
動作 : FSR2 + k FSR2,
(TOS) PC
影響を受ける
ステータス :なし
エンコード : 1110 1000 11kk kkkk
説明 : 6 ビットのリテラル「k」を FSR2の内容に足す。次に、PC に TOSを読み込んで RETURNを実行する。
この命令の実行は 2 サイクルで、
2 サイクル目には NOPを実行する。
これは、ADDFSR命令で f = 3 (2 進
数「11」) である特殊な場合と考え
る事ができる。この命令は FSR2 に
対してのみ実行できる。
ワード数 : 1
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード リテラル
「k」を
読み出し
データを
処理
FSR に
書き込み
NOP NOP NOP NOP
例 : ADDULNK 23h
命令実行前FSR2 = 03FFhPC = 0100h
命令実行後FSR2 = 0422hPC = (TOS)
Note: PIC18 の命令は全て、命令ニーモニックの前にオプションの引数としてラベルを指定する事によってシンボリック アドレス指定が可能です。この場合、命令の構文は「{ ラベル } 命令 引数」です。
DS41350D_JP - p. 354 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
CALLW Subroutine Call Using WREG
構文 : CALLW
オペランド : なし
動作 : (PC + 2) TOS,(W) PCL,(PCLATH) PCH,(PCLATU) PCU
影響を受ける
ステータス :なし
エンコード : 0000 0000 0001 0100
説明 : まず、リターンアドレス (PC + 2) をリ
ターンスタックにプッシュする。次に、
W レジスタの内容を PCL に書き込む
( 既存の値は破棄される )。さらに、
PCLATH と PCLATU の内容を PCH と
PCU にそれぞれラッチする。
2 サイクル目は NOP命令として実行さ
れ、その間に次の命令をフェッチする。
CALLとは異なり、W、STATUS、BSR を更新するオプションはない。
ワード数 : 1
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード WREG を
読み出し
PC を
スタックに
プッシュ
NOP
NOP NOP NOP NOP
例 : HERE CALLW
命令実行前PC = address (HERE)PCLATH = 10hPCLATU = 00hW = 06h
命令実行後PC = 001006hTOS = address (HERE + 2)PCLATH = 10hPCLATU = 00hW = 06h
MOVSF Move Indexed to f
構文 : MOVSF [zs], fd
オペランド : 0 zs 1270 fd 4095
動作 : ((FSR2) + zs) fd
影響を受ける
ステータス :なし
エンコード :1 ワード目 ( ソース )2 ワード目 ( 格納先 )
11101111
1011ffff
0zzzffff
zzzzsffffd
説明 : ソースレジスタの内容を格納先レジス
タ「fd」に移動する。ソースレジスタ
の実際のアドレスは、1 ワード目にあ
る 7 ビットのリテラル オフセット
「zs」を FSR2 の値に足して求める。格
納先レジスタのアドレスは、2 ワード
目にある 12 ビットのリテラル「fd」で
指定する。どちらのアドレスも、4096バイトのデータ空間 (000h ~ FFFh) の任意の位置を指定できる。
MOVSF命令では、格納先レジスタに
PCL、TOSU、TOSH、TOSL を使用で
きない。
上記で求めたソースアドレスが間接ア
ドレッシング レジスタを指し示してい
る場合、戻り値は 00h となる。
ワード数 : 2
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード ソース
アドレスを
求める
ソース
アドレスを
求める
ソース
レジスタを
読み出す
デコード NOP
ダミー読み
出しなし
NOP レジスタ「f」 ( 格納先 ) に書き込み
例 : MOVSF [05h], REG2
命令実行前FSR2 = 80hContents of 85h = 33hREG2 = 11h
命令実行後FSR2 = 80hContentsof 85h = 33hREG2 = 33h
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 355
PIC18F/LF1XK50
MOVSS Move Indexed to Indexed
構文 : MOVSS [zs], [zd]
オペランド : 0 zs 1270 zd 127
動作 : ((FSR2) + zs) ((FSR2) + zd)
影響を受ける
ステータス :なし
エンコード :1 ワード目 ( ソース )2 ワード目 ( 格納先 )
11101111
1011xxxx
1zzzxzzz
zzzzszzzzd
説明 : ソースレジスタの内容を格納先レジス
タに移動する。ソースレジスタと格納
先レジスタのアドレスは、7 ビットの
リテラル オフセット「zs」または「zd」
を FSR2 の値に加えて求める。どちら
のレジスタも、4096 バイトのデータメ
モリ空間 (000h ~ FFFh) の任意の位置
を指定できる。
MOVSS命令では、格納先レジスタに
PCL、TOSU、TOSH、TOSL を使用で
きない。
上記で求めたソースアドレスが間接ア
ドレッシング レジスタを指し示してい
る場合、戻り値は 00h となる。上記で
求めた格納先アドレスが間接アドレッ
シング レジスタを指し示している場
合、この命令は NOPとして実行される。
ワード数 : 2
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード ソース
アドレスを
求める
ソース
アドレスを
求める
ソース
レジスタを
読み出す
デコード 格納先
アドレスを
求める
格納先
アドレスを
求める
格納先
レジスタへ
書き込む
例 : MOVSS [05h], [06h]
命令実行前FSR2 = 80hContentsof 85h = 33hContentsof 86h = 11h
命令実行後FSR2 = 80hContentsof 85h = 33hContentsof 86h = 33h
PUSHL Store Literal at FSR2, Decrement FSR2
構文 : PUSHL k
オペランド : 0k 255
動作 : k (FSR2),FSR2 – 1 FSR2
影響を受ける
ステータス :なし
エンコード : 1111 1010 kkkk kkkk
説明 : 8 ビットのリテラル「k」を FSR2 で指定し
たデータメモリ アドレスに書き込む。この
命令を実行後、FSR2 の値をデクリメント
する。
この命令を使用して、ユーザはソフトウェ
ア スタックに値をプッシュできる。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード 「k」を
読み出す
データを
処理
格納先に
書き込み
例 : PUSHL 08h
命令実行前FSR2H:FSR2L = 01EChMemory (01ECh) = 00h
命令実行後FSR2H:FSR2L = 01EBhMemory (01ECh) = 08h
DS41350D_JP - p. 356 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
SUBFSR Subtract Literal from FSR
構文 : SUBFSR f, k
オペランド : 0 k 63
f [ 0, 1, 2 ]
動作 : FSR(f) – k FSRf
影響を受ける
ステータス :なし
エンコード : 1110 1001 ffkk kkkk
説明 : 「f」で指定した FSR の内容から
6 ビットのリテラル「k」を引く。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
例 : SUBFSR 2, 23h
命令実行前FSR2 = 03FFh
命令実行後FSR2 = 03DCh
SUBULNK Subtract Literal from FSR2 and Return
構文 : SUBULNK k
オペランド : 0 k 63
動作 : FSR2 – k FSR2
(TOS) PC
影響を受ける
ステータス :なし
エンコード : 1110 1001 11kk kkkk
説明 : FSR2 の内容から 6 ビットのリテラル「k」を引く。次に、PC に TOS を読み込んで
RETURNを実行する。
この命令の実行は 2 サイクルで、2 サイク
ル目には NOPを実行する。
これは、SUBFSR命令で f = 3 (2 進数
「11」) である特殊な場合と考える事がで
きる。この命令は FSR2 に対してのみ実行
できる。
ワード数 : 1
サイクル数 : 2
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ
「f」を
読み出し
データを
処理
格納先に
書き込み
NOP NOP NOP NOP
例 : SUBULNK 23h
命令実行前FSR2 = 03FFhPC = 0100h
命令実行後FSR2 = 03DChPC = (TOS)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 357
PIC18F/LF1XK50
25.2.3 インデックス付きリテラル オフセットモードでのバイト / ビット指向命令
拡張命令セットを有効にすると、8 つの新命令だけでなく、インデックス付きリテラル オフセット アドレッシングモードも有効になります (3.5.1「リテラル オフセットを使うインデックス付きアドレッシング」参照 )。このモードでは、PIC18 標準命令セットの多くのコマンドの解釈が大きく変化します。
拡張命令セットが無効の場合、オペコードに埋め込んだアドレスはリテラル メモリ アドレスとして、すなわちアクセスバンクのアドレス (「a」 = 0の場合 ) または BSR で指定した GPR バンクのアドレス (「a」 = 1の場合 ) として扱います。しかし拡張命令セットが有効で「a」 = 0の場合、ファイルレジスタの引数が 5Fh未満だとリテラルアドレスではなく FSR2 のポインタ値からのオフセットと解釈されます。つまり、アクセス RAM ビットを引数として使用する全ての命令 ( コア PIC18 命令の約半分に相当する全てのバイト / ビット指向命令 ) の動作が、拡張命令セットを有効にすると変わってしまいます。
FSR2 の内容が 00h であれば、アクセス RAM の境界は実質的に元の値に再マッピングされます。この性質を利用すると、下位互換コードを容易に作成できます。ただしこの方法を使用した場合、C 言語とアセンブリのルーチン間を移動する際に FSR2 の値を保存、復元してスタックポインタを正しく維持する必要があります。また、拡張命令セットの構文要件についても考慮しておく必要があります (25.2.3.1「拡張命令有効時のPIC18 標準コマンドの構文」参照 )。
インデックス付きリテラル オフセット アドレッシング モードはスタックとポインタの動的操作に非常に便利ですが、簡単な算術命令を誤ったレジスタに対して実行する可能性もあるため、注意が必要です。特にPIC18 プログラミングの経験が長い方は、拡張命令セットを有効にすると5Fh以下のレジスタアドレスがインデックス付きリテラル オフセット アドレッシングに使用されるという点に十分注意してください。
次ページでは、インデックス付きリテラル オフセットアドレッシングモードでバイト / ビット指向命令の実行結果がどのように変化するか、代表的な例をいくつか紹介します。これらの例で示すオペランドの条件は、この種の命令全てに当てはまります。
25.2.3.1 拡張命令有効時のPIC18標準コマンドの構文
拡張命令セットを有効にした場合、バイト / ビット指向命令のファイルレジスタ引数「f」は、リテラル オフセット値「k」で置き換えられます。ただし前述の通り、これは「f」が 5Fh 以下の場合に限ります。オフセット値を使用する場合、角カッコ (“[ ]”) で囲んで示す必要があります。拡張命令の場合と同様、コンパイラは角カッコで囲んだ値をインデックスまたはオフセットとして解釈します。角カッコを省略した場合、または角カッコで囲んだ値が 5Fh より大きい場合、MPASM™ アセンブラでエラーとなります。
インデックス引数をインデックス付きリテラル オフセット アドレッシング用に角カッコで囲む場合、アクセス RAM 引数は指定しません。自動的に「0」と見なされます。これは、拡張命令を無効にした標準の動作( ターゲット アドレスに基づいて「a」がセットされる )とは異なりますので注意してください。このモードでアクセス RAM ビットを宣言した場合も、MPASM アセンブラでエラーが発生します。
格納先の引数「d」は、以前と同様の働きをします。
新バージョンの MPASM アセンブラでは、拡張命令セットの言語サポートを明示的に起動する必要があります。これを行うには、コマンドライン オプションの/yを使用するか、ソースリストで PE ディレクティブを使用します。
25.2.4 拡張命令セットを有効にする際の注意事項
拡張命令セットは必ずしも全てのユーザにメリットがあるわけではないので注意が必要です。特に、ソフトウェア スタックを使用するコードを作成するのでなければ、拡張命令セットを使用する意味はあまりありません。
また、インデックス付きリテラル オフセット アドレッシングモードは、PIC18 アセンブラ用に作成したレガシー アプリケーションで問題を起こす事があります。つまり、レガシーコードの中にアクセスバンクの 5Fh未満のレジスタをアドレッシングする命令が含まれていると問題が生じます。拡張命令セットを有効にしていると、これらのアドレスは FSR2 からのリテラル オフセットと解釈されるため、アプリケーションが本来の意図とは異なるデータアドレスに対して読み書きを実行する可能性があります。
アプリケーションを PIC18F/LF1XK50 に移植する際は、コードの性格を見極める事が重要です。C 言語で作成した大規模な再入可能アプリケーションで、コンパイラ 適化が効果を発揮するようなアプリケーションは、拡張命令セットの使用に適しています。一方、アクセスバンクを多用するレガシー アプリケーションでは、拡張命令セットを使用するメリットはほとんどありません。
Note: PIC18 拡張命令セットを有効にすると、レガシー アプリケーションの動作がエラーになったり、全く動作しなくなる場合があります。
DS41350D_JP - p. 358 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
ADDWFADD W to Indexed( インデックス付きリテラル オフセット モード )
構文 : ADDWF [k] {,d}
オペランド : 0 k 95d [0,1]
動作 : (W) + ((FSR2) + k) dest
影響を受ける
ステータス :N, OV, C, DC, Z
エンコード : 0010 01d0 kkkk kkkk
説明 : W レジスタの内容と、FSR2 + オフ
セット値「k」が示すレジスタの内容を
加算する。
「d」 = 「0」の場合、結果を W レジスタ
に格納する。「d」 = 「1」の場合、結果
をレジスタ「f」に書き戻す ( 既定値 )。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード 「k」を
読み出す
データを
処理
格納先に
書き込み
例 : ADDWF [OFST] , 0
命令実行前
W = 17hOFST = 2ChFSR2 = 0A00hContentsof 0A2Ch = 20h
命令実行後
W = 37hContentsof 0A2Ch = 20h
BSFBit Set Indexed ( インデックス付きリテラル オフセット モード )
構文 : BSF [k], b
オペランド : 0 f 950 b 7
動作 : 1 ((FSR2) + k)<b>
影響を受ける
ステータス :なし
エンコード : 1000 bbb0 kkkk kkkk
説明 : FSR2 + オフセット値「k」が示すレジ
スタのビット「b」をセットする。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード レジスタ「f」を読み出し
データを処理
格納先に書き込み
例 : BSF [FLAG_OFST], 7
命令実行前FLAG_OFST = 0AhFSR2 = 0A00hContents of 0A0Ah = 55h
命令実行後Contentsof 0A0Ah = D5h
SETFSet Indexed( インデックス付きリテラル オフセット モード )
構文 : SETF [k]
オペランド : 0 k 95
動作 : FFh ((FSR2) + k)
影響を受ける
ステータス :なし
エンコード : 0110 1000 kkkk kkkk
説明 : FSR2 + オフセット値「k」が示すレジ
スタの内容を FFh にセットする。
ワード数 : 1
サイクル数 : 1
Q サイクルの動作 :
Q1 Q2 Q3 Q4
デコード 「k」を読み出す
データを処理
レジスタに書き込み
例 : SETF [OFST]
命令実行前OFST = 2ChFSR2 = 0A00hContentsof 0A2Ch = 00h
命令実行後Contentsof 0A2Ch = FFh
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 359
PIC18F/LF1XK50
25.2.5 マイクロチップ社の MPLAB® IDEツールに関する注意事項
マイクロチップ社の 新バージョンのソフトウェアツールは、PIC18F/LF1XK50 ファミリの拡張命令セットを完全にサポートしています。これには、MPLAB®
C18 C コンパイラ、MPASM アセンブリ言語、MPLAB統合開発環境 (IDE) が含まれます。
ソフトウェア開発のターゲット デバイスを選択すると、MPLAB IDE がそのデバイスのコンフィグレーション ビットを自動的に既定値に設定します。XINST コンフィグレーション ビットの既定値は「0」で、拡張命令セットとインデックス付きリテラル オフセット アドレッシングモードは無効です。拡張命令セットを利用して開発したアプリケーションを正しく実行するには、デバイスのプログラミング時に XINST ビットをセットする必要があります。
拡張命令セットを使用してソフトウェアを開発する際は、使用する言語ツールで拡張命令とインデックス付きリテラル オフセット アドレッシングモードのサポートを有効にする必要があります。有効にする方法は、使用する環境に応じて何通りかあります。
• ツール環境内のメニュー オプションまたはダイアログ ボックスで、言語ツールとプロジェクトの設定を指定
• コマンドライン オプション
• ソースコードでディレクティブを使用
どの方法を選択するかは、使用するコンパイラ、アセンブラ、開発環境によって異なります。詳細は、開発システムに付属のマニュアルで確認してください。
DS41350D_JP - p. 360 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
26.0 開発サポート
PIC®マイクロコントローラとdsPIC®デジタル シグナル コントローラは、以下に示す各種ソフトウェア/ハードウェア開発ツールで幅広くサポートしています。
• 統合開発環境
- MPLAB® IDE ソフトウェア
• コンパイラ / アセンブラ / リンカ
- 各種デバイスファミリ向け MPLABC コンパイラ
- 各種デバイスファミリ向け HI-TECH C
- MPASMTM アセンブラ
- MPLINKTM オブジェクト リンカ /MPLIBTM オブジェクト ライブラリアン
- 各種デバイスファミリ向け MPLAB アセンブラ /リンカ / ライブラリアン
• シミュレータ
- MPLAB SIM ソフトウェア シミュレータ
• エミュレータ
- MPLAB REAL ICE™ インサーキット エミュレータ
• インサーキット デバッガ
- MPLAB ICD 3
- PICkit 3 Debug Express
• デバイス プログラマ
- PICkit™ 2 プログラマ
- MPLAB PM3 デバイス プログラマ
• 低コストのデモ / 開発ボード、評価キット、スタータキット
26.1 MPLAB 統合開発環境ソフトウェア
MPLAB IDE ソフトウェアを使用すると、従来の 8/16/32 ビット マイクロコントローラ市場では考えられないほどソフトウェア開発が容易になります。MPLABIDEはWindows® オペレーティング システム上で動作するアプリケーションで、以下の機能を備えています。
• 1 つの GUI 環境で全てのデバッグツールを利用可能
- シミュレータ
- プログラマ ( 別売 )
- インサーキット エミュレータ ( 別売 )
- インサーキット デバッガ ( 別売 )
• コンテキスト色分け表示対応のフル機能エディタ
• 複数プロジェクト管理機能
• 内容を直接編集できるカスタマイズ可能なデータウィンドウ
• 高レベルのソースコード デバッグ機能
• マウスオーバーによる変数内容の表示
• ソースウィンドウからウォッチ ウィンドウへの変数のドラッグ & ドロップ
• 充実したオンラインヘルプ
• IAR C コンパイラ等、一部他社製ツールの統合もサポート
MPLAB IDE では以下の操作が行えます。
• ソースファイルの編集 (C 言語またはアセンブリ )
• コンパイル / アセンブルからエミュレータ / シミュレータ ツールへのダウンロードまでをワンタッチで実行 (プロジェクトの全情報を自動更新 )
• 各種レベルでのデバッグ :
- ソースファイル (C 言語またはアセンブリ )
- C 言語とアセンブリの混在
- マシンコード
MPLAB IDE では、コスト効率の高いシミュレータから低コストのインサーキット デバッガ、高機能なエミュレータまで、様々なデバッグツールを共通の開発パラダイムでサポートしています。このため、より柔軟で強力なツールにアップグレードした場合でも短期間で使用方法を習得できます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 361
PIC18F/LF1XK50
26.2 各種デバイスファミリ向け MPLAB C コンパイラ
MPLAB C コンパイラは、マイクロチップ社の PIC18、PIC24、PIC32 マイクロコントローラ ファミリと、dsPIC30、dsPIC33 デジタル シグナル コントローラファミリ向けコード開発に対応した ANSI C コンパイラです。これらのコンパイラは強力な統合機能と優れたコード 適化機能を備えながらも、使いやすい製品です。
また、MPLAB IDE デバッガに 適化したシンボル情報を出力できるため、ソースレベルのデバッグも容易に行えます。
26.3 各種デバイスファミリ向けHI-TECH C
HI-TECH C コンパイラは、マイクロチップ社の PIC マイクロコントローラ ファミリと dsPIC デジタル シグナル コントローラ ファミリ向けのコード開発に対応した ANSI C コンパイラです。これらのコンパイラは強力な統合機能とインテリジェントなコード生成機能を備えながらも、使いやすい製品です。
また、MPLAB IDE デバッガに 適化したシンボル情報を出力できるため、ソースレベルのデバッグも容易に行えます。
このコンパイラは、マクロアセンブラ、リンカ、プリプロセッサ、ワンステップ ドライバを備え、複数のプラットフォーム上で動作します。
26.4 MPASM アセンブラ
MPASM アセンブラは、PIC10/12/16/18 MCU に対応したフル機能のユニバーサル マクロ アセンブラです。
MPASM アセンブラは、MPLINK オブジェクト リンカ用の再配置可能なオブジェクト ファイル、Intel® 標準HEX ファイル、メモリ使用とシンボル参照を詳述するMAP ファイル、ソース行と生成後のマシンコードを含む絶対 LST ファイル、デバッグ用の COFF ファイルを生成します。
MPASM アセンブラには以下の機能があります。
• MPLAB IDE プロジェクトへの統合
• ユーザ定義マクロによるアセンブリコードの適化
• 多用途ソースファイルに対応する条件付きアセンブリ
• アセンブリ プロセスを完全に制御できるディレクティブ
26.5 MPLINK オブジェクト リンカ /MPLIBオブジェクト ライブラリアン
MPLINK オブジェクト リンカは、MPASM アセンブラと MPLAB C18 C コンパイラで生成された再配置可能なオブジェクトを結合します。このオブジェクト リンカは、リンカスクリプトのディレクティブを使用してコンパイル済みライブラリから再配置可能なオブジェクトをリンクできます。
MPLIB オブジェクト ライブラリアンはコンパイル済みコードのライブラリ ファイルの作成と変更を管理します。ライブラリのルーチンがソースファイルから呼び出されると、そのルーチンを含むモジュールのみがアプリケーションにリンクされます。これにより、大規模なライブラリを種類の異なる多くのアプリケーションで効率的に使用できます。
オブジェクト リンカ / ライブラリには以下の機能があります。
• 多数の小さいファイルに代わり、個別のライブラリを効率的にリンク
• 関連モジュールをグループ化する事で、コードの保守性を向上
• モジュールのリスト表示、置換、削除、抽出を容易に行え、ライブラリを柔軟に作成可能
26.6 各種デバイスファミリ向け MPLABアセンブラ、リンカ、ライブラリアン
MPLAB アセンブラは、PIC24、PIC32、dsPIC デバイス用のシンボリック アセンブリ言語から再配置可能なマシンコードを生成します。MPLAB C コンパイラは、このアセンブラを使用してオブジェクト ファイルを生成します。このアセンブラが生成した再配置可能なオブジェクト ファイルをアーカイブまたは他の再配置可能なオブジェクト ファイルとリンクして、実行ファイルを生成します。このアセンブラには、主に以下の機能があります。
• デバイスの命令セットを完全にサポート
• 固定小数点と浮動小数点データをサポート
• コマンドライン インターフェイス
• 豊富なディレクティブ セット
• 柔軟なマクロ言語
• MPLAB IDE との互換性
DS41350D_JP - p. 362 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
26.7 MPLAB SIM ソフトウェア シミュレータ
MPLAB SIM ソフトウェア シミュレータには、PICMCU と dsPIC® DSC を命令レベルでシミュレートする機能があり、PC 環境でコード開発が行えます。任意の命令でデータ領域を検証または変更でき、総合的なスティミュラス コントローラから外部信号を加える事ができます。レジスタのログをファイルに出力してさらに詳細なランタイム分析を行う事もできます。また、トレースバッファとロジック アナライザ ディスプレイを使用して、プログラムの実行、I/O アクティビティ、ほとんどの周辺機能と内部レジスタの記録と確認ができるため、シミュレータとしての完成度がより向上しています。
MPLAB SIM ソフトウェア シミュレータは、MPLAB Cコンパイラ、MPASM アセンブラ、MPLAB アセンブラを使用したシンボリック デバッグを完全にサポートしています。このソフトウェア シミュレータによってハードウェア ラボ環境以外でもコードの開発とデバッグを柔軟に行えるため、ソフトウェア開発者は低コストで強力なツールを利用できます。
26.8 MPLAB REAL ICE インサーキット エミュレータ システム
MPLAB REAL ICE インサーキット エミュレータ システムは、マイクロチップ社のフラッシュ DSC と MCUデバイス向けにマイクロチップ社が提供する次世代高速エミュレータです。このエミュレータでは、各キットに付属するMPLAB統合開発環境 (IDE)の強力で使いやすいGUIを利用してPIC®フラッシュMCUとdsPIC®
フラッシュ DSC のデバッグと書き込みが行えます。
このエミュレータをハイスピード USB 2.0 インターフェイスでエンジニアの PC に接続し、ターゲット デバイスとはインサーキット デバッガ システムと共通の RJ-11 コネクタか、高速で耐ノイズ性に優れる 新の LVDS インターフェイス (CAT5) を使用して接続します。
このエミュレータの更新用ファームウェアは、MPLABIDE からダウンロードできます。MPLAB IDE のアップデートに伴って、サポートするデバイスと新機能が常に追加されます。MPLAB REAL ICE は、低コスト、高速エミュレーション、リアルタイム変数ウォッチ、トレース解析、複雑なブレークポイント、高耐久性のプローブ インターフェイス、接続ケーブルの長尺対応( 長 3 m) 等、他のエミュレータに比べ多くの利点があります。
26.9 MPLAB ICD 3インサーキット デバッガ システム
MPLAB ICD 3 インサーキット デバッガ システムは、マイクロチップ社のフラッシュ デジタル シグナル コントローラ (DSC) とマイクロコントローラ (MCU) デバイスに対応した、非常に対費用効果の高い高速ハードウェア デバッガ / プログラマです。このデバッガでは、MPLAB 統合開発環境 (IDE) の強力で使いやすいGUI を利用して PIC® フラッシュ マイクロコントローラと dsPIC® DSC のデバッグと書き込みが行えます。
MPLAB ICD 3 インサーキット デバッガは、PC との接続にハイスピード USB 2.0 インターフェイスを使用し、ターゲットデバイスとの接続には MPLAB ICD 2または MPLAB REAL ICE システムと共通のコネクタ(RJ-11) を使用します。MPLAB ICD 3 は全ての MPLABICD 2 ヘッダをサポートしています。
26.10 PICkit 3 インサーキット デバッガ /プログラマと PICkit 3 Debug Express
MPLAB PICkit 3 は、MPLAB 統合開発環境 (IDE) の強力なGUIを利用してPIC®およびdsPIC®フラッシュ マイクロコントローラをデバッグ / プログラミングできる低価格なツールです。PC との接続にはフルスピード USB インターフェイスを使用し、ターゲットデバイスとの接続には MPLAB ICD 3、MPLAB REAL ICEと共通のコネクタ (RJ-11) を使用します。このコネクタは 2 本のデバイス I/O ピンとリセットラインを使用して、インサーキット デバッグとインサーキット シリアル プログラミングを実現します。
PICkit 3 Debug Express は、PICkit 3、デモボードとマイクロコントローラ、フックアップ ケーブル、CD-ROM( ユーザガイド、レッスン、チュートリアル、コンパイラ、MPLAB IDE ソフトウェアを収録 ) を含みます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 363
PIC18F/LF1XK50
26.11 PICkit 2開発用プログラマ /デバッガと PICkit 2 Debug Express
PICkit™ 2 開発用プログラマ / デバッガは、マイクロチップ社のフラッシュ マイクロコントローラ ファミリの書き込みとデバッグを使いやすいインターフェイスで行える低コストな開発ツールです。Windows®環境でプログラミング機能を実行できる本製品は、ベースライン (PIC10F、PIC12F5xx、PIC16F5xx)、ミッドレンジ (PIC12F6xx、PIC16F)、PIC18F、PIC24、dsPIC30、dsPIC33、PIC32 ファミリを含む 8/16/32 ビット マイクロコントローラ、マイクロチップ社製各種シリアルEEPROM をサポートしています。PICkit™ 2 は、マイクロチップ社の強力なMPLAB統合開発環境 (IDE)を利用してほとんどのPIC®マイクロコントローラに対してインサーキット デバッグを実行できます。インサーキット デバッグでは、PIC マイクロコントローラをアプリケーションに組み込んだままの状態でプログラムの実行 / 停止とシングルステップ実行が行えます。ブレークポイントで停止して、ファイルレジスタを確認 /変更する事もできます。
PICkit 2 Debug Express は、PICkit 2、デモボードとマイクロコントローラ、フックアップ ケーブル、CD-ROM( ユーザガイド、レッスン、チュートリアル、コンパイラ、MPLAB IDE ソフトウェアを収録 ) を含みます。
26.12 MPLAB PM3 デバイス プログラマ
MPLAB PM3 デバイス プログラマは CE 準拠のユニバーサル デバイス プログラマで、VDDMIN と VDDMAX
でのプログラマブル電圧検証によって 大限の信頼性を実現します。このデバイス プログラマにはメニュー/エラーメッセージ表示用の大型LCDディスプレイ(128x 64) が装備されている他、着脱式のモジュラー型ソケット アセンブリで各種パッケージタイプに対応します。ICSP™ ケーブル アセンブリは標準で付属しています。スタンドアロン モードでは、MPLAB PM3 デバイス プログラマをPCに接続せずにPICデバイスの読み出し、検証、書き込みを実行できます。このモードでは、コード保護も設定できます。MPLAB PM3 とホスト PC の接続には、RS-232 または USB ケーブルを使用します。大容量メモリのデバイスを短時間で書き込みできるよう、MPLAB PM3 には高速通信機能と適化したアルゴリズムを採用している他、ファイル
保存とデータ アプリケーション用に MMC カードも内蔵しています。
26.13 デモ / 開発ボード、評価キット、スタータキット
各種 PIC MCU と dsPIC DSC には多彩なデモボード、開発ボード、評価ボードを用意しており、完全に機能するシステム上でアプリケーションを迅速に開発できます。ほとんどのボードには、カスタム回路を追加するためのプロトタイプ領域があります。また、付属のアプリケーション ファームウェアとソースコードは試験と変更が可能です。
これらのボードは、LED、温度センサ、スイッチ、スピーカ、RS-232インターフェイス、LCD ディスプレイ、ポテンショメータ、増設 EEPROM メモリ等幅広い機能をサポートしています。
デモボートと開発ボードは教材として、カスタム回路の試作用として、また各種マイクロコントローラ アプリケーションの学習用として利用できます。
PICDEM™ と dsPICDEM™ デモ / 開発ボードシリーズの回路の他に、マイクロチップ社ではアナログフィルタ設計、KEELOQ® セキュリティ IC、CAN、IrDA®、PowerSmart バッテリ管理、SEEVAL® 評価システム、 ADC、流量感知等、様々なアプリケーションに対応する評価キットとデモ ソフトウェアを取り揃えています。
また、特定のデバイスの評価に必要なツール一式を備えたスタータキットも用意しています。通常、スタータキットは 1 つのアプリケーションとデバッグ機能を1 つのボードに完全に搭載した形で提供します。
デモボード、開発ボード、評価キットの一覧は、マイクロチップ社のウェブページ (www.microchip.com) でご確認ください。
DS41350D_JP - p. 364 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
27.0 電気的仕様
絶対 大定格 (†)
通電中の周囲温度 ................................................................................................................................-40 ~ +125 °C
保管温度.............................................................................................................................................. -65 ~ +150 °C
VSS に対する VDD の電圧 (PIC18F1XK50) ...................................................................................... -0.3 V ~ +6.0 V
VSS に対する VDD の電圧 (PIC18LF1XK50) .................................................................................... -0.3 V ~ +4.0 V
Vss に対する MCLR の電圧 .............................................................................................................. -0.3 V ~ +9.0 V
VSS に対する VUSB ピンの電圧 ........................................................................................................ -0.3 V ~ +4.0 V
VSS に対する D+ ピンと D- ピンの電圧 .............................................................................. -0.3 V ~ (VUSB + 0.3 V)
VSS に対するその他全てのピンの電圧 ................................................................................... -0.3 V ~ (VDD + 0.3 V)
総消費電力 (1) ................................................................................................................................................. 800 mW
VSS ピンからの 大電流.................................................................................................................................. 95 mA
VDD ピンへの 大電流 ..................................................................................................................................... 95 mA
クランプ電流 IK (VPIN < 0 または VPIN > VDD)20 mA
各 I/O ピンの 大出力シンク電流..................................................................................................................... 25 mA
各 I/O ピンの 大出力ソース電流..................................................................................................................... 25 mA
全てのポートの 大シンク電流........................................................................................................................ 90 mA
全てのポートの 大ソース電流....................................................................................................................... 90 mA
Note 1: 消費電力計算式 : PDIS = VDD x {IDD – IOH} + {(VDD – VOH) x IOH} + (VOl x IOL)
2: Vusb は常に VDD + 0.3 V である事が必要です。
† NOTICE: 上記の「絶対 大定格」を超えるストレスを与えると、デバイスに恒久的な損傷を与える可能性があります。これはストレス定格です。本仕様書の動作表に示す条件または上記から外れた条件でのデバイスの運用は想定していません。長期間にわたる 大定格条件での動作と保管は、デバイスの信頼性に影響する可能性があります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 365
PIC18F/LF1XK50
27.1 DC 特性 : PIC18F/LF1XK50-I/E (I= 工業用温度レンジ、E= 拡張温度レンジ )
PIC18LF1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
PIC18F1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
パラメータ 番号
記号 特性 小値 代表値 † 大値 単位 条件
D001 VDD 電源電圧
PIC18LF1XK50 1.82.7
——
3.63.6
VV
FOSC < = 20 MHzFOSC < = 48 MHz
D001 PIC18F1XK50 1.82.7
——
5.55.5
VV
FOSC < = 20 MHzFOSC < = 48 MHz
D002* VDR RAM データ保持電圧 (1)
PIC18LF1XK50 1.5 — — V デバイスがスリープモードの場合
D002* PIC18F1XK50 1.7 — — V デバイスがスリープモードの場合
VPOR* パワーオン リセット リリース電圧 — 1.6 — V
VPORR* パワーオン リセット リアーム電圧 — 0.8 — V
VFVR 固定電圧リファレンスの電圧
( 校正済み ) 0.9741.9683.736
1.0242.0484.096
1.0642.1584.226
V FVR1S<1:0> = 00 (1x)FVR1S<1:0> = 01 (2x)FVR1S<1:0> = 10 (4x)、VDD > = 4.75 V
D004* SVDD 内部パワーオン リセット信号を確
実にするための VDD 立ち上がり率
0.05 — — V/ms
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 3.3 V、25 °C 時のものです。これらのパラメータは設計上の目安であり、
テストはしていません。
Note 1: これは、スリープモードで VDD を下げた時に RAM データを失わない 小値です。
DS41350D_JP - p. 366 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 27-1: VDD の立ち上がりが遅い場合の POR と POR リアーム
VDD
VPOR
VPORR
VSS
VSS
NPOR
TPOR(3)
POR REARM
Note 1: NPOR が low の時、デバイスはリセット状態に保持されます。
2: TPOR = 1 s (Typ.)3: TVLOW = 2.7 s (Typ.)
TVLOW(2)
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 367
PIC18F/LF1XK50
27.2 DC 特性 : PIC18F/LF1XK50-I/E (I= 工業用温度レンジ、E= 拡張温度レンジ )
PIC18LF1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
PIC18F1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
パラメータ番号
デバイス特性 小値 代表値 † 大値 単位条件
VDD Note
消費電流 (IDD)(1, 2)
D009 LDO レギュレータ — 30 — A —
— 5 — A — LP クロックモードでスリープ時 (FVR と
BOR を無効にする事が必要 )
D010 — 6.0 9 A 1.8 Fosc = 32 kHzLP オシレータ (4)
-40 °C TA +85 °C— 7 12 A 3.0
D010 — 6 11 A 1.8 Fosc = 32 kHzLP オシレータ (4)
-40 °C TA +85 °C— 7 17 A 3.0
— 12 20 A 5.0
D011* — 6.0 12 A 1.8 Fosc = 32 kHzLP オシレータ-40 °C TA +125 °C
— 9.0 16 A 3.0
D011* — 8.0 15 A 1.8 Fosc = 32 kHzLP オシレータ (4)
-40 °C TA +125 °C— 11 25 A 3.0
— 12 35 A 5.0
D011* — 170 220 A 1.8 FOSC = 1 MHzXT オシレータ— 280 370 A 3.0
D011* — 200 250 A 1.8 FOSC = 1 MHzXT オシレータ— 310 400 A 3.0
— 380 490 A 5.0
D011* — 75 110 A 1.8 FOSC = 1 MHzXT オシレータ
CPU アイドル— 130 190 A 3.0
D011* — 90 130 A 1.8 FOSC = 1 MHzXT オシレータ
CPU アイドル— 140 210 A 3.0
— 160 250 A 5.0
* これらのパラメータは特性データであり、テストはしていません。
凡例 : TBD = 未定
Note 1: アクティブ動作モードにおける IDD の計測値は、全て以下の条件でテストしています。OSC1 = 外部矩形波 ( レール
ツーレール )、I/O ピンは全て 3 ステートで VDD にプル、MCLR = VDD、WDT 無効
2: 消費電流は主に動作電圧と周波数によって決まります。これ以外にも、I/O ピンの負荷とスイッチング レート、オシ
レータの種類、内部コードの実行パターン、温度等の要因によって変化します。
3: RC オシレータの場合、REXT を流れる電流は含まれていません。この抵抗を流れる電流は、IR = VDD/2REXT (mA) の式で求める事ができます (REXT の単位は k)。
4: FVR と BOR は無効です。
5: VUSB ピンに 330 nF コンデンサを使用します。
DS41350D_JP - p. 368 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
消費電流 (IDD)(1, 2)
D012 — 300 700 A 1.8 FOSC = 4 MHzXT オシレータ— 500 1200 A 3.0
D012 — 330 700 A 1.8 FOSC = 4 MHzXT オシレータ — 530 1200 A 3.0
— 730 1400 A 5.0
D012A — 240 300 A 1.8 FOSC = 4 MHz XT オシレータ
CPU アイドル— 440 550 A 3.0
D012A — 230 300 A 1.8 FOSC = 4 MHzXT オシレータ
CPU アイドル— 400 550 A 3.0
— 470 640 A 5.0
D013 — 140 180 A 1.8 FOSC = 1 MHzEC オシレータ ( 中電力 )— 230 300 A 3.0
D013 — 160 210 A 1.8 FOSC = 1 MHzEC オシレータ ( 中電力 )(5)
— 250 310 A 3.0
— 290 380 A 5.0
D013A — 50 64 A 1.8 FOSC = 1 MHzEC オシレータ ( 中電力 )CPU アイドル
— 86 110 A 3.0
D013A — 70 100 A 1.8 FOSC = 1 MHzEC オシレータ ( 中電力 )CPU アイドル (5)
— 100 150 A 3.0
— 120 170 A 5.0
D014 — 500 640 A 1.8 FOSC = 4 MHzEC オシレータ ( 中電力 )— 830 1100 A 3.0
D014 — 520 660 A 1.8 FOSC = 4 MHzEC オシレータ ( 中電力 )(5)
— 860 1100 A 3.0
— 1000 1300 A 5.0
27.2 DC 特性 : PIC18F/LF1XK50-I/E (I= 工業用温度レンジ、E= 拡張温度レンジ ) ( 続き )
PIC18LF1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
PIC18F1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
パラメータ番号
デバイス特性 小値 代表値 † 大値 単位条件
VDD Note
* これらのパラメータは特性データであり、テストはしていません。
凡例 : TBD = 未定
Note 1: アクティブ動作モードにおける IDD の計測値は、全て以下の条件でテストしています。OSC1 = 外部矩形波 ( レール
ツーレール )、I/O ピンは全て 3 ステートで VDD にプル、MCLR = VDD、WDT 無効
2: 消費電流は主に動作電圧と周波数によって決まります。これ以外にも、I/O ピンの負荷とスイッチング レート、オシ
レータの種類、内部コードの実行パターン、温度等の要因によって変化します。
3: RC オシレータの場合、REXT を流れる電流は含まれていません。この抵抗を流れる電流は、IR = VDD/2REXT (mA) の式で求める事ができます (REXT の単位は k)。
4: FVR と BOR は無効です。
5: VUSB ピンに 330 nF コンデンサを使用します。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 369
PIC18F/LF1XK50
消費電流 (IDD)(1, 2)
D014A — 200 250 A 1.8 FOSC = 4 MHzEC オシレータ ( 中電力 )CPU アイドル
— 340 440 A 3.0
D014A — 210 280 A 1.8 FOSC = 4 MHzEC オシレータ ( 中電力 )CPU アイドル (5)
— 360 470 A 3.0
— 430 570 A 5.0
D015 — 820 1000 A 1.8 FOSC = 6 MHzEC オシレータ ( 大電力 )— 1500 1900 A 3.0
D015 — 830 1100 A 1.8 FOSC = 6 MHzEC オシレータ ( 大電力 )(5)
— 1500 1900 A 3.0
— 1700 2300 A 5.0
D015A — 300 370 A 1.8 FOSC = 6 MHzEC オシレータ ( 大電力 )CPU アイドル
— 510 660 A 3.0
D015A — 320 430 A 1.8 FOSC = 6 MHzEC オシレータ ( 大電力 )CPU アイドル (5)
— 530 690 A 3.0
— 640 840 A 5.0
D015B — 4.7 6.0 mA 3.0 FOSC = 24 MHz6 MHz EC オシレータ ( 大電力 )PLL 有効
D015B — 4.7 6.1 mA 3.0 FOSC = 24 MHz6 MHz EC オシレータ ( 大電力 )PLL 有効 (5)
— 5.6 7.4 mA 5.0
D015C — 2.0 2.5 mA 3.0 FOSC = 24 MHz6 MHz EC オシレータ ( 大電力 )PLL 有効、CPU アイドル
D015C — 2.0 2.5 mA 3.0 FOSC = 24 MHz6 MHz EC オシレータ ( 大電力 )PLL 有効、CPU アイドル (5)
— 2.3 3.0 mA 5.0
27.2 DC 特性 : PIC18F/LF1XK50-I/E (I= 工業用温度レンジ、E= 拡張温度レンジ ) ( 続き )
PIC18LF1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
PIC18F1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
パラメータ番号
デバイス特性 小値 代表値 † 大値 単位条件
VDD Note
* これらのパラメータは特性データであり、テストはしていません。
凡例 : TBD = 未定
Note 1: アクティブ動作モードにおける IDD の計測値は、全て以下の条件でテストしています。OSC1 = 外部矩形波 ( レール
ツーレール )、I/O ピンは全て 3 ステートで VDD にプル、MCLR = VDD、WDT 無効
2: 消費電流は主に動作電圧と周波数によって決まります。これ以外にも、I/O ピンの負荷とスイッチング レート、オシ
レータの種類、内部コードの実行パターン、温度等の要因によって変化します。
3: RC オシレータの場合、REXT を流れる電流は含まれていません。この抵抗を流れる電流は、IR = VDD/2REXT (mA) の式で求める事ができます (REXT の単位は k)。
4: FVR と BOR は無効です。
5: VUSB ピンに 330 nF コンデンサを使用します。
DS41350D_JP - p. 370 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
27.2 DC 特性 : PIC18F/LF1XK50-I/E ( 工業用温度レンジ、拡張温度レンジ ) ( 続き )
PIC18LF1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
PIC18F1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
パラメータ番号
デバイス特性 小値 代表値 † 大値 単位条件
VDD Note
消費電流 (IDD)(1, 2)
D016 — 2.6 3.3 mA 3.0 FOSC = 12 MHzEC オシレータ ( 大電力 )
D016 — 2.6 3.3 mA 3.0 FOSC = 12 MHzEC オシレータ ( 大電力 )(5)
— 3.1 4.1 mA 5.0
D017 — 1.0 1.3 mA 3.0 FOSC = 12 MHzEC オシレータ ( 大電力 )CPU アイドル
D017 — 1.0 1.3 mA 3.0 FOSC = 12 MHzEC オシレータ ( 大電力 )CPU アイドル (5)
— 1.2 1.6 mA 5.0
D017A — 9 12 mA 3.0 FOSC = 48 MHz12 MHz EC オシレータ ( 大電力 )PLL 有効
D017A — 8.9 12 mA 3.0 FOSC = 48 MHz12 MHz EC オシレータ ( 大電力 )PLL 有効 (5)
— 11 14 mA 5.0
D017B — 3.9 5.0 mA 3.0 FOSC = 48 MHz12 MHz EC オシレータ ( 大電力 )PLL 有効、CPU アイドル
D017B — 3.9 5.0 mA 3.0 FOSC = 48 MHz12 MHz EC オシレータ ( 大電力 )PLL 有効、CPU アイドル (5)
— 4.7 6.0 mA 5.0
D018 — 19 38 A 1.8 FOSC = 32 kHzLFINTOSC オシレータ モード (3, 5)
— 23 44 A 3.0
D018 — 21 40 A 1.8 FOSC = 32 kHzLFINTOSC オシレータ モード (3, 5)
— 25 46 A 3.0
— 26 48 A 5.0
D019 — 16 33 A 1.8 FOSC = 32 kHzLFINTOSC オシレータ
CPU アイドル— 18 38 A 3.0
D019 — 18 35 A 1.8 FOSC = 32 kHzLFINTOSC オシレータ
CPU アイドル (5)— 20 40 A 3.0
— 21 42 A 5.0
* これらのパラメータは特性データであり、テストはしていません。
凡例 : TBD = 未定
Note 1: アクティブ動作モードにおける IDD の計測値は、全て以下の条件でテストしています。OSC1 = 外部矩形波 ( レール
ツーレール )、I/O ピンは全て 3 ステートで VDD にプル、MCLR = VDD、WDT 無効
2: 消費電流は主に動作電圧と周波数によって決まります。これ以外にも、I/O ピンの負荷とスイッチング レート、オシ
レータの種類、内部コードの実行パターン、温度等の要因によって変化します。
3: RC オシレータの場合、REXT を流れる電流は含まれていません。この抵抗を流れる電流は、IR = VDD/2REXT (mA) の式で求める事ができます (REXT の単位は k)。
4: FVR と BOR は無効です。
5: VUSB ピンに 330 nF コンデンサを使用します。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 371
PIC18F/LF1XK50
消費電流 (IDD)(1, 2)
D020 — 320 430 A 1.8 FOSC = 500 kHzLFINTOSC オシレータ— 460 600 A 3.0
D020 — 350 460 A 1.8 FOSC = 500 kHzLFINTOSC オシレータ (5)
— 490 630 A 3.0
— 540 710 A 5.0
D021 — 380 530 A 1.8 FOSC = 1 MHzHFINTOSC オシレータ— 550 770 A 3.0
D021 — 410 530 A 1.8 FOSC = 1 MHzHFINTOSC オシレータ (5)
— 580 770 A 3.0
— 650 900 A 5.0
D021A — 290 400 A 1.8 FOSC = 1 MHzHFINTOSC オシレータ
CPU アイドル— 410 560 A 3.0
D021A — 320 420 A 1.8 FOSC = 1 MHzHFINTOSC オシレータ
CPU アイドル (5)— 440 570 A 3.0
— 490 680 A 5.0
D022 — 1.2 1.6 mA 1.8 FOSC = 8 MHzHFINTOSC オシレータ— 2.1 2.9 mA 3.0
D022 — 1.2 1.6 mA 1.8 FOSC = 8 MHzHFINTOSC オシレータ (5)
— 2.1 2.9 mA 3.0
— 2.4 3.5 mA 5.0
D023 — 2.0 2.7 mA 1.8 FOSC = 16 MHzHFINTOSC オシレータ— 3.5 4.8 mA 3.0
D023 — 2.0 2.7 mA 1.8 FOSC = 16 MHzHFINTOSC オシレータ (5)
— 3.5 4.8 mA 3.0
— 4.0 6.0 mA 5.0
D023A — 0.9 1.3 mA 1.8 FOSC = 16 MHzHFINTOSC オシレータ
CPU アイドル— 1.5 2.1 mA 3.0
D023A — 0.9 1.3 mA 1.8 FOSC = 16 MHzHFINTOSC オシレータ
CPU アイドル (5)— 1.5 2.1 mA 3.0
— 1.7 2.6 mA 5.0
27.2 DC 特性 : PIC18F/LF1XK50-I/E ( 工業用温度レンジ、拡張温度レンジ ) ( 続き )
PIC18LF1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
PIC18F1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
パラメータ番号
デバイス特性 小値 代表値 † 大値 単位条件
VDD Note
* これらのパラメータは特性データであり、テストはしていません。
凡例 : TBD = 未定
Note 1: アクティブ動作モードにおける IDD の計測値は、全て以下の条件でテストしています。OSC1 = 外部矩形波 ( レール
ツーレール )、I/O ピンは全て 3 ステートで VDD にプル、MCLR = VDD、WDT 無効
2: 消費電流は主に動作電圧と周波数によって決まります。これ以外にも、I/O ピンの負荷とスイッチング レート、オシ
レータの種類、内部コードの実行パターン、温度等の要因によって変化します。
3: RC オシレータの場合、REXT を流れる電流は含まれていません。この抵抗を流れる電流は、IR = VDD/2REXT (mA) の式で求める事ができます (REXT の単位は k)。
4: FVR と BOR は無効です。
5: VUSB ピンに 330 nF コンデンサを使用します。
DS41350D_JP - p. 372 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
消費電流 (IDD)(1, 2)
D024 — 0.5 0.7 mA 1.8 FOSC = 4 MHzEXTRC オシレータ モード— 0.9 1.1 mA 3.0
D024 — 0.5 0.7 mA 1.8 FOSC = 4 MHzEXTRC オシレータ モード (5)
— 0.9 1.1 mA 3.0
— 1.0 1.4 mA 5.0
D025 — 1.0 1.1 mA 1.8 FOSC = 6 MHzHS オシレータ— 2.1 2.0 mA 3.0
D025 — 1.0 1.1 mA 1.8 FOSC = 6 MHzHS オシレータ (5)
— 2.1 2.0 mA 3.0
— 3.5 2.5 mA 5.0
D025A — 5.4 6.0 mA 3.0 FOSC = 24 MHz6 MHz HS オシレータ
PLL 有効
D025A — 5.4 6.0 mA 3.0 FOSC = 24 MHz6 MHz HS オシレータ
PLL 有効 (5)— 7.4 7.6 mA 5.0
D026 — 3.2 3.3 mA 3.0 FOSC = 12 MHzHS オシレータ
D026 — 3.2 3.3 mA 3.0 FOSC = 12 MHzHS オシレータ (5)
— 4.8 4.2 mA 5.0
D026A — 10 12 mA 3.0 FOSC = 48 MHz12 MHz HS オシレータ
PLL 有効
D026A — 10 12 mA 3.0 FOSC = 48 MHz12 MHz HS オシレータ
PLL 有効 (5)— 13 15 mA 5.0
27.2 DC 特性 : PIC18F/LF1XK50-I/E ( 工業用温度レンジ、拡張温度レンジ ) ( 続き )
PIC18LF1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
PIC18F1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
パラメータ番号
デバイス特性 小値 代表値 † 大値 単位条件
VDD Note
* これらのパラメータは特性データであり、テストはしていません。
凡例 : TBD = 未定
Note 1: アクティブ動作モードにおける IDD の計測値は、全て以下の条件でテストしています。OSC1 = 外部矩形波 ( レール
ツーレール )、I/O ピンは全て 3 ステートで VDD にプル、MCLR = VDD、WDT 無効
2: 消費電流は主に動作電圧と周波数によって決まります。これ以外にも、I/O ピンの負荷とスイッチング レート、オシ
レータの種類、内部コードの実行パターン、温度等の要因によって変化します。
3: RC オシレータの場合、REXT を流れる電流は含まれていません。この抵抗を流れる電流は、IR = VDD/2REXT (mA) の式で求める事ができます (REXT の単位は k)。
4: FVR と BOR は無効です。
5: VUSB ピンに 330 nF コンデンサを使用します。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 373
PIC18F/LF1XK50
27.3 DC 特性 : PIC18F/LF1XK50-I/E ( パワーダウン )
PIC18LF1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
PIC18F1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
パラ
メータ
番号
デバイス特性 小値 代表値 †大値
+85 °C大値
+125 °C 単位
条件
VDD Note
パワーダウン時のベース電流 (IPD)(2)
D027 — 0.024 0.7 6.7 A 1.8 WDT、BOR、FVR、電圧レギュ
レータ、T1OSC は無効。周辺モ
ジュールは全て非アクティブ— 0.078 1.9 8.5 A 3.0
D027 — 6.0 7.0 13 A 1.8 WDT、BOR、FVR、T1OSC は
無効。周辺モジュールは全て非
アクティブ— 7.0 10 15 A 3.0
— 8.0 12 19 A 5.0
パワーダウン時の各モジュールの電流
D028 — 0.45 1.3 4.4 A 1.8 LPWDT の電流 (1)
— 0.75 2.0 6.0 A 3.0
D028 — 6.5 7.0 10.5 A 1.8 LPWDT の電流 (1)
— 9.6 10.6 17.6 A 3.0
— 10.5 16.5 20 A 5.0
D029 — 12 17 23 A 1.8 FVR の電流 (3)
— 22 19 25 A 3.0
D029 — 28 42 50 A 1.8 FVR の電流 (3, 5)
— 35.6 45.6 55 A 3.0
— 38.5 49 60 A 5.0
D030 — — — — A 1.8 BOR の電流 (1, 3)
— — 21 27 A 3.0
D030 — — — — A 1.8 BOR の電流 (1, 3, 5)
— 27 48 51 A 3.0
— 36.5 51 55 A 5.0
D031 — 0.79 3.6 5.3 A 1.8 T1OSC の電流 (1)
— 1.8 2.9 6.9 A 3.0
D031 — 8.0 7.5 10 A 1.8 T1OSC の電流 (1)
— 8.5 10.5 15 A 3.0
— 10.5 12.5 24 A 5.0
凡例 : TBD = 未定
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 5.0 V、25 °C 時のものです。これらのパラメータは設計上の目安であ
り、テストはしていません。
Note 1: 周辺モジュールの電流は、その周辺モジュールが有効時に消費する電流とベース IDD または IPD を合計したものです。
周辺モジュールのみの 電流は、この合計値からベース IDD または IPD 電流を引いて求める事ができます。消費電流
の合計を求める際は、 大値を使用してください。
2: スリープモード時のパワーダウン電流は、オシレータの種類にかかわらず一定です。パワーダウン電流は、デバイス
をスリープモードに移行し、全ての I/O ピンをハイインピーダンス状態にして VDD に接続して計測しています。
3: 固定電圧リファレンス (FVR) は、BOR を有効にすると自動的に有効になります。
4: ADC モジュールのクロック源には FRC を使用します。
5: 330 f コンデンサを VUSB ピンに接続します。
DS41350D_JP - p. 374 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
パワーダウン時の各モジュールの電流
D032 — — 1.8 8 A 1.8 ADC の電流 (1, 4)、変換停止中
— — 3 10 A 3.0
D032 — — 6 12 A 1.8 ADC の電流 (1, 4)、変換停止中
— — 10 17 A 3.0
— — 11.5 22 A 5.0
D033 — — 38 44 A 1.8 コンパレータの電流 ( 低電力 )
— — 40 47 A 3.0
D033 — 30 40 49 A 2.0 コンパレータの電流 ( 低電力 )
— 34 44 53 A 3.0
— 36 50 60 A 5.0
D033A — — 239 244 A 1.8 コンパレータの電流 ( 大電力 )
— — 242 249 A 3.0
D033A — 144 243 250 A 2.0 コンパレータの電流 ( 大電力 )
— 146 247 256 A 3.0
— 151 253 264 A 5.0
D034 — — 18 23 A 1.8 電圧リファレンスの電流
— — 30 35 A 3.0
D034 — 35 36 44 A 2.0 電圧リファレンスの電流
— 43 44 60 A 3.0
— 55 65 74 A 5.0
27.3 DC 特性 : PIC18F/LF1XK50-I/E ( パワーダウン ) ( 続き )
PIC18LF1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
PIC18F1XK50標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
パラ
メータ
番号
デバイス特性 小値 代表値 †大値
+85 °C大値
+125 °C 単位
条件
VDD Note
凡例 : TBD = 未定
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 5.0 V、25 °C 時のものです。これらのパラメータは設計上の目安であ
り、テストはしていません。
Note 1: 周辺モジュールの電流は、その周辺モジュールが有効時に消費する電流とベース IDD または IPD を合計したものです。
周辺モジュールのみの 電流は、この合計値からベース IDD または IPD 電流を引いて求める事ができます。消費電流
の合計を求める際は、 大値を使用してください。
2: スリープモード時のパワーダウン電流は、オシレータの種類にかかわらず一定です。パワーダウン電流は、デバイス
をスリープモードに移行し、全ての I/O ピンをハイインピーダンス状態にして VDD に接続して計測しています。
3: 固定電圧リファレンス (FVR) は、BOR を有効にすると自動的に有効になります。
4: ADC モジュールのクロック源には FRC を使用します。
5: 330 f コンデンサを VUSB ピンに接続します。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 375
PIC18F/LF1XK50
27.4 DC 特性 : PIC18F/LF1XK50-I/E
DC 特性
標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
パラ
メータ
番号
記号 特性 小値 代表値 † 大値 単位 条件
VIL Low レベル入力電圧
I/O ポート :D036 TTL バッファ使用 — — 0.8 V 4.5 V VDD 5.5 V
D036A — — 0.15 VDD V 1.8 V VDD 4.5 V
D037 シュミットトリガ バッファ
使用
— — 0.2 VDD V 1.8 V VDD 5.5 V
I2C レベル使用 — — 0.3 VDD V
D038 MCLR、OSC1 (RC モード )(1) — — 0.2 VDD V
D039A OSC1 (HS モード ) — — 0.3 VDD V
VIH High レベル入力電圧
I/O ポート : — —
D040 TTL バッファ使用 2.0 — — V 4.5 V VDD 5.5 V
D040A 0.25 VDD + 0.8
— — V 1.8 V VDD 4.5 V
D041 シュミットトリガ バッファ
使用
0.8 VDD — — V 1.8 V VDD 5.5 V
I2C レベル使用 0.7 VDD — — V
D042 MCLR 0.8 VDD — — V
D043A OSC1 (HS モード ) 0.7 VDD — — V
D043B OSC1 (RC モード ) 0.9 VDD — — V (Note 1)
IIL 入力リーク電流 (2)
D060 I/O ポート — ± 5 ± 100 nA VSS VPIN VDD、ピンは
ハイインピーダンス
D061 MCLR(3) — ± 50 ± 200 nA VSS VPIN VDD
D063 OSC1 — ± 5 ± 100 nA VSS VPIN VDD、XT、HS、LPオシレータ設定
IPUR PORTB の弱プルアップ電流
D070* 50 250 400 A VDD = 5.0 V、VPIN = VSS
VOL Low レベル出力電圧 (4)
D080 I/O ポート— —
VSS+0.6VSS+0.6VSS+0.6
VIOH = 8 mA、VDD = 5 VIOH = 6 mA、VDD = 3.3 VIOH = 3 mA、VDD = 1.8 V
VOH High レベル出力電圧 (4)
D090 I/O ポート VDD-0.7VDD-0.7VDD-0.7
— — VIOL = 3.5 mA、VDD = 5 VIOL = 3 mA、VDD = 3.3 VIOL = 2 mA、VDD = 1.8 V
凡例 : TBD = 未定
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 5.0V、25 °C 時のものです。これらのパラメータは設計上の目安であり、
テストはしていません。
Note 1: RC オシレータ設定では、OSC1/CLKIN ピンはシュミットトリガ入力です。RC モードでは外部クロックの使用は推奨
しません。
2: 負の電流はピンからの出力と定義されています。
3: MCLR ピンのリーク電流は、印加する電圧レベルによって大きく変化します。指定したレベルは、通常の動作状態に相
当します。入力電圧が異なると、リーク電流が大きくなる事があります。
4: CLKOUT モードの OSC2 を含みます。
DS41350D_JP - p. 376 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
出力ピンに対する容量性負荷の仕様
D101* COSC2 OSC2 ピン — — 15 pF XT、HS、LP モードで外部クロッ
クを使用して OSC1 を駆動してい
る場合
D101A* CIO 全ての I/O ピン — — 50 pF
フラッシュメモリ
D130 EP セル書き換え耐性 10K100K
— — E/W プログラム フラッシュメモリ データ フラッシュメモリ
D131 読み出し用 VDD VMIN — — V
消去 / 書き込み時の
MCLR/VPP の電圧
VDD + 1.5 — 9.0 V 書き込み時の温度 : -40 °C TA 85 °C
バルク消去用 VDD TBD 2.1 — V 書き込み時の温度 : 10 °C TA 40 °C
D132 VPEW 書き込みまたは行消去用 VDD VMIN — — V VMIN = 小動作電圧
VMAX = 大動作電圧
IPPPGM 消去 / 書き込み時の
MCLR/VPP の電流
— — 5.0 mA
IDDPGM 消去 / 書き込み時の VDD の
電流
— 5.0 mA
D133 TPEW 消去 / 書き込みサイクル時間 — 4.0 ms
D134 TRETD 特性保持期間 40 — — 年 他の仕様値に違反していない場合
VUSB コンデンサ充電
D135 充電電流 — 200 — A
D135A 充電完了時のソース / シンク
能力
— 0.0 — mA
27.4 DC 特性 : PIC18F/LF1XK50-I/E ( 続き )
DC 特性
標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +85 °C ( 工業用温度レンジ )
-40 °C TA +125 °C ( 拡張温度レンジ )
パラ
メータ
番号
記号 特性 小値 代表値 † 大値 単位 条件
凡例 : TBD = 未定
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 5.0V、25 °C 時のものです。これらのパラメータは設計上の目安であり、
テストはしていません。
Note 1: RC オシレータ設定では、OSC1/CLKIN ピンはシュミットトリガ入力です。RC モードでは外部クロックの使用は推奨
しません。
2: 負の電流はピンからの出力と定義されています。
3: MCLR ピンのリーク電流は、印加する電圧レベルによって大きく変化します。指定したレベルは、通常の動作状態に相
当します。入力電圧が異なると、リーク電流が大きくなる事があります。
4: CLKOUT モードの OSC2 を含みます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 377
PIC18F/LF1XK50
27.5 USB モジュールの仕様
動作条件 -40 °C TA +85 °C ( 別途記載のある場合を除く )
パラメータ番号
記号 特性 小値 代表値 大値 単位 条件
D313 VUSB USB 電圧 3.0 — 3.6 V USB を正常に動作させるには、VUSB ピンにこのレンジの電圧を印加する事が必要
D314 IIL ピンの入力リーク電流 — — ± 1 A VSS VPIN VDD ピン ( ハイインピーダンス時 )
D315 VILUSB USBバッファ用のLowレベル入力電圧
— — 0.8 V VUSB レンジ用
D316 VIHUSB USBバッファ用のHighレベル入力電圧
2.0 — — V VUSB レンジ用
D318 VDIFS 差動入力感度 — — 0.2 V VCM の条件を満たしている時、D+ と D- の差がこの値より大きい事が必要
D319 VCM 差動コモンモード レンジ 0.8 — 2.5 V
D320 ZOUT ドライバ出力インピーダンス(1) 28 — 44 D321 VOL Low レベル出力電圧 0.0 — 0.3 V 1.5 k負荷を 3.6 V に接続
D322 VOH High レベル出力電圧 2.8 — 3.6 V 1.5 k負荷をグランドに接続
Note 1: D+ 信号ラインと D- 信号ラインには、インピーダンス整合用の抵抗が内蔵されています。PIC18F1XK50/PIC18LF1XK50 ファミリと USB ケーブルの間の D+/D- 信号ラインには、外付け抵抗、コンデンサ、磁気部品は一切必要ありません。
DS41350D_JP - p. 378 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
27.6 温度仕様
標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +125 °C
パラ
メータ
番号
記号 特性 代表値 単位 条件
TH01 JA 接合部 - 大気間熱抵抗 62.4 C/W 20 ピン PDIP パッケージ
85.2 C/W 20 ピン SOIC パッケージ
108.1 C/W 20 ピン SSOP パッケージ
TBD C/W 20 ピン QFN 5x5 mm パッケージ
TH02 JC 接合部 - ケース間熱抵抗 31.4 C/W 20 ピン PDIP パッケージ
24 C/W 20 ピン SOIC パッケージ
24 C/W 20 ピン SSOP パッケージ
TH03 TJMAX 高接合部温度 150 CTH04 PD 消費電力 — W PD = PINTERNAL + PI/O
TH05 PINTERNAL 内部消費電力 — W PINTERNAL = IDD x VDD(1)
TH06 PI/O I/O 消費電力 — W PI/O = (IOL * VOL) + (IOH * (VDD - VOH))
TH07 PDER ディレーティング後電力 — W PDER = PDMAX (TJ - TA)/JA(2)
凡例 : TBD = 未定
Note 1: IDD は、出力ピンの負荷を駆動しないでチップのみを動作させた時の電流です。
2: TA = 周囲温度
3: TJ = 接合部温度
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 379
PIC18F/LF1XK50
27.7 タイミング パラメータの記号
タイミング パラメータの記号は、以下のいずれかの書式で表します。
図 27-2: 負荷条件
1. TppS2ppS
2. TppS
T
F 周波数 T 時間
小文字 (pp) の種類と意味 :
pp
cc CCP1 osc OSC1
ck CLKOUT rd RD
cs CS rw RD or WR
di SDI sc SCK
do SDO ss SS
dt Data in t0 T0CKI
io I/O PORT t1 T1CKI
mc MCLR wr WR
大文字の種類と意味 :
S
F Fall P Period
H High R Rise
I Invalid (High-impedance) V Valid
L Low Z High-impedance
VSS
CL
凡例 : CL = 50 pF ( 全てのピン )、15 pF (OSC2 出力 )
Load Condition
Pin
DS41350D_JP - p. 380 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
27.8 AC 特性 : PIC18F1XK50/PIC18LF1XK50-I/E
図 27-3: クロック タイミング
図 27-4: PIC18F1XK50 の電圧 - 周波数のグラフ、-40 °C TA +85 °C
OSC1/CLKIN
OSC2/CLKOUT
Q4 Q1 Q2 Q3 Q4 Q1
OS02
OS03OS04 OS04
OSC2/CLKOUT(LP,XT,HS Modes)
(CLKOUT Mode)
1.8
0
Frequency (MHz)
VD
D (
V)
Note 1: 網掛けの部分は、電圧と周波数の組み合わせが可能なレンジを表します。
2: 各オシレータモードでサポートされている周波数については、表 27-1 を参照してください。
10 4820 40
5.5
3.6
2.7
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 381
PIC18F/LF1XK50
図 27-5: PIC18LF1XK50 の電圧 - 周波数のグラフ、-40 °C TA +125 °C
図 27-6: デバイスの VDD と温度に対する HFINTOSC の周波数精度
1.8
2.7
0
Frequency (MHz)
VD
D (
V)
Note 1: 網掛けの部分は、電圧と周波数の組み合わせが可能なレンジを表します。
2: 各オシレータモードでサポートされている周波数については、表 27-1 を参照してください。
10 4820 40
3.6
125
25
2.0
0
60
85
VDD (V)
4.0 5.04.5
Tem
per
atu
re (
°C)
2.5 3.0 3.5 5.51.8
Note 1: このグラフは、レギュレータを有効にした状態と無効にした状態の両方を表しています。
2: レギュレータの公称電圧
3.3(2)-40
-20
+ 5%
± 2%
± 5%
DS41350D_JP - p. 382 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 27-1: クロック オシレータのタイミング要件
標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +125 °C
パラメータ
番号記号 特性 小値 代表値 † 大値 単位 条件
OS01 FOSC 外部 CLKIN 周波数 (1) DC — 37 kHz EC オシレータモード ( 低電力 )DC — 4 MHz EC オシレータモード ( 中電力 )DC — 48 MHz EC オシレータモード ( 大電力 )
オシレータ周波数 (1) — 32.768 33 kHz LP オシレータモード
0.1 — 4 MHz XT オシレータモード
1 — 20 MHz HS オシレータモード
DC — 4 MHz RC オシレータモード OS02 TOSC 外部 CLKIN 周期 (1) 27 — s LP オシレータモード
250 — ns XT オシレータモード
50 — ns HS オシレータモード
20.80 — ns EC オシレータモード
オシレータ周期 (1) — 30.5 — s LP オシレータモード
250 — 10,000 ns XT オシレータモード
50 — 1,000 ns HS オシレータモード
250 — — ns RC オシレータモード
OS03 TCY 命令サイクル時間 (1) 83 TCY DC ns TCY = 4/FOSC
OS04* TosH,TosL
外部 CLKIN High、外部 CLKIN Low
2 — — s LP オシレータ
100 — — ns XT オシレータ
20 — — ns HS オシレータ
OS05* TosR,TosF
外部 CLKIN 立ち上がり、
外部 CLKIN 立ち下がり
0 — ns LP オシレータ
0 — ns XT オシレータ
0 — ns HS オシレータ
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 5 V、25 °C 時のものです。これらのパラメータは設計上の目安であり、
テストはしていません。
Note 1: 命令サイクル周期 (TCY) は、入力オシレータのタイムベース周期の 4 倍です。上記の仕様値は全て、標準の動作条件で
デバイスがコードを実行した場合の各オシレータの特性データに基づいています。これらの仕様の制限値を超えるとオ
シレータの動作が不安定になったり、予想以上の電流を消費する事があります。全てのデバイスは、OSC1 ピンに外部
クロックを入力した状態で「 小値」で動作をテストしています。外部クロック入力を使用した場合、「 大値」のサイ
クル時間の制限値はいずれのデバイスの場合も「DC」( クロックなし ) です。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 383
PIC18F/LF1XK50
表 27-2: オシレータのパラメータ
表 27-3: PLL クロック タイミング仕様 (VDD = 42.7 ~ 5.5 V)
標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +125 °C
パラ
メータ
番号
記号 特性周波数
許容誤差小値 代表値 † 大値 単位 条件
OS08 HFOSC 内部校正済み HFINTOSC 周波数 (2) 2% — 16.0 — MHz 0 °C TA +85 °C
5% — 16.0 — MHz -40 °C TA +125 °C
OS10* TIOSC ST HFINTOSCスリープからのウェイクアップ時の
起動時間
— — 5 7 s VDD = 2.0 V、-40 °C ~+85 °C
— — 5 7 s VDD = 3.0 V、-40 °C ~+85 °C
— — 5 7 s VDD = 5.0 V、-40 °C ~+85 °C
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 5.0 V、25 °C 時のものです。これらのパラメータは設計上の目安であり、
テストはしていません。
Note 1: 命令サイクル周期 (TCY) は、入力オシレータのタイムベース周期の 4 倍です。上記の仕様値は全て、標準の動作条件で
デバイスがコードを実行した場合の各オシレータの特性データに基づいています。これらの仕様の制限値を超えるとオ
シレータの動作が不安定になったり、予想以上の電流を消費する事があります。全てのデバイスは、OSC1 ピンに外部
クロックを入力した状態で「 小値」で動作をテストしています。外部クロック入力を使用した場合、「 大値」のサ
イクル時間の制限値はいずれのデバイスの場合も「DC」( クロックなし ) です。
2: これらのオシレータ周波数の許容誤差を確保するには、デバイスのなるべく近くで VDD と VSS にデカップリング コン
デンサを接続する必要があります。0.1 F のコンデンサと 0.01 F のコンデンサを並列に接続する事を推奨します。
3: 設計上の仕様
パラメータ 番号
記号 特性 小値 代表値 † 大値 単位 条件
F10 FOSC オシレータ周波数レンジ 4 — 12 MHz
F11 FSYS 内蔵 VCO システム周波数 16 — 48 MHz
F12 trc PLL 起動時間 ( ロック時間 ) — — 2 ms
F13* CLK CLKOUT 安定性 ( ジッタ ) -0.25% — +0.25% %
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 5 V、25 C 時のものです。これらのパラメータは設計上
の目安であり、テストはしていません。
DS41350D_JP - p. 384 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 27-7: CLKOUT と I/O タイミング
表 27-4: CLKOUT と I/O のタイミング パラメータ 標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +125 °C
パラメータ 番号
記号 特性 小値代表値 †
大値
単位 条件
OS11 TosH2ckL Foscから CLKOUTまでの時間 (1) — — 70 ns VDD = 3.3 ~5.0 V
OS12 TosH2ckH Foscから CLKOUTまでの時間 (1) — — 72 ns VDD = 3.3 ~5.0 V
OS13 TckL2ioV CLKOUTからポート出力確定までの時間 (1)
— — 20 ns
OS14 TioV2ckH ポート入力有効から CLKOUTまでの時間 (1)
TOSC + 200 ns — — ns
OS15 TosH2ioV Fosc (Q1 サイクル ) からポート出力確定までの時間
— 50 70* ns VDD = 3.3 ~5.0 V
OS16 TosH2ioI Fosc (Q2 サイクル ) からポート入力無効までの時間 (I/O のホールドタイム )
50 — — ns VDD = 3.3 ~5.0 V
OS17 TioV2osH ポート入力有効からFosc(Q2サイクル )までの時間 (I/O のセットアップ時間 )
20 — — ns
OS18 TioR ポート出力立ち上がり時間 (2) ——
4015
7232
ns VDD = 2.0 VVDD = 3.3 ~5.0 V
OS19 TioF ポート出力立ち下がり時間 (2) ——
2815
5530
ns VDD = 2.0 VVDD = 3.3 ~5.0 V
OS20* Tinp INT ピン入力の high または low 時間 25 — — ns
OS21* Trbp PORTB状態変化割り込みの新しい入力レベル時間
TCY — — ns
* これらのパラメータは特性データであり、テストはしていません。† 「代表値」欄のデータは、特に記載のない限り 5.0 V、25 C 時のものです。
Note 1: RC モードで CLKOUT 出力を 4 x TOSC として計測しています。
2: CLKOUT モードの OSC2 を含みます。
FOSC
CLKOUT
I/O pin(Input)
I/O pin(Output)
Q4 Q1 Q2 Q3
OS11
OS19
OS13
OS15
OS18, OS19
OS20OS21
OS17
OS16
OS14
OS12
OS18
Old Value New Value
Write Fetch Read ExecuteCycle
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 385
PIC18F/LF1XK50
図 27-8: リセット、ウォッチドッグ タイマ、オシレータ起動タイマ、パワーアップ タイマのタイミング
図 27-9: ブラウンアウト リセットのタイミングと特性
VDD
MCLR
InternalPOR
PWRTTime-out
OSCStart-Up Time
Internal Reset(1)
Watchdog Timer
33
32
30
31/34
I/O pins
34
Reset(1)
31A
Note 1: 負論理
VBOR
VDD
(Device in Brown-out Reset) (Device not in Brown-out Reset)
33(1)
37
Reset
(due to BOR)
VBOR and VHYST
TBORREJ
Note 1: コンフィグレーション ワード レジスタの PWRTE ビットを「0」にプログラミングした場合
のみ 64 ms 遅延します。PWRTE = 0の場合の遅延は 2 ms です。
DS41350D_JP - p. 386 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 27-5: リセット、ウォッチドッグ タイマ、オシレータ起動タイマ、パワーアップ タイマ、ブラウンアウト リセットのパラメータ
標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +125 °C
パラメータ 番号
記号 特性 小値 代表値 † 大値 単位 条件
30 TMCL MCLR パルス幅 (low) 2 5
——
——
ss
VDD = 3.3 ~ 5 V、-40 °C ~+85 °CVDD = 3.3 ~ 5 V
31 TWDT 標準ウォッチドッグ タイマ タイムアウト時間 (5)
1010
1717
2730
msms
VDD = 3.3 ~ 5 V、-40 °C ~+85 °CVDD = 3.3 ~ 5 V
31A TWDTLP 低消費電力ウォッチドッグ タイマ タイムアウト時間
1010
1818
2733
msms
VDD = 3.3 ~ 5 V、-40 °C ~+85 °CVDD = 3.3 ~ 5 V
32 TOST オシレータ起動タイマ時間 (1), (2) — 1024 — Tosc (Note 3)
33* TPWRT パワーアップ タイマ時間、PWRTE = 0
40 65 140 ms
34* TIOZ MCLR Low またはウォッチドッグ タイマ リセットから I/O ハイインピーダンスまでの時間
— — 2.0 s
35 VBOR ブラウンアウト リセット電圧 TBDTBDTBDTBD
1.92.22.72.85
TBDTBDTBDTBD
VVVV
BORV = 1.9 VBORV = 2.2 VBORV = 2.7 VBORV = 2.85 V
36* VHYST ブラウンアウト リセットのヒステリシス
25 50 75 mV -40 ~ +85 °C
37* TBORDC ブラウンアウト リセットのDC応答時間
1 3 510
s VDD VBOR、-40 ~ +85 °CVDD VBOR
凡例 : TBD = 未定* これらのパラメータは特性データであり、テストはしていません。† 「代表値」欄のデータは、特に記載のない限り 5 V、25 °C 時のものです。これらのパラメータは設計上の
目安であり、テストはしていません。Note 1: 命令サイクル周期 (TCY) は、入力オシレータのタイムベース周期の 4 倍です。上記の仕様値は全て、標準
の動作条件でデバイスがコードを実行した場合の各オシレータの特性データに基づいています。これらの仕様の制限値を超えるとオシレータの動作が不安定になったり、予想以上の電流を消費する事があります。全てのデバイスは、OSC1 ピンに外部クロックを入力した状態で「 小値」で動作をテストしています。外部クロック入力を使用した場合、「 大値」のサイクル時間の制限値はいずれのデバイスの場合も「DC」( クロックなし ) です。
2: 設計上の仕様3: 遅い方のクロック周期4: これらの電圧の許容誤差を確保するには、デバイスのなるべく近くで VDD と VSS にデカップリング コン
デンサを接続する必要があります。0.1 F のコンデンサと 0.01 F のコンデンサを並列に接続する事を推奨します。
5: 設計上の目標です。この目標を満たす事ができない場合は 大値を大きくできますが、 小値は変更できません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 387
PIC18F/LF1XK50
図 27-10: TIMER0 と TIMER1 の外部クロック タイミング
表 27-6: TIMER0 と TIMER1 の外部クロック要件標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +125 °C
パラメータ番号
記号 特性 小値 代表値 † 大値 単位 条件
40* TT0H T0CKI High パルス幅 プリスケーラなし 0.5 TCY + 20 — — ns
プリスケーラあり 10 — — ns
41* TT0L T0CKI Low パルス幅 プリスケーラなし 0.5 TCY + 20 — — ns
プリスケーラあり 10 — — ns
42* TT0P T0CKI 周期 以下のいずれか大きい方 :
20 またはTCY + 40
N
— — ns N = プリスケーラの値 (2, 4, ..., 256)
45* TT1H T1CKI High 時間
同期、プリスケーラなし 0.5 TCY + 20 — — ns
同期、プリスケーラあり 15 — — ns
非同期 30 — — ns
46* TT1L T1CKI Low 時間
同期、プリスケーラなし 0.5 TCY + 20 — — ns
同期、プリスケーラあり 15 — — ns
非同期 30 — — ns
47* TT1P T1CKI 入力周期
同期 以下のいずれか大きい方 :
30 またはTCY + 40
N
— — ns N = プリスケーラの値 (1, 2, 4, 8)
非同期 60 — — ns
48 FT1 Timer1 オシレータ入力周波数レンジ (T1OSCEN ビットをセットしてオシレータを有効にした場合 )
32.4 32.768 33.1 kHz
49* TCKEZTMR1 外部クロックエッジからタイマのインクリメントまでの遅延
2 TOSC — 7 TOSC — タイマの動作は同期モード
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 5 V、25 °C 時のものです。これらのパラメータは設計上の目安であり、
テストはしていません。
T0CKI
T1CKI
40 41
42
45 46
47 49
TMR0 orTMR1
DS41350D_JP - p. 388 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 27-11: キャプチャ / コンペア /PWM (CCP) のタイミング
表 27-7: キャプチャ / コンペア /PWM (CCP) の要件
表 27-8: PIC18F1XK50/PIC18LF1XK50 の A/D コンバータ (ADC) の特性 :
標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +125 °C
パラ
メータ 番号
記号 特性 小値 代表値 † 大値 単位 条件
CC01* TccL CCPx 入力 Low 時間 プリスケーラなし 0.5TCY + 20 — — ns
プリスケーラあり 20 — — ns
CC02* TccH CCPx 入力 High 時間 プリスケーラなし 0.5TCY + 20 — — ns
プリスケーラあり 20 — — ns
CC03* TccP CCPx 入力周期 3TCY + 40 N
— — ns N = プリスケーラの値 (1, 4, 16)
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 5 V、25 °C 時のものです。これらのパラメータは設計上の目安であり、
テストはしていません。
標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +125 °C
パラ
メータ 番号
記号 特性 小値 代表値 † 大値 単位 条件
AD01 NR 分解能 — — 10 ビット
AD02 EIL 積分直線性誤差 — — ±2 LSb VREF = 5.0 V
AD03 EDL 微分直線性誤差 — — 1.5 LSb ノーミッシング コードVREF = 5.0 V
AD04 EOFF オフセット誤差 — — ±3 LSb VREF = 5.0 V
AD05 EGN ゲイン誤差 — — ±3 LSb VREF = 5.0 V
AD06 VREF 基準電圧 = VREF+ - VREF-の変化 (3) 1.8 — VDD V 1.8 VREF+ VDD + 0.3 VVSS - 0.3 V VREF- VREF+ - 1.8 V
AD07 VAIN フルスケール レンジ VSS — VREF V
AD08 ZAIN アナログ電圧源の推奨インピーダ
ンス
— — 2.5 k 入力ピンに外付けの 0.01 F コンデンサを
使用した場合、さらに高い値が可能
AD09* IREF VREF 入力電流 (3) 10 — 1000 A VAIN のアクイジション時 VHOLD と VAIN の差に基づく
— — 10 A A/D 変換サイクル中
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 5.0 V、25 °C 時のものです。これらのパラメータは設計上の目安であり、
テストはしていません。
Note 1: 総絶対誤差には、積分直線性誤差、微分直線性誤差、オフセット誤差、ゲイン誤差が含まれます。
2: A/D 変換結果は、入力電圧が増大しても減少する事はありません。また、ミッシング コードもありません。
3: ADC の VREF は、外部 VREF、VDD ピン、FVR のうちリファレンス入力として選択したものとなります。
4: ADC モジュールを OFF にした場合、リーク電流以外にモジュールの消費電流は発生しません。パワーダウン電流の仕
様は、この ADC モジュールのリーク電流も含んだ値です。
Note: 負荷条件については、図 27-2 を参照してください。
(Capture mode)
CC01 CC02
CC03
CCPx
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 389
PIC18F/LF1XK50
図 27-12: A/D 変換のタイミング
表 27-9: A/D 変換の要件
パラメータ 番号
記号 特性 小値 大値 単位 条件
130 TAD A/D クロック周期 0.7 25.0(1) s TOSC ベース、VREF 3.0 V
TBD 1 s A/D RC モード
131 TCNV 変換時間 ( アクイジション時間を除く )(2)
11 12 TAD
132 TACQ アクイジション時間 (3) 1.4TBD
——
ss
-40 ~ +85C 0 C ~ +85 C
135 TSWC 変換サンプルのスイッチング時間 — (Note 4)
TBD TDIS 放電時間 0.2 — s
凡例 : TBD = 未定
Note 1: A/D クロック周期の時間は、デバイスの周波数と TAD クロックの分周値によって異なります。
2: ADRES レジスタは次の TCY サイクルで読み出しが可能です。
3: 変換後に電圧がフルスケールで変化 (VDD から VSS または VSS から VDD) した場合にホールド コンデンサが「新しい」入力電圧を取得するのにかかる時間です。入力チャンネルのソース インピーダンス (RS)は 50 です。
4: デバイスクロックの次のサイクルです。
131
130
132
BSF ADCON0, GO
Q4
A/D CLK
A/D DATA
ADRES
ADIF
GO
SAMPLE
OLD_DATA
SAMPLING STOPPED
DONE
NEW_DATA
(Note 2)
9 8 7 2 1 0
Note 1: A/D 変換のクロック源に RC を選択した場合、A/D 変換開始前に TCY の遅延が発生します。この遅延により、SLEEP命令の実行が可能になります。
2: これは 小の RC 遅延 ( 代表値は 100 ns) で、この遅延の間にアナログ入力からホールド コンデンサを切断します。
.. . . . .
TCY
DS41350D_JP - p. 390 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 27-10: コンパレータの仕様
表 27-11: CVREF 電圧リファレンスの仕様
表 27-12: 固定電圧リファレンス (FVR) の仕様
動作条件 : 1.8 V < VDD < 3.6 V、-40 °C < TA < +125 °C ( 別途記載のある場合を除く )
パラメータ番号
記号 特性 小値 代表値 大値 単位 備考
CM01 VIOFF 入力オフセット電圧 ——
±7.5—
±50±80
mVmV
通常電力モード低電力モード
CM02 VICM 入力コモンモード電圧 0 — VDD V
CM03 CMRR コモンモード除去比 55 — — dB
CM04 TRESP 応答時間 — 150 400 ns Note 1
CM05 TMC2OV コンパレータのモード変更から出力確定までの時間 *
— — 10 s
CM06 CHYSTER コンパレータ ヒステリシス — 65 — mV
* これらのパラメータは特性データであり、テストはしていません。
Note 1: 応答時間は、コンパレータの一方の入力を VDD/2 とし、もう一方の入力を VSS から VDD に遷移させて計測しています。
動作条件 : 1.8 V < VDD < 3.6 V、-40 °C < TA < +125 °C ( 別途記載のある場合を除く )
パラメータ番号
記号 特性 小値 代表値 大値 単位 備考
CV01* CLSB ステップサイズ (2) ——
VDD/24VDD/32
——
VV
ローレンジ (VRR = 1)ハイレンジ (VRR = 0)
CV02* CACC 絶対精度 ——
——
1/41/2
LSbLSb
ローレンジ (VRR = 1)ハイレンジ (VRR = 0)
CV03* CR 単位抵抗値 (R) — 2k —
CV04* CST セトリングタイム (1) — — 10 s
* これらのパラメータは特性データであり、テストはしていません。
Note 1: セトリングタイムは、CVRR = 1とし、CVR3:CVR0 を「0000」から「1111」へ遷移させて計測しています。
動作条件 : 1.8 V < VDD < 3.6 V、-40 °C < TA < +125 °C ( 別途記載のある場合を除く )
VR 電圧リファレンスの仕様標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +125 °C
パラメータ 番号
記号 特性 小値 代表値 大値 単位 備考
VR01 VROUT VR 電圧出力 TBD 1.2 TBD V
VR02 TCVOUT 電圧ドリフト温度係数 — TBD TBD ppm/C
VR03 VROUT/VDD
VDD レギュレーションに対する電圧ドリフト
— TBD — V/V
VR04 TSTABLE セトリングタイム — TBD TBD s
凡例 : TBD = 未定
* これらのパラメータは特性データであり、テストはしていません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 391
PIC18F/LF1XK50
図 27-13: USART 同期送信 ( マスタ / スレーブ ) のタイミング
表 27-13: USART 同期送信の要件
図 27-14: USART 同期受信 ( マスタ / スレーブ ) のタイミング
表 27-14: USART 同期受信の要件
標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +125 °C
パラメータ 番号
記号 特性 小値 大値 単位 条件
US120 TCKH2DTV 同期送信 ( マスタとスレーブ )クロック high からデータ出力確定までの時間
3.0 ~ 5.5 V — 80 ns
1.8 ~ 5.5 V — 100 ns
US121 TCKRF クロック出力の立ち上がり / 立ち下がり時間 ( マスタモード )
3.0 ~ 5.5 V — 45 ns
1.8 ~ 5.5 V — 50 ns
US122 TDTRF データ出力の立ち上がり / 立ち下がり時間
3.0 ~ 5.5 V — 45 ns
1.8 ~ 5.5 V — 50 ns
標準動作条件 ( 特に指定のない場合 )動作温度 -40 °C TA +125 °C
パラメータ 番号
記号 特性 小値 大値 単位 条件
US125 TDTV2CKL 同期受信 ( マスタとスレーブ )CK 前のデータホールド (DT ホールドタイム ) 10 — ns
US126 TCKL2DTL CK 後のデータホールド (DT ホールドタイム ) 15 — ns
Note: 負荷条件については、図 27-2 を参照してください。
US121 US121
US120 US122
CK
DT
Note: 負荷条件については、図 27-2 を参照してください。
US125
US126
CK
DT
DS41350D_JP - p. 392 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
図 27-15: SPI マスタモードのタイミング (CKE = 0、SMP = 0)
図 27-16: SPI マスタモードのタイミング (CKE = 1、SMP = 1)
SS
SCK(CKP = 0)
SCK(CKP = 1)
SDO
SDI
SP70
SP71 SP72
SP73SP74
SP75, SP76
SP78SP79
SP80
SP79SP78
MSb LSbbit 6 - - - - - -1
MSb In LSb Inbit 6 - - - -1
Note: 負荷条件については、図 27-2 を参照してください。
SS
SCK(CKP = 0)
SCK(CKP = 1)
SDO
SDI
SP81
SP71 SP72
SP74
SP75, SP76
SP78SP80
MSb
SP79SP73
MSb In
bit 6 - - - - - -1
LSb Inbit 6 - - - -1
LSb
Note: 負荷条件については、図 27-2 を参照してください。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 393
PIC18F/LF1XK50
図 27-17: SPI スレーブモードのタイミング (CKE = 0)
図 27-18: SPI スレーブモードのタイミング (CKE = 1)
SS
SCK(CKP = 0)
SCK(CKP = 1)
SDO
SDI
SP70
SP71 SP72
SP73
SP74
SP75, SP76 SP77
SP78SP79
SP80
SP79SP78
MSb LSbbit 6 - - - - - -1
MSb In bit 6 - - - -1 LSb In
SP83
Note: 負荷条件については、図 27-2 を参照してください。
SS
SCK(CKP = 0)
SCK(CKP = 1)
SDO
SDI
SP70
SP71 SP72
SP82
SP74
SP75, SP76
MSb bit 6 - - - - - -1 LSb
SP77
MSb In bit 6 - - - -1 LSb In
SP80
SP83
Note: 負荷条件については、図 27-2 を参照してください。
DS41350D_JP - p. 394 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 27-15: SPI モードの要件
図 27-19: I2C™ バス スタート / ストップビットのタイミング
パラメータ 番号
記号 特性 小値 代表値 † 大値 単位 条件
SP70* TSSL2SCH, TSSL2SCL
SSから SCKまたは SCK入力までの時間 TCY — — ns
SP71* TSCH SCK 入力 high 時間 ( スレーブモード ) TCY + 20 — — ns
SP72* TSCL SCK 入力 low 時間 ( スレーブモード ) TCY + 20 — — ns
SP73* TDIV2SCH, TDIV2SCL
SDI データ入力から SCK エッジまでのセットアップ時間
100 — — ns
SP74* TSCH2DIL, TSCL2DIL
SDI データ入力から SCK エッジまでのホールドタイム
100 — — ns
SP75* TDOR SDO データ出力の立ち上がり時間
3.0 ~ 5.5 V — 10 25 ns
1.8 ~ 5.5 V — 25 50 ns
SP76* TDOF SDO データ出力の立ち下がり時間
— 10 25 ns
SP77* TSSH2DOZ SSから SDO 出力ハイインピーダンスまでの時間
10 — 50 ns
SP78* TSCR SCK 出力の立ち上がり時間 ( マスタモード )
3.0 ~ 5.5 V — 10 25 ns
1.8 ~ 5.5 V — 25 50 ns
SP79* TSCF SCK 出力の立ち下がり時間 ( マスタモード ) — 10 25 ns
SP80* TSCH2DOV,TSCL2DOV
SCK エッジ後の SDO データ出力有効期間
3.0 ~ 5.5 V — — 50 ns
1.8 ~ 5.5 V — — 145 ns
SP81* TDOV2SCH,TDOV2SCL
SCK エッジ前の SDO データ出力セットアップ時間
Tcy — — ns
SP82* TSSL2DOV SSエッジから SDO データ出力確定までの時間
— — 50 ns
SP83* TSCH2SSH,TSCL2SSH
SCK エッジから SS までの時間 1.5TCY + 40 — — ns
* これらのパラメータは特性データであり、テストはしていません。
† 「代表値」欄のデータは、特に記載のない限り 5.0 V、25 °C 時のものです。これらのパラメータは設計上
の目安として記載してあるだけで、テストはしていません。
SP91
SP92
SP93SCL
SDA
StartCondition
StopCondition
SP90
Note: 負荷条件については、図 27-2 を参照してください。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 395
PIC18F/LF1XK50
表 27-16: I2C™ バス スタート / ストップビットの要件
図 27-20: I2C™ バスデータのタイミング
パラメータ番号
記号 特性 小値 代表値 大値 単位 条件
SP90* TSU:STA スタート条件 100 kHz モード 4700 — — ns リピートスタート条件の場合のみ該当セットアップ時間 400 kHz モード 600 — —
SP91* THD:STA スタート条件 100 kHz モード 4000 — — ns この期間後、 初のクロックパルスが生成されるホールドタイム 400 kHz モード 600 — —
SP92* TSU:STO ストップ条件 100 kHz モード 4700 — — ns
セットアップ時間 400 kHz モード 600 — —
SP93 THD:STO ストップ条件 100 kHz モード 4000 — — ns
ホールドタイム 400 kHz モード 600 — —
* これらのパラメータは特性データであり、テストはしていません。
SP90
SP91 SP92
SP100SP101
SP103
SP106SP107
SP109SP109
SP110
SP102
SCL
SDAIn
SDAOut
Note: 負荷条件については、図 27-2 を参照してください。
DS41350D_JP - p. 396 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
表 27-17: I2C™ バスデータの要件
パラメータ番号
記号 特性 小値大値
単位 条件
SP100* THIGH クロック High 時間 100 kHz モード 4.0 — s デバイスの動作周波数が1.5 MHz 以上である事が必要
400 kHz モード 0.6 — s デバイスの動作周波数が10 MHz 以上である事が必要
SSP モジュール 1.5TCY —
SP101* TLOW クロック Low 時間 100 kHz モード 4.7 — s デバイスの動作周波数が1.5 MHz 以上である事が必要
400 kHz モード 1.3 — s デバイスの動作周波数が10 MHz 以上である事が必要
SSP モジュール 1.5TCY —
SP102* TR SDA および SCL立ち上がり時間
100 kHz モード — 1000 ns
400 kHz モード 20 + 0.1 CB 300 ns CB の仕様は10 ~ 400 pF
SP103* TF SDA および SCL立ち下がり時間
100 kHz モード — 250 ns
400 kHz モード 20 + 0.1 CB 250 ns CB の仕様は10 ~ 400 pF
SP90* TSU:STA スタート条件セットアップ時間
100 kHz モード 4.7 — s リピートスタート条件の場合のみ該当400 kHz モード 0.6 — s
SP91* THD:STA スタート条件ホールド タイム
100 kHz モード 4.0 — s この期間後、 初のクロックパルスが生成される
400 kHz モード 0.6 — s
SP106* THD:DAT データ入力ホールドタイム
100 kHz モード 0 — ns
400 kHz モード 0 0.9 s
SP107* TSU:DAT データ入力セットアップ時間
100 kHz モード 250 — ns (Note 2)
400 kHz モード 100 — ns
SP92* TSU:STO ストップ条件セットアップ時間
100 kHz モード 4.7 — s
400 kHz モード 0.6 — s
SP109* TAA クロックから出力確定までの時間
100 kHz モード — 3500 ns (Note 1)
400 kHz モード — — ns
SP110* TBUF バスフリー時間 100 kHz モード 4.7 — s 新しい送信を開始する前にバスが解放されている必要がある時間
400 kHz モード 1.3 — s
SP CB バス容量性負荷 — 400 pF
* これらのパラメータは特性データであり、テストはしていません。
Note 1: デバイスがトランスミッタの場合、意図しないスタート / ストップ条件の発生を防ぐために SCL の立ち下がりエッジの未定義領域をブリッジする内部 小遅延時間 (min. 300 ns) を確保する必要があります。
2: 高速モード (400 kHz) の I2C バスデバイスを標準モード (100 kHz) の I2C バスシステムで使用する事は可能ですが、その場合も TSU:DAT 250 ns の要件を満たす必要があります。デバイスが SCL 信号の low 期間をストレッチしない場合、自動的にこのケースになります。このようなデバイスが SCL 信号の low 期間をストレッチする場合、標準モードの I2C バス仕様に従い、SCL ラインを解放する TR max. + TSU:DAT = 1000 + 250 = 1250 ns 前に SDA ラインに次のデータビットを出力する必要があります。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 397
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 398 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
28.0 DC 特性と AC 特性のグラフと表
現時点でグラフと表はありません。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 399
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 400 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
29.0 パッケージ情報
29.1 パッケージのマーキング情報
凡例 : XX...X お客様固有情報Y 年コード ( 西暦の下 1 桁 )YY 年コード ( 西暦の下 2 桁 )WW 週コード (1 月の第 1 週が「01」)NNN 英数字のトレーサビリティ コード つや消し錫 (Sn) の使用を示す鉛フリーの JEDEC マーク* 本パッケージは鉛フリーです。鉛フリー JEDC マーク ( ) は
外箱に表記しています。
Note: マイクロチップ社の製品番号が 1 行に収まりきらない場合は複数行を使用します。この場合お客様固有情報に使用できる文字数が制限されます。
3e
3e
20-Lead PDIP
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
YYWWNNN
Example
PICXXFXXXX-I/P0810017
20-Lead SSOP
XXXXXXXXXXXXXXXXXXXXXX
YYWWNNN
Example
PICXXFXXXX-I/SS
0810017
20-Lead SOIC (.300”)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
YYWWNNN
Example
PICXXFXXXX-I/SO
0810017
XXXXXXX
20-Lead QFN
XXXXXXXYYWWNNN
18F14K50
Example
-I/ML0810017
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 401
PIC18F/LF1XK50
29.2 パッケージの詳細
ここでは、各パッケージの技術的詳細について説明します。
20 ピン プラスチック デュアル インライン (P) – 300 mil ボディ [PDIP]
Notes:
1. 1 ピンマークの場所にはばらつきがありますが、必ず斜線部分内にあります。
2. § 特記項目
3. D と E1 の寸法はモールドのはみ出しや突出部を含みません。モールドのはみ出しや突出部は側面から .010" を超えません。
4. 寸法と公差は ASME Y14.5M に準拠しています。
BSC: 基本寸法、 理論的に正確な値、公差なしで表示Microchip Technology Drawing C04-019B
Note: 新のパッケージ図面は、弊社ウェブサイト (http://www.microchip.com/packaging) で『Microchip Packaging Specification』を参照してください。
単位 インチ
寸法限界 小 公称 大
ピン数 N 20
ピッチ e .100 BSC
トップからシーティングまで A – – .210
モールド パッケージ厚 A2 .115 .130 .195
ベースからシーティングまで A1 .015 – –
ショルダー間幅 E .300 .310 .325
モールド パッケージ幅 E1 .240 .250 .280
全長 D .980 1.030 1.060
先端からシーティング プレーンまで L .115 .130 .150
リード厚 c .008 .010 .015
上側リード幅 b1 .045 .060 .070
下側リード幅 b .014 .018 .022
全幅 § eB – – .430
N
E1NOTE 1
D
1 2 3
A
A1
A2
L
e
b1
b
E
c
eB
DS41350D_JP - p. 402 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
20 ピン プラスチック シュリンク スモール アウトライン (SS) – 5.30 mm ボディ [SSOP]
Notes:
1. 1 ピンマークの場所にはばらつきがありますが、必ず斜線部分内にあります。
2. D と E1 の寸法はモールドのはみ出しや突出部を含みません。モールドのはみ出しや突出部は側面から 0.20 mm を超えません。
3. 寸法と公差は ASME Y14.5M に準拠しています。
BSC: 基本寸法、 理論的に正確な値、公差なしで表示
REF: 基準寸法、通常は公差を含まない、情報としてのみ使用される値Microchip Technology Drawing C04-072B
Note: 新のパッケージ図面は、弊社ウェブサイト (http://www.microchip.com/packaging) で『Microchip Packaging Specification』を参照してください。
φ
LL1
A2c
eb
A1
A
1 2
NOTE 1
E1
E
D
N
単位 ミリメートル
寸法限界 小 公称 大
ピン数 N 20
ピッチ e 0.65 BSC
全高 A – – 2.00
モールド パッケージ厚 A2 1.65 1.75 1.85
スタンドオフ A1 0.05 – –
全幅 E 7.40 7.80 8.20
モールド パッケージ幅 E1 5.00 5.30 5.60
全長 D 6.90 7.20 7.50
足長 L 0.55 0.75 0.95
フットプリント L1 1.25 REF
リード厚 c 0.09 – 0.25
足角 0° 4° 8°
リード幅 b 0.22 – 0.38
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 403
PIC18F/LF1XK50
20 ピン プラスチック スモール アウトライン (SO) – ワイド、7.50 mm ボディ [SOIC]Notes:
1. 1 ピンマークの場所にはばらつきがありますが、必ず斜線部分内にあります。
2. § 特記項目
3. D と E1 の寸法はモールドのはみ出しや突出部を含みません。モールドのはみ出しや突出部は側面から 0.15 mm を超えません。
4. 寸法と公差は ASME Y14.5M に準拠しています。
BSC: 基本寸法、 理論的に正確な値、公差なしで表示
REF: 参考寸法、通常は公差を含まない、情報としてのみ使用される値Microchip Technology Drawing C04-094B
Note: 新のパッケージ図面は、弊社ウェブサイト (http://www.microchip.com/packaging) で『Microchip Packaging Specification』を参照してください。
単位 ミリメートル
寸法限界 小 公称 大
ピン数 N 20
ピッチ e 1.27 BSC
全高 A – – 2.65
モールド パッケージ厚 A2 2.05 – –
スタンドオフ § A1 0.10 – 0.30
全幅 E 10.30 BSC
モールド パッケージ幅 E1 7.50 BSC
全長 D 12.80 BSC
面取り部 ( オプション ) h 0.25 – 0.75
足長 L 0.40 – 1.27
フットプリント L1 1.40 REF
足角 0° – 8°
リード厚 c 0.20 – 0.33
リード幅 b 0.31 – 0.51
モールドドラフト角トップ 5° – 15°
モールドドラフト角ボトム 5° – 15°
β
D
EE1
eb
1 2 3
NOTE 1
A
A1
A2
hh
c
L1
L
φ
α
N
DS41350D_JP - p. 404 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
20 ピン プラスチック クアッド フラット、リードレス パッケージ (MQ) – 5x5x0.9 mm ボディ[QFN]
Notes:
1. 1 ピンマークの場所にはばらつきがありますが、必ず斜線部分内にあります。
2. パッケージは切削切り出しされています。
3. 寸法と公差は ASME Y14.5M に準拠しています。
BSC: 基本寸法、 理論的に正確な値、公差なしで表示
REF: 参考寸法、通常は公差を含まない、情報としてのみ使用される値Microchip Technology Drawing C04-139B
Note: 新のパッケージ図面は、弊社ウェブサイト (http://www.microchip.com/packaging) で『Microchip Packaging Specification』を参照してください。
単位 ミリメートル
寸法限界 小 公称 大
ピン数 N 20
ピッチ e 0.65 BSC
全高 A 0.80 0.90 1.00
スタンドオフ A1 0.00 0.02 0.05
コンタクト厚 A3 0.20 REF
全幅 E 5.00 BSC
露出パッド幅 E2 3.15 3.25 3.35
全長 D 5.00 BSC
露出パッド長 D2 3.15 3.25 3.35
コンタクト幅 b 0.25 0.30 0.35
コンタクト長 L 0.35 0.40 0.45
コンタクトから露出パッドまで K 0.20 - -
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 405
PIC18F/LF1XK50
NOTES:
DS41350D_JP - p. 406 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
補遺 A: 改訂履歴
リビジョン A (2008 年 5 月 )
PIC18F1XK50/PIC18LF1XK50 データシートの初版リリース
リビジョン B (2008 年 6 月 )
27.4 DC 特性の表を改訂しました。
リビジョン C (2009 年 4 月 )
データシートのタイトルを変更しました。製品の機能のページを改訂しました。表 1-2、表 3-1、表 3-2 を改訂しました。セクション 9.1 に Note 3 を追加しました。レジスタ 14-1、例 16-1、セクション 18.8.4、レジスタ 18-3、表 20-2、セクション 22.2.1、22.2.2、22.5.1.1、22.7、表 23-4、27-1、27-2、27-3、27-4、27-8 を改訂しました。
リビジョン D (2010 年 5 月 )
20 ピン PDIP、SSOP、SOIC のパッケージ図を改訂しました。20 ピン QFN のパッケージ図を追加しました。表 1、表 1-1、図 2-1 を改訂しました。セクション 2.11.1( ロースピード動作 ) に Note を追加しました。表 3-1、表 3-2、セクション 4 ( フラッシュ プログラムメモリ )、セクション 5 ( データ EEPROM メモリ )、例 5-2、表 5-1 を改訂しました。レジスタ 7-4、レジスタ 7-8 から Note 1 を削除しました。表 9-1、表 9-3、セクション14.1 (ECCPの出力とコンフィグレーション )、14.4.4(拡張PWMの自動シャットダウン モード )を改訂しました。レジスタ 14-2 に Note 4 を追加しました。図 14-10、式 17-1、表 18-3、表 20-3、式 21-1 を改訂しました。セクション 21.1.3 (VSS にクランプした出力 )を削除しました。図 21-1、表 21-1、表 23-4、表 24-1を改訂しました。表 24-1 に Note 2 を追加しました。レジスタ 24-6 を改訂しました。表 24-3 から Note 1 を削除しました。セクション 27 の表を改訂しました。20 ピン QFN パッケージのマーキング情報と詳細情報を追加しました。製品識別システムのセクションを改訂しました。その他、若干の訂正を加えました。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 407
PIC18F/LF1XK50
補遺 B: デバイス間の違い
表 B-1 に、このデータシートに記載されているデバイス間の違いを示します。
表 B-1: デバイス間の違い
機能 PIC18F13K50 PIC18F14K50 PIC18LF13K50 PIC18F26K20 PIC18LF14K50 PIC18F44K20 PIC18F45K20 PIC18F46K20
プログラムメモリ ( バイト数 )
8192 16384 32768 65536 8192 16384 32768 65536
プログラム命令( 命令数 )
4096 8192 16384 32768 4096 8192 16384 32768
割り込み要因 19 19 19 19 20 20 20 20
I/O ポート ポート A、B、C、(E)
ポート A、B、C、(E)
ポート A、B、C、(E)
ポート A、B、C、(E)
ポート A、B、C、D、E
ポート A、B、C、D、E
ポート A、B、C、D、E
ポート A、B、C、D、E
キャプチャ /コンペア /PWM モジュール
1 1 1 1 1 1 1 1
拡張キャプチャ /コンペア /PWM モジュール
1 1 1 1 1 1 1 1
パラレル通信 (PSP) なし なし なし なし あり あり あり あり
10 ビット ADCモジュール
11 入力チャンネル
11 入力チャンネル
11 入力チャンネル
11 入力チャンネル
14 入力チャンネル
14 入力チャンネル
14 入力チャンネル
14 入力チャンネル
パッケージ 20 ピン PDIP20 ピン SOIC20 ピン SSOP20 ピン QFN
20 ピン PDIP20 ピン SOIC20 ピン SSOP20 ピン QFN
20 ピン PDIP20 ピン SOIC20 ピン SSOP20 ピン QFN
28 ピン PDIP28 ピン SOIC28 ピン SSOP28 ピン QFN
20 ピン PDIP20 ピン SOIC20 ピン SSOP20 ピン QFN
40 ピン PDIP44 ピン TQFP44 ピン QFN
40 ピン PDIP44 ピン TQFP44 ピン QFN
40 ピン PDIP44 ピン TQFP44 ピン QFN
DS41350D_JP - p. 408 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
索引
数字
2 段階起動 ........................................................................ 2932 ワード命令
例 ............................................................................... 34
AA/D
アクイジション時間の選択と設定 ........................... 212アナログ ポート ピンのコンフィグレーション ....... 223関連レジスタ ........................................................... 223仕様 .......................................................................... 389変換 .......................................................................... 214放電 .......................................................................... 215
A/D コンバータ→ ADC 参照ACKSTAT ........................................................................ 171ACKSTAT ステータスフラグ ........................................... 171AC 特性
工業用温度レンジと拡張温度レンジ ....................... 381負荷条件 ................................................................... 380
ADC ................................................................................. 211A/D 変換の開始 ........................................................ 213アクイジション時間の計算 ...................................... 221アクイジションの要件 ............................................. 221基準電圧 (VREF) ....................................................... 212スリープ時の動作 .................................................... 215設定 .......................................................................... 212ソース インピーダンス ............................................ 221チャンネル選択 ........................................................ 212電源管理 ................................................................... 215動作 .......................................................................... 214特殊イベントトリガ ................................................. 215内部サンプリング スイッチ (RSS) インピーダンス . 221ブロック図 ............................................................... 211変換クロック ........................................................... 212変換結果のフォーマット ......................................... 213変換手順 ................................................................... 216ポートの設定 ........................................................... 212割り込み ................................................................... 213
ADCON0 レジスタ ........................................................... 217ADCON1 レジスタ ........................................................... 218ADCON2 レジスタ ........................................................... 219ADDFSR .......................................................................... 354ADDLW ............................................................................ 317ADDULNK ........................................................................ 354ADDWF ............................................................................ 317ADDWFC ......................................................................... 318ADRESH レジスタ (ADFM = 0) ....................................... 220ADRESH レジスタ (ADFM = 1) ....................................... 220ADRESL レジスタ (ADFM = 0) ........................................ 220ADRESL レジスタ (ADFM = 1) ........................................ 220ANDLW ............................................................................ 318ANDWF ............................................................................ 319ANSEL ( ポートアナログ制御 ) .......................................... 98ANSELH レジスタ ............................................................. 99ANSEL レジスタ ................................................................ 98
BBAUDCON レジスタ ........................................................ 194baud レート ジェネレータ ............................................... 167BC .................................................................................... 319BCF .................................................................................. 320BF .................................................................................... 171BF ステータスフラグ ....................................................... 171
BN .................................................................................... 320BNC ................................................................................. 321BNN ................................................................................. 321BNOV .............................................................................. 322BNZ ................................................................................. 322BOR →「ブラウンアウト リセット」参照BOV ................................................................................. 325BRA ................................................................................. 323BRG →「baud レート ジェネレータ」参照BSF .................................................................................. 323BTFSC ............................................................................. 324BTFSS ............................................................................. 324BTG ................................................................................. 325BZ .................................................................................... 326
CCALL ................................................................................ 326CALLW ............................................................................ 355CCP1CON レジスタ ........................................................ 117CLRF ............................................................................... 327CLRWDT ......................................................................... 327CM1CON0 レジスタ ........................................................ 231CM2CON0 レジスタ ........................................................ 232CM2CON1 レジスタ ........................................................ 235COMF .............................................................................. 328CONFIG1H レジスタ ............................................... 295, 296CONFIG1L レジスタ ....................................................... 295CONFIG2H レジスタ ....................................................... 298CONFIG2L レジスタ ....................................................... 297CONFIG3H レジスタ ....................................................... 299CONFIG4L レジスタ ....................................................... 299CONFIG5H レジスタ ....................................................... 300CONFIG5L レジスタ ....................................................... 300CONFIG6H レジスタ ....................................................... 301CONFIG6L レジスタ ....................................................... 301CONFIG7H レジスタ ....................................................... 302CONFIG7L レジスタ ....................................................... 302CPFSEQ .......................................................................... 328CPFSGT .......................................................................... 329CPFSLT ........................................................................... 329CPU の特殊機能 .............................................................. 293CVREF 電圧リファレンスの仕様 ..................................... 391C コンパイラ
MPLAB C18 ............................................................. 362
DDAW ................................................................................ 330DCFSNZ .......................................................................... 331DC 特性
拡張温度レンジと工業用温度レンジ ....................... 376工業用温度レンジと拡張温度レンジ ....................... 366
DC 特性と AC 特性
グラフと表 ............................................................... 399DECF ............................................................................... 330DECFSZ .......................................................................... 331DEVID1 レジスタ ............................................................ 303DEVID2 レジスタ ............................................................ 303
EECCPAS レジスタ ........................................................... 129EECON1 レジスタ ....................................................... 53, 62
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 409
PIC18F/LF1XK50
EUSART ........................................................................... 183baud レート ジェネレータ (BRG)
baud レートエラー、計算 ................................ 195baud レート、非同期モード ............................ 196関連レジスタ ................................................... 195計算式 .............................................................. 195高 baud レート選択ビット (BRGH ビット ) .... 195自動 baud レート検出 ...................................... 199
クロック極性
同期モード ....................................................... 203データ極性
同期モード ....................................................... 203非同期受信 ....................................................... 188非同期送信 ....................................................... 185
同期スレーブモード ................................................. 207関連レジスタ、受信 ......................................... 209関連レジスタ、送信 ......................................... 208受信 .................................................................. 208送信 .................................................................. 207
同期マスタモード .................................................... 203関連レジスタ、受信 ......................................... 207関連レジスタ、送信 ......................................... 205受信 .................................................................. 205送信 .................................................................. 203
非同期モード ........................................................... 18512 ビット ブレークの送受信 ........................... 2029 ビットアドレス検出モードの実行手順 ......... 190baud レート ジェネレータ (BRG) .................... 195関連レジスタ、受信 ......................................... 191関連レジスタ、送信 ......................................... 187クロック精度 ................................................... 192トランスミッタ ................................................ 185ブレークによる自動ウェイクアップ ............... 200レシーバ ........................................................... 188
割り込み
非同期受信 ....................................................... 189非同期送信 ....................................................... 186
GGOTO ............................................................................... 332
II/O ポート ........................................................................... 83I2C
関連するレジスタ .................................................... 179I2C モード (MSSP)
ACK シーケンスのタイミング ................................. 174baud レート ジェネレータ ....................................... 167I2C クロック速度と BRG ......................................... 167クロック アービトレーション ................................. 168クロック ストレッチ ................................................ 160
10 ビットスレーブ受信モード (SEN = 1) ........ 16010 ビットスレーブ送信モード ......................... 1607 ビットスレーブ受信モード (SEN = 1) .......... 1607 ビットスレーブ送信モード ........................... 160
クロック同期と CKP ビット (SEN = 1) ................... 161ジェネラルコール アドレスのサポート ................... 164シリアルクロック (RC3/SCK/SCL) ......................... 153ストップ条件のタイミング ...................................... 174スリープ動作 ........................................................... 175スレーブモード ........................................................ 152
アドレッシング ................................................ 152受信 .................................................................. 153送信 .................................................................. 153
動作 .......................................................................... 152
バスコリジョン
ストップ条件実行中 ........................................ 179リピートスタート条件実行中 .......................... 178
マスタモード ........................................................... 165受信 ................................................................. 171スタート条件のタイミング ............................. 169送信 ................................................................. 171動作 ................................................................. 166リピートスタート条件のタイミング ............... 170
マルチマスタ モード ............................................... 175マルチマスタ通信、バスコリジョンと
バス アービトレーション ................................ 175読み / 書きビット情報 (R/W ビット ) ............... 152, 153リセットの効果 ....................................................... 175レジスタ .................................................................. 148
ID ロケーション ....................................................... 293, 309INCF ................................................................................ 332INCFSZ ............................................................................ 333INFSNZ ............................................................................ 333INTCON2 レジスタ ............................................................ 70INTCON3 レジスタ ............................................................ 71INTCON レジスタ ........................................................ 69–71Inter-Integrated Circuit → I2C 参照
INTOSC の仕様 ....................................................... 384, 385IOCA レジスタ ................................................................... 86IOCB レジスタ ................................................................... 91IORLW ............................................................................. 334IORWF ............................................................................. 334IPR1 レジスタ ................................................................... 76IPR2 レジスタ ................................................................... 77IPR レジスタ ..................................................................... 76
LLATA レジスタ .................................................................. 86LATB レジスタ .................................................................. 91LATC レジスタ .................................................................. 95LFSR ................................................................................ 335
MMOVF .............................................................................. 335MOVFF ............................................................................ 336MOVLB ............................................................................ 336MOVLW ........................................................................... 337MOVSF ............................................................................ 355MOVSS ............................................................................ 356MOVWF ........................................................................... 337MPLAB ASM30 アセンブラ、リンカ、ライブラリアン .. 362MPLAB PM3 デバイス プログラマ .................................. 364MPLAB REAL ICE インサーキット エミュレータ
システム .................................................................. 363MPLAB SIM ソフトウェア シミュレータ ........................ 363MPLAB 統合開発環境ソフトウェア ................................. 361MPLINK オブジェクト リンカ /MPLIB オブジェクト
ライブラリアン ....................................................... 362MSSP
ACK パルス ...................................................... 152, 153I2C モード→「I2C モード」参照
SPI モード→「SPI モード」参照
SSPBUF レジスタ ................................................... 144SSPSR レジスタ ..................................................... 144モジュールの概要 .................................................... 139
MULLW ............................................................................ 338MULWF ............................................................................ 338
DS41350D_JP - p. 410 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
NNEGF ............................................................................... 339NOP ................................................................................. 339
OOSCCON レジスタ ...................................................... 20, 21OSCTUNE レジスタ .......................................................... 22
PP1A/P1B/P1C/P1D →「拡張キャプチャ / コンペア /PWM
(ECCP)」参照
PIE1 レジスタ .................................................................... 74PIE2 レジスタ .................................................................... 75PIE レジスタ ...................................................................... 74PIR1 レジスタ .................................................................... 72PIR2 レジスタ .................................................................... 73PIR レジスタ ...................................................................... 72POP ................................................................................. 340PORTA
LATA レジスタ ........................................................... 83PORTA レジスタ ....................................................... 83TRISA レジスタ ......................................................... 83関連するレジスタ ...................................................... 88仕様 .......................................................................... 385
PORTA レジスタ ............................................................... 85PORTB
LATB レジスタ ........................................................... 89PORTB レジスタ ....................................................... 89TRISB レジスタ ......................................................... 89関連するレジスタ ...................................................... 93
PORTB レジスタ ......................................................... 90, 94PORTC
LATC レジスタ .......................................................... 94PORTC レジスタ ....................................................... 94RC3/SCK/SCL ピン ................................................. 153TRISC レジスタ ......................................................... 94関連するレジスタ ...................................................... 97仕様 .......................................................................... 385
POR →「パワーオン リセット」参照
PRI_IDLE モード ............................................................. 240PRI_RUN モード .............................................................. 238PSTRCON レジスタ ........................................................ 134PUSH ............................................................................... 340PUSHL ............................................................................. 356PUSH および POP 命令 ..................................................... 31PWM (ECCP モジュール )
ステアリングの同期 ................................................. 136電源管理モードにおける動作 .................................. 137パルス ステアリング ................................................ 134フェイルセーフ クロックモニタと ECCP ............... 137リセットの影響 ........................................................ 137
PWM1CON レジスタ ....................................................... 133PWM モード→「拡張キャプチャ / コンペア /PWM」
参照 .......................................................................... 121
RRAM →「データメモリ」参照
RC_IDLE モード .............................................................. 241RC_RUN モード .............................................................. 238RCALL ............................................................................. 341RCON レジスタ ......................................................... 78, 280
初期化時のビット状態 ............................................. 286RCREG ............................................................................ 190RCSTA レジスタ .............................................................. 193RECON0 ( リファレンス制御 0) レジスタ ....................... 249
RECON1 ( リファレンス制御 1) レジスタ ...................... 250RECON2 ( リファレンス制御 2) レジスタ ...................... 250RESET ............................................................................. 341RETFIE ............................................................................ 342RETLW ............................................................................ 342RETURN .......................................................................... 343RLCF ............................................................................... 343RLNCF ............................................................................. 344RRCF ............................................................................... 344RRNCF ............................................................................ 345
SSCK ................................................................................. 139SDI ................................................................................... 139SDO ................................................................................. 139SEC_IDLE モード ............................................................ 240SEC_RUN モード ............................................................ 238SETF ............................................................................... 345SLEEP ............................................................................. 346SLRCON レジスタ .......................................................... 100SPBRG ............................................................................ 195SPBRGH ......................................................................... 195SPI モード
代表的なマスタ / スレーブ接続 ............................... 143SPI モード (MSSP)
SPI I/O の有効化 ...................................................... 143SPI クロック ........................................................... 144関連するレジスタ .................................................... 147シリアルクロック .................................................... 139シリアルデータ出力 ................................................ 139シリアルデータ入力 ................................................ 139スレーブ選択 ........................................................... 139スレーブ選択の同期 ................................................ 145スレーブモード ....................................................... 145代表的な接続 ........................................................... 143電力管理モードにおける動作 .................................. 147動作 ......................................................................... 142バスモード互換性 .................................................... 147マスタモード ........................................................... 144リセットの影響 ....................................................... 147
SRCON0 レジスタ .......................................................... 244SRCON1 レジスタ .......................................................... 245SR ラッチ ........................................................................ 243
関連レジスタ ........................................................... 245SS .................................................................................... 139SSP
代表的な SPI マスタ / スレーブ接続 ....................... 143SSPADD レジスタ ........................................................... 159SSPCON1 レジスタ ................................................ 141, 150SSPCON2 レジスタ ........................................................ 151SSPMSK レジスタ .......................................................... 158SSPOV ............................................................................ 171SSPOV ステータスフラグ ............................................... 171SSPSTAT レジスタ ................................................. 140, 149
R/W ビット ...................................................... 152, 153STKPTR レジスタ ............................................................. 31SUBFSR .......................................................................... 357SUBFWB ......................................................................... 346SUBLW ............................................................................ 347SUBULNK ........................................................................ 357SUBWF ............................................................................ 347SUBWFB ......................................................................... 348SWAPF ............................................................................ 348
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 411
PIC18F/LF1XK50
TT0CON レジスタ .............................................................. 101T1CON レジスタ .............................................................. 105T2CON レジスタ .............................................................. 111T3CON レジスタ .............................................................. 113TBLRD ............................................................................. 349TBLWT ............................................................................. 350Timer0 .............................................................................. 101
16 ビットモードにおける読み書き .......................... 102オーバーフロー割り込み ......................................... 103関連するレジスタ .................................................... 103仕様 .......................................................................... 388ソースエッジ選択 (T0SE ビット ) ........................... 102ソース選択 (T0CS ビット ) ...................................... 102動作 .......................................................................... 102プリスケーラ ........................................................... 103プリスケーラ選択 (T0PS2:T0PS0 ビット ) ............. 103プリスケーラの割り当て (PSA ビット ) .................. 103プリスケーラ割り当ての切り換え ........................... 103プリスケーラ→「プリスケーラ、Timer0」参照
Timer1 .............................................................................. 10516 ビット読み書きモード ........................................ 107CCP 特殊イベントトリガによるリセット ............... 108TMR1H レジスタ ..................................................... 105TMR1L レジスタ ...................................................... 105オーバーフロー割り込み ......................................... 105オシレータ ....................................................... 105, 107オシレータのレイアウト上の考慮事項 .................... 108関連するレジスタ .................................................... 110仕様 .......................................................................... 388動作 .......................................................................... 106リアルタイム クロックとしての使用法 ................... 109割り込み ................................................................... 108
Timer2 .............................................................................. 111関連するレジスタ .................................................... 112出力 .......................................................................... 112動作 .......................................................................... 111割り込み ................................................................... 112
Timer3 .............................................................................. 11316 ビット読み書きモード ........................................ 115TMR3H レジスタ ..................................................... 113TMR3L レジスタ ...................................................... 113オーバーフロー割り込み ................................. 113, 115オシレータ ....................................................... 113, 115関連するレジスタ .................................................... 116動作 .......................................................................... 114特殊イベントトリガ (CCP) ...................................... 116
Top-of-Stack へのアクセス ................................................ 30TRISA レジスタ ................................................................. 85TRISB レジスタ ........................................................... 90, 94TSTFSZ ............................................................................ 351TXREG ............................................................................. 185TXSTA レジスタ .............................................................. 192
BRGH ビット ........................................................... 195
UUniversal Serial Bus
RAM ......................................................................... 260メモリマップ ................................................... 260
UFRMH:UFRML レジスタ ....................................... 260アイパターン テスト イネーブル ............................. 257アドレス レジスタ (UADDR) ................................... 260エニュメレーション ................................................. 278エンドポイント制御 ................................................. 259オシレータの要件 .................................................... 276
階層型フレームワーク ............................................. 277概要 ................................................................. 253, 277関連レジスタ ........................................................... 276クラス仕様とドライバ ............................................. 278ステータスと制御 .................................................... 254速度 ......................................................................... 278外付けプルアップ抵抗 ............................................. 257ディスクリプタ ....................................................... 278電源 ......................................................................... 277電源モード ............................................................... 273
セルフパワー主体のデュアルパワー ............... 274セルフパワーのみ ............................................ 273バスパワーのみ ............................................... 273
転送の種類 ............................................................... 277内部トランシーバ .................................................... 255内部プルアップ抵抗 ................................................ 257バッファ ディスクリプタ ........................................ 261
BDnSTAT レジスタ (CPU モード ) .................. 262BDnSTAT レジスタ (SIE モード ) ................... 264アドレスのチェック ........................................ 264オーナーシップ ............................................... 261各バッファリング モードにおける割り当て ... 266ステータスと設定 ............................................ 261バイトカウント ............................................... 264ピンポン バッファリング ................................ 265メモリマップ ................................................... 265例 ..................................................................... 261レジスタ一覧 ................................................... 266
バッファ ディスクリプタ テーブル ......................... 261ピンポンバッファの設定 ......................................... 257ファームウェアとドライバ ..................................... 276フレーム .................................................................. 277フレーム番号レジスタ ............................................. 260割り込み .................................................................. 267
USB トランザクション .................................... 267USART
同期マスタモード
タイミング チャート、同期受信 ..................... 392タイミング チャート、同期送信 ..................... 392要件、同期受信 ............................................... 392要件、同期送信 ............................................... 392
USB RAMシリアル インターフェイス エンジン (SIE) .............. 35
USB モジュールの電気的仕様 ......................................... 378USB →「Universal Serial Bus」参照
VVREF →「ADC 基準電圧」を参照
WWCOL ...................................................... 169, 170, 171, 174WCOL ステータスフラグ ........................ 169, 170, 171, 174WDTCON レジスタ ......................................................... 305WPUA レジスタ ................................................................. 86WPUB レジスタ ................................................................. 91WWW アドレス ............................................................... 419WWW、オンライン サポート .............................................. 7
XXORLW ............................................................................ 351XORWF ........................................................................... 352
あアクセスバンク
インデックス付きリテラル オフセット モードの
マッピング ......................................................... 50
DS41350D_JP - p. 412 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
アセンブラ
MPASM アセンブラ ................................................. 362アナログ入力接続に関する注意事項 ............................... 233
い
インサーキット シリアル プログラミング (ICSP) .. 293, 309インサーキット デバッガ ................................................ 309インターネット アドレス ................................................ 419インデックス付きリテラル オフセット アドレッシング
と標準 PIC18 命令 ................................................... 358インデックス付きリテラル オフセット モード ............... 358
う
ウォッチドッグ タイマ (WDT) ................................. 293, 304関連レジスタ ........................................................... 305仕様 .......................................................................... 387制御レジスタ ........................................................... 305プログラミング時の注意事項 .................................. 304
え
エラッタ ............................................................................... 7
お
オシレータ スタートアップ タイマ (OST) ...................... 283オシレータ モジュール ...................................................... 15オシレータ起動タイマ (OST)
仕様 .......................................................................... 387オシレータ仕様 ................................................................ 383オシレータの切り換え
フェイルセーフ クロック モニタ ............................... 26オシレータの選択 ............................................................ 293オシレータのパラメータ ................................................. 384オシレータ、Timer1 ................................................ 105, 115オシレータ、Timer3 ........................................................ 113温度仕様 ........................................................................... 379お客様サポート ................................................................ 419お客様向け通知サービス ................................................. 419お客様向け変更通知サービス .......................................... 419
か改訂履歴 ........................................................................... 407開発サポート ................................................................... 361各種状態におけるタイムアウト ( 表 ) .............................. 283拡張 USART (EUSART: Enhanced Universal
Synchronous Asynchronous Receiver Transmitter) . 183拡張キャプチャ / コンペア /PWM (ECCP) ....................... 117
拡張 PWM モード .................................................... 121貫通電流 .......................................................... 132起動に関する考慮事項 ..................................... 128自動再起動 ....................................................... 131自動シャットダウン ........................................ 129出力間の関係
( アクティブ High とアクティブ Low) ..... 122出力関係図 ....................................................... 123ハーフブリッジ アプリケーション .................. 124ハーフブリッジ アプリケーションの例 ........... 132ハーフブリッジ モード .................................... 124フルブリッジ アプリケーション ..................... 125フルブリッジ モード ....................................... 125フルブリッジ出力モードにおける方向の変更 . 127プログラム可能なデッドバンド遅延 ............... 132
関連するレジスタ .................................................... 138出力とコンフィグレーション .................................. 118仕様 .......................................................................... 389
拡張命令セットADDFSR .................................................................. 354ADDULNK ............................................................... 354CALLW .................................................................... 355MOVSF .................................................................... 355MOVSS .................................................................... 356PUSHL ..................................................................... 356SUBFSR .................................................................. 357SUBULNK ................................................................ 357構文 ......................................................................... 353使用に関する注意事項 ............................................. 358と MPLAB ツールの使用 ......................................... 360
間接アドレッシング .......................................................... 47貫通電流 .......................................................................... 132
き
キャプチャ (CCP モジュール ) ........................................ 119CCPRxH:CCPRxL レジスタ .................................... 119CCP のピン設定 ...................................................... 119Timer1/Timer3 モード選択 ...................................... 119ソフトウェア割り込み ............................................. 119プリスケーラ ........................................................... 119
キャプチャ / コンペア /PWM (CCP)CCP モードとタイマリソース ................................. 118キャプチャモード→「キャプチャ」参照
コンペアモード→「コンペア」参照
く
クロック源
外部モードHS ..................................................................... 17LP ...................................................................... 17XT ...................................................................... 17
関連するレジスタ ...................................................... 27
け
計算型 GOTO .................................................................... 32
こ高精度内部オシレータのパラメータ ............................... 385高速レジスタスタック ....................................................... 32コード保護機能 ............................................................... 293コンパレータ
応答時間 .................................................................. 228関連レジスタ ........................................................... 236スリープ時の動作 .................................................... 230動作 ......................................................................... 225リセットの影響 ....................................................... 230
コンパレータ モジュール ................................................ 225入力条件に対する C1 の出力状態 ........................... 228
コンパレータ電圧リファレンス (CVREF)応答時間 .................................................................. 228概要 ......................................................................... 247関連レジスタ ........................................................... 251スリープ時の動作 .................................................... 247リセットの影響 ............................................... 230, 247
コンパレータの仕様 ........................................................ 391コンフィグレーション ビット ......................................... 294コンフィグレーション レジスタの保護 ........................... 309コンペア (CCP モジュール ) ............................................ 120
CCPRx レジスタ ..................................................... 120Timer1/Timer3 モード選択 ...................................... 120ソフトウェア割り込み ............................................. 120特殊イベントトリガ ........................................ 116, 120ピン設定 .................................................................. 120
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 413
PIC18F/LF1XK50
さ
サンプルコード
16 x 16 符号付き乗算のルーチン ............................... 6616 x 16 符号なし乗算のルーチン ............................... 668 x 8 符号付き乗算のルーチン ................................... 658 x 8 符号なし乗算のルーチン ................................... 65A/D 変換 ................................................................... 216PORTA の初期化 ....................................................... 84PORTB の初期化 ....................................................... 89PORTC の初期化 ....................................................... 94SSPBUF (SSPSR) レジスタの読み込み .................. 142Timer1 リアルタイム クロックの実装 ..................... 109オフセット値を使用する計算型 GOTO ..................... 32間接アドレッシングによる RAM のクリア ................ 46キャプチャ プリスケーラの変更 .............................. 119高速レジスタスタック ............................................... 32ステータス、WREG、BSR レジスタの
RAM への保存 .................................................... 79データ EEPROM の読み出し ..................................... 63データ EEPROM への書き込み ................................. 63データ EEPROM リフレッシュ ルーチン .................. 64フラッシュ プログラムメモリ ワードの読み出し ..... 56フラッシュ プログラムメモリのロウ消去 ................. 57フラッシュ プログラムメモリへの書き込み ........ 59–60
し
ジェネラルコール アドレスのサポート ........................... 164式
USB トランシーバ消費電流の予測 .......................... 275シリアル ペリフェラル インターフェイス→「SPI モード」参
照
シリアルクロック、SCK ................................................. 139シリアルデータ出力 (SDO) .............................................. 139シリアルデータ入力 (SDI) ............................................... 139
すスタックフル / アンダーフロー リセット .......................... 32ステータス レジスタ .......................................................... 45スリープモード ................................................................ 239スレーブ選択 (SS) ........................................................... 139スレーブ選択の同期 ......................................................... 145
せ
絶対 大定格 .................................................................... 365全レジスタの初期化状態 .......................................... 287–291
た
タイミング チャート
A/D 変換 ................................................................... 390ACK シーケンス ....................................................... 174CLKOUT と I/O ........................................................ 385I2C スレーブモード (10 ビット受信、SEN = 0) ...... 156I2C スレーブモード (10 ビット受信、SEN = 1) ...... 163I2C スレーブモード (10 ビット送信 ) ....................... 157I2C スレーブモード (7 ビット受信、SEN = 0) ........ 154I2C スレーブモード (7 ビット受信、SEN = 1) ........ 162I2C スレーブモード (7 ビット送信 ) ......................... 155I2C スレーブモードのジェネラルコール アドレス シー
ケンス (7 または 10 ビットアドレス モード ) . 164I2C バス スタート / ストップビット ........................ 395I2C バスデータ ......................................................... 396I2C マスタモード (7 ビット受信 ) ............................ 173I2C マスタモード (7 ビットまたは 10 ビット送信 ) . 172PLL を有効にした場合の POR 後のタイムアウト
シーケンス (MCLR を VDD に接続 ) ................. 285
PWM 自動シャットダウン
自動再起動有効 ............................................... 131ファームウェア再起動 ..................................... 130
PWM 出力 ( アクティブ High) ................................. 122PWM 出力 ( アクティブ Low) .................................. 123PWM 方向切り換え ................................................. 127SPI スレーブモード (CKE = 0) ................................ 394SPI スレーブモード (CKE = 1) ................................ 394SPI マスタモード (CKE = 1、SMP = 1) .................. 393SPI モード ( スレーブモード、CKE = 0) ................. 146SPI モード ( スレーブモード、CKE = 1) ................. 146SPI モード ( マスタモード ) .................................... 144Timer0 と Timer1 の外部クロック ........................... 388USART 同期受信 ( マスタ / スレーブ ) .................... 392USART 同期送信 ( マスタ / スレーブ ) .................... 392アイドルモードからランモードへの
ウェイクアップ時の遷移タイミング ............... 240アイドルモードへの移行時の遷移タイミング ......... 240拡張キャプチャ / コンペア /PWM (ECCP) .............. 389クロック アービトレーションを伴う baud レート
ジェネレータ ................................................... 168クロック タイミング ............................................... 381クロック / 命令サイクル ............................................ 33クロック同期 ........................................................... 161コンパレータ出力 .................................................... 225
初のスタートビットのタイミング ....................... 169自動 baud レート計算 .............................................. 199受信または送信モードの I2C ストップ条件 ............. 174スタート条件実行中の SDA アービトレーションによる
BRG のリセット .............................................. 177スタート条件実行中のバスコリジョン (SCL = 0) ... 177スタート条件実行中のバスコリジョン (SDA のみ ) 176ストップ条件実行中のバスコリジョン ( 例 1) ......... 179ストップ条件実行中のバスコリジョン ( 例 2) ......... 179スリープからのウェイクアップ時の遷移 (HSPLL) . 239スリープ時の自動ウェイクアップ ビット (WUE) ... 201スリープモードへの移行時の遷移 ........................... 239スレーブの同期 ....................................................... 145送信時と ACK 送信時のバスコリジョン .................. 175立ち上がり時間が遅い場合 (MCLR を VDD に接続、VDD
立ち上がり時間 > TPWRT) ............................... 285通常動作時の自動ウェイクアップ ビット (WUE) ... 201デューティ サイクルがほぼ 100% の場合の
PWM の方向切り換え ...................................... 128同期受信 ( マスタモード、SREN) ........................... 206同期送信 .................................................................. 204同期送信 (TXEN を利用 ) ......................................... 204内部オシレータの切り換えタイミング ...................... 23ハーフブリッジ PWM 出力 .............................. 124, 132パワーアップ後のタイムアウト シーケンス
(MCLR を VDD に接続しない、例 1) ............... 284パワーアップ後のタイムアウト シーケンス
(MCLR を VDD に接続しない、例 2) ............... 284パワーアップ後のタイムアウト シーケンス
(MCLR を VDD に接続、
VDD の立ち上がり時間 < TPWRT) .................... 284非同期受信 ............................................................... 191非同期送信 ............................................................... 187非同期送信 ( 連続 ) .................................................. 187フェイルセーフ クロック モニタ (FSCM) ................. 27ブラウンアウト リセット (BOR) ............................. 386フルブリッジ PWM 出力 ......................................... 126ブレーク文字シーケンスの送信 .............................. 202リセット、WDT、OST、PWRT ............................. 386リピートスタート条件 ............................................. 170
DS41350D_JP - p. 414 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
リピートスタート条件実行中のバスコリジョン
( 例 1) ............................................................... 178リピートスタート条件実行中のバスコリジョン
( 例 2) ............................................................... 178タイミング チャートと仕様
A/D 変換の要件 ........................................................ 390PLL クロック ........................................................... 384
タイミング パラメータの記号 ......................................... 380タイミング要件
I2C バス スタート / ストップビット ........................ 396I2C バスデータ ......................................................... 397SPI モード ............................................................... 395
単電源 ICSP プログラミング ........................................... 309
ち
直接アドレッシング ........................................................... 47
て
低電圧 ICSP プログラミング→「単電源 ICSP プログラミン
グ」参照
データ EEPROMコード保護 ............................................................... 309
データ EEPROM メモリ .................................................... 61EEADR レジスタ ....................................................... 61EECON1 および EECON2 レジスタ ......................... 61書き込み ..................................................................... 63書き込みの検証 .......................................................... 63関連するレジスタ ...................................................... 64コード プロテクト時の動作 ....................................... 64誤書き込み防止 .......................................................... 64使用方法 ..................................................................... 64読み出し ..................................................................... 63
データ アドレッシング モード .......................................... 46インデックス付きリテラル オフセット ..................... 48
影響を受ける命令 .............................................. 48拡張命令セットが有効な場合のアドレッシング モード
の比較 ................................................................ 49含意およびリテラル ................................................... 46間接 ............................................................................ 46直接 ............................................................................ 46
データメモリ ..................................................................... 35PIC18F13K50/PIC18LF13K50 のマップ ................... 36PIC18F14K50/PIC18LF14K50 のマップ ................... 37USB RAM ................................................................... 35アクセスバンク .......................................................... 39と拡張命令セット ...................................................... 48特殊機能レジスタ ...................................................... 39バンク セレクト レジスタ (BSR) ............................... 35汎用レジスタ ............................................................. 39
テーブルへの読み書き ....................................................... 32テーブルポインタに対する操作 ( 表 ) ................................ 54デバイス間の違い ............................................................ 408デバイスの概要 .................................................................... 9
新しいコア機能 ............................................................ 9機能 (20 ピンデバイス ) ............................................. 11その他の特殊機能 ...................................................... 10ファミリに含まれる各製品の詳細 ............................. 10
デバイスリセット タイマ ................................................ 283PLL ロック タイムアウト ........................................ 283オシレータ スタートアップ タイマ (OST) .............. 283タイムアウト シーケンス ........................................ 283パワーアップ タイマ (PWRT) .................................. 283
電圧リファレンス
VR の安定化 ............................................................. 248固定電圧リファレンス (FVR) .................................. 248
電圧リファレンス (VR)仕様 ......................................................................... 391
電圧リファレンス→「コンパレータ電圧リファレンス
(CVREF)」参照
電気的仕様 ....................................................................... 365電源管理モード
と PWM 動作 ........................................................... 137電力管理モード ............................................................... 237
SLEEP 命令の複数の機能 ....................................... 238アイドル / スリープモードの終了 ........................... 241
WDT タイムアウトによる ............................... 241スタートアップ遅延を伴わない ...................... 242リセットによる ............................................... 242割り込みによる ............................................... 241
アイドルモード ....................................................... 239PRI_IDLE ........................................................ 240RC_IDLE ......................................................... 241SEC_IDLE ....................................................... 240
移行 ......................................................................... 237一覧表 ...................................................................... 237スリープモード ....................................................... 239選択 ......................................................................... 237と A/D 変換 .............................................................. 215と SPI の動作 ........................................................... 147ランモード ............................................................... 238
PRI_RUN ......................................................... 238RC_RUN .......................................................... 238SEC_RUN ....................................................... 238
と読者アンケート ............................................................... 420特殊イベントトリガ ........................................................ 215特殊イベントトリガ→「コンペア (ECCP モード )」参照
特殊機能レジスタ .............................................................. 39マップ ........................................................................ 40
な
内部 RC オシレータ
WDT での使用 ......................................................... 304内部オシレータ ブロック
INTOSC仕様 ......................................................... 384, 385
内部サンプリング スイッチ (RSS) インピーダンス ......... 221
は
ハードウェア乗算器 .......................................................... 65性能比較 .................................................................... 65動作 ........................................................................... 65はじめに .................................................................... 65
パッケージ情報 ............................................................... 401マーキング ............................................................... 401
パルス ステアリング ....................................................... 134パワーアップ タイマ (PWRT)
仕様 ......................................................................... 387パワーオン リセット (POR) ............................................ 281
タイムアウト シーケンス ........................................ 283パワーアップ タイマ (PWRT) ................................. 283
バンク セレクト レジスタ (BSR) ...................................... 35
ひ非同期モードのクロック精度 .......................................... 192標準 PIC 命令への影響 .................................................... 358標準命令 .......................................................................... 311ピンの説明
PIC18F1XK50/PIC18LF1XK50 .................................. 13
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 415
PIC18F/LF1XK50
ふ
ファームウェア命令 ......................................................... 311フェイルセーフ クロック モニタ ............................... 26, 293
フェイルセーフ検出 ................................................... 26フェイルセーフ状態の解除 ........................................ 27フェイルセーフ動作 ................................................... 26リセットまたはスリープからのウェイクアップ ....... 27
負荷条件 ........................................................................... 380ブラウンアウト リセット (BOR) ..................................... 282
検出 .......................................................................... 282仕様 .......................................................................... 387スリープモード時の無効化 ...................................... 282ソフトウェア制御による ......................................... 282タイミングと特性 .................................................... 386
フラッシュ プログラムメモリ ........................................... 51書き込み ..................................................................... 58
書き込みの検証 .................................................. 60誤書き込み防止 .................................................. 60予期せぬ中断 ..................................................... 60
書き込みシーケンス ................................................... 58関連するレジスタ ...................................................... 60コード保護中の動作 ................................................... 60消去 ............................................................................ 57消去シーケンス .......................................................... 57制御レジスタ ............................................................. 52
EECON1 および EECON2 ................................. 52TABLAT ( テーブルラッチ ) レジスタ ................ 54TBLPTR ( テーブルポインタ ) レジスタ ............ 54
テーブルポインタ
動作ごとの境界 .................................................. 55テーブルポインタの境界 ........................................... 54テーブル読み出し / 書き込み ..................................... 51読み出し ..................................................................... 55
プリスケーラ、Timer0 ..................................................... 103ブレークによるウェイクアップ ....................................... 200ブレーク文字 (12 ビット ) の送受信 ................................ 202プログラミング、デバイス命令 ....................................... 311プログラム カウンタ .......................................................... 30
PCLATH および PCLATU レジスタ ........................... 30PCL、PCH、PCU レジスタ ...................................... 30
プログラムの検証とコード保護 ....................................... 305関連レジスタ ........................................................... 307
プログラムメモリ
コード保護 ............................................................... 307と拡張命令セット ...................................................... 50マップとスタック ( 図 ) .............................................. 29命令 ............................................................................ 34
2 ワード ............................................................. 34リセットベクタ .......................................................... 29ルックアップ テーブル .............................................. 32割り込みベクタ .......................................................... 29
ブロック図
16 ビットモードの Timer0 ....................................... 1038 ビットモードの Timer0 ......................................... 102ADC ......................................................................... 211ADC の伝達関数 ....................................................... 222baud レート ジェネレータ ....................................... 167EUSART トランスミッタ ........................................ 183EUSART レシーバ ................................................... 184MSSP (I2C モード ) .................................................. 148MSSP (I2C マスタモード ) ....................................... 165MSSP (SPI モード ) ................................................. 139PIC18F1XK50/PIC18LF1XK50 .................................. 12PWM ( 拡張 ) ............................................................ 121Timer1 ...................................................................... 106
Timer1 (16 ビット読み書きモード ) ........................ 106Timer2 ..................................................................... 112Timer3 ..................................................................... 114Timer3 (16 ビット読み書きモード ) ........................ 115USB モジュールとオプション ................................. 253USB 割り込みロジック ............................................ 267アナログ入力モデル ........................................ 222, 233ウォッチドッグ タイマ ............................................ 304外部 POR 回路
(VDD 電源の立ち上がりが遅い場合 ) ............... 281外部 RC モード .......................................................... 18キャプチャモード動作 ............................................. 119クロック源 ................................................................. 16コンパレータ 1 ........................................................ 226コンパレータ 2 ........................................................ 227振動子の動作 ............................................................. 18水晶振動子による動作 ............................................... 17テーブル書き込み動作 ............................................... 52テーブル読み出し動作 ............................................... 51電圧リファレンス .................................................... 248電圧リファレンスの出力バッファの例 .................... 249内蔵リセット回路 .................................................... 279汎用 I/O ポート .......................................................... 83フェイルセーフ クロック モニタ (FSCM) ................. 26フラッシュ プログラムメモリからの読み出し .......... 55フラッシュ プログラムメモリに対する
テーブル書き込み .............................................. 58割り込みロジック ...................................................... 68
ま
マイクロチップ社のインターネット ウェブサイト ......... 419マスタクリア (MCLR) ...................................................... 281マスタ同期シリアルポート (MSSP) → MSSP 参照
め命令サイクル ..................................................................... 33
クロック方式 ............................................................. 33命令セット ....................................................................... 311
ADDLW .................................................................... 317ADDWF .................................................................... 317ADDWF ( インデックス付きリテラル オフセット
モード ) ............................................................ 359ADDWFC ................................................................. 318ANDLW .................................................................... 318ANDWF .................................................................... 319BC ............................................................................ 319BCF ......................................................................... 320BN ............................................................................ 320BNC ......................................................................... 321BNN ......................................................................... 321BNOV ...................................................................... 322BNZ ......................................................................... 322BOV ......................................................................... 325BRA ......................................................................... 323BSF .......................................................................... 323BSF ( インデックス付きリテラル オフセット
モード ) ............................................................ 359BTFSC ..................................................................... 324BTFSS ..................................................................... 324BTG ......................................................................... 325BZ ............................................................................ 326CALL ........................................................................ 326CLRF ....................................................................... 327CLRWDT ................................................................. 327COMF ...................................................................... 328CPFSEQ .................................................................. 328
DS41350D_JP - p. 416 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
CPFSGT .................................................................. 329CPFSLT ................................................................... 329DAW ......................................................................... 330DCFSNZ .................................................................. 331DECF ....................................................................... 330DECFSZ ................................................................... 331GOTO ...................................................................... 332INCF ......................................................................... 332INCFSZ .................................................................... 333INFSNZ .................................................................... 333IORLW ..................................................................... 334IORWF ..................................................................... 334LFSR ........................................................................ 335MOVF ....................................................................... 335MOVFF .................................................................... 336MOVLB .................................................................... 336MOVLW ................................................................... 337MOVWF ................................................................... 337MULLW .................................................................... 338MULWF .................................................................... 338NEGF ....................................................................... 339NOP ......................................................................... 339POP ......................................................................... 340PUSH ....................................................................... 340RCALL ..................................................................... 341RESET ..................................................................... 341RETFIE .................................................................... 342RETLW .................................................................... 342RETURN .................................................................. 343RLCF ........................................................................ 343RLNCF ..................................................................... 344RRCF ....................................................................... 344RRNCF .................................................................... 345SETF ........................................................................ 345SETF ( インデックス付きリテラル オフセット
モード ) ............................................................ 359SLEEP ..................................................................... 346SUBFWB .................................................................. 346SUBLW .................................................................... 347SUBWF .................................................................... 347SUBWFB .................................................................. 348SWAPF .................................................................... 348TBLRD ..................................................................... 349TBLWT ..................................................................... 350TSTFSZ ................................................................... 351XORLW .................................................................... 351XORWF .................................................................... 352一般的な形式 ........................................................... 313オペコードのフィールドの説明 ............................... 312拡張命令セット ........................................................ 353
命令のフロー / パイプライン処理 ...................................... 33メモリ構成 ......................................................................... 29
データメモリ ............................................................. 35プログラムメモリ ...................................................... 29
り
リセット ................................................................... 279, 293オシレータ スタートアップ タイマ (OST) .............. 293パワーアップ タイマ (PWRT) .................................. 293パワーオン リセット (POR) .................................... 293ブラウンアウト リセット (BOR) ............................. 293
リターン スタックポインタ (STKPTR) ............................. 31リターンアドレス スタック ............................................... 30
れ
レジスタ
ADCON0 (ADC 制御 0) ............................................ 217ADCON1 (ADC 制御 1) ............................................ 218ADCON2 (ADC 制御 2) ............................................ 219ADRESH (ADC 変換結果 High) (ADFM = 0 の場合 ) 220ADRESH (ADC 変換結果 High) (ADFM = 1 の場合 ) 220ADRESL (ADC 変換結果 Low) (ADFM = 0 の場合 ) 220ADRESL (ADC 変換結果 Low) (ADFM = 1 の場合 ) 220ANSEL ( アナログ選択 1) .......................................... 98ANSEL ( ポートアナログ制御 ) ................................. 98ANSELH ( アナログ選択 2) ....................................... 99ANSELH ( ポートアナログ制御 ) ............................... 99BAUDCON (EUSART baud レート制御 ) ................ 194BDnSTAT ( バッファ ディスクリプタ n ステータス、
CPU モード ) ................................................... 263BDnSTAT ( バッファ ディスクリプタ n ステータス、
SIE モード ) ..................................................... 264CCP1CON
( 拡張キャプチャ / コンペア /PWM 制御 ) ....... 117CM1CON0 (C1 制御 ) .............................................. 231CM2CON0 (C2 制御 ) .............................................. 232CM2CON1 (C2 制御 ) .............................................. 235CONFIG1H ( コンフィグレーション 1 High) .. 295, 296CONFIG1L ( コンフィグレーション 1 Low) ............ 295CONFIG2H ( コンフィグレーション 2 High) .......... 298CONFIG2L ( コンフィグレーション 2 Low) ............ 297CONFIG3H ( コンフィグレーション 3 High) .......... 299CONFIG4L ( コンフィグレーション 4 Low) ............ 299CONFIG5H ( コンフィグレーション 5 High) .......... 300CONFIG5L ( コンフィグレーション 5 Low) ............ 300CONFIG6H ( コンフィグレーション 6 High) .......... 301CONFIG6L ( コンフィグレーション 6 Low) ............ 301CONFIG7H ( コンフィグレーション 7 High) .......... 302CONFIG7L ( コンフィグレーション 7 Low) ............ 302DEVID1 ( デバイス ID 1) ......................................... 303DEVID2 ( デバイス ID 2) ......................................... 303ECCPAS ( 拡張 CCP 自動シャットダウン制御 ) .... 129EECON1 ( データ EEPROM 制御 1) ................... 53, 62INTCON ( 割り込み制御 ) .......................................... 69INTCON2 ( 割り込み制御 2) ...................................... 70INTCON3 ( 割り込み制御 3) ...................................... 71IOCA (PORTA 状態変化割り込み ) ........................... 86IOCB (PORTB 状態変化割り込み ) ........................... 91IPR1 ( 周辺割り込み優先度 1) ................................... 76IPR2 ( 周辺割り込み優先度 2) ................................... 77LATA (PORTA データラッチ ) .................................. 86LATB (PORTB データラッチ ) .................................. 91LATC (PORTC データラッチ ) .................................. 95OSCCON ( オシレータ制御 ) .............................. 20, 21OSCTUNE ( オシレータ調整 ) ................................... 22PIE1 ( 周辺割り込みイネーブル 1) ............................ 74PIE2 ( 周辺割り込みイネーブル 2) ............................ 75PIR1 ( 周辺割り込み要求 1) ....................................... 72PIR2 ( 周辺割り込み要求 2) ....................................... 73PORTA ...................................................................... 85PORTB ................................................................ 90, 94PSTRCON ( パルス ステアリング制御 ) ................. 134PWM1CON ( 拡張 PWM 制御 ) ................................ 133RCON ( リセット制御 ) ..................................... 78, 280RCREG レジスタ .................................................... 199RCSTA ( 受信状態 / 制御 ) ....................................... 193REFCON0 ............................................................... 249REFCON1 ............................................................... 250REFCON2 ............................................................... 250
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 417
PIC18F/LF1XK50
SLRCON ( ポートのスルーレート制御 ) .................. 100SRCON0 (SR ラッチ制御 0) .................................... 244SRCON1 (SR ラッチ制御 1) .................................... 245SSPADD (MSSP アドレス /baud レート、
SPI モード ) ..................................................... 159SSPCON1 (MSSP 制御 1、I2C モード ) .................. 150SSPCON1 (MSSP 制御 1、SPI モード ) ................. 141SSPCON2 (MSSP 制御 2、I2C モード ) .................. 151SSPMSK (SSP マスク ) ........................................... 158SSPSTAT (MSSP ステータス、SPI モード ) .. 140, 149STATUS ..................................................................... 45STKPTR ( スタックポインタ ) ................................... 31T0CON (Timer0 制御 ) ............................................. 101T1CON (Timer1 制御 ) ............................................. 105T2CON (Timer2 制御 ) ............................................. 111T3CON (Timer3 制御 ) ............................................. 113TRISA (PORTA 3 ステート ) ..................................... 85TRISB (PORTB 3 ステート ) ............................... 90, 94TXSTA ( 送信状態 / 制御 ) ........................................ 192UCFG (USB コンフィグレーション ) ...................... 256UCON (USB 制御 ) ................................................... 254UEIE (USB エラー割り込みイネーブル ) ................. 272UEIR (USB エラー割り込みステータス ) ................. 271UEPn (USB エンドポイント n 制御 ) ....................... 259UIE (USB 割り込みイネーブル ) .............................. 270UIR (USB 割り込みステータス ) .............................. 268USTAT (USB ステータス ) ....................................... 258WDTCON ( ウォッチドッグ タイマ制御 ) ............... 305WPUA (PORTA 弱プルアップ ) ................................. 86WPUB (PORTB 弱プルアップ ) ................................. 91
レジスタのリセット状態 .................................................. 286レジスタファイル .............................................................. 39レジスタファイルの要約 .................................................... 41
わ
割り込み ............................................................................. 67割り込み処理中のコンテキスト保存 .................................. 79割り込み要因 .................................................................... 293
ADC ......................................................................... 213INTn ピン ................................................................... 79PORTB、状態変化割り込み ...................................... 79TMR0 ......................................................................... 79TMR0 オーバーフロー ............................................. 103TMR1 オーバーフロー ............................................. 105TMR3 オーバーフロー ..................................... 113, 115キャプチャ完了 (CCP) ............................................. 119コンペア完了 (CCP) ................................................. 120状態変化割り込み (RB7:RB4) .............................. 83, 89
DS41350D_JP - p. 418 Preliminary 2010 Microchip Technology Inc.
PIC18F/LF1XK50
マイクロチップ社のウェブサイト
マイクロチップ社は、ウェブサイト (www.microchip.com) でオンラインサポートを提供しています。このウェブサイトを活用する事で、ファイルや情報を簡単に入手できます。ウェブサイトには以下の情報を掲載しています。
• 製品サポート – データシートとエラッタ、アプリケーション ノートとサンプル プログラム、設計リソース、ユーザガイドとハードウェア サポート文書、 新のソフトウェアと過去のソフトウェア
• 技術サポート – よく寄せられる質問 (FAQ)、技術サポート リクエスト、オンライン ディスカッション グループ、マイクロチップ社コンサルタント プログラム メンバーの一覧
• マイクロチップ社の事業 – 製品セレクタと注文のガイド、マイクロチップ社の 新プレスリリース、セミナーとイベントの一覧、マイクロチップ社の各営業所、販売代理店、工場の一覧
お客様向け変更通知サービス
マイクロチップ社のお客様向け通知サービスにて、常にお客様にマイクロチップ社製品の 新情報を提供いたします。この通知サービスを申し込まれたお客様には、特定の製品ファミリまたは開発ツールに関する変更、更新、改訂、エラッタが発表されるとただちにメールにてお知らせいたします。
登録するには、マイクロチップ社のウェブサイトwww.microchip.com にアクセスし、[Customer ChangeNotification] をクリックして登録手順に従ってください。
お客様サポート
マイクロチップ社製品のユーザは、以下の複数のルートでサポートが受けられます。
• 販売代理店
• 各地域の営業所
• フィールド アプリケーション エンジニア (FAE)
• 技術サポート
• 開発システム情報ライン
サポートが必要な場合、製品を購入した販売代理店またはフィールド アプリケーション エンジニア(FAE)にご連絡ください。各地域の営業所でもお客様へのサポートを提供しています。各営業所と所在地の一覧は、本書の巻末に記載してあります。
技術サポートは、ウェブサイト (http://support.microchip.com) にてお受けいただけます。
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 419
PIC18F/LF1XK50
読者アンケート
マイクロチップ社では、お客様に弊社製品を効果的にお使いいただくために、可能な限り 良の文書を提供するように努めています。文書の構成、明瞭さ、内容等、本文書に改善が必要な点がありましたら、FAX にて弊社のテクニカル パブリケーション マネージャ宛ににてご意見をお送りください。FAX 番号は +1-480-792-4150 です。
以下の欄に必要事項と本書に関するご意見をご記入の上、お送りください。
宛先 : テクニカル パブリケーション マネージャ
件名 : 読者アンケート回答
総送信ページ数 ________
送信者 : お名前
貴社名
住所
郵便番号 / 国名
電話番号 : (_______) _________ - _________
アプリケーション ( 任意 ):
返信要 Y N
デバイス : 文書番号 :
質問 :
FAX: (______) _________ - _________
DS41350D_JPPIC18F/LF1XK50
1. この文書で も良いと感じられたのはどの部分ですか。
2. この文書は、お客様のハードウェアとソフトウェアの開発に役立ちましたか。
3. この文書の構成は分かりやすいですか。分かりにくいと感じた場合、その理由をお書きください。
4. この文書の構成や内容を改善するために追加した方が良いと思われる内容がありましたらお知らせください。
5. この文書から削除しても全体的な利用価値に影響しないと思われる箇所があればお知らせください。
6. この文書に、不正確な情報や誤解を招くような表現がありますか。もしあれば、記載ページと該当箇所をお知らせください。
7. この文書を改善するための具体的なご提案がありましたらお知らせください。
DS41350D_JP - p. 420 Preliminary 2010 Microchip Technology Inc.
2010 Microchip Technology Inc. Preliminary DS41350D_JP - p. 421
PIC18F/LF1XK50
製品識別システム
ご注文または製品の価格や納期に関するお問い合わせは、弊社または販売代理店までお問い合わせください。
PART NO. X /XX XXX
PatternPackageTemperatureRange
Device
Device: PIC18F13K50(1), PIC18F14K50(1),PIC18LF13K50(1), PIC18LF14K50
Packaging Option: Blank = Standard packaging (tube or tray)T = Tape and Reel(1)
Temperature Range:
E = -40 C to +125 C (Extended)I = -40 C to +85 C (Industrial)
Package: P = PDIPSO = SOICSS = SSOPMQ = QFN
Pattern: QTP, SQTP, Code or Special Requirements (blank otherwise)
例 :
a) PIC18F14K50-E/P 301 = 拡張温度レンジ、PDIP パッケージ、拡張 VDD レンジ、QTP パターン #301
b) PIC18LF14K50-E/SO = 拡張温度レンジ、SOIC パッケージ
c) PIC18LF14K50-E/P = 拡張温度レンジ、PDIP パッケージ
d) PIC18LF14K50-E/MQ = 拡張温度レンジ、QFN パッケージ
e) PIC18F14K50-I/P = 工業用温度レンジ、PDIP パッケージ
Note 1: テープ & リールは、工業用温度レンジのML、MV、PT、SO、SS パッケージのみ対応しています。
X
PackagingOption
DS41350D_JP - p. 422 Preliminary 2010 Microchip Technology Inc.
北米地域本社2355 West Chandler Blvd.Chandler, AZ 85224-6199Tel: 480-792-7200 Fax: 480-792-7277技術サポート : http://support.microchip.comURL: www.microchip.com
アトランタDuluth, GA Tel: 678-957-9614 Fax: 678-957-1455
ボストンWestborough, MATel: 774-760-0087 Fax: 774-760-0088
シカゴItasca, ILTel: 630-285-0071 Fax: 630-285-0075
クリーブランドIndependence, OHTel: 216-447-0464Fax: 216-447-0643
ダラスAddison, TXTel: 972-818-7423 Fax: 972-818-2924
デトロイトFarmington Hills, MITel: 248-538-2250Fax: 248-538-2260
ココモKokomo, INTel: 765-864-8360Fax: 765-864-8387
ロサンゼルスMission Viejo, CATel: 949-462-9523 Fax: 949-462-9608
サンタクララSanta Clara, CATel: 408-961-6444Fax: 408-961-6445
トロントMississauga, Ontario,CanadaTel: 905-673-0699 Fax: 905-673-6509
アジア / 太平洋アジア太平洋支社Suites 3707-14, 37th FloorTower 6, The GatewayHarbour City, KowloonHong KongTel: 852-2401-1200Fax: 852-2401-3431
オーストラリア - シドニー
Tel: 61-2-9868-6733Fax: 61-2-9868-6755
中国 - 北京
Tel: 86-10-8528-2100 Fax: 86-10-8528-2104
中国 - 成都
Tel: 86-28-8665-5511Fax: 86-28-8665-7889
中国 - 重慶
Tel: 86-23-8980-9588Fax: 86-23-8980-9500
中国 - 香港 SARTel: 852-2401-1200 Fax: 852-2401-3431
中国 - 南京
Tel: 86-25-8473-2460Fax: 86-25-8473-2470
中国 - 青島
Tel: 86-532-8502-7355Fax: 86-532-8502-7205
中国 - 上海
Tel: 86-21-5407-5533 Fax: 86-21-5407-5066
中国 - 瀋陽
Tel: 86-24-2334-2829Fax: 86-24-2334-2393
中国 - 深圳
Tel: 86-755-8203-2660 Fax: 86-755-8203-1760
中国 - 武漢
Tel: 86-27-5980-5300Fax: 86-27-5980-5118
中国 - 西安
Tel: 86-29-8833-7252Fax: 86-29-8833-7256
中国 - 厦門
Tel: 86-592-2388138 Fax: 86-592-2388130
中国 - 珠海
Tel: 86-756-3210040 Fax: 86-756-3210049
アジア / 太平洋インド - バンガロール
Tel: 91-80-3090-4444 Fax: 91-80-3090-4123
インド - ニューデリー
Tel: 91-11-4160-8631Fax: 91-11-4160-8632
インド - プネ
Tel: 91-20-2566-1512Fax: 91-20-2566-1513
日本 - 横浜
Tel: 81-45-471- 6166 Fax: 81-45-471-6122
韓国 - 大邱
Tel: 82-53-744-4301Fax: 82-53-744-4302
韓国 - ソウル
Tel: 82-2-554-7200Fax: 82-2-558-5932 または
82-2-558-5934
マレーシア - クアラルンプール
Tel: 60-3-6201-9857Fax: 60-3-6201-9859
マレーシア - ペナン
Tel: 60-4-227-8870Fax: 60-4-227-4068
フィリピン - マニラ
Tel: 63-2-634-9065Fax: 63-2-634-9069
シンガポールTel: 65-6334-8870Fax: 65-6334-8850
台湾 - 新竹
Tel: 886-3-6578-300Fax: 886-3-6578-370
台湾 - 高雄
Tel: 886-7-536-4818Fax: 886-7-536-4803
台湾 - 台北
Tel: 886-2-2500-6610 Fax: 886-2-2508-0102
タイ - バンコク
Tel: 66-2-694-1351Fax: 66-2-694-1350
ヨーロッパオーストリア - ヴェルス
Tel: 43-7242-2244-39Fax: 43-7242-2244-393
デンマーク - コペンハーゲン
Tel: 45-4450-2828 Fax: 45-4485-2829
フランス - パリ
Tel: 33-1-69-53-63-20 Fax: 33-1-69-30-90-79
ドイツ - ミュンヘン
Tel: 49-89-627-144-0 Fax: 49-89-627-144-44
イタリア - ミラノ Tel: 39-0331-742611 Fax: 39-0331-466781
オランダ - ドリューネン
Tel: 31-416-690399 Fax: 31-416-690340
スペイン - マドリッド
Tel: 34-91-708-08-90Fax: 34-91-708-08-91
イギリス - ウォーキンガム
Tel: 44-118-921-5869Fax: 44-118-921-5820
各国の営業所とサービス
01/05/10