打印

请教:进不去中断的问题

[复制链接]
5265|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
狗腿子小汤|  楼主 | 2012-12-3 17:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请教:进不去中断的问题

用的是TMS320C6457的DSP芯片,在软仿的情况下,通过将相应的system event置1,能够正常进入中断并跳转到中断服务程序,但是在相同条件下,硬仿的时候进进不去中断,也跳转不到中断服务程序,请问可能的原因是什么?代码如下:
空间分配:
MEMORY
{

VECTORS:
o = 0x00800000  l = 0x00000400
/*vectors*/
    L2RAM:      o = 0x00800400  l = 0x001FFC00  /* 2MB L2 Internal SRAM */
    L1PRAM:     o = 0x00E00000  l = 0x00008000  /* 32kB L1 Program SRAM/CACHE */
    L1DRAM:     o = 0x00F00000  l = 0x00008000  /* 32kB L1 Data SRAM/CACHE */
    EMIFA_CE2:  o = 0xA0000000  l = 0x00800000  /* 8MB EMIFA CE2 */
    EMIFA_CE3:  o = 0xB0000000  l = 0x00800000  /* 8MB EMIFA CE2 */
    EMIFA_CE4:  o = 0xC0000000  l = 0x00800000  /* 8MB EMIFA CE2 */
    EMIFA_CE5:  o = 0xD0000000  l = 0x00800000  /* 8MB EMIFA CE2 */
    DDR2_CE0:   o = 0xE0000000  l = 0x20000000  /* 512MB EMIFB CE0 */
}

中断向量表:
.sect".vecs"
.ref _c_int00         
.ref _c_int04                ;ref the function defined in C file  
.align 1024                                                               

_vectors:                                                                    

_vector0:       VEC_ENTRY _c_int00   ;RESET中断
_vector1:       VEC_ENTRY _vec_dummy ;NMI不可屏蔽中断
_vector2:       VEC_ENTRY _vec_dummy ;保留中断1
_vector3:       VEC_ENTRY _vec_dummy ;保留中断2
_vector4:       VEC_ENTRY _c_int04   ;对应于c_int04 ISR
_vector5:       VEC_ENTRY _vec_dummy ;外部中断INT5
_vector6:       VEC_ENTRY _vec_dummy ;外部中断INT6
_vector7:       VEC_ENTRY _vec_dummy ;外部中断INT7
_vector8:       VEC_ENTRY _vec_dummy ;外部中断INT8
_vector9:       VEC_ENTRY _vec_dummy ;JTAGRTDX中断
_vector10:      VEC_ENTRY _vec_dummy ;EMIF_SDRAM_Timer中断
_vector11:      VEC_ENTRY _vec_dummy ;McBSP_0_Receive中断
_vector12:      VEC_ENTRY _vec_dummy ;McBSP_1_Transmit中断
_vector13:      VEC_ENTRY _vec_dummy ;Host_Port_Host_to_DSP中断
_vector14:      VEC_ENTRY _vec_dummy ;Timer0中断
_vector15:      VEC_ENTRY _vec_dummy ;Timer1中断

中断初始化:
void InitInterrupt(void)
{

unsigned int temp;
  *IECRH = 0xFFFFFFFF;  // IECRH (disable high interrupts enable)
  *EECRH = 0xFFFFFFFF; // EECRH (disable high events enable)
  *ICRH  = 0xFFFFFFFF;  // ICRH  (clear high interrupts pending)
  *ECRH  = 0xFFFFFFFF;  // ECRH  (clear high events pending)
  *IECR  = 0xFFFFFFFF;  // IECR  (disable low interrupts enable)
  *EECR  = 0xFFFFFFFF;  // EECR  (disable low events enable)
  *EICR  = 0xFFFFFFFF;  // ICR   (clear low interrupts pending)
  *ECR   = 0xFFFFFFFF;  // ECR   (clear low events pending)


*EVTMASK0 = 0xffffffff;//disable combine

*EVTMASK1 = 0xffffffff;

*EVTMASK2 = 0xffffffff;

*EVTMASK3 = 0xffffffff;




*EVTCLR0 |= 0xfffffff;

*EVTCLR1 |= 0xfffffff;

*EVTCLR2 |= 0xfffffff;//clear all event(including 66) flag before the new interrupt come

*EVTCLR3 |= 0xfffffff;

temp = *EVTFLAG2;

ICR = 0xfffffffe;
//clear IFR

asm( " NOP");

asm( " NOP");

//
*INTMUX1 |= 0x00000037;//55对应到INT04
//
*INTMUX1 &= 0xffff0037;



*INTMUX1 |= 0x00000042;//INT04 responding to event 66,GPIO 15

*INTMUX1 &= 0xffff0042;



IER |= 0x00000012;   // IE4=1,NMIE=1

ISTP = 0x00800080;


//
*EVTSET1 |= 0x00800000;//55

*EVTSET2 |= 0x00000004;//set interrupt 66,only for test,zdx



CSR |= 0x00000001;
// enable GIE

//*EVTSET2=0x0000;
}

相关帖子

沙发
狗腿子小汤|  楼主 | 2012-12-4 09:51 | 只看该作者
自己顶起来

使用特权

评论回复
板凳
五谷道场| | 2012-12-4 11:43 | 只看该作者
你的中断源是什么?

使用特权

评论回复
地板
狗腿子小汤|  楼主 | 2012-12-4 12:30 | 只看该作者
五谷道场 发表于 2012-12-4 11:43
你的中断源是什么?

中断源是GPIO 15,我读取GPIO状态寄存器,能够看到GPIO 15的状态没问题,EVTFLAG中相应的位也成功置高,IFR对应的中断位也成功置1,但还是不能跳转到我的中断服务程序,目前有一个怀疑就是ISTP的配置是不是有问题,ISTP我配成ISTP = 0x00800080;也就是我希望跳转到的中断服务程序地址,但运行时貌似ISTP一直等于0x00800000,请帮忙看看

使用特权

评论回复
5
狗腿子小汤|  楼主 | 2012-12-4 12:31 | 只看该作者
五谷道场 发表于 2012-12-4 11:43
你的中断源是什么?

我的GPIO配置代码:下降沿触发
void InitGPIO(void)
{
        unsigned int temp;
                *BINTEN=0x1;                                                //enable all GPIO interrupt
//                temp=*IN_DATA;
//                temp=*DIR;
                *DIR=0xffff;                                                                //configure all GPIO as input
//                temp=*DIR;
//                temp=*IN_DATA;
                *SET_RIS_TRIG=0x0000;                //GPINTn interrupt and EDMA event is triggered on falling edge of GPn signal
//                temp=*IN_DATA;
                *SET_FAL_TRIG=0x8000;                //
}

使用特权

评论回复
6
五谷道场| | 2012-12-5 16:48 | 只看该作者
是不是仿真器没接好啊

使用特权

评论回复
7
狗腿子小汤|  楼主 | 2012-12-6 09:10 | 只看该作者
五谷道场 发表于 2012-12-5 16:48
是不是仿真器没接好啊

仿真器链接没有问题。
我现在怀疑的一个地方是ISTP的设置,我在程序中让ISTP = 0x00800080,但实际仿真的时候看到ISTP=0x00800000,而且根据数据手册的描述,ISTP中的ISTB(中断向量表基地址)最大为0x3ffff,而6457最小地址为0x00800000(我放置中断向量表的位置),这个值超过了ISTB的范围,请问该如何理解?

使用特权

评论回复
8
五谷道场| | 2012-12-6 17:49 | 只看该作者
重新设置VECTORS:
o = 0x00800000  l = 0x00000400
和ISTP
要不直接把中断向量表首地址挂载到o地址

使用特权

评论回复
9
狗腿子小汤|  楼主 | 2012-12-7 10:00 | 只看该作者
五谷道场 发表于 2012-12-6 17:49
重新设置VECTORS:
o = 0x00800000  l = 0x00000400
和ISTP

Vectors我就是这么定义的。
0x0还没有用,空载

使用特权

评论回复
10
五谷道场| | 2012-12-14 09:47 | 只看该作者
不知道问题解决没有,看看下面的帖子,看看是否属于同一个原因呢:
https://bbs.21ic.com/icview-401828-1-1.html

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

14

帖子

0

粉丝