5509中断3的问题
我们公司做了一个5509开发板,用CPLD通过TL16C554扩展了四个串口。现在发送已经调通,查询方式接收也已经搞好,就差中断方式接收了。
CPLD对应说明部分如下:
要用到中断三。
我的部分程序如下:
interrupt void int3(void);
。。。。。。。。。。。。。。。。。。。。。
Uint16 eventId0;
int old_intm;
//---------Function prototypes---------
/* Reference start of interrupt vector table */
/* This symbol is defined in file, vectors_IP.s55 */
extern void VECSTART(void);
。。。。。。。。。。。。。。。。。。。。。。。。
//5509A中断设置,使能INT1中断
void INTconfig()
{
/* Temporarily disable all maskable interrupts */
IRQ_setVecs((Uint32)(&VECSTART));
/* Temporarily disable all maskable interrupts */
old_intm = IRQ_globalDisable();
/* Get Event Id associated with External INT1(8019), for use with */
eventId0 = IRQ_EVT_INT0;
/* Clear any pending INT1 interrupts */
IRQ_clear(eventId0);
/* Place interrupt service routine address at */
/* associated vector location */
IRQ_plug(eventId0,&int3);
/* Enable INT1(8019) interrupt */
IRQ_enable(eventId0);
/* Enable all maskable interrupts */
IRQ_globalEnable();
}
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
main()
{
unsigned int i;
/*初始化CSL库*/
CSL_init();
/*EMIF为全EMIF接口*/
CHIP_RSET(XBSR,0x0a01);
/*设置系统的运行速度为144MHz*/
PLL_config(&myConfig);
/*初始化DSP的外部SDRAM*/
EMIF_config(&emiffig);
INTconfig();
TL16C554_1=(int *)0x200c00;
TL16C554_2=(int *)0x200e00;
TL16C554_3=(int *)0x201000;
TL16C554_4=(int *)0x201200;
TL16C554_INT=(int *)0x201a00;
Init554();
i=0;
do
{
//dat=XBYTE;
i=i;
i=i;
zyq.temp=*(TL16C554_4+LSR);
i=i;
if(zyq.temp&0x01)
break;
}while(1);
for(;;)
{
}
}
//External INT1(8019)中断,响应ICMP数据包
interrupt void int3()
{
unsigned int i;
i=*TL16C554_INT;
switch(i)
{
case 1:
zyq.dat=*(TL16C554_1+RBR);
*(TL16C554_1+THR)=zyq.dat;
break;
case 2:
zyq.dat=*(TL16C554_2+RBR);
*(TL16C554_2+THR)=zyq.dat;
break;
case 4:
zyq.dat=*(TL16C554_3+RBR);
*(TL16C554_3+THR)=zyq.dat;
break;
case 8:
zyq.dat=*(TL16C554_4+RBR);
*(TL16C554_4+THR)=zyq.dat;
break;
default:
break;
}
}
调试时发现进不了中断。请高手解惑,谢谢! 你最好确认一下 CPLD有没有给触发电平
例程参考修改一下你的中断初始化试试
#include <csl.h>
#include <csl_irq.h>
#include <csl_pll.h>
#include <csl_chip.h>
#include <stdio.h>
Uint16 old_intm;
interrupt void EVT_INT3(void);
interrupt void EVT_INT4(void);
//---------Function prototypes---------
/* Reference start of interrupt vector table */
/* This symbol is defined in file, vectors_IP.s55 */
extern void VECSTART(void);
/*锁相环的设置*/
PLL_ConfigmyConfig = {
0, //IAI
1, //IOB
24, //PLL
1 //Divide by 2
};
void INTconfig()
{
/* Temporarily disable all maskable interrupts */
IRQ_setVecs((Uint32)(&VECSTART));
/* Temporarily disable all maskable interrupts */
old_intm = IRQ_globalDisable();
/* Clear any pending INT3&INT4 interrupts */
IRQ_clear(IRQ_EVT_INT3);
IRQ_clear(IRQ_EVT_INT4);
/* Place interrupt service routine address at */
/* associated vector location */
IRQ_plug(IRQ_EVT_INT3,&EVT_INT3);
IRQ_plug(IRQ_EVT_INT4,&EVT_INT4);
/* Enable INT3&INT4 interrupt */
IRQ_enable(IRQ_EVT_INT3);
IRQ_enable(IRQ_EVT_INT4);
/* Enable all maskable interrupts */
IRQ_globalEnable();
}
void main(void)
{
/*初始化CSL库*/
CSL_init();
/*设置系统的运行速度为144MHz*/
PLL_config(&myConfig);
//设置并使能5509A芯片外部中断3和中断4
INTconfig();
while(1);
}
//External INT3(EXINT)中断处理函数
interrupt void EVT_INT3()
{
printf("EXINT3 Ouccers!\n");
}
//External INT4(EXINT)中断处理函数
interrupt void EVT_INT4()
{
printf("EXINT4 Ouccers!\n");
}
经过测试,当从串口发送数据时,INTA-INTD没有波形。 你函数名用的int3是用要int3脚么?
函数里面标注写的使能int1
但是代码却打开了int0 。。。。 注释不对。
IRQ_plug(eventId0,&int3);
这不是INT3吗?
是不是这个eventId0 = IRQ_EVT_INT0;
也要改成eventId0 = IRQ_EVT_INT3; wangch_sh 发表于 2014-12-6 08:48 static/image/common/back.gif
注释不对。
IRQ_plug(eventId0,&int3);
这不是INT3吗?
int3是中断函数入口地址跟你的中断函数命名有关
eventId0 = IRQ_EVT_INT0很重要你要确定用的是哪个INT* 谢谢!
页:
[1]