2410下关于com3的驱动修改问题
我现在需要把2410下的红外驱动修改为一般模式的串口驱动,可是我的在修改完后。com3用串口调试程序是可以打开的,但是不能收发。以下是我修改的部分:
S2410_SetSerialIOP(
PVOID pHead // @parm points to device head
)
{
PS2410_UART_INFO pHWHead = (PS2410_UART_INFO)pHead;
RETAILMSG(DEBUGMODE, (TEXT("S2410_SetSerialIOP /r/n")));
#if USEVIRTUAL
EnterCriticalSection(&(pHWHead->RegCritSec));
v_pIOPregs->rGPHCON &= ~( 0x3<<12 | 0x3<<14); // clear uart 2 - rx, tx
v_pIOPregs->rGPHCON |= (0x2<<12 | 0x2<<14);
v_pIOPregs->rGPHUP |= 0xc0;
pHWHead->rDTRport = (volatile unsigned int *)&(v_pIOPregs->rGPHDAT);
pHWHead->rDSRport = (volatile unsigned int *)&(v_pIOPregs->rGPHDAT);
pHWHead->DtrPortNum = 6;
pHWHead->DsrPortNum = 7;
#else
volatile IOPreg *s2410IOP;
s2410IOP = (volatile IOPreg *)IOP_BASE;
EnterCriticalSection(&(pHWHead->RegCritSec));
s2410IOP->rGPHCON &= ~( 0x3<<12 | 0x3<<14); // clear uart 0 - rx, tx
s2410IOP->rGPHCON |= (0x2<<12 | 0x2<<14);
s2410IOP->rGPHUP |= 0xc0; pHWHead->rDTRport = (volatile unsigned int *)(IOP_BASE+0x74); //s2410IOP->rGPHDAT
pHWHead->rDSRport = (volatile unsigned int *)(IOP_BASE+0x74);
pHWHead->DtrPortNum = 6;
pHWHead->DsrPortNum = 7;
#endif
LeaveCriticalSection(&(pHWHead->RegCritSec));
}
注册表的修改
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; S2440 IrDA(UART2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/UART2]
"DeviceArrayIndex"=dword:0
"Irq"=dword:09
"IoBase"=dword:50008000
"IoLen"=dword:2C
"Prefix"="COM"
"Dll"="UART2.Dll"
"Order"=dword:0
"Priority"=dword:0
"Port"="COM3:"
"DeviceType"=dword:0 ; 1->IRDA modem, 0 -> null modem
"FriendlyName"="S2440 UART2/IRDA2440"
"Index"=dword:3
"IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}"
再就是在platform/smdk2410/inc/Oalintr.h和Oalintr.inc以及Oalintra.in将SYSINTR_IR改为SYSINTR_UART2。关于cfw.c和armint.c中的部分我也进行了相应的修改。
我现在需要把2410下的红外驱动修改为一般模式的串口驱动,可是我的在修改完后。com3用串口调试程序是可以打开的,但是不能收发。以下是我修改的部分:
S2410_SetSerialIOP(
PVOID pHead // @parm points to device head
)
{
PS2410_UART_INFO pHWHead = (PS2410_UART_INFO)pHead;
RETAILMSG(DEBUGMODE, (TEXT("S2410_SetSerialIOP /r/n")));
#if USEVIRTUAL
EnterCriticalSection(&(pHWHead->RegCritSec));
v_pIOPregs->rGPHCON &= ~( 0x3<<12 | 0x3<<14); // clear uart 2 - rx, tx
v_pIOPregs->rGPHCON |= (0x2<<12 | 0x2<<14);
v_pIOPregs->rGPHUP |= 0xc0;
pHWHead->rDTRport = (volatile unsigned int *)&(v_pIOPregs->rGPHDAT);
pHWHead->rDSRport = (volatile unsigned int *)&(v_pIOPregs->rGPHDAT);
pHWHead->DtrPortNum = 6;
pHWHead->DsrPortNum = 7;
#else
volatile IOPreg *s2410IOP;
s2410IOP = (volatile IOPreg *)IOP_BASE;
EnterCriticalSection(&(pHWHead->RegCritSec));
s2410IOP->rGPHCON &= ~( 0x3<<12 | 0x3<<14); // clear uart 0 - rx, tx
s2410IOP->rGPHCON |= (0x2<<12 | 0x2<<14);
s2410IOP->rGPHUP |= 0xc0; pHWHead->rDTRport = (volatile unsigned int *)(IOP_BASE+0x74); //s2410IOP->rGPHDAT
pHWHead->rDSRport = (volatile unsigned int *)(IOP_BASE+0x74);
pHWHead->DtrPortNum = 6;
pHWHead->DsrPortNum = 7;
#endif
LeaveCriticalSection(&(pHWHead->RegCritSec));
}
注册表的修改
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; S2440 IrDA(UART2)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
[HKEY_LOCAL_MACHINE/Drivers/BuiltIn/UART2]
"DeviceArrayIndex"=dword:0
"Irq"=dword:09
"IoBase"=dword:50008000
"IoLen"=dword:2C
"Prefix"="COM"
"Dll"="UART2.Dll"
"Order"=dword:0
"Priority"=dword:0
"Port"="COM3:"
"DeviceType"=dword:0 ; 1->IRDA modem, 0 -> null modem
"FriendlyName"="S2440 UART2/IRDA2440"
"Index"=dword:3
"IClass"="{A32942B7-920C-486b-B0E6-92A702A99B35}"
再就是在platform/smdk2410/inc/Oalintr.h和Oalintr.inc以及Oalintra.in将SYSINTR_IR改为SYSINTR_UART2。关于cfw.c和armint.c中的部分我也进行了相应的修改。