求助!!!在使用cypress的CY7C63813的时候,碰到一个中断冲突问题,我搞不清原因。项目实现的功能就是把遥控器的按键动作封装成标准的USB mouse动作。硬件上,我通过一个GPIO口连接到一个红外接收管上。现在的问题是:一旦我打开PORT0的ISR,程序跑着跑着就死掉了,我做了个试验,在main函数while(1)中,让LED闪烁,只要我打开PORT0的ISR,不要一会儿,LED停止闪烁,程序跑死了。如果,我把boot.tpl中的PORT0中断跳转还原到默认的PORT0 ISR,注释掉自己写PORT0 ISR,那么LED等一直在闪烁,程序运行正常。 我只发现了问题,但是搞不清为什么,所以,请教高手,这个PORT0的中断同其他的中断会不会有什么冲突,比如说,USB SIE的什么中断,我的PORT0 ISR如下: void PORT0_ISR( void ) { // key_pressed = 1; unsigned int i; unsigned int j; key_code_32 = 0; //P05CR &= ~0X40; //if(key_pressed) //{ //INT_CLR0 |= 0X10;//clear P0.5 interrupt flag M8C_DisableIntMask(INT_MSK0,0x10);//disable P0.5 interrupt //key_pressed = 0; //start_9ms_delay = 1; //bootstrap_9ms = 9;//delay 9ms //while(bootstrap_9ms); for(j = 0;j<3200;j++)//delay 9ms { if(P0DATA & 0X20)//if p0.5 turn to high level,return,prevent mis-trigger { M8C_EnableIntMask(INT_MSK0,0x10);//enable P0.5 interrupt asm("reti"); } } //start_9ms_delay = 0; //for(i = 0;i<12000;i++)//delay 6ms for(i = 0;i<2618;i++)//delay 6ms { if(!(P0DATA & 0X20))//if p0.5 turn to low level,jump out break; } for(i=0;i<32;i++)// get system codes and data codes,TOTAL 32BIT { while(!(P0DATA & 0X20));//WAIT FOR HIGH LEVEL //for(j = 0;j<5400;j++);//delay 0.9ms for(j = 0;j<540;j++);//delay 0.9ms if(P0DATA & 0X20) { key_code_32 |= 1; } key_code_32 <<= 1; } // data_code = (unsigned char)((key_code_32&0x0000FF00)>>8);//get data code //data_code >>= 8; // data_code_neg = (unsigned char)(key_code_32&0x000000FF);//get data anti-code //M8C_EnableIntMask(INT_MSK0,0x10);//enable P0.5 interrupt
PRT1DR &= 0X7F; //delay(); i = 65535; while(i) { i--; } PRT1DR |= 0X80;
//if(data_code = ~data_code_neg)//check data valid // { // data_valid = 1; //LED blink // PRT1DR &= 0X7F; //delay(); // i = 65535; //while(i) // { // i--; // } // PRT1DR |= 0X80; // }
//P05CR |= 0X40; M8C_EnableIntMask(INT_MSK0,0x10);//enable P0.5 interrupt INT_CLR0 |= 0X10;//clear P0.5 interrupt flag }
|