这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 求教四串口扩展卡问题!

共9条 1/1 1 跳转至

求教四串口扩展卡问题!

菜鸟
2004-07-05 18:18:30     打赏
偶用的是pentinum BSP ,Tornado2.0, vxworks5.4 ,目标板有一个板载的4串口扩展卡(NetMos NM9845CV),此板子共有四个串口。现在偶想用四个串口,参考主般说明书中的com3,和com4的中断级别和中断号,在pc.h ,sysSerial.c ,config.h中以com1,和com2的设置语句为例来设置com3和com4口, 并改变 TTY_NUM 为 4. 做了以上的修改后,程序能够成功地打开COM3和COM4,但是COM3, COM4不能够进行读写操作,此时COM1, COM2,工作正常。 请问各位大侠: 我上面的做法是否正确,若不正确应该如何设置? 是不是还得有NetMos NM9845CV的驱动呀?



关键词: 求教     串口     扩展     问题    

菜鸟
2004-07-05 21:09:00     打赏
2楼
mghgme兄:不好意思,因为我是搞vxworks下图形开发的,因此对底层的东西不太了解。问一个菜鸟级问题:如果我的串口是ns16550型,vxworks中有现成的驱动,在pentinum BSP中默认的好像是i8250, 我想把i8250替换成ns16550,改做哪些替换?请不吝赐教,谢谢先!

菜鸟
2004-07-06 05:15:00     打赏
3楼
mghgme 兄:是这样的,我用的是X86体系的,我有两块目标板,都有四个串口。 1:艾迅 SBC84500 四个16550串口 我从主板说明书上未找到串口是ns16550的,还是evbNs16550的。还有,也未找到它是通过什么芯片扩展的。 按照本贴最上面我讲的方法,就用的8250驱动在sysSerial.c中添加com3, com4 的中断向量和地址。四个串口都能正常工作,但就是有时机器刚起来,程序刚跑起来,有个别串口就不读数据了,以后再也不能读写数据了。我感觉是不是8250的驱动不太适合16550串口所造成的呢? 2:研祥 EC5-1651CLD2NA(它的CPU是Transmeta的,与x86体系想兼容),四个串口,其中com3, com4是通过NetMos NM9845CV扩展而来的。 我用8250来驱动这四个串口,然而只有COM1,COM2正常工作,COM3,COM4,虽能够打开,但是不能进行读写。我想问是不是有了扩展卡后8250驱动对COM3,COM4就不起作用了? 对于SBC84500 我应该怎么解决此问题?请您再次指教!非常地感谢!

菜鸟
2004-07-06 08:37:00     打赏
4楼
各位路过的大侠,也可随意灌灌水,给点意见或建议,此问题已经困恼我好长时间了,真是又急又郁闷!嗨......

菜鸟
2004-07-06 20:17:00     打赏
5楼
mghgme 兄,你真是个热心人呐,首先谢谢你! 我用的是rtl8139网卡进行调试,并且我的工程是用Tornado2.0 IDE自动生成的,因此除了串口外(如上所说,只添加COM3,COM4,的中断向量和地址),几乎所有的都是默认的配置。 在config.h中定pc_console,参数如下(默认) INCLUDE_PC_CONSLE Params value CONSOLE_BAUD_RATE 9600 N_VIRTUAL_CONSOLES 2 PC_CONSOLE 0 对于INCLUDE_SIO(在IDE中的工程配置,vxworks选项卡中的参数) Params value CONSOLE_BAUD_RATE 9600 CONSOLE_TTY 2 NUM_TTY (N_UART_CHANNELS) 我在pc.h中把N_UART_CHANNELS以改为 4 了。 下午按照你的方法做一做。

菜鸟
2004-07-07 19:31:00     打赏
6楼
现在我把com1在正常工作下的各个寄存器的值罗列如下:(16550) Address Regs Value 0x3f8 R/T 0X30 = '0'(变化量) 0x3f9 IER 0X01 0X3fa IID 0X01 0X3fb LCR 0X03 0x3fc MDC 0X0b 0x3fd LST 0X60 / 0X62 0X3fe MSR 0x00 当出现问题时,sysInByte(0x3f9) = 0x1. 除了R/T寄存器的值不会变化外, 其它寄存器的值和正常情况的值是一样的。 还有个问题向各位大侠请教: 在Pentium BSP文件夹里的sysSerial.c中, 在函数void sysSerialHwInit(void) 里有这么一条语句: i8250Chan[i].channelMode = 0;//(默认)预置串口工作模式 我试着改变i8250Chan[i].channelMode 的值使其为 0,1,2。 但是我在自己的程序中用ioctl(fds, SIO_MODE_GET, &mode) 查看串口工作模式, 始终是mode = 2 (SIO_MODE_INT)。不知为什么?

菜鸟
2004-07-08 00:36:00     打赏
7楼
在硬件上有一条信号线 MR可以 Reset串口,请问在软件上怎么Reset串口,谢谢先!

菜鸟
2004-07-08 20:12:00     打赏
8楼
自己先顶一下,感觉这个论坛回答问题的人不是很多。

菜鸟
2004-07-09 04:18:00     打赏
9楼
mghgme 兄: 1:我的COM3, COM4同用IRQ11, COM1用IRQ4, COM3用IRQ3.具体如下: com port Address int Level com1 0x3f8 IRQ4 com2 0x2f8 IRQ3 com3 0x3e8 IRQ11 com3 0x2e8 IRQ11 的确 com3, com4 的ISR 没跑起来。4个串口各个Regs的值如下: COM1
sysInByte 0x3f8
value = 198 = 0xc6
sysInByte 0x3f9
value = 1 = 0x1
sysInByte 0x3fa
value = 1 = 0x1
sysInByte 0x3fb
value = 3 = 0x3
sysInByte 0x3fc
value = 11 = 0xb
sysInByte 0x3fd
value = 96 = 0x60 = '`'
sysInByte 0x3fe
value = 0 = 0x0
sysInByte 0x3ff
value = 73 = 0x49 = 'I' COM2
sysInByte 0x2f8
value = 10 = 0xa
sysInByte 0x2f9
value = 1 = 0x1
sysInByte 0x2fa
value = 1 = 0x1
sysInByte 0x2fb
value = 3 = 0x3
sysInByte 0x2fc
value = 11 = 0xb
sysInByte 0x2fd
value = 96 = 0x60 = '`'
sysInByte 0x2fe
value = 0 = 0x0
sysInByte 0x2ff
value = 29 = 0x1d COM3
sysInByte 0x3e8
value = 255 = 0xff
sysInByte 0x3e9
value = 255 = 0xff
sysInByte 0x3ea
value = 255 = 0xff
sysInByte 0x3eb
value = 255 = 0xff
sysInByte 0x3ec
value = 255 = 0xff
sysInByte 0x3ed
value = 255 = 0xff
sysInByte 0x3ee
value = 255 = 0xff
sysInByte 0x3ef
value = 255 = 0xff COM4
sysInByte 0x2e8
value = 255 = 0xff
sysInByte 0x2e9
value = 255 = 0xff
sysInByte 0x2ea
value = 255 = 0xff
sysInByte 0x2eb
value = 255 = 0xff
sysInByte 0x2ec
value = 255 = 0xff
sysInByte 0x2ed
value = 255 = 0xff
sysInByte 0x2ee
value = 255 = 0xff
sysInByte 0x2ef
value = 255 = 0xff
2: 给串口com3,com4发送数据的前后寄存器的值都没有变化,都是0xff. 我试着用sysOutByte(0x3e9, 0x01)改变com3的IER寄存器的值,但是修改无效(改变不了)。修改其它寄存器的值也是无效。 3:我也试过了evbNs16550Sio文件的驱动,但是同样是不好用,不仅COM3,COM4,跑不起来,就连COM2也跑不起来了。仅剩下COM1能够正常工作。 4:想问问你 SYMMETRIC_IO_MODE 和非SYMMETRIC_IO_MODE有什么区别? 5: 你能把你的BSP发给我,真是太感谢你了。

共9条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]