我做的DSP5509A-FPGA的板子,现在调串口。接收用的中断,发送是随有随发的。现在环起收发端,环测串口。
串口是在FPGA里做的,产生一个中断信号直接连给DSP,DSP用的INT2(对应IVPD是0X0018)。
从FPGA的逻辑分析仪里看,中断是给出了,但在DSP里,跳不到中断程序。
我的dsp中断的主要配置如下:
#pragma interrupt(soft_int2_RS232);
main()
{ disable_int;
init_ints;
while(1)
{ send(0X1234);} // 发送 具体函数就不写了 在FPGA中可以看到
}
inline void disable_ints(void) { asm(" bclr INTM“) ;} // 置高INTM(关闭所有可屏蔽中断)
void init_ints(void) // 初始化中断
{ asm( " BSET CLKOFF ") //禁止clkout
IFR0 |= IFR0;
IFR1 |= IFR1;
IER0 |= 0X080C;// 对应 INT0 INT2 INT3
IER1 |= 0X0009;// 对应 INT1 INT4
EMIF_GCTRL = 0X31 ; // EMIF全局控制寄存器
EMIF_CE0_CTRCL1 = 0X1FFF ; //CE0空间控制寄存器1
EMIF_CE1_CTRCL1 = 0X1FFF ; //CE1空间控制寄存器1
EMIF_CE2_CTRCL1 = 0X1FFF ; //CE2空间控制寄存器1
EMIF_CE3_CTRCL1 = 0X1FFF ; //CE3空间控制寄存器1
asm( " bclr M40 ") ; // 第31位检测进位/借位
asm( " bclr INTM ") ; // 开启使能所有可屏蔽中断
}
interrupt void soft_int2_RS232(void) { asm(" nop") ; } // 简单一个NOP,不清楚关键字interrupt 用的对不对
中断向量表: int2 : .ivec _soft_int2_RS232
按我的理解:发送后,环回接收,FPGA里的中断信号置低传给DSP,DSP就应该跳到中断函数,就是在send(0X1234)之后跳进中断服务程序。但是却没有。
用Emulator仿真,在CCS里看Registers,IER0、IER1、各状态寄存器ST都设置好了。但IFR0、IFR1都是0000(芯片手册里IFR和IER是一起的,是不是不用设置);IVPD和IVPH都是FFFF,这个是复位值,我觉得应该是在中断响应后,IVPD应被自动写入)0X18。
不知道我说的清楚与否,可问我,我再针对说清楚点。 |