阅读:1269回复:1
为什么我的D12的INT脚还是为低?
我的板子是ARM+D12,主程序部分程序如下:
rPDATC=rPDATC&0xFFFE; //D12SUSPD=0 Isr_Init(); //中断初始化 reconnect_USB(); 其中Isr_Init()如下: void Isr_Init(void) { rINTCON=0x1; //Vectored,IRQ enable,FIQ disable // rINTMOD=0x0; //All=IRQ mode// pISR_EINT0=(int)Eint0Isr; rPCONG=rPCONG|0x0003; //设置GPG0为中断引脚 rPUPG=rPUPG&0xfe; //设置GPG0上拉电阻有效 rEXTINT=rEXTINT&0xfe; //设置EINT0为低电平触发 rINTMSK=~(BIT_EINT0 | BIT_GLOBAL); //开中断 } 中断函数如下: void fn_usb_isr() { unsigned int i_st; bEPPflags.bits.in_isr = 1; i_st = D12_ReadInterruptRegister(); //读中断寄存器 Uart_Printf(0,\"\\n【D12中断寄存器的值=%d】\",i_st); if(i_st != 0) { if(i_st & D12_INT_BUSRESET) //D12_INT_BUSRESET=0x40 bEPPflags.bits.bus_reset = 1; if(i_st & D12_INT_EOT) //D12_INT_EOT=0x0100 dma_eot(); if(i_st & D12_INT_SUSPENDCHANGE) //D12_INT_SUSPENDCHANGE=0x80 bEPPflags.bits.suspend = 1; if(i_st & D12_INT_ENDP0IN) //D12_INT_ENDP0IN=0x02 ep0_txdone(); if(i_st & D12_INT_ENDP0OUT) //D12_INT_ENDP0OUT=0x01 ep0_rxdone(); if(i_st & D12_INT_ENDP1IN) //D12_INT_ENDP1IN=0x08 ep1_txdone(); if(i_st & D12_INT_ENDP1OUT) //D12_INT_ENDP1OUT=0x04 ep1_rxdone(); if(i_st & D12_INT_ENDP2IN) //D12_INT_ENDP2IN=0x20 main_txdone(); if(i_st & D12_INT_ENDP2OUT) //D12_INT_ENDP2OUT=0x10 main_rxdone(); } bEPPflags.bits.in_isr = 0; } /**************************************************************************************************/ 现在的问题是:我的程序一执行完“Isr_Init(); //中断初始化”,程序就一直响应中断,不再往下执行“reconnect_USB();”这个函数了;并且输出D12中断寄存器的值一直为50115,D12的INT脚一直为低电平。 这个问题已经调试了好久了,就是不知道什么原因,请各位DX帮忙!!! |
|
最新喜欢:lhaih
|
沙发#
发布于:2003-07-30 16:58
论坛中这么多大师,请帮一下忙好吗?
|
|
|