X86 CPLD扩展串口中断问题

小小白桦树 小小白桦树 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我在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。 坛子里有做过的吗? 求指导
...全文

相关推荐

评论 1
收藏 已收藏
分享
返回顶部