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

●コマンドデータの取得

前回はやっと 
movlw 08
movwf UCON
まで説明が済みました。

;connected to USB
looptop
	clrf UIR
	movlw 08
	movwf UCON
;
	call setupck

次は
call setupck
です。
setupckルーチンは[第646回]でお見せしていますが、だいぶ時間が経ってしまいましたので、下に再掲いたします。

setupck
	movlw 08
	movwf UCON;clear bit4,for SIE enbl	
	lfsr 0,200	
	btfsc INDF0,7
	goto ck_bd1
	lfsr 1,220
	goto setupck1
ck_bd1
	lfsr 0,204
	btfsc INDF0,7
	goto notsetup
	lfsr 1,228
setupck1
	movf INDF0,w
	andlw 3c
	sublw 34;PID="1101" SETUP
	bz setupck2
	call setbd0
	call setbd1
notsetup
	bcf STATUS,z
	return
;(1)"setup" received
setupck2
	movf POSTINC1,w
	movwf db0
	movf POSTINC1,w
	movwf db1
	movf POSTINC1,w
	movwf db2
	movf POSTINC1,w
	movwf db3
	movf POSTINC1,w;dummy db4
	movf POSTINC1,w;dummy db5
	movf POSTINC1,w
	movwf db6;send request data bytes
	call setbd0
	call setbd1		
	bsf STATUS,z
	return

ここでも
movlw 08
movwf UCON
を実行していますね。
冗長かもしれません。

ここでなにをやっているのかといいますと、EP0(OUT)のDATA0バッファの受信マーク、BD0(アドレス200)のビット7と、EP0(OUT)のDATA1バッファの受信マーク、BD1(アドレス204)のビット7をチェックしているのです。
BD0、BD1のメモリマップは[第639回]にあります。
それぞれのトップアドレスBDnSTATについては[第482回]でDataSheetを引用しています。
ですけれど、こちらもずいぶん時間がたってしまいましたから、もう一度お見せすることにいたします。
なお[第482回]で引用しているDataSheetの17.4.1.1Buffer Ownershipの文章は、BDnバッファの仕組みを説明しているところですから、再読されることをおすすめします。

●BDnSTAT

BDnSTATレジスタはビット7(UOWN)を1にするとSIEがアクセス権をもちます。通常はそのようにセットして、SIEがUSBホストコントローラからコマンドを受信するのを待ちます。
SIEがコマンド、データを受信すると、その受信したエンドポイントのBDnSTATのビット7を0にします。
BDnSTATのビット7が0になったときは、SIEがBDnバッファに受信したコマンド、データをセットしたことを示しています。
そのときのBDnSTATの内容は下記のようになっています。


[出典]Microchip社PIC18F14K50DataSheet

時間がなくなってしまいました。続きは次回にいたします。
2010.10.31upload

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