原创 并口编程

2008-9-28 22:52 2551 8 9 分类: 通信

以前做过用并口模拟JTAG时序来配置、回读、动态局部重配置FPGA,参考24a0的JTAG。总结并口编程如下:

使用25针并口 



 针


 方向


 2,3,4,5,6,7,8,9


 双向


 1,14,16,17


 输出


 10,11,12,13,15


 输入


 18,19,20,21,22,23,24,25


 地


 


一般使用的LPT(并口)的地址是0x378H-0x37AH


0x378H是8bit数据寄存器的地址,对应并口针的顺序是9,8,7,6,5,4,3,2


0x379H是状态寄存器,11,10,12,13,15 - - -


0x37AH是控制寄存器,- - - 并口中断允许位,17,16,14,1


也就是说PC的0x378H可以用来做输入和输出,0x37AH的低4位可以用来输出,0x379H是输入。这样就可以用并口模拟很多时许,比如IIC、JTAG、SPI等等。


编程实现时。先打开并口,在网上可以找到很多这样的例子。


然后用_outp(address,data)向地址发数据既可。


 


注意:并口的输出电压是4.66V左右,FPGA需要的引脚输入电压一般的3.3或更低。

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

用户461316 2008-9-29 09:25

收藏!!!!!!!

用户1179905 2008-5-27 17:47

小弟才疏學淺,能否請CESAD大俠,把添加代碼的短短幾行 ISRHandler() CODE 直接寄給小弟呢? 感謝. Email:appach0edu@mail.educities.edu.tw

用户1179905 2008-5-27 17:38

小弟才疏學淺,能否請CESAD大俠,把添加代碼的短短幾行 ISRHandler() CODE 直接寄給小弟呢? 感謝. appach0edu@mail.educities.edu.tw

crazy_embeddedsystem_775092187 2008-5-27 12:44

你的在IISR做修改就可以,在ISRHandler()函数里面添加代码就可以,代码的主要内容是: 1、首先识别物理中断号, 2、然后再通过读相应的寄存器来判断到底示哪个中断产生了, 3、然后根据情况判断到底应该返回一个SYSINTR

用户1179905 2008-5-27 12:00

從CESAD大俠的回應中,我可以感受到你對可安裝中斷的專業研究,不過你卻提出不需MAPPING,使我一直無法從你的回應中搞定它,因為我只是一個好奇的初學者! 我想把問題簡化處理:只用2個COM共享1個IRQ. DRIVER和IISR都是用 CE5.0 提供的標準DRIVER及ISR16550.DLL去做修改. 能否請CESAD大俠詳細告知到底該改寫些什麼? 如何改寫? 才能讓這2個COM共享1個IRQ.

crazy_embeddedsystem_775092187 2008-5-22 22:50

MAPPING主要是完成一个注册工作,主要工作是ISR来做,但是iISR就不需要了,因为ISR主要的工作是返回一个SYSINTR,所以这里面由你自己写啦! 这也就是二级中断的体系结构啦!

crazy_embeddedsystem_775092187 2008-5-22 22:48

这里面不用MAPPING的,可安装中断不需要的。

用户1179905 2008-5-19 16:49

首先感謝CESAD的熱心回應. 可是問題是,IRQ和SYSINTR不是要有mapping的關係嗎? 我該如何把這6個不同的SYSINTR寫入OAL, 使他們能同時對應到1個IRQ呢? 感謝指教.

crazy_embeddedsystem_775092187 2008-5-7 12:37

在驱动程序里面,主要用的示SYSINTR,这个SYSINTR主要与相对应的IST来处理,所以你的六个COM,可以用6个SYSINTR; 下来呢,就是在你的ISR16550.DLL里面的ISR里,做处理。也就是做一个IRQ到6个SYSINTR的过程,这个就简单了; 你的ISR进入后,当然是在对应的IRQ产生,然后你可以在里面进一步做处理。例如读取对应端口的数据,来判断到底是哪一个COM口的中断,然后在返回相应的SYSINTR,然后对应的IST会执行。

crazy_embeddedsystem_775092187 2008-5-7 12:32

可以啊!
相关推荐阅读
用户6646 2010-06-09 16:44
Linux C中令人讨厌的段错误
作者:孙晓明,华清远见嵌入式学院讲师同学们在做练习的时候,编译完程序,执行的时候,有时会莫名的出现 “Segment fault”,即段错误,段错误是让许多C程序员都头疼的提示,因为对于这种模糊的提示...
用户6646 2010-06-09 13:06
VC6 显示行号 (无限制注册版)
make编译时出现错误, 会提示哪一行。可惜vc中不能显示行号,很是郁闷。这个插件可以显示行号,呵呵,很有用。VC显示行号插件说明-----------------------------------...
用户6646 2010-05-22 10:07
删除 nero search 的有效方法
不知道从什么时候开始,Nero多出来一个绑定的Nero Search,虽然可以不然它显示,可是他仍然会在后台占用资源。可以用以下方法解决:开始->运行,依次输入下列文字回车、确定即可(每次输一行...
用户6646 2010-04-03 08:46
2007年5月22日完成的全电控小电视(版本V2.0)
基础功能部分写了4000多行汇编,加上遥控红外部分达到了6000多行,大体介绍如下:1. 内置开关电源转换,11-37V供电;2. 全轻触操作,无机械可调器件,PWM调节亮度/色彩/背光;3.按钮有:...
用户6646 2010-03-17 09:41
三极管HFE与β的关系
hfe是三极管H参数,全称“共发射极低频小信号输出交流短路电流放大系数”,在等效四端网络中又叫“h21”。β是Ic与Ib函数关系的普遍表达式,尤其特指在晶体管基区中电流的分配关系。无论在教科书还是在应...
用户6646 2010-03-17 09:35
三极管饱和(2)
from:http://blog.ednchina.com/xcbao/10816/category.aspx本图片来自于<模拟集成电路的分析与设计>,用来表现三极管饱和时的carriers的分布。但...
我要评论
1
8
关闭 站长推荐上一条 /3 下一条