打印
[STM32F4]

进不去中断

[复制链接]
466|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sourceInsight|  楼主 | 2020-11-8 16:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在软仿的情况下,通过将相应的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;
}

使用特权

评论回复
沙发
feiqi1| | 2020-11-8 17:00 | 只看该作者
你的中断源是什么? 是GPIO 15吗

使用特权

评论回复
板凳
androidbus| | 2020-11-8 17:05 | 只看该作者
EVTFLAG中相应的位也成功置高,IFR对应的中断位也成功置1。

使用特权

评论回复
地板
litengg| | 2020-11-8 17:11 | 只看该作者
STP我配成ISTP = 0x00800080;也就是我希望跳转到的中断服务程序地址,但运行时貌似ISTP一直等于0x00800000。。。

使用特权

评论回复
5
shashaa| | 2020-11-8 17:13 | 只看该作者
下降沿触发
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
xia00| | 2020-11-8 17:18 | 只看该作者
感觉是不是仿真器没接好啊?

使用特权

评论回复
7
hfdy01| | 2020-11-8 17:20 | 只看该作者
我现在也怀疑的一个地方是ISTP的设置,我在程序中让ISTP = 0x00800080,但实际仿真的时候看到ISTP=0x00800000,而且根据数据手册的描述,ISTP中的ISTB

使用特权

评论回复
8
CallReceiver| | 2020-11-8 17:25 | 只看该作者
重新设置VECTORS:
o = 0x00800000  l = 0x00000400
和ISTP

使用特权

评论回复
9
boy1990| | 2020-11-8 17:26 | 只看该作者
要不直接把中断向量表首地址挂载到o地址。

使用特权

评论回复
10
sourceInsight|  楼主 | 2020-11-8 17:30 | 只看该作者
Vectors我就是这么定义的。
0x0还没有用,空载

使用特权

评论回复
11
handleMessage| | 2020-11-8 17:37 | 只看该作者
中断服务程序呢?中断服务程序呢?

使用特权

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

本版积分规则

138

主题

1619

帖子

1

粉丝