Comments
Description
Transcript
PIC18F452の機能を理解する
[第 3 章] 高性能 16 ビット・コア・マイコンの全容 PIC18F452 の機能を理解する 今回メインで使用する 16 ビット・コアの PIC,PIC18F452 の機能を簡単に説明します.いろいろなモジ ュールがぎっしり内蔵されていて,使いこなすのは大変ですが,すべての機能を使うということはなかな かありません.最初のうちはどういう機能があるかということを一通り見ておいて,実際に使うときにPIC のデータ・シートなどと併せて読み返してみるのがよいでしょう. MCLR/VPP 1 40 RB7/PGD RA0/AN0 2 39 RB6/PGC RA1/AN1 3 38 RB5/PGM RA2/AN2/ VREF - 4 37 RB4 RA3/AN3/ VREF + 5 36 RB3/CCP2 RA4/T0/CKI 6 35 RB2/INT2 RA5/AN4/SS/LVDIN 7 34 RB1/INT1 RE0/RD/AN5 8 33 RB0/INT0 RE1/WR/AN6 9 32 VDD RE2/CS/AN7 10 31 VSS VDD 11 30 RD7/PSP7 VSS 12 29 RD6/PSP6 OSC1/CLKI 13 28 RD5/PSP5 OSC2/CLKO/RA6 14 27 RD4/PSP4 RC0/T1OSO/T1CKI 15 26 RC7/RX/DT RC1/T1OSI/CCP2 16 25 RC6/TX/CK RC2/CCP1 17 24 RC5/SDO RC3/SCK/SCL 18 23 RC4/SDI/SDA RD0/PSP0 19 22 RD3/PSP3 RD1/PSP1 20 21 RD2/PSP2 図 3-1(1) PIC18F452 のピン・レイアウト 18F452 は 14 ビット・コアの 16F877 とピン・コンパチブルなため,差し替えて使える場合が ある.ただし,プログラムはバイナリ・コード(HEXA ファイル)レベルでの互換性はない. 3-1 動作させるための基本部分 33 このアイコンは,章末に用語解説があります ● 概要 PIC18FXX2 は 1 ワードが 16 ビットの RISC 型 マイコン・チップです.PIC18F452 は,1 ワードが 14 ビ ットの PIC16F877 と同じピン配列で,置き換えも可能です.ただし,ワード長が違う,内蔵モジュールや レジスタ構成が拡張されているなどの理由のため,プログラムのバイナリ・コード には互換性がありま せん.プログラム・メモリのサイズはワード長換算で 16F877 の 2 倍あり,8 ビットのハードウェア乗算器 も内蔵しています(図 3-1). ここでは,PIC18F452 を中心に主な機能を一通り説明します. 3-1 動作させるための基本部分 ● 電源 動作可能な電源電圧は 2.0V ∼ 5.5V と広範囲です.電池で駆動させるのにも好都合です.ただし,電源電 圧を低くすると最高クロック周波数も低くなります. 通常,安定化した電源が必要ですが,安定化電源は三端子レギュレータICなどを用いて簡単に作れます. ● リセット パワー・オン・リセット _ (POR)回路が内蔵されているため,通常,リセット端子(MCLR )は 1 本の抵 抗器を通して(または直接)電源へ接続するだけで済みます.ただし,立ち上がりの遅い電源を使う場合は, 規定電圧に達してからリセットが解除されるように,図 3-2 のような遅延回路を付ける必要があります(あ る程度の時間の遅延回路はパワーアップ・タイマとして内蔵されている). また,ブラウン・アウト・リセット(BOR)回路が内蔵されていて,動作中に何らかの理由で電圧が異常 に下がった場合,自動的にリセットがかかります.これは,動作保証外の電圧で PIC の動作に異常が起き, 暴走するのを防ぐために役立ちます.この機能は,コンフィギュレーション・ワードにより使用の有無を 設定できます. ● ウォッチ・ドッグ・タイマ(WDT) プログラムが暴走して正常に動作していない場合,これを検出しリセットをかけるための機構です.プ ログラム中で規定時間以内の間隔でウォッチ・ドッグ・タイマ(WDT)をリセットする処理を入れておき, PIC D R R1 MCLR C R :40kΩ未満 R1:100Ω∼1kΩ 34 第 3 章 PIC18F452 の機能を理解する 図 3-2 外部パワー・オン・リセット回路 電源の立ち上がりが遅い場合に必要な外部リセット回路.電源 _ 投入時に R と C の充電回路で MCLR 端子が“H”レベルに立ち上 がるのを遅延させる.ダイオードは電源が切れたときに速やか にコンデンサを放電させるためのもの. 正常に動作している場合は WDT がタイムアップする前にリセットされるようにしておきます.異常が発 生して WDT にリセットがかからないと,WDT がタイムアップして PIC は強制的にリセットされます. WDT 用のクロックは独立した RC 発振器から供給されるため,システム・クロックが停止していても, WDT は働きます.また,18FXX2 は一部を除く 16 シリーズと違って,WDT 専用のポストスケーラをもっ ています. WDT のタイムアップ時間は WDT 用ポストスケーラの設定値で指定できますが,これはコンフィギュレ ーション・ワードで設定します.また,WDT の使用の有無は,コンフィギュレーション・ワードまたは WDTCON レジスタで設定できます. ● クロック 発振回路が内蔵されていて,発振タイプが XT,HS などのときはクロック端子(OSC1,OSC2)にクリス タル(水晶発振子)またはレゾネータ(セラミック発振子)とコンデンサを接続するだけで動作します. 接続できる発振子 の周波数は最高 40MHz です.また,内蔵の PLL(Phase Locked Loop)を有効にす ると,PIC 内部で周波数が 4 倍になります.ただし,この場合に接続できる発振子は最大 10MHz となり, このときのシステム・クロックは 40MHz になります.PIC の最高クロック周波数は電波の領域ですが,外 部発振子の周波数を低くできると周辺への EMI(Electromagnetic Interference :電磁波障害)の軽減が望 めます. クロック・タイプが EC の場合,クロック・ピン(OSC1)にクロック信号を直接入力することができます. 高精度クロック・モジュールをここに接続すると正確な時計が作れます.また,OSC2/CLIO/RA6 ピンか らは,OSC1 に入力されたクロックの 1/4 の周波数のクロックを取り出すことができます.なお,ECIO タ イプに設定すると,OSC2/CLIO/RA6 ピンは汎用の入出力ポートRA6 として使用できます(表3-1,図3-3). PIC を低速で動作させると消費電力が小さくなるため,作るものによってはあえてクロック周波数を低 くする場合もあります. 18FXX2 は本クロック(プライマリ・クロック)とは別にセカンダリ・クロックを用意して,切り替えて 使うこともできます.これは待機中にクロック周波数を低くして,消費電力を抑えるのに有効です. ● パワーダウン(スリープ)モード PIC にはパワーダウン・モードといって,PIC を休止(スリープ)状態にする機能があります.このモー ドのときはクロックが停止し,消費電力は極端に少なくなります.この状態は,次のイベントで解除され ます. _ ◆ MCLR 端子が“L”に設定されて,PIC にリセットがかかったととき ◆ ウォッチ・ドッグ・タイマがタイムアップしたとき ◆ 次のいずれかの割り込みが発生したとき s 外部割り込み(INT0,INT1,INT2) s RB 状態変化割り込み s ペリフェラル割り込み(CCP 割り込み,A-D 変換完了割り込みなど) ※TMR0 オーバフロー割り込みなど,一部の割り込みはスリープ・モードを解除するイベント にはなりません.また,設定状況によっては解除条件にならない割り込み要因もあります. 3-1 動作させるための基本部分 35 表 3-1 発振タイプ 18F452 の発振タイプと OSC2/CLKO/RA6 ピン(14)の用途の一覧表.RCIO または ECIO タイプのときは同ピンは汎用 I/O ポー ト RA6 として使用できる.発振タイプはコンフィギュレーション・ビットで設定する. 発振タイプ LP OSC2/CLKO/RA6ピン ローパワー・クリスタル(200kHz以下) OSC2 XT クリスタル/レゾネータ(4MHz以下) OSC2 HS ハイスピード・クリスタル/レゾネータ OSC2 HS+PLL ハイスピード・クリスタル/レゾネータ PLL使用(4倍) OSC2 RC RC発振 CLKO (クロック周波数/4 出力) RCIO RC発振(I/O) RA(汎用I/O) 6 EC 外部クロック CLKO (クロック周波数/4 出力) ECIO 外部クロック(I/O) RA(汎用I/O) 6 発振子による発振 PIC クリスタル,レゾネータ OSC1 OSC2 /CLKO/RA6 (a) LP,XT,HS,HS+PLL発振 RC による発振 PIC PIC OSC1 OSC1 OSC2 / CLKO /RA6 OSC2 /CLKO/ RA6 汎用I/Oポート RA6 発振周波数の 1/4のクロック出力 (b) RC 発振 (c) RCIO発振 PIC 外部発振 外部発振器 (オシレータ) OSC1 PIC 外部発振器 (オシレータ) OSC1 OSC2 / CLKO /RA6 発振周波数の 1/4のクロック出力 (d) EC発振 図 3-3 OSC2 /CLKO/ RA6 汎用I/Oポート RA6 (e) ECIO発振 クロック発振タイプ 18F452 で使えるクロック発振タイプ.このタイプはコンフィギュレーション・ビットで設定する. 36 第 3 章 PIC18F452 の機能を理解する 3-2 メモリ空間 ● プログラム・メモリ(ROM) プログラムを格納する EEPROM(フラッシュ ROM)です.18F452 には 32K バイト実装されていますが, 18F452 は 1 ワード(マシン・コードでの命令の最小ビット幅)が 16 ビットなので,16K ワードということに なります.ワード数で単純に比べると,16F877 の 2 倍の容量となります. この領域は通常は読み出し専用で書き換えることはありませんが,デバッガなどの特殊な用途ではプロ グラムから書き換えられることもあります. ● データ RAM 変数などを格納する書き換え可能なメモリです.この領域のことを PIC では GENERAL PURPOSE REGISTER FILE(汎用レジスタ・ファイル)と呼びます.RAM 領域は最大 256 バイトのバンクが複数集 まったものになっていて,変数をアクセスする場合は,バンクを切り替えながらアクセスしなければなり ません. しかし,C 言語を使う場合は連続で大きな領域を使う場合以外,とくに意識する必要はありません. ● スペシャル・ファンクション・レジスタ(SFR) 内蔵モジュールや PIC の動作などを設定するレジスタ類を,PIC では SPECIAL FUNCTION REGISTER(SFR)と呼びます.このレジスタはデータ RAM と同じメモリ空間にマッピングされていて,データ RAM と同じように読み書きができます.アドレスが違うだけと考えてください.こちらも,データ RAM と交互にアクセスする場合などはバンク切り替えが必要な場合がありますが,C 言語を使う場合は意識す る必要はありません. 本書で単にレジスタという場合は,この SPECIAL FUNCTION REGISTER(SFR)のことを指します (図 3-4). ● コンフィギュレーション・ワード(コンフィギュレーション・レジスタ) 個別にはコンフィギュレーション・ビットと呼ばれます. PLL の使用可否や LVP(低電圧プログラム)モードの使用の有無,コピー・プロテクトの設定やクロック の発振タイプなど,PIC が動作する前に決まっていなければならない設定が書き込まれます.コンフィギ ュレーション・ワードは,PIC プログラマでプログラムを書き込む際にプログラムと同時に書き込まれ, PIC が動作しているときには通常の方法では書き換えはできません.主なビットの説明は Appendix E を 参照してください. ● データ EEPROM 書き換えができる不揮発性(電源を切ってもデータが保持される)メモリが内蔵されています.ある手順 で書き込みできる状態に設定して,対象アドレスを指定し,そこに 1 バイトのデータを書き込むというよ うな操作が必要です.これはプログラムが暴走したときに,誤って EEPROM のデータが書き換えられな いようにするためです.C コンパイラにはライブラリ関数として,読み書きのための関数が用意されてい 3-2 メモリ空間 37 ることが多いため,それを使えばこの手順は意識する必要はありません. 読み書きは普通のメモリ・アクセスとは違い,アドレスを指定し,そこから 1 バイトずつデータを取り 出す,またはデータを書き込むというようなアクセス方法をとります. ● ハードウェア乗算器 18FXX2シリーズには,16シリーズにはないハードウェア乗算器が内蔵されています.これは8ビット× 8 ビットの乗算器で,符号なしの場合の乗算は 1 命令サイクルで実行できます.ソフトウェアで実行する場 合は 69 命令サイクル必要ということなので,いかに高速で演算できるかがわかります. FED WIZ-C で展開されたアセンブリ・コードをちょっと調べてみたところ,ちゃんと掛け算命令に展 開されていて,ハードウェア乗算器が使われていました.8 ビットより大きいビット数の演算は,ソフト ウェアとの組み合わせになりますが,すべてソフトウェアで実行するよりも高速で演算できます. アドレス FFFh FFEh FFDh FFCh FFBh FFAh FF9h FF8h FF7h FF6h FF5h FF4h FF3h FF2h FF1h FF0h FEFh FEEh FEDh FECh FEBh FEAh FE9h FE8h FE7h FE6h FE5h FE4h FE3h FE2h FE1h FE0h レジスタ名 TOSU TOSH TOSL STKPTR PCLATU PCLATH PCL TBLPTRU TBLPTRH TBLPTRL TABLAT PRODH PRODL INTCON INTCON2 INTCON3 INDF0 POSTINC0 POSTDEC0 PREINC0 PLUSW0 FSR0H FSR0L WREG INDF1 POSTINC1 POSTDEC1 PREINC1 PLUSW1 FSR1H FSR1L BSR アドレス レジスタ名 FDFh INDF2 FDEh POSTINC2 FDDh POSTDEC2 FDCh PREINC2 FDBh PLUSW2 FDAh FSR2H FD9h FSR2L FD8h STATUS FD7h TMR0H FD6h TMR0L FD5h T0CON FD4h ― FD3h OSCCON FD2h LVDCON FD1h WDTCON FD0h RCON FCFh TMR1H FCEh TMR1L FCDh T1CON FCCh TMR2 FCBh PR2 FCAh T2CON FC9h SSPBUF FC8h SSPADD FC7h SSPSTAT FC6h SSPCON1 FC5h SSPCON2 FC4h ADRESH FC3h ADRESL FC2h ADCON0 FC1h ADCON1 FC0h − アドレス レジスタ名 FBFh CCPR1H FBEh CCPR1L FBDh CCP1CON FBCh CCPR2H FBBh CCPR2L FBAh CCP2CON FB9h − FB8h − FB7h − FB6h − FB5h − FB4h − FB3h TMR3H FB2h TMR3L FB1h T3CON FB0h − FAFh SPBRG FAEh RCREG FADh TXREG FACh TXSTA FABh RCSTA FAAh − FA9h EEADR FA8h EEDATA FA7h EECON2 FA6h EECON1 FA5h − FA4h − FA3h − FA2h IPR2 FA1h PIR2 FA0h PIE2 アドレス レジスタ名 F9Fh IPR1 F9Eh PIR1 F9Dh PIE1 F9Ch − F9Bh − F9Ah − F99h − F98h − F97h − F96h TRISE F95h TRISD F94h TRISC F93h TRISB F92h TRISA F91h − F90h − F8Fh − F8Eh − F8Dh LATE F8Ch LATD F8Bh LATC F8Ah LATB F89h LATA F88h − F87h − F86h − F85h − F84h PORTE F83h PORTD F82h PORTC F81h PORTB F80h PORTA 図 3-4(1) スペシャル・ファンクション・レジスタ一覧 PIC18F452の全レジスタの一覧.CPUやペリフェラルの機能などを設定するためのもの. 16 シリーズと違い,上位アドレス(F80h ∼ FFFh)へマッピングされているが,設定によ っては下位アドレス(080h ∼ 0FFh)へマッピングすることもできる.アドレスについて は,C 言語を使う場合は意識する必要はない. 38 第 3 章 PIC18F452 の機能を理解する