This is a program for testing the 8255 interface on protocoltool. It implements a software emulation of the bidirectional mode 2 of a 8255 chip.

Dependencies:   mbed

Fork of parallel_port_tester by Jacques Pelletier

Committer:
jpelletier
Date:
Fri Jul 26 04:51:00 2013 +0000
Revision:
0:a5957f25b150
Child:
1:51bc46468482
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jpelletier 0:a5957f25b150 1 #include "mbed.h"
jpelletier 0:a5957f25b150 2
jpelletier 0:a5957f25b150 3 //#include <stdarg.h>
jpelletier 0:a5957f25b150 4 #include <stdio.h>
jpelletier 0:a5957f25b150 5 #include <stdlib.h>
jpelletier 0:a5957f25b150 6 #include <string.h>
jpelletier 0:a5957f25b150 7
jpelletier 0:a5957f25b150 8 #define PAR_NEGOTIATE_EXTENSIBILITY_LINK 0x80
jpelletier 0:a5957f25b150 9 #define PAR_NEGOTIATE_REQ_EPP_MODE 0x40
jpelletier 0:a5957f25b150 10 #define PAR_NEGOTIATE_REQ_ECP_MODE 0x10
jpelletier 0:a5957f25b150 11 #define PAR_NEGOTIATE_REQ_ECP_RLE_MODE 0x30
jpelletier 0:a5957f25b150 12 #define PAR_NEGOTIATE_REQ_DEV_ID_NIBBLE_MODE 0x04
jpelletier 0:a5957f25b150 13 #define PAR_NEGOTIATE_REQ_DEV_ID_BYTE_MODE 0x05
jpelletier 0:a5957f25b150 14 #define PAR_NEGOTIATE_REQ_DEV_ID_ECP_MODE 0x14
jpelletier 0:a5957f25b150 15 #define PAR_NEGOTIATE_REQ_DEV_ID_ECP_RLE_MODE 0x34
jpelletier 0:a5957f25b150 16 #define PAR_NEGOTIATE_NIBBLE_MODE 0x00
jpelletier 0:a5957f25b150 17 #define PAR_NEGOTIATE_BYTE_MODE 0x01
jpelletier 0:a5957f25b150 18
jpelletier 0:a5957f25b150 19 /*
jpelletier 0:a5957f25b150 20 Instructions for use: connect the mbed to a parallel port using these connexions.
jpelletier 0:a5957f25b150 21 use a terminal program to connect via USB to the mbed side.
jpelletier 0:a5957f25b150 22
jpelletier 0:a5957f25b150 23 This program uses CR to rewrite over the status previously printed. Setup the terminal
jpelletier 0:a5957f25b150 24 program so that CR = CR without line feed.
jpelletier 0:a5957f25b150 25
jpelletier 0:a5957f25b150 26 15 nError -> p9
jpelletier 0:a5957f25b150 27 13 Select -> p10
jpelletier 0:a5957f25b150 28 12 PE -> p11
jpelletier 0:a5957f25b150 29 11 Busy -> p12
jpelletier 0:a5957f25b150 30 10 nAck -> p13
jpelletier 0:a5957f25b150 31
jpelletier 0:a5957f25b150 32 1 nStrobe -> p14
jpelletier 0:a5957f25b150 33 14 nAutoFeed -> p15
jpelletier 0:a5957f25b150 34 16 nInit -> p16
jpelletier 0:a5957f25b150 35 17 nSelectIn -> p17
jpelletier 0:a5957f25b150 36 */
jpelletier 0:a5957f25b150 37
jpelletier 0:a5957f25b150 38 DigitalOut nError(p9);
jpelletier 0:a5957f25b150 39 DigitalOut Select(p10);
jpelletier 0:a5957f25b150 40 DigitalOut PaperOut(p11);
jpelletier 0:a5957f25b150 41 DigitalOut Busy(p12);
jpelletier 0:a5957f25b150 42 DigitalOut nAck(p13);
jpelletier 0:a5957f25b150 43
jpelletier 0:a5957f25b150 44 DigitalIn nStrobe(p14);
jpelletier 0:a5957f25b150 45 DigitalIn nAutoFeed(p15);
jpelletier 0:a5957f25b150 46 DigitalIn nInit(p16);
jpelletier 0:a5957f25b150 47 DigitalIn nSelectIn(p17);
jpelletier 0:a5957f25b150 48
jpelletier 0:a5957f25b150 49 /*
jpelletier 0:a5957f25b150 50 D0 p30 p0.4
jpelletier 0:a5957f25b150 51 D1 p29 p0.5
jpelletier 0:a5957f25b150 52 D2 p8 p0.6
jpelletier 0:a5957f25b150 53 D3 p7 p0.7
jpelletier 0:a5957f25b150 54 D4 p6 p0.8
jpelletier 0:a5957f25b150 55 D5 p5 p0.9
jpelletier 0:a5957f25b150 56 D6 p28 p0.10
jpelletier 0:a5957f25b150 57 D7 p27 p0.11
jpelletier 0:a5957f25b150 58 */
jpelletier 0:a5957f25b150 59 BusInOut PtrData(p30,p29,p8,p7,p6,p5,p28,p27);
jpelletier 0:a5957f25b150 60
jpelletier 0:a5957f25b150 61 #define __DOUTBUFSIZE 256
jpelletier 0:a5957f25b150 62 #define __DINBUFSIZE 256
jpelletier 0:a5957f25b150 63 char __outstr[__DOUTBUFSIZE];
jpelletier 0:a5957f25b150 64 char __instr[__DINBUFSIZE];
jpelletier 0:a5957f25b150 65
jpelletier 0:a5957f25b150 66 Serial pc(USBTX, USBRX); // tx, rx
jpelletier 0:a5957f25b150 67
jpelletier 0:a5957f25b150 68 int main() {
jpelletier 0:a5957f25b150 69
jpelletier 0:a5957f25b150 70 char key;
jpelletier 0:a5957f25b150 71 bool PortIsInput = false;
jpelletier 0:a5957f25b150 72
jpelletier 0:a5957f25b150 73 PtrData.input();
jpelletier 0:a5957f25b150 74
jpelletier 0:a5957f25b150 75 pc.printf("Parallel port tester on mbed\r\n\n");
jpelletier 0:a5957f25b150 76 pc.printf("Press keys 0-7,G,H,J,K and L to toggle output bits (inputs on PC)\r\n");
jpelletier 0:a5957f25b150 77 pc.printf("Press keys I and O to toggle data direction for bits 0-7\r\n");
jpelletier 0:a5957f25b150 78 pc.printf(" (be sure your PC and mbed don't output at the same time)\r\n\n");
jpelletier 0:a5957f25b150 79 pc.printf("PINS 9-2 1 14 16 17 ------ 15 13 12 11 10\r\n");
jpelletier 0:a5957f25b150 80 pc.printf("DATA 7-0 /STB /AF /INIT /SEL_IN ------/ERR SEL PO BUSY /ACK\r\n");
jpelletier 0:a5957f25b150 81 pc.printf("Keys ------ G H J K L\r\n");
jpelletier 0:a5957f25b150 82 // XX B B B B ------ B B B B B
jpelletier 0:a5957f25b150 83 while(1) {
jpelletier 0:a5957f25b150 84 pc.printf(" %02X %c %c %c %c %c %c %c %c %c \r",
jpelletier 0:a5957f25b150 85 PtrData & 0xff,
jpelletier 0:a5957f25b150 86 '0'| nStrobe,
jpelletier 0:a5957f25b150 87 '0'| nAutoFeed,
jpelletier 0:a5957f25b150 88 '0'| nInit,
jpelletier 0:a5957f25b150 89 '0'| nSelectIn,
jpelletier 0:a5957f25b150 90 '0'| nError,
jpelletier 0:a5957f25b150 91 '0'| Select,
jpelletier 0:a5957f25b150 92 '0'| PaperOut,
jpelletier 0:a5957f25b150 93 '0'| Busy,
jpelletier 0:a5957f25b150 94 '0'| nAck
jpelletier 0:a5957f25b150 95 );
jpelletier 0:a5957f25b150 96
jpelletier 0:a5957f25b150 97 if (pc.readable())
jpelletier 0:a5957f25b150 98 {
jpelletier 0:a5957f25b150 99 key = pc.getc();
jpelletier 0:a5957f25b150 100 switch(key)
jpelletier 0:a5957f25b150 101 {
jpelletier 0:a5957f25b150 102 case 'I':
jpelletier 0:a5957f25b150 103 PtrData.input();
jpelletier 0:a5957f25b150 104 PortIsInput = true;
jpelletier 0:a5957f25b150 105 break;
jpelletier 0:a5957f25b150 106 case 'O':
jpelletier 0:a5957f25b150 107 PtrData.output();
jpelletier 0:a5957f25b150 108 PortIsInput = false;
jpelletier 0:a5957f25b150 109 break;
jpelletier 0:a5957f25b150 110 case '0':
jpelletier 0:a5957f25b150 111 if (!PortIsInput)
jpelletier 0:a5957f25b150 112 PtrData = PtrData ^ 0x01;
jpelletier 0:a5957f25b150 113 break;
jpelletier 0:a5957f25b150 114 case '1':
jpelletier 0:a5957f25b150 115 if (!PortIsInput)
jpelletier 0:a5957f25b150 116 PtrData = PtrData ^ 0x02;
jpelletier 0:a5957f25b150 117 break;
jpelletier 0:a5957f25b150 118 case '2':
jpelletier 0:a5957f25b150 119 if (!PortIsInput)
jpelletier 0:a5957f25b150 120 PtrData = PtrData ^ 0x04;
jpelletier 0:a5957f25b150 121 break;
jpelletier 0:a5957f25b150 122 case '3':
jpelletier 0:a5957f25b150 123 if (!PortIsInput)
jpelletier 0:a5957f25b150 124 PtrData = PtrData ^ 0x08;
jpelletier 0:a5957f25b150 125 break;
jpelletier 0:a5957f25b150 126 case '4':
jpelletier 0:a5957f25b150 127 if (!PortIsInput)
jpelletier 0:a5957f25b150 128 PtrData = PtrData ^ 0x10;
jpelletier 0:a5957f25b150 129 break;
jpelletier 0:a5957f25b150 130 case '5':
jpelletier 0:a5957f25b150 131 if (!PortIsInput)
jpelletier 0:a5957f25b150 132 PtrData = PtrData ^ 0x20;
jpelletier 0:a5957f25b150 133 break;
jpelletier 0:a5957f25b150 134 case '6':
jpelletier 0:a5957f25b150 135 if (!PortIsInput)
jpelletier 0:a5957f25b150 136 PtrData = PtrData ^ 0x40;
jpelletier 0:a5957f25b150 137 break;
jpelletier 0:a5957f25b150 138 case '7':
jpelletier 0:a5957f25b150 139 if (!PortIsInput)
jpelletier 0:a5957f25b150 140 PtrData = PtrData ^ 0x80;
jpelletier 0:a5957f25b150 141 break;
jpelletier 0:a5957f25b150 142 case 'G':
jpelletier 0:a5957f25b150 143 nError = !nError;
jpelletier 0:a5957f25b150 144 break;
jpelletier 0:a5957f25b150 145 case 'H':
jpelletier 0:a5957f25b150 146 Select = !Select;
jpelletier 0:a5957f25b150 147 break;
jpelletier 0:a5957f25b150 148 case 'J':
jpelletier 0:a5957f25b150 149 PaperOut = !PaperOut;
jpelletier 0:a5957f25b150 150 break;
jpelletier 0:a5957f25b150 151 case 'K':
jpelletier 0:a5957f25b150 152 Busy = !Busy;
jpelletier 0:a5957f25b150 153 break;
jpelletier 0:a5957f25b150 154 case 'L':
jpelletier 0:a5957f25b150 155 nAck = !nAck;
jpelletier 0:a5957f25b150 156 break;
jpelletier 0:a5957f25b150 157 default:
jpelletier 0:a5957f25b150 158 ;
jpelletier 0:a5957f25b150 159 }
jpelletier 0:a5957f25b150 160 }
jpelletier 0:a5957f25b150 161 }
jpelletier 0:a5957f25b150 162 }