打印
[DSP]

硬仿的时候进进不去中断

[复制链接]
383|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanghqi|  楼主 | 2020-4-12 17:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是TMS320C6457的DSP芯片,在软仿的情况下,通过将相应的system event置1,能够正常进入中断并跳转到中断服务程序,但是在相同条件下,硬仿的时候进进不去中断

使用特权

评论回复

相关帖子

沙发
jiajs| | 2020-4-12 17:38 | 只看该作者
中断服务程序呢

使用特权

评论回复
板凳
zhanghqi|  楼主 | 2020-4-12 17:41 | 只看该作者
也跳转不到中断服务程序

使用特权

评论回复
地板
wyjie| | 2020-4-12 17:46 | 只看该作者
代码发下吧

使用特权

评论回复
5
zhanghqi|  楼主 | 2020-4-12 17:49 | 只看该作者
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;
}

使用特权

评论回复
6
jlyuan| | 2020-4-12 17:53 | 只看该作者
你的中断源是什么?

使用特权

评论回复
7
zhanghqi|  楼主 | 2020-4-12 17:57 | 只看该作者
中断源是GPIO 15

使用特权

评论回复
8
zhanghqi|  楼主 | 2020-4-12 18:02 | 只看该作者
我读取GPIO状态寄存器,能够看到GPIO 15的状态没问题,EVTFLAG中相应的位也成功置高,IFR对应的中断位也成功置1,但还是不能跳转到我的中断服务程序

使用特权

评论回复
9
lizye| | 2020-4-12 18:07 | 只看该作者
ISTP的配置是不是有问题

使用特权

评论回复
10
zhanghqi|  楼主 | 2020-4-12 18:09 | 只看该作者
STP我配成ISTP = 0x00800080;也就是我希望跳转到的中断服务程序地址,但运行时貌似ISTP一直等于0x00800000,请帮忙看看

使用特权

评论回复
11
wuhany| | 2020-4-12 18:13 | 只看该作者
GPIO配置代码呢

使用特权

评论回复
12
zhanghqi|  楼主 | 2020-4-12 18:15 | 只看该作者
我的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;                //
}

使用特权

评论回复
13
shimx| | 2020-4-12 18:20 | 只看该作者
是不是仿真器没接好啊

使用特权

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

使用特权

评论回复
15
wangpe| | 2020-4-12 18:29 | 只看该作者

重新设置VECTORS:
o = 0x00800000  l = 0x00000400
和ISTP

使用特权

评论回复
16
spark周| | 2020-4-12 18:32 | 只看该作者



要不直接把中断向量表首地址挂载到o地址

使用特权

评论回复
17
zhanghqi|  楼主 | 2020-4-12 18:35 | 只看该作者

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

使用特权

评论回复
18
午夜粪车| | 2020-4-12 18:39 | 只看该作者

看看下面的帖子,看看是否属于同一个原因呢:
//bbs.21ic.com/icview-401828-1-1.html

使用特权

评论回复
19
zhanghqi|  楼主 | 2020-4-12 18:43 | 只看该作者
好,我明天看看,多谢大家

使用特权

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

本版积分规则

852

主题

11757

帖子

5

粉丝