&size(24){&color(darkgreen){''AKI-USB''};};
#navi(H8USB)
''CONTENTS''
#contents
----
''LINKS''
-AKI-USB http://akizukidenshi.com/catalog/items2.php?q=USB&s=score&p=1&r=1&page=#K-00172
----

**サンプルソフトのソースを眺める [#u9e80310]
-サンプルソフト
#ref(USB.zip);

***main.c [#m48445c3]
-USBへの送信付近
 /*--------------------------------------------------*/
 /* ボタンが押された時にLCD,SCI,USBにメッセージを送る*/
 for(j=0;j<4;j++)
 {
     i = GetSW(j);
     if( ((sw[j]^1) & i) )                    /* sw = off->onで条件成立 */
     {
         SetLED(j,1);			/* LED押した瞬間点灯 */
         sprintf(buff,"sw%u",j+1);
         PrintSCI("%s\n",buff);
         write_buff(buff,strlen(buff)+1);	/* NULL(0x00)まで送信 */
         PrintLCD(buff);
     }
     else SetLED(j,0);
     sw[j] = i;
 }

-USBから受信付近
 /*--------------------------------------------------*/
 /* USBからデータを受信した場合、そのままHOSTへリダイレクトする  */
 if( get_inbufflen() )			/* 受信データあり? */
 {
     cnt = read_buff(buff,64);		/* データ取得(buffサイズは64byteまで) */
     PrintLCD("\f");			/* LCDクリア */
     PrintLCD(buff);			/* LCDへ表示 */
     PrintSCI(buff);			/* シリアル出力 */
     write_buff(buff,cnt);			/* USBへリダイレクト */
 }

-すなわち、USBとのやり取りは、以下の関数でやってる。
関数の内容はUSB.cにある。
 int write_buff(char *p, int size);
 int read_buff(char *p, int size);

***USB.c [#ud47146b]
-リングバッファの読み書き
--ソフト的なリングバッファの処理なので目新しさは無い
--リングバッファへ書き込み
 /*--------------------------------------------------------------*/
 /*送信バッファへ書き込み					*/
 /*char 	*p	バッファポインタ				*/
 /*int	size	書き込みサイズ				*/
 /*戻り値		書き込んだサイズ				*/
 /*--------------------------------------------------------------*/
 int write_buff(char *p,int size)
 {
 	int		i;
 	INTC.IER &= (-1^0x20);				/* IRQ5 Disable */
 	for(i=0;i<size;i++)
 	{
      	if( outlen >= USBBUFFLEN )	break;
     	outbuff[outpos%USBBUFFLEN] = *p;
     	outpos = (outpos + 1)%USBBUFFLEN;
     	outlen++;
         p++;
     }
 	INTC.IER |= 0x20;					/* IRQ5 Enable */
 	return(i);
 }

--リングバッファから読込み
 /*--------------------------------------------------------------*/
 /*受信バッファから読み込み					*/
 /*char	*p	バッファポインタ				*/
 /*int	size	バッファ最大サイズ				*/
 /*戻り値		読み込んだサイズ				*/
 /*--------------------------------------------------------------*/
 int read_buff(char *p,int size)
 {
 	int	i;
 	INTC.IER &= (-1^0x20);				/* IRQ5 Disable */
 	for(i=0;inlen>0;i++)
 	{
 		if( i >= size )	break;
 		p[i] = inbuff[ (USBBUFFLEN+inpos-inlen)%USBBUFFLEN ];
 		inlen--;
    	}
 	INTC.IER |= 0x20;					/* IRQ5 Enable */
 	return(i);
 }

**サンプルソフトのSnoopy結果 [#m51c7b32]
-スタートアップ
#ref(log-start.JPG)
-testと送信したところ(AKI-USBはエコーバックする)
#ref(log-test.JPG)


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS