4188|14

70

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

wince 5.0下的串口驱动是如何实现的? [复制链接]

如题:
本人接触的是XScale 270的平台,但是当我把整个串口驱动读完之后,切没有发现串口是否是使用中断来实现的?
为什么在代码里面看不到呢?急!!!!!!!

最新回复

哦,非常谢谢13楼,还有其他的兄弟门!学习了!!  详情 回复 发表于 2008-11-8 18:57
点赞 关注

回复
举报

78

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你是不是没有看bul16550.cpp?
如果你BSP的目录下没有该文件,请到CSP目录下找。
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
到你的主板支持软件开发包中去找 
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

4
 
学习一下。
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 
你驱动的代码里不用注册中断了,你在注册表当中写好了相应的值由系统自己注册中断并调用你的什么INIT READ WRITE一系列的函数,和LINUX的完全自己动手机制不一样。
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
中断注册是由mdd层完成的,而且串口使用的是可安装中断 giisr
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

7
 
中断注册是在mdd层实现的
在你PB的安装目录查找那个mdd.c文件
COM_Init函数里,StartDispatchThread( pSerialHead )为开启那个串口监视线程,这个函数里有下面的代码
InterruptInitialize(pSerialHead->pHWObj->dwIntID,
                              pSerialHead->hSerialEvent,
                              NULL,
                              0) )
在这注册中断和时间关联了
COM_Init函数里,这句pSerialHead->pHWObj = GetSerialObject( DevIndex );是获取PHWOBJ类型对象的
GetSerialObject函数在你的xxxxser.c文件里实现的
假设你是用的COM1,就对应下面这类型
const HWOBJ IoObj = {
        THREAD_AT_INIT,
        SYSINTR_SERIAL,
        (PHW_VTBL) &IoVTbl
};

pSerialHead->pHWObj->dwIntID就等于SYSINTR_SERIAL中断了

正好在改我的串口驱动,希望能帮到你
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

8
 
楼上的你说的我都见到,但是,我在OEMInterruptHandle里面为什么没见到switch里面没见到case ‘中断’的啊?它到底是怎么实现的,我现在好晕。mdd层操作系统又是怎么来响应CPU产生的中断呢?我就是这里没搞明白!!
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

9
 
中断发生后,在OEMInterruptHandler中 会把这个IRQ转换成SYSINTR并通知系统, 则由于前面已经 将SYSINTR和ISTEVENT相关联(6楼分析了), 所以系统收到这个SYSINTR后,就把SET相关的EVENT. 从而IST从 WaitForSingleObject里跳出往下继续执行,进而读取自己模块的Interrupt Status Register进行判断,操作其他 register控制硬件, 完成后调用InterruptDone函数告知系统,然后又回到WaitForSinigleObject里去傻等了...
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

10
 
OEMInterruptHandler里面没有找到串口产生的中断啊!迷茫中。
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

11
 
我当时只是看个框架而已,根本没有看那么细,惭愧。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

12
 
没事。活到老学到老
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

13
 
在你的kernel文件夹下搜索包含SYSINTR_SERIAL关键字(在你那也许是其他名字)的文件
硬件中断出发以后,OEMInterruptHandler肯定得返回这个中断值,不可能找不到的
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 7 楼 LH806732 的回复:
楼上的你说的我都见到,但是,我在OEMInterruptHandle里面为什么没见到switch里面没见到case ‘中断’的啊?它到底是怎么实现的,我现在好晕。mdd层操作系统又是怎么来响应CPU产生的中断呢?我就是这里没搞明白!!

都说是可安装中断了,里面当然就没有case了。
// Call interrupt chain to see if any installed ISRs handle this interrupt
ulRet = NKCallIntChain(ucCurrentInterrupt);

它直接就返回你注册的SYSINTR_XXX了。

如果想看到case就别用可注册的,自己在初始化的时候注册一个,然后再里面用case等着~~
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

15
 
哦,非常谢谢13楼,还有其他的兄弟门!学习了!!
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表