/* CPUボードとパソコンの通信プログラム: CPUボード用 内容 パソコンから数字2個 (2バイト) を受け取る 簡単な計算をする 計算結果2バイトをパソコンに送る */ #include <dos.h> #include "usblib.h" #include "iolib.h" #define MEM_SEG 0x8080 /* Segment for Memory */ #define MEM_OFS 0x0000 /* Offset for Memory */ #define IOBASE 0x8200 /* I/O Base Address */ #define BUFSIZE 64 unsigned char in[BUFSIZE]; unsigned char out[BUFSIZE]; /***** パソコンからデータを受け取る ****/ void receive(unsigned char *buf, unsigned int size) /* buf: 受け取ったデータを格納する配列 size: 受け取るデータのバイト数 */ { static struct USBUFCON ep_recv; ep_recv.buffer_pointer = buf; ep_recv.buffer_counter = size; ep_recv.xfr_done = 0; ep_recv.req_task = -1; systrap(RQ_SET_USBBUF | (EP_USR_BOUT << 8), (unsigned int)&ep_recv); systrap(RQ_OFF, -1); } /**** パソコンにデータを送る ****/ void send(unsigned char *buf, unsigned int size) /* buf: 送るデータを格納する配列 size: 送るデータのバイト数 */ { struct USBUFCON ep_send; ep_send.buffer_pointer = buf; ep_send.buffer_counter = size; ep_send.xfr_done = 0; ep_send.req_task = -1; systrap(RQ_SET_USBBUF | (EP_USR_BIN << 8), (unsigned int)&ep_send); systrap(RQ_OFF, -1); } void user_task() { int a, b, i; setup_ioreg(); for (i = 0; i < 6; i++) { outport8(IOBASE + i, 0); } outport8(IOBASE + 0x07, ~0); while(1) { LED_on(); /**** パソコンからデータを受け取る ****/ receive(in, 2); /* 配列inに2バイトのデータが入る */ /**** 計算する ****/ out[0] = in[0] + in[1]; out[1] = in[0] * in[1]; LED_off(); /**** パソコンにデータを送る ****/ send(out, 2); /**** パソコンにデータを送る ****/ } }