CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

通信フロー割込み化

USBコネクタを接続した状態です

イメージ 3


基本的にUSBコントローラで何か処理すべきイベントが発生したらレジスタを読みに行って
それぞれの処理に分岐させます。
分岐処理の本体をusb_int()という関数にまとめ、ハード割込みで起動するようにしました

void far usb_int_tst(void)	/* USBN9603割込みハンドラ	*/
{
	static unsigned char x=0;

	_INT_ENTR();
	usb_int();		/* 通信フロー	*/
	led(x++);
	ei();
	outp(IPFW,0x24);	/* EOI command 	*/
	_INT_RET();
}

void main(void)
{
	int x;
	char str[32];
	
	di();
	devini();		/* 周辺初期化 	*/
	InitUSB();		/* USB初期化 	*/

	set_vect(0x24,usb_int_tst);	/*割込みベクタ設定	*/
	
	outp(IMKW,0xef);	/* INTR4 MASK解除	*/
	ei();
	
	while(1){
	};
}

USBN9603の割込み端子をモニタしてみると5ms間隔位で割り込みが発生してます

イメージ 2


1秒くらいこの状態が続いた後ホストからパイプ0を通して何か受信しますが
V53基板からはディスクリプタを返そうとしていないようで、何かおかしそうです

イメージ 1