5197|11

72

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

EBOOT 中断问题?? [复制链接]

我现在在EBOOT中要实现一个中断,我是按照USB中断来做的,可以进中断,但是中断执行完后,不能返回到原来进中断的地方执行程序,不知道什么原因??高手帮忙看下

中断初始化程序:
     pISR_iic =(unsigned)(0xEA000000)+(((unsigned)Isr_IIC_Handler - (0x80000000 + 0x18 + 0x10) )>>2);

        if (pI2C_eboot->pINTReg->SRCPND & BIT_IIC) pI2C_eboot->pINTReg->SRCPND  = BIT_IIC;
        if (pI2C_eboot->pINTReg->INTPND & BIT_IIC) pI2C_eboot->pINTReg->INTPND = BIT_IIC;
        pI2C_eboot->pINTReg->INTMSK &= ~BIT_IIC;                // USB Interrupt enable.

中断程序:
; Module Name: IIC_Eboot.s                                          

        OPT        2        ; disable listing
        INCLUDE kxarm.h
        OPT        1        ; reenable listing
        OPT        128        ; disable listing of macro expansions


    TEXTAREA
        IMPORT  Isr_IIC_Int
; ---------------------------------------------------------------------
; ---------------------------------------------------------------------        
    LEAF_ENTRY Isr_IIC_Handler

;        sub        sp,sp,#4        ;decrement sp(to store jump address)
        sub lr, lr, #4
        stmfd   sp!, {r0-r12,lr}
        mov        r0, lr
        bl        Isr_IIC_Int
        ldmfd   sp!, {r0-r12,lr}

        movs pc, lr

    ENDP    ; |Isr_IIC_Handler|

    END   


不知道是不是中断程序有问题。

最新回复

我也被eboot,搞得一头雾水。真是好烦恼  详情 回复 发表于 2008-8-26 16:48
点赞 关注

回复
举报

79

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
怎么没高手回答,
自己顶一下
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
没有这样做过,也没有试图这样做过。一般建议是在eboot中不要运用中断。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

4
 
请教高手们,在EBOOT的USB中断初始化中,有下面这样一条语句,       
pISR =(unsigned)(0xEA000000)+(((unsigned)IsrHandler - (0x80000000 + 0x18 + 0x8) )>>2);

请问:(0x80000000 + 0x18 + 0x8) )>>2) 为什么要右移两位,还有,0x8是什么意思。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

5
 
EBOOT 中一般会是能MMU , 那么你的中断向量区 一定要注意物理地址的转换, 从硬件中断开始一步步弄清楚你的中断向量的内容,然后决定你的中断偏移地址
(0x80000000 + 0x18 + 0x8) )>>2)  右移两位 一般是计算偏移量的, 4 字节刚好是一个DWORD, 那么算出来 刚好是你的 中断向量的地址了
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

6
 
谢谢slyzhang ,还有问题想请教,
在EBOOT中有USB中断,我现在想加一个IIC中断,我的中断向量地址这样写,你看有错吗,
pISR_iic =(unsigned)(0xEA000000)+(((unsigned)Isr_IIC_Handler - (0x80000000 + 0x18 + 0x0C) )>>2);  0X18是IRQ的入口,0X0C,是偏移量,因为USB中断用的0X08,加4个字节,就是0X0C,这样对吗??

 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

7
 
什么平台?怎么确认中断向量中,IIC是USB+4的?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

8
 
兄弟,我就是还没弄清楚在USB中那个0x8是什么意思 ,我在IIC驱动中,那0x8要改成什么??

我的是2443的平台,跟2440差不多
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

9
 
急!!!
在线等,自己顶一下!!
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

10
 
建议你先从.s文件入手 查看系统内存配置情况 如果有Nboot的  查看Nboot中的中断向量表示那个地址,三星以前是在0x0是 Resethandle,后面可以跟着CPU几种状态模式切换的中断向量,最后 也可应定义你的硬件设备中断向量表,有的是在高地址处,记得 2440的 Nboot中有一些 的中断配置。 你可以根据你自己的平台 闲确定中断向量在那里。

2. 查完了Nboot 再检查 Eboot 启动后 是否在内存区域覆盖了 Nboot的内存区域,是否对 中断向量进行了重定义。从你上面的结果看,使用了MMU  并且 向量地址应该在 0x18低地址区域,已经排到了 0x18, 那么后面的区域 你完全可以定义你自己其他的中断向量。(方向是向上还是向下需要检查你的实际配置)。这里你需要检查(相关.s 文件,如果有) 看看 硬件发生中断后,有一个总的处理 所有中断的地方,根据当前中断的类型,看是否跳转到USB还是 IIC地址处。  
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

11
 
LZ搞明白了吗?
(0x80000000 + 0x18 + 0x8) )>>2
还是不明白为什么要>>2,还有0x18是不是异常向量的偏移?0x8是不是中断向量偏移?
这个跳转的地址是虚拟地址?还是物理地址?如果是物理地址,那异常向量表就放在0地址?
#define pISR                (*(unsigned *)(0x30000000+0x18))
这个0x30000000这个地址应该是SDRAM的物理地址?为什么有些人又是用的0x00000000,那不是又变成虚拟地址了?
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(中级)

12
 
我也被eboot,搞得一头雾水。真是好烦恼
 
 
 

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

随便看看
查找数据手册?

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