Uses the mbed for testing PC's parallel port. It uses the USB serial port for displaying and controlling each pin.

Dependencies:   mbed

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

Who changed what in which revision?

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