共9条
1/1 1 跳转至页
求教四串口扩展卡问题!
只看楼主 1楼
偶用的是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的驱动呀?
关键词: 求教 串口 扩展 问题
2楼
mghgme兄:不好意思,因为我是搞vxworks下图形开发的,因此对底层的东西不太了解。问一个菜鸟级问题:如果我的串口是ns16550型,vxworks中有现成的驱动,在pentinum BSP中默认的好像是i8250, 我想把i8250替换成ns16550,改做哪些替换?请不吝赐教,谢谢先!
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 我应该怎么解决此问题?请您再次指教!非常地感谢!
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 了。
下午按照你的方法做一做。
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)。不知为什么?
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发给我,真是太感谢你了。
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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 | |
【分享评测,赢取加热台】使用8051单片机驱动WS2812被打赏40分 |