<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>EmbLogic &#187; Parallel Port Driver</title>
	<atom:link href="https://www.emblogic.com/blog/category/device-drivers/parallel-port-driver/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.emblogic.com/blog</link>
	<description>Embedded System and ARM Training</description>
	<lastBuildDate>Tue, 03 Mar 2020 13:00:06 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.1</generator>
	<item>
		<title>IEEE 1284-1994 std. device driver for 74LS244 Parallel port- BYTE MODE</title>
		<link>https://www.emblogic.com/blog/11/ieee-1284-1994-std-device-driver-for-74ls244-parallel-port-byte-mode/</link>
		<comments>https://www.emblogic.com/blog/11/ieee-1284-1994-std-device-driver-for-74ls244-parallel-port-byte-mode/#comments</comments>
		<pubDate>Fri, 21 Nov 2014 04:26:07 +0000</pubDate>
		<dc:creator><![CDATA[Pooja Gaur]]></dc:creator>
				<category><![CDATA[Device Drivers]]></category>
		<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=11825</guid>
		<description><![CDATA[RCS file: header.h,v Working file: header.h head: 1.2 branch: locks: strict root: 1.2 access list: symbolic names: keyword substitution: kv total revisions: 2; selected revisions: 2 description: File contains header file and macros used &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- revision 1.2 locked by: root; &#8230; <a href="https://www.emblogic.com/blog/11/ieee-1284-1994-std-device-driver-for-74ls244-parallel-port-byte-mode/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: header.h,v<br />
Working file: header.h<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
	root: 1.2<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;	selected revisions: 2<br />
description:<br />
File contains header file and macros used<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2	locked by: root;<br />
date: 2014/11/19 10:06:25;  author: root;  state: Exp;  lines: +3 -3<br />
ioport.h , io.h<br />
add delay.h for msleep<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/11/19 10:03:05;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: file_operation.h,v<br />
Working file: file_operation.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
File contains application operations mapping to driver operations<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/19 10:03:05;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: declaration.h,v<br />
Working file: declaration.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
File contains function declaration and variable declaration<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/19 10:03:05;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: driver.c,v<br />
Working file: driver.c<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
	root: 1.2<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;	selected revisions: 2<br />
description:<br />
File contains driver init module<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2	locked by: root;<br />
date: 2014/11/19 10:08:27;  author: root;  state: Exp;  lines: +1 -1<br />
Check region at 0&#215;378</p>
<p>if not free, release region<br />
Request for region<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/11/19 10:03:05;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: devopen.c,v<br />
Working file: devopen.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
File contains implementation of container_of<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/19 10:03:05;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: devwrite.c,v<br />
Working file: devwrite.c<br />
head: 1.5<br />
branch:<br />
locks: strict<br />
	root: 1.5<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 5;	selected revisions: 5<br />
description:<br />
File conatains implementation of copy_from_user<br />
user sent data which is copied to SCULL<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5	locked by: root;<br />
date: 2014/11/19 10:23:13;  author: root;  state: Exp;  lines: +1 -1<br />
Sent strobe that data is valid<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
date: 2014/11/19 10:17:14;  author: root;  state: Exp;  lines: +1 -1<br />
check if reader is free, by receiving Acknowlegement<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2014/11/19 10:15:30;  author: root;  state: Exp;  lines: +1 -1<br />
sent character to data register<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2014/11/19 10:14:13;  author: root;  state: Exp;  lines: +1 -1<br />
Initialy set control register 0&#215;00<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/11/19 10:03:05;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================<br />
RCS file: devread.c,v<br />
Working file: devread.c<br />
head: 1.8<br />
branch:<br />
locks: strict<br />
	root: 1.8<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 8;	selected revisions: 8<br />
description:<br />
File read the data from register and copy to user application<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.8	locked by: root;<br />
date: 2014/11/19 11:04:15;  author: root;  state: Exp;  lines: +1 -1<br />
Copy to user application<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.7<br />
date: 2014/11/19 11:02:37;  author: root;  state: Exp;  lines: +1 -1<br />
Receieve character from data register<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.6<br />
date: 2014/11/19 11:00:46;  author: root;  state: Exp;  lines: +2 -2<br />
Reset strobe to 0<br />
Set 5 bit high for bidirectional in control register<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5<br />
date: 2014/11/19 10:59:32;  author: root;  state: Exp;  lines: +1 -1<br />
Check for Acknowledgement that the coming data is valid<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
date: 2014/11/19 10:58:01;  author: root;  state: Exp;  lines: +1 -1<br />
After 5 sec sent strobe, receiver is free<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2014/11/19 10:56:37;  author: root;  state: Exp;  lines: +1 -1<br />
reader sleep for 5 seconds<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2014/11/19 10:55:26;  author: root;  state: Exp;  lines: +1 -1<br />
Sent strobe that the receiver is busy in control register<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/11/19 10:53:45;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: removedriver.c,v<br />
Working file: removedriver.c<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
	root: 1.2<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;	selected revisions: 2<br />
description:<br />
File contains exit module<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2	locked by: root;<br />
date: 2014/11/19 10:25:09;  author: root;  state: Exp;  lines: +1 -0<br />
Release region when driver is removed<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/11/19 10:05:00;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/11/ieee-1284-1994-std-device-driver-for-74ls244-parallel-port-byte-mode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IEEE std. 1284-1994 std. Signaling method for 74LS244 &#8211; NIBBLE MODE</title>
		<link>https://www.emblogic.com/blog/11/ieee-std-1284-1994-std-signaling-method-for-74ls244-nibble-mode/</link>
		<comments>https://www.emblogic.com/blog/11/ieee-std-1284-1994-std-signaling-method-for-74ls244-nibble-mode/#comments</comments>
		<pubDate>Thu, 13 Nov 2014 05:19:15 +0000</pubDate>
		<dc:creator><![CDATA[Pooja Gaur]]></dc:creator>
				<category><![CDATA[Device Drivers]]></category>
		<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=11785</guid>
		<description><![CDATA[RCS file: header.h,v Working file: header.h head: 1.2 branch: locks: strict root: 1.2 access list: symbolic names: keyword substitution: kv total revisions: 2; selected revisions: 1 description: This is header file, which contains all the header file used in driver &#8230; <a href="https://www.emblogic.com/blog/11/ieee-std-1284-1994-std-signaling-method-for-74ls244-nibble-mode/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: header.h,v<br />
Working file: header.h<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
	root: 1.2<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;	selected revisions: 1<br />
description:<br />
This is header file, which contains all the header file used in driver<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2	locked by: root;<br />
date: 2014/11/12 12:26:12;  author: root;  state: Exp;  lines: +1 -0<br />
Add linux/ioport.h<br />
add asm/io.h<br />
add linux/delay.h<br />
=============================================================================</p>
<p>RCS file: declaration.h,v<br />
Working file: declaration.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
This file contains all the functions declaration<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/12 12:08:53;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: file_operation.h,v<br />
Working file: file_operation.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
This file contains operation mapping.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/12 12:08:53;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: driver.c,v<br />
Working file: driver.c<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
	root: 1.2<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;	selected revisions: 1<br />
description:<br />
This file contains allocation of region in memory<br />
Add device with major and minor<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2	locked by: root;<br />
date: 2014/11/12 12:11:23;  author: root;  state: Exp;  lines: +1 -0<br />
Check for parallel port region<br />
if occupied, release region<br />
then, request for region<br />
=============================================================================</p>
<p>RCS file: devopen.c,v<br />
Working file: devopen.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
use container of<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/12 12:08:53;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: devwrite.c,v<br />
Working file: devwrite.c<br />
head: 1.3<br />
branch:<br />
locks: strict<br />
	root: 1.3<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 3;	selected revisions: 3<br />
description:<br />
This file allocates memory for quantum &amp; qset in scull<br />
data sent from write application is stored in quantum<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3	locked by: root;<br />
date: 2014/11/12 12:43:56;  author: root;  state: Exp;  lines: +1 -1<br />
For second nibble shift the character by 4<br />
same steps are followed for second nibble<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2014/11/12 12:38:50;  author: root;  state: Exp;  lines: +1 -1<br />
set 0&#215;00 at control register<br />
&amp; character from quantum with 0x0f, for first nibble<br />
sent first nibble<br />
checking status of reader, if free or not<br />
if received strobe from reader, that the reader is free now<br />
sent the strobe that data is valid<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/11/12 12:38:06;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: devread.c,v<br />
Working file: devread.c<br />
head: 1.3<br />
branch:<br />
locks: strict<br />
	root: 1.3<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 3;	selected revisions: 3<br />
description:<br />
This file read the character from port, and copy to the user application<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3	locked by: root;<br />
date: 2014/11/12 13:12:17;  author: root;  state: Exp;  lines: +1 -1<br />
Shift the second nibble received by 3<br />
Shift the received charcter by 4 to make it msb<br />
|(or) with previous stored chracter in first nibble.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2014/11/12 13:02:10;  author: root;  state: Exp;  lines: +1 -1<br />
First make the reader busy, then after 5 sec free the reader<br />
sent the strobe signal that the reader is free<br />
wait for acknowlegement the data going to be received is valid or not<br />
when receives the strobe, from writer that the data is valid<br />
set the control register 32 for bidirectional<br />
receives the first nibble and &amp; with 0&#215;78<br />
shift the receive nibble by 3, &amp; with 0x0f<br />
store the character in other variable<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/11/12 13:00:27;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: devrelease.c,v<br />
Working file: devrelease.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
This file free the allocated memory for device<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/12 12:08:53;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: removedriver.c,v<br />
Working file: removedriver.c<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
	root: 1.2<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;	selected revisions: 2<br />
description:<br />
unregister allocated region<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2	locked by: root;<br />
date: 2014/11/12 12:12:56;  author: root;  state: Exp;  lines: +1 -0<br />
File contains release region when driver is removed<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/11/12 12:08:53;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/11/ieee-std-1284-1994-std-signaling-method-for-74ls244-nibble-mode/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>compatibility mode communication&#8211; IEEE  standard 1284-1994, parallel port device driver</title>
		<link>https://www.emblogic.com/blog/11/compatibility-mode-communication-ieee-standard-1284-1994-parallel-port-device-driver/</link>
		<comments>https://www.emblogic.com/blog/11/compatibility-mode-communication-ieee-standard-1284-1994-parallel-port-device-driver/#comments</comments>
		<pubDate>Tue, 11 Nov 2014 06:13:48 +0000</pubDate>
		<dc:creator><![CDATA[Sachin Sharma]]></dc:creator>
				<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=11766</guid>
		<description><![CDATA[RCS file: header.h,v Working file: header.h head: 1.1 branch: locks: strict emblogic: 1.1 access list: symbolic names: keyword substitution: kv total revisions: 1;    selected revisions: 1 description: included header files &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- revision 1.1    locked by: emblogic; date: 2014/11/11 05:29:43;  author: &#8230; <a href="https://www.emblogic.com/blog/11/compatibility-mode-communication-ieee-standard-1284-1994-parallel-port-device-driver/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: header.h,v<br />
Working file: header.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
emblogic: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
included header files<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: emblogic;<br />
date: 2014/11/11 05:29:43;  author: emblogic;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: dec.h,v<br />
Working file: dec.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
emblogic: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: emblogic;<br />
date: 2014/11/11 05:30:45;  author: emblogic;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: initialization.c,v<br />
Working file: initialization.c<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
emblogic: 1.2<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;    selected revisions: 1<br />
description:<br />
implemented the check_region(), release_region() for checking the availability of region<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2    locked by: emblogic;<br />
date: 2014/11/11 05:33:43;  author: emblogic;  state: Exp;  lines: +2 -2<br />
implemented the  request_region()<br />
=============================================================================</p>
<p>RCS file: fileop.h,v<br />
Working file: fileop.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 0<br />
description:<br />
=============================================================================</p>
<p>RCS file: dev_open.c,v<br />
Working file: dev_open.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
emblogic: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: emblogic;<br />
date: 2014/11/11 05:32:50;  author: emblogic;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>RCS file: dev_write.c,v<br />
Working file: dev_write.c<br />
head: 1.3<br />
branch:<br />
locks: strict<br />
emblogic: 1.3<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 3;    selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3    locked by: emblogic;<br />
date: 2014/11/11 05:40:03;  author: emblogic;  state: Exp;  lines: +1 -0<br />
followed the protocols : send the strobe.<br />
to allow the reader to read the data,before send the strobe to reader,this verified  the busy status.. ============================================================================</p>
<p>RCS file: cleanup.c,v<br />
Working file: cleanup.c<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
emblogic: 1.2<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;    selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2    locked by: emblogic;<br />
date: 2014/11/11 05:35:23;  author: emblogic;  state: Exp;  lines: +2 -0<br />
implemented release_region foe releasing the region ,<br />
=============================================================================</p>
<p>RCS file: dev_read.c,v<br />
Working file: dev_read.c<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
emblogic: 1.2<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;    selected revisions: 1<br />
description:<br />
following the protocols first send the busy to writer.and wait for strobe signal from writer.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2    locked by: emblogic;<br />
date: 2014/11/11 05:57:34;  author: emblogic;  state: Exp;  lines: +2 -2<br />
after receiving the strobe from the writter received the data sucessfully.<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/11/compatibility-mode-communication-ieee-standard-1284-1994-parallel-port-device-driver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Compatibility Mode Communication using IEEE Standard 1284-1994(Standard Signalling Method)</title>
		<link>https://www.emblogic.com/blog/11/compatibility-mode-communication-using-ieee-standard-1284-1994standard-signalling-method/</link>
		<comments>https://www.emblogic.com/blog/11/compatibility-mode-communication-using-ieee-standard-1284-1994standard-signalling-method/#comments</comments>
		<pubDate>Mon, 10 Nov 2014 04:31:49 +0000</pubDate>
		<dc:creator><![CDATA[Amit Prakash]]></dc:creator>
				<category><![CDATA[Device Drivers]]></category>
		<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=11745</guid>
		<description><![CDATA[RCS file: header.h,v Working file: header.h head: 1.1 branch: locks: strict root: 1.1 access list: symbolic names: keyword substitution: kv total revisions: 1; selected revisions: 1 description: &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- revision 1.1 locked by: root; date: 2014/11/10 04:15:07; author: root; state: Exp; &#8230; <a href="https://www.emblogic.com/blog/11/compatibility-mode-communication-using-ieee-standard-1284-1994standard-signalling-method/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>RCS file: header.h,v<br />
Working file: header.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/10 04:15:07;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: declaration.h,v<br />
Working file: declaration.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/10 04:16:20;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: initilization.c,v<br />
Working file: initilization.c<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;	selected revisions: 2<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2014/11/10 04:19:20;  author: root;  state: Exp;  lines: +2 -1<br />
Implemented check_region(), request_region() and release_region()<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/11/10 04:16:41;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: cleanup.c,v<br />
Working file: cleanup.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/10 04:16:59;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: dev_open.c,v<br />
Working file: dev_open.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/10 04:17:21;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: dev_release.c,v<br />
Working file: dev_release.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
Implemented release_region().<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/10 04:20:45;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: dev_write.c,v<br />
Working file: dev_write.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
Ckeck busy signal by sending the strobe. After that sent data on data lines.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/10 04:21:02;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: dev_read.c,v<br />
Working file: dev_read.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
Read data from data lines.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/10 04:21:19;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: file_op.h,v<br />
Working file: file_op.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
	root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;	selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1	locked by: root;<br />
date: 2014/11/10 04:21:33;  author: root;  state: Exp;<br />
Initial revision</p>
<p>Write synopsis:<br />
outb(ch,0&#215;378);<br />
while(busy_status !=0&#215;80)<br />
busy_status = inb(0&#215;379);</p>
<p>Read synopsis:<br />
while(strobe != 0&#215;00)<br />
strobe = inb(0&#215;379);<br />
data = inb(0&#215;378);</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/11/compatibility-mode-communication-using-ieee-standard-1284-1994standard-signalling-method/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nibble Mode Communication using IEEE Standard 1284-1994(Standard Signalling Method)</title>
		<link>https://www.emblogic.com/blog/11/nibble-mode-communication-using-parallel-port/</link>
		<comments>https://www.emblogic.com/blog/11/nibble-mode-communication-using-parallel-port/#comments</comments>
		<pubDate>Mon, 03 Nov 2014 09:06:22 +0000</pubDate>
		<dc:creator><![CDATA[Amit Prakash]]></dc:creator>
				<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=11665</guid>
		<description><![CDATA[Implementation of Nibble Mode communication using Parallel Port Device Driver. 1. Host signals ability to take data by making the Busy pin low. 2. Now peripheral or writer responds by placing First nibble. Writer Writes on Data line, on the &#8230; <a href="https://www.emblogic.com/blog/11/nibble-mode-communication-using-parallel-port/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Implementation of Nibble Mode communication using Parallel Port Device Driver.</p>
<p>1. Host signals ability to take data by making the Busy pin low.</p>
<p>2. Now peripheral or writer responds by placing First nibble. Writer Writes on Data line, on the other side Reader reads from Status line.</p>
<p>3. Before reading from Reader side Peripheral or writer signals valid nibble by Sending signal on one of the status line.</p>
<p>4. The Reader indicate to writer that it has received the lower nibble. And is is not ready to accept another nibble. This is done by sending signal on status line to indicate the writer.</p>
<p>5. Now repeate all these steps for second nibble&#8230;</p>
<p>RCS file: header.h,v<br />
Working file: header.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
implemented linux/ioport.h and asm/io.h<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: root;<br />
date: 2014/11/03 08:52:22;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: declaration.h,v<br />
Working file: declaration.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: root;<br />
date: 2014/11/03 08:52:22;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: initilization.c,v<br />
Working file: initilization.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
Implemented check_region(), request_region() and release_region()<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: root;<br />
date: 2014/11/03 08:52:22;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: cleanup.c,v<br />
Working file: cleanup.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
Implemented release_region<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: root;<br />
date: 2014/11/03 08:52:22;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: dev_open.c,v<br />
Working file: dev_open.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: root;<br />
date: 2014/11/03 08:52:22;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: dev_release.c,v<br />
Working file: dev_release.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: root;<br />
date: 2014/11/03 08:52:22;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: dev_write.c,v<br />
Working file: dev_write.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
Written LSB nibble and MSB nibble. Taken character from application and calaulated LSB and MSB<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: root;<br />
date: 2014/11/03 08:52:22;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: dev_read.c,v<br />
Working file: dev_read.c<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
Read the Nibbles and arranged to calculate the original character<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: root;<br />
date: 2014/11/03 08:52:22;  author: root;  state: Exp;<br />
Initial revision</p>
<p>RCS file: file_op.h,v<br />
Working file: file_op.h<br />
head: 1.1<br />
branch:<br />
locks: strict<br />
root: 1.1<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 1;    selected revisions: 1<br />
description:<br />
Performed different file operations<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1    locked by: root;<br />
date: 2014/11/03 08:52:22;  author: root;  state: Exp;<br />
Initial revision</p>
<p>Write synopsis:</p>
<p>ch2 = ch1 &amp; 0x0f;</p>
<p>ch3 = ch1 &amp; 0xf0;<br />
ch3 = ch3 &gt;&gt; 4;</p>
<p>Read synopsis:</p>
<p>ch1 = ch1 &lt;&lt; 1;<br />
ch1 = ch1 &gt;&gt; 4;<br />
ch1 = ch1 &amp; 0x0f;</p>
<p>ch2 = ch2 &lt;&lt; 1;<br />
ch2 = ch2 &amp; 0xf0;</p>
<p>Enjoy Implementing&#8230;&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/11/nibble-mode-communication-using-parallel-port/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IEEE Std 1284 – 1994 : Standard Signalling Method for a bi-directional parallel peripheral interface for personal computers (Nibble Mode) and associated device driver</title>
		<link>https://www.emblogic.com/blog/11/ieee-std-1284-1994-standard-signalling-method-for-a-bi-directional-parallel-peripheral-interface-for-personal-computers-nibble-mode-and-associated-device-driver/</link>
		<comments>https://www.emblogic.com/blog/11/ieee-std-1284-1994-standard-signalling-method-for-a-bi-directional-parallel-peripheral-interface-for-personal-computers-nibble-mode-and-associated-device-driver/#comments</comments>
		<pubDate>Mon, 03 Nov 2014 07:36:58 +0000</pubDate>
		<dc:creator><![CDATA[Abhishek Choubey]]></dc:creator>
				<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=11656</guid>
		<description><![CDATA[This project implements the protocol, for data transfer between a personal computer and a parallel peripheral interface, under NIBBLE MODE. The protocol has been implemented by using polling method for checking the status of the peripheral device and the host. &#8230; <a href="https://www.emblogic.com/blog/11/ieee-std-1284-1994-standard-signalling-method-for-a-bi-directional-parallel-peripheral-interface-for-personal-computers-nibble-mode-and-associated-device-driver/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This project implements the protocol, for data transfer between a personal computer and a parallel peripheral interface, under NIBBLE MODE.<br />
The protocol has been implemented by using polling method for checking the status of the peripheral<br />
device and the host.<br />
Successfully able to transfer a byte of data.<br />
The user applications are configured for sending and receiving multiple bytes of data.</p>
<p>Following are the RCS files and code snippet of the project : </p>
<p>1. intialization module :<br />
RCS file: ./initialization.c,v<br />
Working file: initialization.c<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
	root: 1.2<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;	selected revisions: 2<br />
description:<br />
IEEE Std. 1284-1994<br />
Standard Signalling method for a Bi-directional parallel peripheral Interface for personal computer.<br />
IC : 74LS244<br />
Mode : Nibble Mode<br />
Module Info : initialization<br />
	This module is responsible for :<br />
	- creating scull for the device.<br />
	- allocating required address for the driver to work.<br />
	- add driver to kernel tree.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2	locked by: root;<br />
date: 2014/11/03 06:38:42;  author: root;  state: Exp;  lines: +0 -8<br />
Successfully allocated memory to the device scull.<br />
requested and acquired the required address space i.e. 0&#215;0378 &#8211; 0x037a<br />
0&#215;0378 for data lines.<br />
0&#215;0379 for status lines.<br />
0x037a for control lines.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Code Snippet :<br />
tatic int __init initialization_function(void){<br />
	/* the name of the driver which you want your driver to be visible */<br />
	const char *name = &#8220;character_device_latest&#8221;;<br />
	int ret, i;<br />
	printk(KERN_ALERT&#8221;%s : Begin&#8221;, __func__);</p>
<p>	/* checking and acquiring region for parallel port*/<br />
	ret = check_region(START, RANGE);<br />
	if(ret &gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br />
2. write module :<br />
RCS file: ./dev_write.c,v<br />
Working file: dev_write.c<br />
head: 1.3<br />
branch:<br />
locks: strict<br />
	root: 1.3<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 3;	selected revisions: 3<br />
description:<br />
Module : the module implements the protocol for sending a byte of data in two nibbles.<br />
The module implements the protocol in the following manner :<br />
	1. reset the data and control lines.<br />
	2. write data to data lines.<br />
	3. check the busy status of the device by polling.<br />
	4. if device is free send strobe signal.<br />
	5. wait for acknowledgement corresponding the first nibble.<br />
	6. repeat steps 2-6 for sending the second nibble.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3	locked by: root;<br />
date: 2014/11/03 07:15:13;  author: root;  state: Exp;  lines: +0 -7<br />
the writer performs the following operations successfully following the protocol for nibble mode.<br />
	1. read data to be sent from user application.<br />
	2. write first nibble to data lines.<br />
	3. get acknowledgement for first nibble and then send the second nibble<br />
	4. wait for acknowledgement of second nibble.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
Code Snippet :<br />
int protocol(const char __user* buffer){<br />
	unsigned char temp;<br />
	volatile unsigned char busy;<br />
	volatile unsigned char ack;<br />
	struct nibble n;</p>
<p>	/* remove garbage content from the control and data lines */<br />
	outb(0&#215;0000, CTRL_REG);<br />
	outb(0&#215;0000, DATA_REG);</p>
<p>	/* prepare the first nibble to be sent */<br />
	temp = buffer[0];<br />
	printk(KERN_INFO&#8221;data to be sent to the reader = %d\n&#8221;, temp);<br />
	n.val = temp;<br />
	printk(KERN_INFO&#8221;nibble 1 to be sent to the reader = %d\n&#8221;, n.val);<br />
	outb(n.val, DATA_REG);<br />
	/* check the busy status of the device */<br />
	do{<br />
		busy = inb(STATUS_REG);<br />
		busy = busy &amp; 0&#215;0080;<br />
	}while(busy!=0&#215;0080);<br />
	printk(&#8220;Device free\n&#8221;);<br />
&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;<br />
3. read module :<br />
RCS file: ./dev_read.c,v<br />
Working file: dev_read.c<br />
head: 1.3<br />
branch:<br />
locks: strict<br />
	root: 1.3<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 3;	selected revisions: 3<br />
description:<br />
this module implements the protocol for receiving the data on the reader side.<br />
protocol implemented for Nibble mode.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3	locked by: root;<br />
date: 2014/11/03 07:12:53;  author: root;  state: Exp;  lines: +1 -0<br />
the reader correctly reads a byte of data as sent by the writer.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2014/11/03 07:09:30;  author: root;  state: Exp;  lines: +14 -14<br />
corrected the error in reading the value from the status register.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Code Snippet :<br />
ssize_t dev_read(struct file *filep, char __user *ubuff, size_t size, loff_t *loff)<br />
{<br />
	volatile unsigned char strobe;<br />
	unsigned char data;<br />
	unsigned char temp;<br />
	printk(KERN_INFO&#8221;BEGIN %s\n&#8221;, __func__);</p>
<p>	/* reset the data and control lines and update the busy status to free. */<br />
	outb(0&#215;0000, CTRL_REG);<br />
	outb(0&#215;0001, CTRL_REG);<br />
	outb(0&#215;0000, DATA_REG);</p>
<p>	/* wait on strobe value = 1, first nibble */<br />
	do{<br />
		strobe = inb(STATUS_REG);<br />
		strobe = strobe &amp; 0&#215;0080;<br />
	}while(strobe!=0&#215;0080);<br />
	printk(KERN_INFO&#8221;Got strobe signal from the writer = %d\n&#8221;, strobe);</p>
<p>	outb(0&#215;0000, CTRL_REG); // make device appear busy to reader</p>
<p>	// read the first nibble<br />
	temp = inb(STATUS_REG);<br />
	printk(KERN_INFO&#8221; inb, temp = %d\n&#8221;, temp);<br />
	temp = temp &amp; 0&#215;0078;<br />
	temp = temp &gt;&gt;3;<br />
	printk(KERN_INFO&#8221;temp after masking= %d\n&#8221;, temp);<br />
	printk(KERN_INFO&#8221;Data received (nibble &#8211; 1)= %d\n&#8221;, temp);</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/11/ieee-std-1284-1994-standard-signalling-method-for-a-bi-directional-parallel-peripheral-interface-for-personal-computers-nibble-mode-and-associated-device-driver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IEEE Std 1284 &#8211; 1994 : Standard Signalling Method for a bi-directional parallel peripheral interface for personal computers ( Byte Mode) and associated device driver</title>
		<link>https://www.emblogic.com/blog/11/ieee-std-1284-1994-standard-signalling-method-for-a-bi-directional-parallel-peripheral-interface-for-personal-computers-compatability-mode-and-associated-device-driver/</link>
		<comments>https://www.emblogic.com/blog/11/ieee-std-1284-1994-standard-signalling-method-for-a-bi-directional-parallel-peripheral-interface-for-personal-computers-compatability-mode-and-associated-device-driver/#comments</comments>
		<pubDate>Sat, 01 Nov 2014 05:14:39 +0000</pubDate>
		<dc:creator><![CDATA[Abhishek Choubey]]></dc:creator>
				<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=11641</guid>
		<description><![CDATA[Writing a driver for 74LS244 parallel port and implementing read and write operations under compatability mode. Following are the rcs files : 1. initialization : RCS file: ./initialization.c,v Working file: initialization.c head: 1.4 branch: locks: strict root: 1.4 access list: &#8230; <a href="https://www.emblogic.com/blog/11/ieee-std-1284-1994-standard-signalling-method-for-a-bi-directional-parallel-peripheral-interface-for-personal-computers-compatability-mode-and-associated-device-driver/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Writing a driver for 74LS244 parallel port and implementing read and write operations under compatability mode.<br />
Following are the rcs files :<br />
1. initialization : </p>
<p>RCS file: ./initialization.c,v<br />
Working file: initialization.c<br />
head: 1.4<br />
branch:<br />
locks: strict<br />
	root: 1.4<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 4;	selected revisions: 4<br />
description:<br />
Initialization file for Centronics port driver based on IEEE-1284 standard.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4	locked by: root;<br />
date: 2014/11/01 04:44:07;  author: root;  state: Exp;  lines: +0 -4<br />
Successfully implemented the following operations :<br />
1. Acquire the address 0&#215;0378 &#8211; 0x037a for the device.<br />
2. Create the device scull.<br />
3. Initialise the cdev structure..<br />
4. Add the device to the kernel tree.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2014/10/31 15:19:12;  author: root;  state: Exp;  lines: +0 -40<br />
Successfully created the scull for the device.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2014/10/31 15:16:36;  author: root;  state: Exp;  lines: +1 -0<br />
Released the region acquired by the default parallel port driver.<br />
Acquired the same space for own driver.<br />
Entry successfully created in /proc/ioports.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/10/31 15:16:07;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>2. cleanup module for device : </p>
<p>RCS file: ./cleanup.c,v<br />
Working file: cleanup.c<br />
head: 1.4<br />
branch:<br />
locks: strict<br />
	root: 1.4<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 4;	selected revisions: 4<br />
description:<br />
Cleanup module for deriver<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4	locked by: root;<br />
date: 2014/11/01 04:59:28;  author: root;  state: Exp;  lines: +0 -1<br />
The module successfully performs the following functions :<br />
1. Unregister the driver.<br />
2. Release the address space acquired i.e. 0&#215;378 &#8211; 0x37a<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2014/11/01 04:57:56;  author: root;  state: Exp;  lines: +0 -1<br />
Able to release the acquired range successfully.<br />
The driver releases the 0&#215;0378-0x037a address space on rmmod.<br />
Entry removed from the /proc/ioports file.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2014/11/01 04:56:34;  author: root;  state: Exp;  lines: +0 -2<br />
Successfully unregistered the driver on rmmod.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/11/01 04:56:15;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>3. write module : </p>
<p>RCS file: ./dev_write.c,v<br />
Working file: dev_write.c<br />
head: 1.5<br />
branch:<br />
locks: strict<br />
	root: 1.5<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 5;	selected revisions: 5<br />
description:<br />
dev_write.c : runs when user space application writes the node.<br />
module implements the protocol under Compatability mode.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.5	locked by: root;<br />
date: 2014/10/31 16:56:12;  author: root;  state: Exp;  lines: +0 -1<br />
The writer is able to perform the following :<br />
1. Take the data from the user application.<br />
2. Write the data to the port.<br />
3. Check busy status of the device at the other end of the cable.<br />
4. Send strobe.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.4<br />
date: 2014/10/31 16:53:29;  author: root;  state: Exp;  lines: +1 -0<br />
Implemented the protocol in 3 steps.<br />
wddl : write data to data lines.<br />
cbs : check busy status of the device, keep pollng until the device is found free.<br />
sss : once the device is found free send the strobe signal to indicate that the data on data lines is valid content.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.3<br />
date: 2014/10/31 15:33:36;  author: root;  state: Exp;  lines: +0 -59<br />
Able to send a single byte of data.<br />
Protocol successfully implemented.<br />
Acknowledgement from device has not been used.<br />
Some problem with the hardware.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2<br />
date: 2014/10/31 15:32:12;  author: root;  state: Exp;  lines: +2 -0<br />
able to send the data successfully without any protocol.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/10/31 15:31:39;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
<p>4. read module : </p>
<p>RCS file: ./dev_read.c,v<br />
Working file: dev_read.c<br />
head: 1.2<br />
branch:<br />
locks: strict<br />
	root: 1.2<br />
access list:<br />
symbolic names:<br />
keyword substitution: kv<br />
total revisions: 2;	selected revisions: 2<br />
description:<br />
dev_read : module runs when an application tries to read from the node.<br />
Implements compatability mode for data transfer between two systems.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.2	locked by: root;<br />
date: 2014/10/31 16:44:09;  author: root;  state: Exp;  lines: +1 -0<br />
Successfully implemented the protocol.<br />
The device sends the busy status.<br />
Waits for strobe.<br />
Once strobe arrives, reads data.<br />
Sends the data to the user application by copy_to_user.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
revision 1.1<br />
date: 2014/10/31 16:42:58;  author: root;  state: Exp;<br />
Initial revision<br />
=============================================================================</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/11/ieee-std-1284-1994-standard-signalling-method-for-a-bi-directional-parallel-peripheral-interface-for-personal-computers-compatability-mode-and-associated-device-driver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to find chipset mounted on your motherboard?????</title>
		<link>https://www.emblogic.com/blog/07/how-to-find-chipset-mounted-on-your-motherboard/</link>
		<comments>https://www.emblogic.com/blog/07/how-to-find-chipset-mounted-on-your-motherboard/#comments</comments>
		<pubDate>Fri, 18 Jul 2014 18:07:08 +0000</pubDate>
		<dc:creator><![CDATA[kashishgarg1992]]></dc:creator>
				<category><![CDATA[Character Driver]]></category>
		<category><![CDATA[Parallel Port Driver]]></category>
		<category><![CDATA[Serial Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=11162</guid>
		<description><![CDATA[You can find the chipset mounted on your motherboard . using coomand ==lspci on the terminal will give ou list of all chipset for audio card , usb ,serial, parallel ,vga &#8230;&#8230;.etc]]></description>
				<content:encoded><![CDATA[<p>You can find the chipset mounted on your motherboard .</p>
<p>using coomand ==lspci on the terminal will give ou list of all chipset for audio card , usb ,serial, parallel ,vga &#8230;&#8230;.etc</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/how-to-find-chipset-mounted-on-your-motherboard/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Interrupts in Parallel Port</title>
		<link>https://www.emblogic.com/blog/07/interrupts-in-parallel-port/</link>
		<comments>https://www.emblogic.com/blog/07/interrupts-in-parallel-port/#comments</comments>
		<pubDate>Fri, 11 Jul 2014 09:37:28 +0000</pubDate>
		<dc:creator><![CDATA[prakhar_saxena]]></dc:creator>
				<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=10911</guid>
		<description><![CDATA[A parallel port can generate interrupts when the voltage level on a certain input pin changes. The parallel port has to be instructed explicitly to generate interrupts and it is also possible to inhibit interrupts (e.g., while serving a previous &#8230; <a href="https://www.emblogic.com/blog/07/interrupts-in-parallel-port/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<ul>
<li>A parallel port can generate interrupts when the voltage level on a certain input pin changes. The parallel port has to be instructed explicitly to generate interrupts and it is also possible to inhibit interrupts (e.g., while serving a previous interrupt).</li>
<li>The parallel port consists of three bytes in the I/O address space of the PC:
<ol>
<li>The first byte is used as <strong>data port</strong>: 8 bits of output, often labelled D0 to D7, with D0 being the least significant bit and D7 the most significant.</li>
<li>The second byte is used as <strong>status port</strong>: 5 bits of input (S3 &#8211; S7), 3 bits unused (S0 &#8211; S2)</li>
<li>The third byte is used as <strong>control port</strong>:  4 bits of output (C0 &#8211; C3), 4 bits setup/unused (C4 &#8211; C7)</li>
</ol>
</li>
<li>Traditionally, IBM PC systems have allocated their first two parallel ports according to the configuration in the table below:</li>
</ul>
<p>PORT NAME     Interrupt #     Starting I/O   Ending I/O LPT1           IRQ 7          0&#215;378           0x37f LPT2           IRQ 5           0&#215;278           0x27f</p>
<ul>
<li>In this exercise we use LPT1 with IRQ 7 and the following three bytes:
<ol>
<li>0&#215;378 : data port</li>
<li>0&#215;379 : status port</li>
<li>0x37A : control port</li>
</ol>
</li>
<li>The parallel port standard states that setting bit C4 of the control port (0x37A) enables interrupt reporting.</li>
</ul>
<p>The pins of the 25 pin female D type parallel port connector are shown in the following picture</p>
<ul>
<li>In this picture all green pins (numbered 18 &#8211; 25) are grounded at 0 Volt.</li>
<li>When having interrupts enabled (i.e., bit C4 has been set), an interrupt will be generated by the parallel port when the voltage on input line S6 (pin 10) is raised from 0 Volt to +5 Volt. By default the input line is kept high to +5 Volt when nothing is connected. Observe that when pin 10 is shortly shorted to one of the pins 19-25, i.e., to ground, an interrupt on IRQ line 7 will be generated by the parallel port. The interrupt is generated at exactly the moment that you undo the shortage, since at that exact moment the line is raised from 0 to +5 Volt.</li>
</ul>
<p><img src="http://www.pstnet.com/internal/kbimage/1320-1.gif" alt="http://www.pstnet.com/internal/kbimage/1320-1.gif" /></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/interrupts-in-parallel-port/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PARALLEL PORT -8 led array</title>
		<link>https://www.emblogic.com/blog/06/parallel-port-8-led-array/</link>
		<comments>https://www.emblogic.com/blog/06/parallel-port-8-led-array/#comments</comments>
		<pubDate>Mon, 23 Jun 2014 14:43:58 +0000</pubDate>
		<dc:creator><![CDATA[Rahul Sharma]]></dc:creator>
				<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=10602</guid>
		<description><![CDATA[Succesfully implemented the parallel port outb operations using 8-led array!!! I had firstly make a sculldev allocate memory to it so that i can map the file_operations through the cdev_init and cdev_add operations and then map the parallel port address &#8230; <a href="https://www.emblogic.com/blog/06/parallel-port-8-led-array/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Succesfully implemented the parallel port outb operations using 8-led array!!!</p>
<p>I had firstly make a sculldev allocate memory to it so that i can map the file_operations through the<br />
cdev_init and cdev_add operations and then map the parallel port address to the user address,then map the write operation to the driver and i had made a application for sending the data byte from the application through the node to the driver and received by the scull_write function in the map space then get the data from the application to the __user *buffer and then copy_from_user to get the data from application and then save it in the unsigned char buffer and then outb the data to the parallel port and continuously sending the data from the application and sending the data continuously to the port and the binary representation of the characters are shown on the led&#8217;s.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/06/parallel-port-8-led-array/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Memory-Mapped I/O v/s Port-Mapped I/O</title>
		<link>https://www.emblogic.com/blog/03/memory-mapped-io-vs-port-mapped-io/</link>
		<comments>https://www.emblogic.com/blog/03/memory-mapped-io-vs-port-mapped-io/#comments</comments>
		<pubDate>Mon, 03 Mar 2014 07:08:44 +0000</pubDate>
		<dc:creator><![CDATA[Nishant]]></dc:creator>
				<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=8797</guid>
		<description><![CDATA[Memory-mapped I/O (MMIO) and port-mapped I/O (PMIO) (which is also called isolated I/O) are two complementary methods of performing input/output between the CPU and peripheral devices in a computer. An alternative approach is using dedicated I/O processors—commonly known as channels &#8230; <a href="https://www.emblogic.com/blog/03/memory-mapped-io-vs-port-mapped-io/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Memory-mapped I/O (MMIO) and port-mapped I/O (PMIO) (which is also called isolated I/O) are two complementary methods of performing input/output between the CPU and peripheral devices in a computer. An alternative approach is using dedicated I/O processors—commonly known as channels on mainframe computers—that execute their own instructions.</p>
<p><strong>Memory-Mapped I/O:- </strong>Memory-mapped I/O (not to be confused with memory-mapped file I/O) uses the same address bus to address both memory and I/O devices – the memory and registers of the I/O devices are mapped to (associated with) address values. So when an address is accessed by the CPU, it may refer to a portion of physical RAM, but it can also refer to memory of the I/O device. Thus, the CPU instructions used to access the memory can also be used for accessing devices. Each I/O device monitors the CPU&#8217;s address bus and responds to any CPU access of an address assigned to that device, connecting the data bus to the desired device&#8217;s hardware register. To accommodate the I/O devices, areas of the addresses used by the CPU must be reserved for I/O and must not be available for normal physical memory. The reservation might be temporary—the Commodore 64 could bank switch between its I/O devices and regular memory—or permanent.</p>
<p><strong>Port-Mapped I/O:-</strong> Port-mapped I/O often uses a special class of CPU instructions specifically for performing I/O. This is found on Intel microprocessors, with the IN and OUT instructions. These instructions can read and write one to four bytes (outb, outw, outl) to an I/O device. I/O devices have a separate address space from general memory, either accomplished by an extra &#8220;I/O&#8221; pin on the CPU&#8217;s physical interface, or an entire bus dedicated to I/O. Because the address space for I/O is isolated from that for main memory, this is sometimes referred to as isolated I/O.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/03/memory-mapped-io-vs-port-mapped-io/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PARALLEL PORT INTERFACE</title>
		<link>https://www.emblogic.com/blog/02/parallel-port-interface/</link>
		<comments>https://www.emblogic.com/blog/02/parallel-port-interface/#comments</comments>
		<pubDate>Sat, 22 Feb 2014 11:39:29 +0000</pubDate>
		<dc:creator><![CDATA[u.sravan]]></dc:creator>
				<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=8502</guid>
		<description><![CDATA[PARALLEL PORT A parallel port is a type of interface found on computers (personal and otherwise) for connecting peripherals. In computing, a parallel port is a parallel communication physical interface. It is also known as a printer port or Centronics &#8230; <a href="https://www.emblogic.com/blog/02/parallel-port-interface/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p style="text-align: center" align="JUSTIFY"><span style="font-size: medium">PARALLEL PORT</span></p>
<p align="JUSTIFY">A <strong>parallel port</strong> is a type of interface found on computers (personal and otherwise) for connecting peripherals. In computing, a parallel port is a parallel communication physical interface. It is also known as a <strong>printer port</strong> or Centronics port. It was a <em>de facto</em> industry standard for many years, and was finally standardized as IEEE 1284 in the late 1990s, which defined a bi-directional version of the port. Today, the parallel port interface is seeing decreasing use because of the rise of Universal Serial Bus (USB) and FireWire (IEEE 1394) devices, along with network printing using Ethernet.</p>
<p align="JUSTIFY">The parallel port interface was originally known as the <strong>Parallel Printer Adapter</strong> on IBM PC-compatible computers. It was primarily designed to operate a line printer that used IBM&#8217;s 8-bit extended ASCII character set to print text, but could also be used to adapt other peripherals. Graphical printers, along with a host of other devices, have been designed to communicate with the system.</p>
<p align="JUSTIFY">IBM released the IBM Personal Computer in 1981 and included a variant of the Centronics interface— only IBM logo printers (rebranded from Epson) could be used with the IBM PC.IBM standardized the parallel cable with a DB25F connector on the PC side and the Centronics connector on the printer side. Vendors soon released printers compatible with both standard Centronics and the IBM implementation.</p>
<p align="JUSTIFY">The original IBM parallel printer adapter for the IBM PC was designed to support 8-bit data bidirectionally in 1981. This feature was removed in later revisions of the hardware, so that the data lines could only be used to output data. Years later in 1987, IBM reintroduced the bidirectional interface with its IBM PS/2 series, where it could be enabled or disabled for compatibility with applications hardwired not to expect a printer port to be bidirectional. HP introduced their version of bidirectional, known as <em>Bitronics</em>, on the LaserJet 4 in 1992. The Bitronics and Centronics interfaces were superseded by the IEEE 1284 standard in 1994.</p>
<p align="JUSTIFY">A wide variety of devices were eventually designed to operate on a parallel port. Most devices were uni-directional (one-way) devices, only meant to respond to information sent from the PC. However, some devices such as Zip drives were able to operate in bi-directional mode. Printers also eventually took up the bi-directional system, allowing various status report information to be sent.</p>
<h3 align="JUSTIFY"><a name="Interfaces"></a><strong>Interfaces</strong></h3>
<p align="JUSTIFY">Most PC-compatible systems in the 1980s and 1990s had one to three ports, with communication interfaces defined like this:</p>
<ul>
<li>
<p align="JUSTIFY">Logical parallel port 1: I/O port 0x3BC, IRQ 7 (usually in monochrome graphics adapters)</p>
</li>
<li>
<p align="JUSTIFY">Logical parallel port 2: I/O port 0&#215;378, IRQ 7 (dedicated IO cards or using a controller built into the mainboard)</p>
</li>
<li>
<p align="JUSTIFY">Logical parallel port 3: I/O port 0&#215;278, IRQ 5 (dedicated IO cards or using a controller built into the mainboard)</p>
</li>
</ul>
<p align="JUSTIFY">If no printer port is present at 0x3BC, the second port in the row (0&#215;378) becomes logical parallel port 1 and 0&#215;278 becomes logical parallel port 2 for the BIOS. Sometimes, printer ports are jumpered to share an interrupt despite having their own IO addresses (i.e. only one can be used interrupt-driven at a time). In some cases, the BIOS supports a fourth printer port as well, but the base address for it differs significantly between vendors. Since the reserved entry for a fourth logical printer port in the BIOS Data Area (BDA) is shared with other uses on PS/2 machines and with S3 compatible graphics cards, it typically requires special drivers in most environments. Under DR-DOS 7.02 the BIOS port assignments can be changed and overridden using the LPT1, LPT2, LPT3 (and optionally LPT4) CONFIG.SYS directives.</p>
<h3 align="JUSTIFY"><a name="Access"></a><strong>Access</strong></h3>
<p align="JUSTIFY">DOS-based system will make the logical parallel ports detected by the BIOS available under device names such as <em>LPT1</em>, <em>LPT2</em> or <em>LPT3</em> (corresponding with logical parallel port 1, 2, and 3, respectively). These names derive from terms like Line Print Terminal, Local Print Terminal, or Line PrinTer. A similar naming convention was used on ITS, DEC systems, as well as in CP/M and 86-DOS (<em>LST</em>).</p>
<p align="JUSTIFY">In DOS, the parallel printers could be accessed directly on the command line. For example, the command &#8220;<tt>TYPE C:\AUTOEXEC.BAT &gt; LPT1</tt>&#8221; would redirect the contents of the AUTOEXEC.BAT file to the printer port. A <strong>PRN</strong> device was also available as an alias for LPT1. Some operating systems (like Multiuser DOS) allow to change this fixed assignment by different means. Some DOS versions use resident driver extensions provided by MODE, or the mapping can be changed internally via a CONFIG.SYS PRN=n directive (as under DR-DOS 7.02 and higher). DR-DOS 7.02 also provides optional built-in support for <em>LPT4</em> if the underlying BIOS supports it.</p>
<p align="JUSTIFY">PRN, along with CON, AUX and a few others are invalid file and directory names in DOS and Windows, even Windows XP. There is even an MS-DOS device in path name vulnerability in Windows 95 and 98, which causes the computer to crash if the user types &#8220;C:\CON\CON&#8221;, &#8220;C:\PRN\PRN&#8221; or &#8220;C:\AUX\AUX&#8221; in the Windows Explorer address bar. A patch to fix this bug has been released by Microsoft, but newly installed Windows 95 and 98 operating systems will still have the bug.</p>
<p align="JUSTIFY">A special &#8220;<tt>PRINT</tt>&#8221; command also existed to achieve the same effect. Microsoft Windows still refers to the ports in this manner in many cases, though this is often fairly hidden.In the Linux operating system the first LPT port is available via the filesystem as /dev/lp0.</p>
<h3 align="JUSTIFY"><a name="Program_interface"></a><strong>Program interface</strong></h3>
<p align="JUSTIFY">In versions of Windows that did not use the Windows NT kernel (as well as DOS and some other operating systems), programs could access the parallel port with simple outportb() and inportb() subroutine commands. In operating systems such as Windows NT and Unix (NetBSD, FreeBSD, Solaris, 386BSD, etc.), the microprocessor is operated in a different security ring, and access to the parallel port is inhibited, unless using the required driver. This improves security and arbitration of device contention. On Linux, inb() and outb() can be used when a process is run as root and an ioperm() command is used to allow access to its base address; alternatively, ppdev allows shared access and can be used from userspace if the appropriate permissions are set.</p>
<p align="JUSTIFY">The cross-platform library for parallel port access, libieee1284, also is available on many Linux distributions and provides an abstract interface to the parallel ports of the system. Access is handled in an open-claim-release-close sequence, which allows for concurrent access in userspace.</p>
<h2 align="JUSTIFY"><a name="Current_use"></a><strong>Current use</strong></h2>
<p align="JUSTIFY">For consumers, the USB interface — and sometimes Ethernet — has replaced the parallel printer port, for connections both to printers and to other devices.</p>
<p align="JUSTIFY">Many manufacturers of personal computers and laptops consider parallel to be a legacy port and no longer include the parallel interface. Smaller machines have less room for large parallel port connectors. The guidelines for Microsoft&#8217;s Windows Logo Program &#8220;strongly discourages&#8221; systems builders from including parallel ports.USB-to-parallel adapters are available that can make parallel-only printers work with USB-only systems. There are PCI (and PCI-express) cards that provide parallel ports. There are also some print servers that provide interface to parallel port through network. USB-to-EPP chips can also allow other non-printer device to continue to work on modern computers without a parallel port.</p>
<p align="JUSTIFY">For electronics hobbyists the parallel port is still often the easiest way to connect to an external circuit board. It is faster than the other common legacy port (serial port) and requires no serial-to-parallel converter, and requires far less interface logic and software than a USB target interface. However, Microsoft operating systems later than Windows 95/98 prevent user programs from directly writing to or reading from the PrinterPort. Current CNC Milling Machines also often make use of the parallel port to directly control the machine&#8217;s motors and attachments.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/02/parallel-port-interface/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>An introduction to Parallel port</title>
		<link>https://www.emblogic.com/blog/12/an-introduction-to-parallel-port/</link>
		<comments>https://www.emblogic.com/blog/12/an-introduction-to-parallel-port/#comments</comments>
		<pubDate>Mon, 30 Dec 2013 08:34:04 +0000</pubDate>
		<dc:creator><![CDATA[deepak.jaiswal]]></dc:creator>
				<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=7937</guid>
		<description><![CDATA[An Introduction to parallel port A parallel interface for connecting an external device. Parallel port is basically used to transfer data parallely . 8 bits of data is transmitted at a time in parallel port.On PCs, the parallel port uses &#8230; <a href="https://www.emblogic.com/blog/12/an-introduction-to-parallel-port/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>An Introduction to parallel port</p>
<p>A parallel interface for connecting an external device. Parallel port is basically used to transfer data parallely . 8 bits of data is transmitted at a time in parallel port.On PCs, the parallel port uses a 25-pin connector (type DB-25) and is used to connect printers, computers and other devices that need relatively high bandwidth. It is often called a Centronics interface after the company that designed the original standard for parallel communication between a computer and printer. (The modern parallel interface is based on a design by Epson.) A newer type of parallel port, which supports the same connectors as the Centronics interface, is the EPP (Enhanced Parallel Port) or ECP (Extended Capabilities Port). Both of these parallel ports support bi-directional communication and transfer rates ten times as fast as the Centronics port.</p>
<p>There are 5 modes of transferring data using parallel port :-</p>
<p>1- compatibility mode or centronic  mode<br />
2- nibble mode<br />
3-byte mode</p>
<p>4-ECP mode<br />
5- EPP mode</p>
<p>compatibility mode :- The Centronics interface is a standard input/output (I/O) interface designed in the 1970s for connecting printers and other devices. It was developed by the Centronics printer company which is now defunct. The Centronics interface, also known as a Parallel Port, became the standard means of connecting printers to personal computers for decades.</p>
<p>The technology that the Centronics interface developed into included a number of incarnations of the Parallel interface including the ECP (Entended Capabilities Parallel) and EPP (Enhanced Parallel Port) versions. The technology required a 25 way connector of which up to 17 wires were used in the specification and bi-directional communications became possible in the enhanced versions like ECP and EPP.</p>
<p>Today, the Centronics interface has been largely replaced by the universal serial bus (USB). For the most part, many manufactures have entirely omitted the parallel interface. However, a USB-to-parallel port adapter is available for PCs without a parallel port. These can be used for parallel printers and other peripheral devices that have a parallel interface.</p>
<p>Nibble mode :-The Nibble mode is the most common way to get reverse channel data from a printer or peripheral. This mode is usually combined with the Compatibility mode or a proprietary forward channel mode to create a complete bi-directional channel.<br />
All of the standard parallel ports provide 5 lines from the peripheral to the PC to be used for external status indications. Using these lines, a peripheral can send a byte of data (8-bits) by sending 2 nibbles (4-bits) of information to the PC in two data transfer cycles. Unfortunately, since the nACK line is generally used to provide a peripheral interrupt, the bits used to transfer a nibble are not conveniently packed into the byte defined by the Status register. For this reason, the software must read the status byte and then manipulate the bits in order to get a correct byte.</p>
<p>1. Host signals ability to take data by asserting HostBusy low<br />
2. Peripheral responds by placing first nibble on status lines<br />
3. Peripheral signals valid nibble by asserting PtrClk low<br />
4. Host sets HostBusy high to indicate that it has received the nibble and is not yet ready for another nibble.<br />
5. Peripheral sets PtrClk high to acknowledge host<br />
6. States 1 through 5 repeat for the second nibble.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/12/an-introduction-to-parallel-port/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PARALLEL PORT</title>
		<link>https://www.emblogic.com/blog/12/parallel-port-7/</link>
		<comments>https://www.emblogic.com/blog/12/parallel-port-7/#comments</comments>
		<pubDate>Fri, 20 Dec 2013 08:18:38 +0000</pubDate>
		<dc:creator><![CDATA[Ashish Mishra]]></dc:creator>
				<category><![CDATA[Device Drivers]]></category>
		<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://www.emblogic.com/blog/?p=7769</guid>
		<description><![CDATA[PARALLEL PORT Parallel port is the mostly used for interfacing line printers. It was introduced by IBM in early 1980&#8242;s. Earlier there was no standard defined for parallel port interfacing. Every company has their own standards for interfacing parallel port. &#8230; <a href="https://www.emblogic.com/blog/12/parallel-port-7/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p align="CENTER"><span style="color: #000000"><span style="font-family: Liberation Serif,serif"><span style="font-size: medium"><strong>PARALLEL PORT</strong></span></span></span></p>
<p align="LEFT">
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif">Parallel port is the mostly used for interfacing line printers. It was introduced by IBM in early 1980&#8242;s. Earlier there was no standard defined for parallel port interfacing. Every company has their own standards for interfacing parallel port. Then came the IEEE 1284 standard (<strong>Standard Signaling Method for bi-directional parallel peripheral interface for personal computers</strong>)<strong>. </strong></span></span></p>
<p align="JUSTIFY">
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif">There are three base addresses defined for parallel port which can be used for interfacing parallel port. Those addresses are</span></span></p>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif"> 0&#215;378-0x37A</span></span></p>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif"> 0&#215;278-0x27A</span></span></p>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif"> 0x3BC-0x3BF</span></span></p>
<p align="JUSTIFY">
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif">A parallel port is a 25 pin connector having 8 data pins, 5 status pins and 4 control pins and rest of the pins are connected to ground.</span></span></p>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif"> 2 &#8211; 9 = 8 Data Pins</span></span></p>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif"> 10,11,12,13,15 = Status Pins</span></span></p>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif"> 1, 14, 16,17 = Control Pins</span></span></p>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif"> 18 – 25 = Ground Pins </span></span></p>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif">This port will allow the input of up to 9 bits or the output of 12 bits at any one given time. </span></span></p>
<p align="JUSTIFY">
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif">There are 5 data transfer mode in parallel communication:</span></span></p>
<ol>
<ol>
<ol>
<li>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif">Compatibility Mode: Data can be transferred only in one direction using data register.</span></span></p>
</li>
<li>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif">Nibble mode: Data can be transferred in both direction in half-duplex manner (only four bit at a time).</span></span></p>
</li>
<li>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif">Byte Mode: 8bit data can be transferred in both direction in half-duplex manner.</span></span></p>
</li>
<li>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif">EPP Mode. </span></span></p>
</li>
<li>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif">ECP Mode.</span></span></p>
</li>
</ol>
</ol>
</ol>
<p align="JUSTIFY">
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif">Compatibility, Nibble &amp; Byte modes use just the standard hardware available on the original Parallel Port cards while EPP &amp; ECP modes require additional hardware which can run at faster speeds, while still being compatible with the Standard Parallel Port. </span></span></p>
<p align="JUSTIFY">
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif"><span style="font-size: small"><strong>Compatibility Mode:</strong></span></span></span></p>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif"><span style="font-size: small">This mode defines the protocol used by most PCs to transfer data to a printer. It is commonly called the Centronics mode and is the method utilized with the standard parallel port. In this mode, data is placed on the port&#8217;s data lines, the printer status is checked for that it is not Busy, and then a data Strobe is generated by the software to send the data to the printer</span></span></span></p>
<p align="JUSTIFY"><span style="color: #000000"><span style="font-family: Liberation Serif,serif"><span style="font-size: small"><br />
</span></span></span><strong><span style="color: #000000"><span style="font-family: Liberation Serif,serif"><span style="font-size: small">Compatibility Mode steps:</span></span></span></strong></p>
<p align="JUSTIFY">
<ol>
<li>
<p align="JUSTIFY"><span style="font-family: Liberation Serif,serif"><span style="font-size: small"><span style="color: #000000">Write the data to the data register</span> </span></span></p>
</li>
<li>
<p align="JUSTIFY"><span style="font-family: Liberation Serif,serif"><span style="font-size: small"><span style="color: #000000">Program reads the status register to check that the printer is not BUSY</span> </span></span></p>
</li>
<li>
<p align="JUSTIFY"><span style="font-family: Liberation Serif,serif"><span style="font-size: small"><span style="color: #000000">If not BUSY, then Write to the Control Register to assert the STROBE line</span> </span></span></p>
</li>
<li>
<p align="JUSTIFY"><span style="font-family: Liberation Serif,serif"><span style="font-size: small"><span style="color: #000000">Write to the Control register to de-assert the STROBE line</span> </span></span></p>
</li>
</ol>
<p align="JUSTIFY">To transfer one byte of data it requires four operation and at least as many additional instructions. The data transfer rate in this protocol is 150K bytes per second. This mode is for the forward channel only. This mode was included as a way to provide backward compatibility with the huge base of installed printers and peripherals. The other modes are used to provide the reverse channel and high performance communication links. Many of the integrated 1284 I/O controllers have implemented a mode that uses a FIFO buffer to transfer data with the Compatibility mode protocol. This mode is referred to as Fast Centronics or Parallel Port FIFO Mode. When this mode is enabled, data written to the FIFO port will be transferred to the printer using hardware generated strobes for the handshaking.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/12/parallel-port-7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Parallel Port Status to Prabjot Sir</title>
		<link>https://www.emblogic.com/blog/07/parallel-port-status-to-prabjot-sir-3/</link>
		<comments>https://www.emblogic.com/blog/07/parallel-port-status-to-prabjot-sir-3/#comments</comments>
		<pubDate>Sat, 21 Jul 2012 16:41:57 +0000</pubDate>
		<dc:creator><![CDATA[salathia]]></dc:creator>
				<category><![CDATA[Device Drivers]]></category>
		<category><![CDATA[Parallel Port Driver]]></category>

		<guid isPermaLink="false">http://emblogic.org/blog/?p=4110</guid>
		<description><![CDATA[Implemented Compatibility Mode. Implemented Nibble mode for single and multiple bytes. Implemented Byte mode for single byte. Working on Byte mode for multiple bytes.]]></description>
				<content:encoded><![CDATA[<ol>
<li>Implemented Compatibility Mode.</li>
<li>Implemented Nibble mode for single and multiple bytes.</li>
<li>Implemented Byte mode for single byte.</li>
<li>Working on Byte mode for multiple bytes.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>https://www.emblogic.com/blog/07/parallel-port-status-to-prabjot-sir-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
