?? hostepp.c
字號:
/**** A P P L I C A T I O N N O T E A V R 3 2 5 ************************
*
* Title: High-speed Interface to Host EPP Parallel Port
* Version: 1.0
* Last updated: 2001.12.20
* Target: All AVR Devices with 12 I/O pins or more
*
* Support E-mail: avr@atmel.com
*
* DESCRIPTION
* This Application Note describes a method for high-speed bidirectional data
* transfer between an AVR microcontroller and an off-the-shelf Intel x86
* desktop computer.
*
* This host program is constructed to talk to an AVR running AVREPP (over
* an EPP link).
*
* It functions more or less as a terminal program, passing keyboard data
* into the AVR, and displaying data from the AVR on the screen. The program
* exits if ESC (0x1b) is typed.
*
* This program expects the EPP to be at LPT1 (0x378); to change this, change
* PPORT below.
*
* This program was written for DOS Turbo-C 2.01
***************************************************************************/
#include <dos.h> /* inp, outp */
#include <conio.h> /* kbhit() et al */
#define PPORT 0x378 /* LPT1 */
#define EPPSTAT(_p) ((_p)+1) /* EPP/SPP status register */
#define EPPDATA(_p) ((_p)+4) /* EPP data register */
#define SPPCTL(_p) ((_p)+2) /* SPP Control Register */
/*
* status register bits
*/
#define EPPTIMEOUT 0x01
#define EPPBSY 0x80
#define EPPINTR 0x40
#define EPPINIT 0x04 /* 0bxxxx0100 */
#define ESC 0x1B /* use this to quit */
int main(int argc, char *argv[])
{
unsigned char c, r;
if (argc || argv) /* ARGSUSED */
;
outp(SPPCTL(PPORT), EPPINIT); /* FAMcK */
/* Forever (or at least until user types Esc): */
while (1)
{
/* Check keyboard side */
if (kbhit())
{
/* Something typed -- pass it through */
c = getch(); /* get what user typed */
if (c == ESC) /* way-out */
break;
outp(EPPDATA(PPORT), c); /* write to port */
}
/* Check EPP (Rx) side. The EPP peripheral (the AVR) indicates */
/* that data is ready via the INTR signal. */
r = inp(EPPSTAT(PPORT));
if ((r & EPPBSY) == 0) /* powered down? */
continue; /* ignore it */
if (r & EPPINTR) /* intr is request to read */
{
c = inp(EPPDATA(PPORT)); /* so do it */
r = inp(EPPSTAT(PPORT)); /* get the status register */
/* If we're following the protocol (reading only on EPPINTR) */
/* we should Never see a timeout. */
if (r & EPPTIMEOUT)
{
outp(EPPSTAT(PPORT), EPPTIMEOUT); /* clear it */
c = '@'; /* display '@' on timeout */
}
putch(c); /* display on the screen */
}
} /* end while(1) */
return(0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -