2312|4

74

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

Wince5.0 DMA中断 [复制链接]

各位英雄:
    小弟最近研究摄像头驱动(WINCE5.0+PXA270+OV9650),涉及到DMA中断。
    BSP中至少有两个驱动使用DMA中断:
    其一就是音频,在\Src\Kernel\Oal\intr.c文件中使用OALIntrStaticTranslate(SYSINTR_AUDIO, IRQ_DMAC);函数静态映射;
    其二就是摄像头驱动,在驱动加载时使用KernelIoControl、LoadIntChainHandler等函数动态映射。

    现在的问题时,我的摄像头驱动中收不到DMA中断。
    问题请教:

    1、IRQ和SYSINTR是不是只能是一对一?应该可以一对多吧?

    2、多个设备同时使用IRQ_DMAC,而逻辑中断号SYSINTR各不相同;系统运行并产生DMA中断时,会不会因为映射关系混乱而导致部分设备不能接收中断?中断到来时,系统是如何区分它是哪个设备的DMA中断?或者说如何保证每个设备都能正常的接收到DMA中断信号?

    3、OEMInterruptHandler函数和常说的ISR是什么关系?还有可安装的GIISR呢?

    另外,SYSINTR_AUDIO为25,摄像头驱动调用KernelIoControl返回的SYSINTR为16。

此帖出自WindowsCE论坛

最新回复

另外附加一个问题:哪位英雄有PXA270下OV9650的标准寄存器配置啊?  详情 回复 发表于 2009-7-25 17:10
点赞 关注
 

回复
举报

85

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
1.通常我们会说IRQ和SYSINTR是一对一的;但这个IRQ并不严格指系统的中断号;
比如一个芯片把GPIO分成两个大集合:GPIOA,GPIOB,IRQ号分别为IRQ_GPIOA, IRQ_GPIOB;
实际上在GPIOA中,一共有32根GPIO,每根GPIO都可以产生一个系统中断,但系统中断号都为IRQ_GPIOA;
实际上这32个GPIO的每个中断都可以将其映射成为一个SYSINTR;

2.当然映射一定要正确;如果如你所说的系统里只有一个物理IRQ_DMAC,那么一定会在ISR中将不同DMA通道产生的中断区分开,并返回对应的逻辑中断号;这部分是BSP需要实现的;

3.通常我们会在OEMInterruptHandler中实现ISR的功能,所以这部分的执行时间不能太长,特别不能输出太多打印语句;GIISR实际上是被挂载在ISR处理链上;

另外,系统硬件使用的逻辑中断通常从SYSINTR_FIRMWARE开始,它的值等于16;
此帖出自WindowsCE论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
在OEMInterruptHandler函数中,调用了NKCallIntChain函数,是不是说,DMA中断到来时,系统默认先处理成ISR处理链,如果返回的是SYSINTR_CHAIN,再处理成静态映射的DMA中断?

ULONG OEMInterruptHandler(ULONG ra)
{
    UINT32 irq = OAL_INTR_IRQ_UNDEFINED;
    UINT32 sysIntr = SYSINTR_NOP;
    ...
        // First find if IRQ is claimed by chain
        sysIntr = (UINT16)NKCallIntChain((UCHAR)irq);

        if (sysIntr == (UINT16)SYSINTR_CHAIN || !NKIsSysIntrValid(sysIntr))
        {
            // IRQ wasn't claimed, use static mapping
            sysIntr = OALIntrTranslateIrq(irq);
        }
    ...
    return (sysIntr);
}

另外,KernelIoControl返回的SYSINTR为16,也即是SYSINTR_FIRMWARE,是不是说明返回有误?因为BSP中,系统中断号都是从SYSINTR_FIRMWARE+1开始的。
如:
// Static SYSINTR Mapping for driver.
#define SYSINTR_OHCI            (SYSINTR_FIRMWARE+1)  // 17
#define SYSINTR_TOUCH           (SYSINTR_FIRMWARE+2)  // 18
#define SYSINTR_TOUCH_CHANGED   (SYSINTR_FIRMWARE+3)  // 19
#define SYSINTR_KEYPAD          (SYSINTR_FIRMWARE+4)  // 20
此帖出自WindowsCE论坛
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

4
 
期待英雄解答啊...
此帖出自WindowsCE论坛
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

5
 
另外附加一个问题:哪位英雄有PXA270下OV9650的标准寄存器配置啊?
此帖出自WindowsCE论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

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