標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第640回]

●PIC18F14K50のHIDプログラム(その初期設定部分)

前回までのところで、PIC18F14K50でUSB通信プログラムを書くために必要なことがらの概略についてはおおよそ説明出来たと思います。
え?
よくわかりませんか?

うーん。
なかなかに説明するのも難しいのです。
実際のプログラムリストをお見せするなどして、補足していきたいと思います。

●USBプログラムのCONFIG設定

プログラムでは設定できないハードウェアのベーシックな部分については、プログラムの先頭で、CONFIGの設定をします。
PIC18FのCONFIGの書き方は、PIC16Fのときの書き方とかなり異なっています。
これが今回作成するPIC18F14K50のUSB(HID)サンプルプログラムの先頭の部分です。

	#include<p18f14k50.inc>
;cpuclock=48MHz 12MHz crystal
;
	CONFIG FOSC = HS,CPUDIV = NOCLKDIV,USBDIV = OFF,PCLKEN = ON,PLLEN = ON,WDTEN=OFF,LVP=OFF
;

[第502回]で説明しましたように、CONFIGの記載の仕方については、インクルードファイルを覗いてみるとわかります。
PICのインクルードファイルは、MPLABをダウンロードしたときにデフォルトではProgram Filesに作成されるMicrochipフォルダの中のMPASM Suitesフォルダにあります。
p18f14k50.incを読んでみます。中身はテキストですからメモ帳などでも開けます。
実はシステムクロック、USBクロックの設定については、[第505回]で説明をしています。
ただそこではPIC18F14K50.incの中身はオシレータの選択のところだけで、USBクロックの指定などについては示していませんでした。
今回はそのあたりも含めて見ていくことにいたします。

下はPIC18F14K50.incの一部です。
[第505回]での説明をあわせて読んでいただくと理解し易いと思います。

;==========================================================================
;
;   IMPORTANT: For the PIC18 devices, the __CONFIG directive has been
;              superseded by the CONFIG directive.  The following settings
;              are available for this device.
;
;   CPU System Clock Selection bit:
;     CPUDIV = NOCLKDIV    No CPU System Clock divide
;     CPUDIV = CLKDIV2     CPU System Clock divided by 2
;     CPUDIV = CLKDIV3     CPU System Clock divided by 3
;     CPUDIV = CLKDIV4     CPU System Clock divided by 4
;
;   USB Clock Selection bit:
;     USBDIV = OFF         USB Clock comes directly from the OSC1/OSC2 oscillator block; no divide
;     USBDIV = ON          USB clock comes from the OSC1/OSC2 divided by 2
;
;   Oscillator Selection bits:
;     FOSC = LP            LP oscillator
;     FOSC = XT            XT oscillator
;     FOSC = HS            HS oscillator
;     FOSC = ERCCLKOUT     External RC oscillator, CLKOUT function on OSC2
;     FOSC = ECCLKOUTH     EC, CLKOUT function on OSC2 (high)
;     FOSC = ECH           EC (high)
;     FOSC = ERC           External RC oscillator
;     FOSC = IRC           Internal RC oscillator
;     FOSC = IRCCLKOUT     Internal RC oscillator, CLKOUT function on OSC2
;     FOSC = ECCLKOUTM     EC, CLKOUT function on OSC2 (medium)
;     FOSC = ECM           EC (medium)
;     FOSC = ECCLKOUTL     EC, CLKOUT function on OSC2 (low)
;     FOSC = ECL           EC (low)
;
;   4 X PLL Enable bit:
;     PLLEN = OFF          PLL is under software control
;     PLLEN = ON           Oscillator multiplied by 4
;
;   Primary Clock Enable Bit:
;     PCLKEN = OFF         Primary clock is under software control
;     PCLKEN = ON          Primary clock enabled


USBクロックとして48MHzが必要で、それは外付けの12MHzクリスタルから供給します。
Oscllatorの項はFOSC=HSになります。
12MHzからPLLによって48MHzを得ますから、
PLLEN=ONになります。
今回はCPUクロックも48MHzクロックをそのまま使いますから、
CPUDIV=NOCLKDIVになります。
USBクロックも48MHzをそのまま使いますから、
USBDIV=OFFです。
OSC1、OSC2に外付けした12MHzクリスタルの発振によって得られるクロックがPrimary Clockで、もちろんそれを使いますから、
PCLKEN=ONです。

やっとひとつ大きな山(ND80ZVの製作)を超えたところで、ほっと一息ついています。
しばらくは少しペースをスローダウンして、少しずつ、ぼちぼち書いていくことにいたします。
2010.10.17upload

前へ
次へ
ホームページトップへ戻る