关于2440DEBUG串口关闭引起的问题?

xuefeng_baggio 2010-01-21 03:58:22
各位大侠好!小弟最近做了一个实验,就是想把2440 的UART0 就是硬件上的TXD0 RXD0作为普通串口用。这个串口本来是做debug串口调试用的。而且系统运行很正常。但是我今天把注册表关于UART1也就是系统层的这个debug串口的注册表信息打开(作为Debug时是注释掉的)下面就是这段注册表信息:
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial]
"DeviceArrayIndex"=dword:0
"Irq"=dword:1c
"MemBase"=dword:50000000
"MemLen"=dword:2C
"InterruptBitsShift"=dword:0 ; UART 0 Interrupt Sub Register shift bit.
"ISTTimeouts"=dword:200 ; every 512 ticks checking Modem status.
"Prefix"="COM"
"Index"=dword:1
"Dll"="serial_smdk2440.dll"
"Order"=dword:0
"Priority"=dword:0
"Port"="COM1:"
"DeviceType"=dword:0
"FriendlyName"=LOC_DISPLAYNAME_COM1
"Tsp"="unimodem.dll"
"IClass"="{CC5195AC-BA49-48a0-BE17-DF6D1B0173DD}"
"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

我本来认为打开这段 就是把注释去掉就可以了,但是今天去掉后系统起不来了??不知道什么原因?还请大侠们帮忙!
...全文
149 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuefeng_baggio 2010-01-26
  • 打赏
  • 举报
回复
哦!谢谢Gooogleman!我看了是不是应该将OAL下的OEMInitDebugSerial()函数 直接return掉呢??
gooogleman 2010-01-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 xuefeng_baggio 的回复:]
不好意思,这几天家里有事没来!楼上意思我在eboot中初始化了uart0,导致的吗??
[/Quote]

bootloader下不碍事的。
xuefeng_baggio 2010-01-26
  • 打赏
  • 举报
回复
不好意思,这几天家里有事没来!楼上意思我在eboot中初始化了uart0,导致的吗??
ZTG328 2010-01-22
  • 打赏
  • 举报
回复
你把注册表打开了 但是你的debugserial 还是在初始化那个串口 结果就是 系统死机
gooogleman 2010-01-21
  • 打赏
  • 举报
回复
看看注册表,是否更新了。也许还在。
xuefeng_baggio 2010-01-21
  • 打赏
  • 举报
回复
??GooogleMan的意思是??
gooogleman 2010-01-21
  • 打赏
  • 举报
回复
估计是你注册表没有更新?
xuefeng_baggio 2010-01-21
  • 打赏
  • 举报
回复
这个是我的CreateSerialObject函数
我不知道DeviceArrayIndex确实是有注册表决定的!

//根据串口编号创建对象,如果要增加串口个数要修改这个函数,增加case即可。
CSerialPDD * CreateSerialObject(LPTSTR lpActivePath, PVOID pMdd,PHWOBJ pHwObj, DWORD DeviceArrayIndex)
{
CSerialPDD * pSerialPDD = NULL;
switch (DeviceArrayIndex) {
case 0:
//fxf
RETAILMSG(1, (_T("[COM]++CreateSerialObject COM0 ++ \r\n")));
pSerialPDD = new CPdd2440Serial1(lpActivePath,pMdd, pHwObj);
break;
case 1:
//fxf
RETAILMSG(1, (_T("[COM]++CreateSerialObject COM1 ++ \r\n")));
pSerialPDD = new CPdd2440Serial2(lpActivePath,pMdd, pHwObj);
break;
}
if (pSerialPDD && !pSerialPDD->Init()) {
delete pSerialPDD;
pSerialPDD = NULL;
}
return pSerialPDD;
}
FLandY1982 2010-01-21
  • 打赏
  • 举报
回复
你看看CreateSerialObject的源代码吧..里面会new 一个串口对象, 串口对象的类型就是这个注册表键值DeviceArrayIndex 决定的..
xuefeng_baggio 2010-01-21
  • 打赏
  • 举报
回复
谢谢您的回复了!我现在的调试停在
[COM]++CreateSerialObject COM0 ++
[COM]++CPdd2440Serial1 ++
INFO: CReg2440Uart::CReg2440Uart using processor frequency reported by the OAL (67500000). 我看了下 eboot中没有死。而且我看程序中这个调试信息室正常启动信息。但是不明白为什么系统起不来了。
还有你说的DeviceArrayIndex 是什么意思?
FLandY1982 2010-01-21
  • 打赏
  • 举报
回复
另外 OEMWriteDebugByte()函数里面对串口的操作也要去掉..
不去掉可能一直会停在 while(!(s2440UART0->rUTRSTAT & 0x2)) 循环里面.
FLandY1982 2010-01-21
  • 打赏
  • 举报
回复
只改注册表是不行的..
至少要把代码中 DeviceArrayIndex 分支的程序去掉吧..否则工作肯定不正常了 你在new 一个串口对象的时候是要读取注册表来初始化串口的..

19,502

社区成员

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

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