3514|1

854

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

WinCE下调试串口的动态复用 [复制链接]

WinCE下调试串口的动态复用
      车机项目中用到了很多串口外设,如DVD机芯、GPS、蓝牙、雷达和胎压监测等,而主CPU(TCC89XX)与小MCU(STM32)之间也是通过串口通讯的。一时之间,串口使用有点捉襟见肘的感觉,只能把调试串口拿出来用做普通串口。
      调试串口用作普通串口本身没什么问题,之前在S3C2410上也做过。当时是把2410的调试串口强制改为普通串口,系统启动后调试串口就无法正常使用了。但目前的项目仍在进一步完善之中,调试串口还是相当重要的,经常需要通过它,抓一些TRACE来分析和定位问题。所以,希望UART0能在调试串口和普通串口之间方便切换。
      同一时刻,UART0既用作调试串口,又用作普通串口似乎不可能,并且意义也不大。考虑了一个简单的方法,系统默认将UART0用作普通串口,需要抓取TRACE时,在应用程序中配置UART0的工作模式为调试串口,然后重启系统。
      熟悉WinCE6.0启动过程的都知道,调试串口的初始化是在WinCE内核启动的最初阶段,《S3C2410下WinCE6.0的启动过程详解》曾有介绍,感兴趣的话可以看一看。调试串口的初始化代码一般在BSP目录下的Src\OAL\OALLIB\debug.c文件中。在该文件中主要做了两处修改,如下。
1 void OEMInitDebugSerial()
2 {
3     pVirtualBOOTARGS = (tSYSTEM_PARAM *)OALPAtoVA(SYSTEM_PARAM_BASEADDRESS,FALSE);
4 }

    此处增加了获取系统配置参数的虚拟地址。
[url=" title=][/url]
1 //------------------------------------------------------------------------------
2 //
3 //  Function:  OEMWriteDebugString
4 //
5 //  Output unicode string to debug serial port
6 //
7 VOID OEMWriteDebugString(UINT16 *string)
8 {
9     if (!pVirtualBOOTARGS->SysConfig.fDisableDebugSerial)
10     {
11         while (*string != L'\0') OEMWriteDebugByte((UINT8)*string++);
12     }
13 }
[url=" title=][/url]

      其中,pVirtualBOOTARGS->SysConfig.fDisableDebugSerial为控制调试串口是否正常输出字符的变量。SysConfig是保存在NAND Flash中特定区域的一个结构体,BOOT启动时可以读取到,并且放在内存的指定位置。应用程序中可以修改该结构,相关代码如下。
[url=" title=][/url]
1 void SysDisableDebugSerial(int nDisable)
2 {
3     GetSysConfig(&gSYSCONFIG);
4     gSYSCONFIG.fDisableDebugSerial = nDisable;
5     SetSysConfig(&gSYSCONFIG);
6 }
7
8
9
10 void CSysAppDlg::OnBnClickedCheckDebugserial()
11 {
12     // TODO: 在此添加控件通知处理程序代码
13     CReg Reg;
14
15     UpdateData(TRUE);
16     SysDisableDebugSerial(m_bDisableDebugSerial);
17
18     Reg.Open(HKEY_LOCAL_MACHINE, _T("Drivers\\BuiltIn\\Serial3"), KEY_ALL_ACCESS);
19     Reg.SetSZ(_T("Dll"), m_bDisableDebugSerial ? _T("tcc_serial.dll") : _T("-tcc_serial.dll"));
20     Reg.Flush();
21 }
[url=" title=][/url]

       可以看到,在修改变量fDisableDebugSerial的同时,还需要修改UART0对应的注册表。在禁用调试串口时,DLL键值设置为正确的,在启用调试串口时,DLL键值前加一个中横杠。确保UART0要么用作调试串口,要么用作普通串口,二者必居其一。应用程序设置界面如下图所示。
      
      经测试,以上修改基本达到了预计的效果,实现了WinCE下调试串口的动态复用。

http://www.cnblogs.com/we-hjb/archive/2011/04/14/2016481.html


这位老兄 的文章思路还可以。

最新回复

谢谢分享   详情 回复 发表于 2021-4-26 14:53
点赞 关注
个人签名如果对linux,Android,wince 等嵌入式底层有兴趣的,请加这个QQ群吧,群号:27100460

回复
举报

661

帖子

0

TA的资源

纯净的硅(初级)

沙发
 

谢谢分享

 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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