/*
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); /**** パソコンにデータを送る ****/
}
}