【请教】在AT91SAM9261 WINCE6上移植16C554驱动

时间:2022-09-08 18:57:46
我的系统需要扩展串口,我选用了16C554芯片。在论坛里面找了一些资料,说是可以利用16550的驱动来做,配置工作很少,但都讲的很笼统,因为我的WINCE的基础不是很好,不是很懂。下面是我的理解和问题,请指教:
1,需要移动16550的驱动到我自己的BSP下。这是必须的吗?放在PUBLIC下不行吗?里面有COM16550, SER16550 OO16550...,我应该使用哪一个?如果需要移动,请问改如何移动?
2,注册表如何制作,网上能找到很多,比如
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/Serial4]
 "DeviceArrayIndex"=dword:4
 "Irq"=dword:40    ; 
 "MemBase"=dword:7F005C00
 "MemLen"=dword:40
 "ISTTimeouts"=dword:200  ; every 512 ticks checking Modem status.
 "Prefix"="COM"
 "Index"=dword:5
 "Dll"="mycom16550.Dll"
 "Order"=dword:30
 "Port"="COM5:"
 "DeviceType"=dword:0
 "FriendlyName"="serial5"
 "Tsp"="unimodem.dll"
 "IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
 "DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00
这个正确吗?我用的9261的PC3-PC6脚,请问这里的IRQ对应应该是什么号?据说不是128+3...7。
IOBASE是16C554的几个片选对应的物理地址吗?
3,source文件如何制作? 
4,还有其他问题需要处理吗?

24 个解决方案

#1


1,需要移动16550的驱动到我自己的BSP下。这是必须的吗?放在PUBLIC下不行吗?里面有COM16550, SER16550 OO16550...,我应该使用哪一个?如果需要移动,请问改如何移动?
----------------------------------------------
可以在你的osdesign下的subproject里面新添加一个工程,然后将C:\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\SERIAL下面的com16550、com_mdd2、isr16550、0016550、ser16550和serpddcm文件拷贝过去,然后编译工程可以得到com16550.dll文件。当然编译前要修改工程的属性栏,要添加include lib以及link下的路径等。
这样弄的话以后你修改com16550的文件,也不会影响到原有com驱动,并且每次你只要编译整个subprojecet就可以了,也不用编译整个os

#2


谢谢楼上的指点,你这种方法我没有玩过。
不需要注册表什么的吗?我怎么设置16C554的地址和中断号呢,还有串口号?是不是只需在写应用程序的时候链接上这个DLL就可以了?
能介绍个直接编译进内核的方法吗?谢谢。

#3


注册表当然需要的啦,注册表内容你可以参照下系统自带的com口的注册信息,网上也有很多帖子关于注册表怎么写的。16c554的中断地址和中断号你要查spec的吧。串口号你可以自己设置,别跟其他设备重复就可以了。只要你注册表弄好了,把dll添加进你的os里面编译一下就可以了

#4


nyp860624,我在按你的方法制作DLL,碰到一些问题,能指导一下吗?我的QQ,112366071

#5


引用 4 楼 demoxie1 的回复:
nyp860624,我在按你的方法制作DLL,碰到一些问题,能指导一下吗?我的QQ,112366071


DLL网络上很多流驱动的,你可以参考下GPIO或者LED驱动来做

#6


引用 5 楼 wswwxk 的回复:
引用 4 楼 demoxie1 的回复:
nyp860624,我在按你的方法制作DLL,碰到一些问题,能指导一下吗?我的QQ,112366071


DLL网络上很多流驱动的,你可以参考下GPIO或者LED驱动来做

我不想重写16C554的驱动,只想运用16550的现成的程序来驱动它,这样做应该是可以的。

#7


是在编译dll的时候出的问题吗?这个主要就是添加一些lib,如果是在编译阶段出错了,你就在C/C++属性栏里看看你缺少什么,如果是link阶段的问题,就在link属性栏下面的路径添加一些就可以了。一般出的问题都是一些找不到库函数的问题,你自己在根目录下收索下,添加进去路径就可以的。不方便上QQ,有问题在这提出来大家共同学习下就能解决的

#8


nyp860624,谢谢。
我还是打算直接在内核中编译dll,不单独生成dll。
网上看到gooogleman有个wince 5下面的一个三星arm的16C552的资料,等板子来了模仿试试看。
在这里谢谢gooogleman。

#9


我按照googleman的方法把comm16550.def,com16550.cpp,pdd16550.cpp文件copy到我的bsp下,我新建了一个目录,然后制作makefile sources,修改platform.bib .reg文件,等等。
我按照两种方法(网上找到的,不是很明白其中的意思)制作了com16550.reg。
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\S16550_A]
"DeviceArrayIndex"=dword:0
"IrqNumber"=dword:83      
"IOBase"=dword:10000000
"IOLen"=dword:8
;"ISTTimeouts"=dword:200  ; every 512 ticks checking Modem status.
"Prefix"="COM"
"Index"=dword:6
"Dll"="com16550.Dll"
"Order"=dword:0
"Priority"=dword:0
;"Port"="COM6:"
;"DeviceType"=dword:0
;"FriendlyName"="serial6"
;"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
;"DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\S16550_B]
    "IRQ"=dword:84
    "Dll"="com16550.dll"
    "Prefix"="COM"
    "DeviceArrayIndex"=dword:0
    "IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}"
    "Index"=dword:7
    "Order"=dword:2
    "RegStride"=dword:2
    "IoLen"=dword:8
    "IOBase"=dword:10000008
    "InterfaceType"=dword:0
    "BusNumber"=dword:0
编译产生nk.nb0,没有报错。
烧录文件到nandflash,启动系统,一切正常,查看注册表,在.../drivers/buildin能找到我创建的两个串口,内容也和我在.reg中设定的一样。
但是当我用串口测试工具去测试串口是,却发现里面根本没有这两个串口,只有9261自带的两个串口在里面,请各位看看到底是什么原因?
是注册表的问题,还是别的问题?会是IRQ或IOBASE的问题吗?

#10


你说的在.../drivers/buildin能找到你创建的两个串口,这个只能说明你编写的注册表信息已经加载到你的nk里面了,即使你不插硬件设备,你也可以在buildin下面看到的。
你到.../drivers/active下面看看,要是能找到你的设备的注册信息那才能说明你的驱动添加成功了。

#11


引用 10 楼 nyp860624 的回复:
你到.../drivers/active下面看看,要是能找到你的设备的注册信息那才能说明你的驱动添加成功了。

我在active下面没能发现这两个设备,说明没有添加成功。
我用检测发现:
cpdd16550::Init(){}中
m_hISTEvent = CreateEvent(0,FALSE,FALSE,NULL);
m_hISTEvent = NULL, 程序在这里return FALSE了。
不知如何解决。

#12


发现原因了,我需要在注册表中定义"SysIntr”。但是当我设为13时与USB的冲突。
请问这个值该如何设定?我用的是AT91SAM9261,中断时GPIO,PC3

#13


我把"SysIntr" = dword:15时,active下面我能看到这个串口,并且我用串口测试工具也能看到这个串口。当我设置串口的时候,会显示:
+OALIntrDisableIrqs(1, 0xd15dec04)
当我打开串口的时候,会显示:
+OALIntrDisableIrqs(1, 0xd15df518)
+OALIntrDisableIrqs(1, 0xd15df670)
我在com16550.cpp中加入,测试程序,发现:
不管是设置哪个串口(16C544或9261自带的串口),不管是把字节长度设为多少,点击设置串口和打开串口都会运行程序:
 CPdd16550::SetByteSize(ULONG ByteSize)
我现在用的注册表信息是这样的:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\S16550_A]
"DeviceArrayIndex"=dword:0
"Irq"=dword:83      
"SysIntr" = dword:15
"IOBase"=dword:10008000
"IOLen"=dword:8
;"ISTTimeouts"=dword:200  ; every 512 ticks checking Modem status.
"Prefix"="COM"
"Index"=dword:6
"Dll"="com16550.Dll"
"Order"=dword:0
"Priority"=dword:0
;"Port"="COM6:"
;"DeviceType"=dword:0
;"FriendlyName"="serial6"
;"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
;"DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00
请帮忙看看是什么问题?
我没有用isr16550.dll,也没有生成这个文件,(不知道如何做。)

#14


引用 13 楼 demoxie1 的回复:
我把"SysIntr" = dword:15时,active下面我能看到这个串口,并且我用串口测试工具也能看到这个串口。当我设置串口的时候,会显示:
+OALIntrDisableIrqs(1, 0xd15dec04)
当我打开串口的时候,会显示:
+OALIntrDisableIrqs(1, 0xd15df518)
+OALIntrDisableIrqs(1, 0xd15df670)
……

帮顶

#15


我终于生成了isr16550.dll,
我在注册表中加上了:
"IsrDll" = "isr16550.dll"
"IsrHandler"="ISRHandler"
"Flags"=dword:0 ;disable user mode if we need isr16550
结果,当打开串口测试工具,并打开这个串口,
DEBUG口每秒输出:
+OALIntrDisableIrqs(1, 0xd15ffd08);这时我没有进行任何接收或发送操作
我在com16550.cpp的程序中加入了读寄存器的操作,结果读到的数据都是错了。

#16


你注册表中的irq、sysintr、iobase这些跟你硬件是匹配的吗?irq是十六进制的,你的怎么会那么大呢?

#17


我用的是AT91SAM9261的PC3脚,所以它的物理中断号应该就是这个64+64+3。难道IRQ的值不应该是物理中断号?
SYSINTR我不知道应该如何设定。
IOBASE应该是物理地址吧?应该没问题。我用的是NCS0,它的物理地址为0X1000 0000,又因74138上用了A15的高电平控制,所以这个物理地址应该就是0x1000 8000。
会不会是IRQ和SYSINTR有问题?应该如何设定?

#18


有人说是用要MemBase和MemLen,但是我改成这两个后,16550init通不过。
我感觉现在的主要问题是中断和地址问题。实在是搞不清楚irq, sysintr和iobase, membase, iolen memlen应该选哪个,应该是什么值。

#19


我就不知道呢,目前安装厂家给的WIFI 就过不了

#20


终于可以接收和发送数据了。目前发送一切正常,但是接收有问题:
只能很少的情况是接收数据正确的,其他时候接收到的数据都多于实际的数据,比如:
上位机发送:aaabbbcccdddeeefffggghhh
接收到的数据却为:aaabbbcccdddeeefffggghhhcccccccccccccccccccccccccccccccccccccccccc(c的个数有多又少,少的几个,多的有30,40个)
或aaabbbcccdddeeefaaaaaaaaaaaaaaaaaaaaaaffggghhhccccccccccccccccc

上位机发送:1112222wwww4444555556666
接收到的数据位:1112222wwww4444555556666wwwwwwwwwwwwwwwwwwww或1112222wwww44446666666666666555556666

请问是什么原因啊?会不会是中断的问题?注册表中加或不加isr16550.dll,都接收的不正确。
接收的任何服务程序我没改过。是wince6.0 16550驱动的bug吗?

#21


没人能帮忙看看吗?有人说是我对16550的AT91SAM9261的读写时序没有设置对。
我是在init.c程序中加入了
AT91SAM926x_SetChipSelectTimingIn_ns( pSMC, // pSMC 0, // Chip Select
                                        GetMasterClock(FALSE),
AT91C_DM9000_NWE_SETUP, // dwNWE_SETUP
AT91C_DM9000_NCS_WR_SETUP,// dwNCS_WR_SETUP
0,      // dwNRD_SETUP
20, // dwNCS_RD_SETUP
AT91C_DM9000_NWE_PULSE, // dwNWE_PULSE
AT91C_DM9000_NCS_WR_PULSE, // dwNCS_WR_PULSE
140, // dwNRD_PULSE
100, // dwNCS_RD_PULSE
160, // dwNRD_CYCLE
AT91C_DM9000_NWE_CYCLE );// dwNWE_CYCLE
我对其中的参数做了很多修改,结果还是一样。
请帮忙看看。

#22


你的wince系统是在什么硬件上跑的呢?如果是x86上面跑的话就应该用iobase和iolen,其他的话就应该用membase和memlen

#23


引用 20 楼 demoxie1 的回复:
终于可以接收和发送数据了。目前发送一切正常,但是接收有问题:
只能很少的情况是接收数据正确的,其他时候接收到的数据都多于实际的数据,比如:
上位机发送:aaabbbcccdddeeefffggghhh
接收到的数据却为:aaabbbcccdddeeefffggghhhcccccccccccccccccccccccccccccccccccccccccc(c的个数有多又少,少的几个,多的有30……

还是配置有问题

#24


引用 22 楼 nyp860624 的回复:
你的wince系统是在什么硬件上跑的呢?如果是x86上面跑的话就应该用iobase和iolen,其他的话就应该用membase和memlen

你的ARM用IOBASE和IOLEN就可以了。

#1


1,需要移动16550的驱动到我自己的BSP下。这是必须的吗?放在PUBLIC下不行吗?里面有COM16550, SER16550 OO16550...,我应该使用哪一个?如果需要移动,请问改如何移动?
----------------------------------------------
可以在你的osdesign下的subproject里面新添加一个工程,然后将C:\WINCE600\PUBLIC\COMMON\OAK\DRIVERS\SERIAL下面的com16550、com_mdd2、isr16550、0016550、ser16550和serpddcm文件拷贝过去,然后编译工程可以得到com16550.dll文件。当然编译前要修改工程的属性栏,要添加include lib以及link下的路径等。
这样弄的话以后你修改com16550的文件,也不会影响到原有com驱动,并且每次你只要编译整个subprojecet就可以了,也不用编译整个os

#2


谢谢楼上的指点,你这种方法我没有玩过。
不需要注册表什么的吗?我怎么设置16C554的地址和中断号呢,还有串口号?是不是只需在写应用程序的时候链接上这个DLL就可以了?
能介绍个直接编译进内核的方法吗?谢谢。

#3


注册表当然需要的啦,注册表内容你可以参照下系统自带的com口的注册信息,网上也有很多帖子关于注册表怎么写的。16c554的中断地址和中断号你要查spec的吧。串口号你可以自己设置,别跟其他设备重复就可以了。只要你注册表弄好了,把dll添加进你的os里面编译一下就可以了

#4


nyp860624,我在按你的方法制作DLL,碰到一些问题,能指导一下吗?我的QQ,112366071

#5


引用 4 楼 demoxie1 的回复:
nyp860624,我在按你的方法制作DLL,碰到一些问题,能指导一下吗?我的QQ,112366071


DLL网络上很多流驱动的,你可以参考下GPIO或者LED驱动来做

#6


引用 5 楼 wswwxk 的回复:
引用 4 楼 demoxie1 的回复:
nyp860624,我在按你的方法制作DLL,碰到一些问题,能指导一下吗?我的QQ,112366071


DLL网络上很多流驱动的,你可以参考下GPIO或者LED驱动来做

我不想重写16C554的驱动,只想运用16550的现成的程序来驱动它,这样做应该是可以的。

#7


是在编译dll的时候出的问题吗?这个主要就是添加一些lib,如果是在编译阶段出错了,你就在C/C++属性栏里看看你缺少什么,如果是link阶段的问题,就在link属性栏下面的路径添加一些就可以了。一般出的问题都是一些找不到库函数的问题,你自己在根目录下收索下,添加进去路径就可以的。不方便上QQ,有问题在这提出来大家共同学习下就能解决的

#8


nyp860624,谢谢。
我还是打算直接在内核中编译dll,不单独生成dll。
网上看到gooogleman有个wince 5下面的一个三星arm的16C552的资料,等板子来了模仿试试看。
在这里谢谢gooogleman。

#9


我按照googleman的方法把comm16550.def,com16550.cpp,pdd16550.cpp文件copy到我的bsp下,我新建了一个目录,然后制作makefile sources,修改platform.bib .reg文件,等等。
我按照两种方法(网上找到的,不是很明白其中的意思)制作了com16550.reg。
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\S16550_A]
"DeviceArrayIndex"=dword:0
"IrqNumber"=dword:83      
"IOBase"=dword:10000000
"IOLen"=dword:8
;"ISTTimeouts"=dword:200  ; every 512 ticks checking Modem status.
"Prefix"="COM"
"Index"=dword:6
"Dll"="com16550.Dll"
"Order"=dword:0
"Priority"=dword:0
;"Port"="COM6:"
;"DeviceType"=dword:0
;"FriendlyName"="serial6"
;"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
;"DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\S16550_B]
    "IRQ"=dword:84
    "Dll"="com16550.dll"
    "Prefix"="COM"
    "DeviceArrayIndex"=dword:0
    "IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}"
    "Index"=dword:7
    "Order"=dword:2
    "RegStride"=dword:2
    "IoLen"=dword:8
    "IOBase"=dword:10000008
    "InterfaceType"=dword:0
    "BusNumber"=dword:0
编译产生nk.nb0,没有报错。
烧录文件到nandflash,启动系统,一切正常,查看注册表,在.../drivers/buildin能找到我创建的两个串口,内容也和我在.reg中设定的一样。
但是当我用串口测试工具去测试串口是,却发现里面根本没有这两个串口,只有9261自带的两个串口在里面,请各位看看到底是什么原因?
是注册表的问题,还是别的问题?会是IRQ或IOBASE的问题吗?

#10


你说的在.../drivers/buildin能找到你创建的两个串口,这个只能说明你编写的注册表信息已经加载到你的nk里面了,即使你不插硬件设备,你也可以在buildin下面看到的。
你到.../drivers/active下面看看,要是能找到你的设备的注册信息那才能说明你的驱动添加成功了。

#11


引用 10 楼 nyp860624 的回复:
你到.../drivers/active下面看看,要是能找到你的设备的注册信息那才能说明你的驱动添加成功了。

我在active下面没能发现这两个设备,说明没有添加成功。
我用检测发现:
cpdd16550::Init(){}中
m_hISTEvent = CreateEvent(0,FALSE,FALSE,NULL);
m_hISTEvent = NULL, 程序在这里return FALSE了。
不知如何解决。

#12


发现原因了,我需要在注册表中定义"SysIntr”。但是当我设为13时与USB的冲突。
请问这个值该如何设定?我用的是AT91SAM9261,中断时GPIO,PC3

#13


我把"SysIntr" = dword:15时,active下面我能看到这个串口,并且我用串口测试工具也能看到这个串口。当我设置串口的时候,会显示:
+OALIntrDisableIrqs(1, 0xd15dec04)
当我打开串口的时候,会显示:
+OALIntrDisableIrqs(1, 0xd15df518)
+OALIntrDisableIrqs(1, 0xd15df670)
我在com16550.cpp中加入,测试程序,发现:
不管是设置哪个串口(16C544或9261自带的串口),不管是把字节长度设为多少,点击设置串口和打开串口都会运行程序:
 CPdd16550::SetByteSize(ULONG ByteSize)
我现在用的注册表信息是这样的:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\S16550_A]
"DeviceArrayIndex"=dword:0
"Irq"=dword:83      
"SysIntr" = dword:15
"IOBase"=dword:10008000
"IOLen"=dword:8
;"ISTTimeouts"=dword:200  ; every 512 ticks checking Modem status.
"Prefix"="COM"
"Index"=dword:6
"Dll"="com16550.Dll"
"Order"=dword:0
"Priority"=dword:0
;"Port"="COM6:"
;"DeviceType"=dword:0
;"FriendlyName"="serial6"
;"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
;"DevConfig"=hex: 10,00, 00,00, 05,00,00,00, 10,01,00,00, 00,4B,00,00, 00,00, 08, 00, 00, 00,00,00,00
请帮忙看看是什么问题?
我没有用isr16550.dll,也没有生成这个文件,(不知道如何做。)

#14


引用 13 楼 demoxie1 的回复:
我把"SysIntr" = dword:15时,active下面我能看到这个串口,并且我用串口测试工具也能看到这个串口。当我设置串口的时候,会显示:
+OALIntrDisableIrqs(1, 0xd15dec04)
当我打开串口的时候,会显示:
+OALIntrDisableIrqs(1, 0xd15df518)
+OALIntrDisableIrqs(1, 0xd15df670)
……

帮顶

#15


我终于生成了isr16550.dll,
我在注册表中加上了:
"IsrDll" = "isr16550.dll"
"IsrHandler"="ISRHandler"
"Flags"=dword:0 ;disable user mode if we need isr16550
结果,当打开串口测试工具,并打开这个串口,
DEBUG口每秒输出:
+OALIntrDisableIrqs(1, 0xd15ffd08);这时我没有进行任何接收或发送操作
我在com16550.cpp的程序中加入了读寄存器的操作,结果读到的数据都是错了。

#16


你注册表中的irq、sysintr、iobase这些跟你硬件是匹配的吗?irq是十六进制的,你的怎么会那么大呢?

#17


我用的是AT91SAM9261的PC3脚,所以它的物理中断号应该就是这个64+64+3。难道IRQ的值不应该是物理中断号?
SYSINTR我不知道应该如何设定。
IOBASE应该是物理地址吧?应该没问题。我用的是NCS0,它的物理地址为0X1000 0000,又因74138上用了A15的高电平控制,所以这个物理地址应该就是0x1000 8000。
会不会是IRQ和SYSINTR有问题?应该如何设定?

#18


有人说是用要MemBase和MemLen,但是我改成这两个后,16550init通不过。
我感觉现在的主要问题是中断和地址问题。实在是搞不清楚irq, sysintr和iobase, membase, iolen memlen应该选哪个,应该是什么值。

#19


我就不知道呢,目前安装厂家给的WIFI 就过不了

#20


终于可以接收和发送数据了。目前发送一切正常,但是接收有问题:
只能很少的情况是接收数据正确的,其他时候接收到的数据都多于实际的数据,比如:
上位机发送:aaabbbcccdddeeefffggghhh
接收到的数据却为:aaabbbcccdddeeefffggghhhcccccccccccccccccccccccccccccccccccccccccc(c的个数有多又少,少的几个,多的有30,40个)
或aaabbbcccdddeeefaaaaaaaaaaaaaaaaaaaaaaffggghhhccccccccccccccccc

上位机发送:1112222wwww4444555556666
接收到的数据位:1112222wwww4444555556666wwwwwwwwwwwwwwwwwwww或1112222wwww44446666666666666555556666

请问是什么原因啊?会不会是中断的问题?注册表中加或不加isr16550.dll,都接收的不正确。
接收的任何服务程序我没改过。是wince6.0 16550驱动的bug吗?

#21


没人能帮忙看看吗?有人说是我对16550的AT91SAM9261的读写时序没有设置对。
我是在init.c程序中加入了
AT91SAM926x_SetChipSelectTimingIn_ns( pSMC, // pSMC 0, // Chip Select
                                        GetMasterClock(FALSE),
AT91C_DM9000_NWE_SETUP, // dwNWE_SETUP
AT91C_DM9000_NCS_WR_SETUP,// dwNCS_WR_SETUP
0,      // dwNRD_SETUP
20, // dwNCS_RD_SETUP
AT91C_DM9000_NWE_PULSE, // dwNWE_PULSE
AT91C_DM9000_NCS_WR_PULSE, // dwNCS_WR_PULSE
140, // dwNRD_PULSE
100, // dwNCS_RD_PULSE
160, // dwNRD_CYCLE
AT91C_DM9000_NWE_CYCLE );// dwNWE_CYCLE
我对其中的参数做了很多修改,结果还是一样。
请帮忙看看。

#22


你的wince系统是在什么硬件上跑的呢?如果是x86上面跑的话就应该用iobase和iolen,其他的话就应该用membase和memlen

#23


引用 20 楼 demoxie1 的回复:
终于可以接收和发送数据了。目前发送一切正常,但是接收有问题:
只能很少的情况是接收数据正确的,其他时候接收到的数据都多于实际的数据,比如:
上位机发送:aaabbbcccdddeeefffggghhh
接收到的数据却为:aaabbbcccdddeeefffggghhhcccccccccccccccccccccccccccccccccccccccccc(c的个数有多又少,少的几个,多的有30……

还是配置有问题

#24


引用 22 楼 nyp860624 的回复:
你的wince系统是在什么硬件上跑的呢?如果是x86上面跑的话就应该用iobase和iolen,其他的话就应该用membase和memlen

你的ARM用IOBASE和IOLEN就可以了。