X86 CPLD扩展串口中断问题
我在AMD lx800的板子上做了CE,板载的2串口是可以收发的,板子通过ISA总线CPLD外扩了6个串口。使用了共享中断10,在XP下是这样的。直接添加新硬件,找到设备后配置了地址空间就可以使用。
在CE下,因为采用共享中断 我在x86目录下的init.c中进行了如下配置
然后再注册表中进行了如下配置:
现在是8串口都可以creatfile成功。但是外扩的后5个串口只要一发数据就死机。
看到有很多朋友说ISA扩展的不可以共享中断,但是我通过CPLD扩展的驱动在CPLD中都实现了,和系统的接口都是16550兼容的UART。 坛子里有做过的吗? 求指导
在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。 坛子里有做过的吗? 求指导
...全文
相关推荐
TD-PITD+新一代32位微机原理实验箱、微机接口技术实验系统.pdf
五、开放的80x86系统扩展总线实验系统通过基于FPGA/CPLD的PCI扩展卡提供了开放的32位80x86系统扩展总线,包括数据总线、地址总线、中断请求信号、中断应答信号、DMA控制信号、存储器和I/
基于EPM7128设计的数据合并转换器
这种设计方法展示了CPLD在解决复杂数据转换问题上的灵活性和实用性,对于理解和实现类似的通信系统有着重要的参考价值。
嵌入式系统理解.pdf
首先,从硬件上讲,嵌入式系统的概念是指将基于 CPU 的处围器件整合到 CPU 芯片内部,例如早期基于 X86 体系结构下的计算机,CPU 只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的
PC482MANU_v103.pdf
- **CPU**:STPC ATLAS 5x86DX2-133MHz低功耗CPU(无风扇)。- **系统内存**:主板上预装了32MB SDRAM,最高可扩展至64MB。
linux操作系统入门笔记
- 兼容性:支持多种处理器架构,包括x86、ARM等。 - 可定制性:可以根据需求定制内核功能。 - 安全性:拥有良好的安全性和稳定性,适用于服务器和嵌入式系统。


