X86 CPLD扩展串口中断问题

小小白桦树 2011-09-06 11:45:10
我在AMD lx800的板子上做了CE,板载的2串口是可以收发的,板子通过ISA总线CPLD外扩了6个串口。使用了共享中断10,在XP下是这样的。直接添加新硬件,找到设备后配置了地址空间就可以使用。
在CE下,因为采用共享中断 我在x86目录下的init.c中进行了如下配置


// COM1 - 0x3F8-0x3FF, IRQ4
// COM2 - 0x2F8-0x3FF, IRQ3
// COM3 - 0x3E8-0x3EF, IRQ4
// COM4 - 0x2E8-0x2EF, IRQ3
//
// IRQ3 - COM2 or COM4
OALIntrStaticTranslate(SYSINTR_FIRMWARE + 3, 3);

// IRQ4 - COM1 or COM3
OALIntrStaticTranslate(SYSINTR_FIRMWARE + 4, 4);

//add by me
OALIntrStaticTranslate(SYSINTR_FIRMWARE + 19, 10);
OALIntrStaticTranslate(SYSINTR_FIRMWARE + 20, 10);
OALIntrStaticTranslate(SYSINTR_FIRMWARE + 21, 10);
OALIntrStaticTranslate(SYSINTR_FIRMWARE + 22, 10);
OALIntrStaticTranslate(SYSINTR_FIRMWARE + 23, 10);



然后再注册表中进行了如下配置:



IF BSP_SERIAL3
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial3]
"SysIntr"=dword:1A
"IoBase"=dword:300
"IoLen"=dword:8
"DeviceArrayIndex"=dword:2
"Prefix"="COM"
"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
"Dll"="Com16550.Dll"
"Order"=dword:0
; Turn on follows for Installable ISR (isr16550 supporting SOFTWARE FIFO)
"Irq"=dword:A
"IsrDll"="isr16550.dll"
"IsrHandler"="ISRHandler"

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial3\Unimodem]
"Tsp"="Unimodem.dll"
"DeviceType"=dword:0
"FriendlyName"=LOC_FRIENDLYNAME_SERIAL3
"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
ENDIF BSP_SERIAL3

; COM4
IF BSP_SERIAL4
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial4]
"SysIntr"=dword:23
"IoBase"=dword:308
"IoLen"=dword:8
"DeviceArrayIndex"=dword:3
"Prefix"="COM"
"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
"Dll"="Com16550.Dll"
"Order"=dword:0
; Turn on follows for Installable ISR (isr16550 supporting SOFTWARE FIFO)
"Irq"=dword:A
"IsrDll"="isr16550.dll"
"IsrHandler"="ISRHandler"

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial4\Unimodem]
"Tsp"="Unimodem.dll"
"DeviceType"=dword:0
"FriendlyName"=LOC_FRIENDLYNAME_SERIAL4
"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
ENDIF BSP_SERIAL4



IF BSP_SERIAL5
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial5]
"SysIntr"=dword:24
"IoBase"=dword:310
"IoLen"=dword:8
"DeviceArrayIndex"=dword:4
"Prefix"="COM"
"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
"Dll"="Com16550.Dll"
"Order"=dword:0
; Turn on follows for Installable ISR (isr16550 supporting SOFTWARE FIFO)
"Irq"=dword:A
"IsrDll"="isr16550.dll"
"IsrHandler"="ISRHandler"

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial5\Unimodem]
"Tsp"="Unimodem.dll"
"DeviceType"=dword:0
;"FriendlyName"=LOC_FRIENDLYNAME_SERIAL5
"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
ENDIF BSP_SERIAL5

IF BSP_SERIAL6
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial6]
"SysIntr"=dword:25
"IoBase"=dword:318
"IoLen"=dword:8
"DeviceArrayIndex"=dword:5
"Prefix"="COM"
"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
"Dll"="Com16550.Dll"
"Order"=dword:0
; Turn on follows for Installable ISR (isr16550 supporting SOFTWARE FIFO)
"Irq"=dword:A
"IsrDll"="isr16550.dll"
"IsrHandler"="ISRHandler"

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial6\Unimodem]
"Tsp"="Unimodem.dll"
"DeviceType"=dword:0
;"FriendlyName"=LOC_FRIENDLYNAME_SERIAL6
"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
ENDIF BSP_SERIAL6


IF BSP_SERIAL7
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial7]
"SysIntr"=dword:26
"IoBase"=dword:320
"IoLen"=dword:8
"DeviceArrayIndex"=dword:6
"Prefix"="COM"
"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
"Dll"="Com16550.Dll"
"Order"=dword:0
; Turn on follows for Installable ISR (isr16550 supporting SOFTWARE FIFO)
"Irq"=dword:A
"IsrDll"="isr16550.dll"
"IsrHandler"="ISRHandler"

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial7\Unimodem]
"Tsp"="Unimodem.dll"
"DeviceType"=dword:0
;"FriendlyName"=LOC_FRIENDLYNAME_SERIAL8
"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
ENDIF BSP_SERIAL7


IF BSP_SERIAL8
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial8]
"SysIntr"=dword:27
"IoBase"=dword:328
"IoLen"=dword:8
"DeviceArrayIndex"=dword:7
"Prefix"="COM"
"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
"Dll"="Com16550.Dll"
"Order"=dword:0
; Turn on follows for Installable ISR (isr16550 supporting SOFTWARE FIFO)
"Irq"=dword:A
"IsrDll"="isr16550.dll"
"IsrHandler"="ISRHandler"

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial8\Unimodem]
"Tsp"="Unimodem.dll"
"DeviceType"=dword:0
;"FriendlyName"=LOC_FRIENDLYNAME_SERIAL8
"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
ENDIF BSP_SERIAL8



现在是8串口都可以creatfile成功。但是外扩的后5个串口只要一发数据就死机。
看到有很多朋友说ISA扩展的不可以共享中断,但是我通过CPLD扩展的驱动在CPLD中都实现了,和系统的接口都是16550兼容的UART。 坛子里有做过的吗? 求指导
...全文
84 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
sd2766088 2011-12-16
  • 打赏
  • 举报
回复
你好,我也遇到类似问题。
我们使用的vk3268扩展串口芯片,使用CSPI接口,也使用isr16550驱动
向串口发送数据时也很容易死机,读取好像没遇到问题,请问你们解决这个问题了么?
或者交流一下,谢谢了

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧