打印

闲的蛋疼,用并口点了个流水灯...

[复制链接]
3416|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aceice|  楼主 | 2008-10-20 22:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
平时接触上位机编程很少找资料都找了半天。
也参照了匠人的并口SPI程序,不过outputb好像只能在DOS或98下用,NT系列的必须要个什么ring0权限(还没搞懂)。
最后参照Easy51Pro的源码,找到了Winio.lib~好东西啊!
随即决定以后用PC进行初期时序验证。做PCB前能有个大概的样子出来,还可以使自己写的代码易于移植。
点流水灯的例子就不贴出来了,太简单了,拿Winio的例子照着改就行。
-----------------------
给个链接,Winio官方网站。
http://www.internals.com/

相关帖子

沙发
aceice|  楼主 | 2008-10-20 22:29 | 只看该作者

Winio中文说明---转自百度百科

    WinIO程序库允许在32位的Windows应用程序中直接对I/O端口和物理内存进行存取操作。通过使用一种内核模式的设备驱动器和其它几种底层编程技巧,它绕过了Windows系统的保护机制。
  WinNT/2000/XP下,WinIO函数库只允许被具有管理者权限的应用程序调用。如果使用者不是以管理者的身份进入的,则WinIO.DLL不能够被安装,也不能激活WinIO驱动器。通过在管理者权限下安装驱动器软件就可以克服这种限制。然而,在这种情况下,ShutdownWinIo函数不能在应用程序结束之前被调用,因为该函数将WinIO驱动程序从系统注册表中删除。

    该函数库提供8个函数功能调用:
  
bool _stdcall InitializeWinIo();
  本函数初始化WioIO函数库。
  必须在调用所有其它功能函数之前调用本函数。
  如果函数调用成功,返回值为非零值。
  如果调用失败,则返回值为0。

void _stdcall ShutdownWinIo();
  本函数在内存中清除WinIO库
  本函数必须在中止应用函数之前或者不再需要WinIO库时调用,

bool _stdcall GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);
  使用此函数从一个输入或输出端口读取一个字节/字/双字数据。
  参数:
  wPortAddr – 输入输出端口地址
  pdwPortVal – 指向双字变量的指针,接收从端口得到的数据。
  bSize – 需要读的字节数,可以是1 (BYTE), 2 (WORD) or 4 (DWORD).
  如果调用成功,则返回非零值。
  如果函数调用失败,则函数返回值为零。

bool _stdcall SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
  使用本函数将一个字节/字/双字的数据写入输入或输出接口。
  参数:
  wPortAddr – 输入输出口地址
  dwPortVal – 要写入口的数据
  bSize – 要写的数据个数,可以是 1 (BYTE), 2 (WORD) or 4 (DWORD).
  如果调用成功,则返回非零值。
  如果函数调用失败,则函数返回值为零。 

PBYTE _stdcall MapPhysToLin(PBYTE pbPhysAddr, DWORD dwPhysSize, HANDLE *pPhysicalMemoryHandle)
  使用此函数将物理内存的一部分映射到一个32位应用程序的线性地址空间。 
  下面是一个例子: 
  PBYTE pbLinAddr;
  HANDLE PhysicalMemoryHandle;
  pbLinAddr = MapPhysToLin(0xA0000, 65536, &PhysicalMemoryHandle);
  该函数将把物理地址范围为0xA0000 - 0xAFFFF的地址空间映射到与应用程序对应的线性地址空间。 返回值为一个与物理地址0xA0000相关的线性地址。如果出现错误,则返回值为NULL。
  参数:
  pbPhysAddr – 指向物理地址的指针
  dwPhysSize – 需要映射的字节数
  pPhysicalMemoryHandle – 变量指针,如果调用成功,负责接收物理内存句柄。随后本句柄在调用UnmapPhysicalMemory函数时作为其第一个参数。

bool _stdcall UnmapPhysicalMemory(HANDLE PhysicalMemoryHandle, PBYTE
  pbLinAddr)
  使用本函数解除原先使用MapPhysToLin函数映射的一段线性物理内存区域,该区域被映射到应用程序所属的线性地址空间。
  Windows 9x 应用程序不需要调用此函数。
  参数:
  PhysicalMemoryHandle – 物理内存区域所属的句柄,此参数由对MapPhysToLin函数的调用返回。
  pbLinAddr – MapPhysToLin函数调用返回的线性地址。

bool _stdcall GetPhysLong(PBYTE pbPhysAddr, PDWORD pdwPhysVal);
  从指定的物理地址读取一个双字数据。
  参数:
  pbPhysAddr – 指向物理地址的指针。
  pdwPhysVal – 指向一个双字变量的指针,接收从物理内存中传来的数据。
  如果此函数调用成功,返回一个非零值。
  如果函数调用失败,则返回一个零值。 

bool _stdcall SetPhysLong(PBYTE pbPhysAddr, DWORD dwPhysVal);
  将一个双字型数据写入指定的物理地址。
  参数:
  pbPhysAddr – 指向物理地址的指针。
  pdwPhysVal – 指定待写入物理内存地址出的双字型数据。
  如果此函数调用成功,返回一个非零值。
  如果函数调用失败,则返回一个零值。

使用特权

评论回复
板凳
李冬发| | 2008-10-21 02:08 | 只看该作者

WinIO是用源码的,你把源码嵌到自己的程序会更好

使用特权

评论回复
地板
hotpower| | 2008-10-21 02:54 | 只看该作者

4个函数即可~~~

InitializeWinIo();
ShutdownWinIo();
SetPortVal(WORD wPortAddr, DWORD dwPortVal, BYTE bSize);
GetPortVal(WORD wPortAddr, PDWORD pdwPortVal, BYTE bSize);

相关链接:http://blog.**/hotpower/172287/message.aspx

使用特权

评论回复
5
zjf0000| | 2008-10-21 08:38 | 只看该作者

真是不错,好东西

使用特权

评论回复
6
aceice|  楼主 | 2008-10-21 09:36 | 只看该作者

呵呵,我自己的程序就不帖了

官网上的包里是包含源码的,只是我比较懒而已。
控制IO确实只用的到那4个函数。

使用特权

评论回复
7
doob| | 2008-10-21 10:37 | 只看该作者

你们咋都知道啊??

使用特权

评论回复
8
holle| | 2008-10-21 10:54 | 只看该作者

并口的逻辑电平是什么?

5V TTL?

使用特权

评论回复
9
hotpower| | 2008-10-21 20:39 | 只看该作者

VC中WINIO应用之要点

使用特权

评论回复
10
aceice|  楼主 | 2008-10-21 22:11 | 只看该作者

API函数uS级延时的方法

这个正是我所需的,果然还是大虾经验丰富啊!

使用特权

评论回复
11
hotpower| | 2008-10-21 22:16 | 只看该作者

在LabWindows/CVI中完成并口的I2C/SmBus/HDQ16协议的封装

哈哈~~~俺从DOS时代就喜欢折腾并口了~~~
相关链接:http://blog.**/hotpower/29897/message.aspx

使用特权

评论回复
12
hotpower| | 2008-10-21 22:22 | 只看该作者

在DSP中实现并口+McBSP通讯测试及下载程序和数据等功能

这是个McBSP(SPI)的DSP并口下载程序应用~~~
相关链接:http://blog.**/hotpower/23629/category.aspx

使用特权

评论回复
13
armecos| | 2008-10-22 08:49 | 只看该作者

操作特权模式下的端口有很多方法,

1、编写WDM驱动,应用程序通过DeviceIoControl间接操作端口;
2、将操作端口的函数从用户模式提升到内核模式,就是把函数地址传到驱动程序里面执行啦;
3、设置IOPL和任务状态段中的I/O允许位图,这样Ring23级的用户模式程序就可以不受限制地访问I/O端口了。

看看《快快乐乐跟我学WDM驱动》吧!

更多内容,详见:
《培训系列“丛书”》
www.armecos.com
-----------------------------------
More details, see:
《"Series Books" of Training》
www.armecos.com

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

374

主题

2182

帖子

0

粉丝