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

●PIC18F14K50のHIDプログラム(Enumerationその2)

前回の続きです。
PIC18F14K50のHIDプログラムで、USBホストコントローラから送られてくるSETUPトークンパケットを検出したあと、最初に
clrf UIR
を実行していることについての説明の続きです。

UIRはUSB関係の割り込みの状況を保持するレジスタです。
ビット毎に異なる要因の割り込みを記録保持します。
割り込み条件が成立したときにSIE(PIC内臓のUSBコントローラ)によってUIRのそのビットが1になります。
一度SIEによって1にされたビットは、プログラムでクリアするまでそのまま保持されます。

HIDプログラムで clrf UIR を実行しているのは、UIRレジスタのビット3(TRNIF)をクリアするためです。
というところまでが前回の説明でした。

ところで、HIDプログラムではUSBのための割り込みは使っていません。
割り込みを使っていない(割り込みをイネーブルにしていない)のにUIRのビットがONになるのか?
という疑問をもたれるかもしれません。

UIRのビット毎の割り込みに許可を与えるのはUIEレジスタです。

●UIEレジスタ


[出典]Microchip社PIC18F14K50DataSheet

The flag bits are still set by their interrupt conditions,allowing them to be polled and serviced without actually generating an interrupt.

と書いてあるところが、その疑問に対する答えです。
UIEのビットを1にすると、UIRの同じビットに関係付けられた割り込みが許可されます(初期状態では全ビットが0です)。

それでは、UIEのビットが0のままのときにはUIRはどうなるのか、ということについての説明をしているのが上の文章です。
(実際の割り込みは発生しなくても)UIRのビットはONになる、という意味のことが書いてあります。

PICの割り込みフラグは、USB以外の割り込みについても同様の動作をします。
割り込みイネーブルにしなくても(その場合には当然実際の割り込み動作は発生しませんが)割り込み要因が発生したことを知らせるためのフラグだけはONになります。

そこまでのところはご理解いただいたあと、それではUIRのビット3は一体どのような状態のときにセットされるのか、ということの説明に進みます。
前回([第646回])お見せしましたPIC18F14K50のDataSheetのUIRの説明では、UIRのビット3は

TRNIF:Transaction Complete Interrupt bit

と書いてあります。
そしてそのビットは

Processing of pending transaction is complete;read USTAT register for endpoint information

未実行だったトランザクションが完了した(実行された)ときに、1になる、と書いてあります。
さらに、その注記として(これは前回にも書いたことですが)

Clearing this bit will cause the USTAT FIFO to advance.

と書いてあります。
しかし、これだけでは何を言っているのかわけがわかりません。
そこでまたPIC18F14K50のDataSheetでUSTATについて見てみることに致します。
というつもりだったのですが、またまた時間がなくなってしまいました。
この続きは次回にすることにいたします。
2010.10.27upload

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