6046|12

76

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

关于2440DEBUG串口关闭引起的问题? [复制链接]

各位大侠好!小弟最近做了一个实验,就是想把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

我本来认为打开这段 就是把注释去掉就可以了,但是今天去掉后系统起不来了??不知道什么原因?还请大侠们帮忙!

最新回复

哦!谢谢Gooogleman!我看了是不是应该将OAL下的OEMInitDebugSerial()函数 直接return掉呢??  详情 回复 发表于 2010-1-26 08:56
点赞 关注

回复
举报

61

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
只改注册表是不行的..
至少要把代码中 DeviceArrayIndex 分支的程序去掉吧..否则工作肯定不正常了 你在new 一个串口对象的时候是要读取注册表来初始化串口的..
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
另外 OEMWriteDebugByte()函数里面对串口的操作也要去掉..       
不去掉可能一直会停在 while(!(s2440UART0->rUTRSTAT & 0x2)) 循环里面.
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
谢谢您的回复了!我现在的调试停在
[COM]++CreateSerialObject  COM0 ++
[COM]++CPdd2440Serial1   ++
INFO: CReg2440Uart::CReg2440Uart using processor frequency reported by the OAL (67500000). 我看了下 eboot中没有死。而且我看程序中这个调试信息室正常启动信息。但是不明白为什么系统起不来了。
还有你说的DeviceArrayIndex 是什么意思?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
你看看CreateSerialObject的源代码吧..里面会new 一个串口对象, 串口对象的类型就是这个注册表键值DeviceArrayIndex 决定的..
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

6
 
这个是我的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;
}
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
估计是你注册表没有更新?
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
??GooogleMan的意思是??
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

9
 
看看注册表,是否更新了。也许还在。
 
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

10
 
你把注册表打开了 但是你的debugserial 还是在初始化那个串口  结果就是 系统死机
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

11
 
不好意思,这几天家里有事没来!楼上意思我在eboot中初始化了uart0,导致的吗??
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 xuefeng_baggio 的回复:
不好意思,这几天家里有事没来!楼上意思我在eboot中初始化了uart0,导致的吗??


bootloader下不碍事的。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 
哦!谢谢Gooogleman!我看了是不是应该将OAL下的OEMInitDebugSerial()函数 直接return掉呢??
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表