liumda
驱动小牛
驱动小牛
  • 注册日期2002-01-23
  • 最后登录2012-07-16
  • 粉丝0
  • 关注0
  • 积分76分
  • 威望48点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:1269回复:1

为什么我的D12的INT脚还是为低?

楼主#
更多 发布于:2003-07-30 12:59
我的板子是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帮忙!!!

最新喜欢:

lhaihlhaih
You Happy,So I Happy!
liumda
驱动小牛
驱动小牛
  • 注册日期2002-01-23
  • 最后登录2012-07-16
  • 粉丝0
  • 关注0
  • 积分76分
  • 威望48点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-07-30 16:58
论坛中这么多大师,请帮一下忙好吗?
You Happy,So I Happy!
游客

返回顶部