阅读:1294回复:8
大虾请救命
我是初学者,最近写了一个简单的串口读写。
使用自定义码, 在DispatchDeviceControl()函数中 .................... //前边得到uControlCode。 switch(uControlCode) { case SERIALPORT_READ: //读串口0x3F8 读出的第一个字节为长度 { UCHAR nReadLength = READ_PORT_UCHAR((PUCHAR)0X3F8); for(UCHAR nFor = 0; nFor < nReadLength; nFor++) { pszBuffer[nFor] = READ_PORT_UCHAR((PUCHAR)0xF38); } irp->IoStatus.Information = nReadLength; } break; case SERIALPORT_WRITE: //写串口0x3F8 写的第一个字节位长度 { UCHAR nWriteLength = (UCHAR)pIoStackLocation->Parameters.DeviceIoControl.InputBufferLength; WRITE_PORT_UCHAR((PUCHAR)0X3F8, nWriteLength); for(UCHAR nFor = 0; nFor < nWriteLength; nFor++) { WRITE_PORT_UCHAR((PUCHAR)0X3F8, pszBuffer[nFor]); } irp->IoStatus.Information = nWriteLength; } break; default: break; } ................. //后边是完成,返回。 可是测试程序 写还没做时,读程序确能读出一群乱码。ASCII 全是255。 大虾请救命,菜鸟谢谢大家。 |
|
论坛版主
![]() |
沙发#
发布于:2004-01-09 12:06
你的串口上有没有接信号源之类的?没有数据读出来255应该正常吧,另外你看看需不需要设置一下控制寄存器,我记得原来在WIN的虚拟86模式下用串口做板子调试的时候要先ACTIVE一下,可能还要做一个动作
|
|
板凳#
发布于:2004-01-09 13:48
十分感谢楼上这位大虾。
我们先向串口写入一个串,然后再另一测试进程中读,还是乱码。 怎么办? 刚接触,也不知怎么调试,请大虾们在详细讲讲, 小弟不胜感激! |
|
地板#
发布于:2004-01-09 16:14
我问的太面了,没人理我????
请高手不吝赐教,小弟谢了。 |
|
地下室#
发布于:2004-01-09 16:18
写前要判断写寄存器空, 读前要判断读寄存器里有没有数据!!!!
|
|
论坛版主
![]() |
5楼#
发布于:2004-01-09 21:20
硬件BUFFER肯定有,但是WIN自己怎么么管理232缓冲区不太清楚了,刚才这位兄弟说的你试试,要不然你就写个循环忙读,看看有没有变化,要不要设一下控制寄存器啊,兄弟,你再研究研究。
|
|
6楼#
发布于:2004-01-10 03:18
数据读出来是FF设不正常,因为TxD跟RxD是两独立通道,互相没关系的.它不会自动把TxD的data送到RxD去让你去读 !!!!
但可在串口另一端接一台机echo你所发的data(如终端机),这应可把数据读出来,或把TxD和RxD(pin2 and 3)连接在一起试试(象loopback adaptor之类) !! |
|
7楼#
发布于:2004-01-10 10:18
感谢楼上各位大虾。
//引用 //--------------------------------------------------------- 硬件BUFFER肯定有,但是WIN自己怎么么管理232缓冲区不太清楚了,刚才这位兄弟说的你试试,要不然你就写个循环忙读,看看有没有变化,要不要设一下控制寄存器啊,兄弟,你再研究研究。 //--------------------------------------------------------- 测试程序利用忙等待还是不行。 小弟是新手,对硬件很多还是不了解,大家能不能写段代码? |
|
论坛版主
![]() |
8楼#
发布于:2004-01-12 17:23
对了,我记得传口可以设城LOOPBACK模式的,你先确保有数据写到接受BUFFER中,实在不行就接信号源(注意232电平定义),先有了数据再判断试不是程序的问题!
|
|