阅读:1177回复:2
请问:设备已经上电,但CPU没有运行程序时(指用仿真器时,程序尚未启动),此时D12的INT引脚应该是什么样的?稳定的,还是快速跳变的。
请问:
在USB插头已经插好(PC端 和 设备端),即设备已经上电,但CPU没有运行程序时(指用仿真器时,程序尚未启动),此时D12的INT引脚应该是什么样的?稳定的,还是快速跳变的。 因为,我在仿真器下,总是还不到中断的地方,就进入中断:init_unconfig(). |
|
沙发#
发布于:2002-10-29 18:00
D12只要上电就中断,你先对D12发0F4H,中断线就会被拉低啦
|
|
|
板凳#
发布于:2002-10-30 09:01
我用EAsyPack仿真器
我在主程序中,只要一走到:总中断开放:EA = 1; 就立刻进入: void fn_usb_isr() { unsigned int i_st; bEPPflags.bits.in_isr = 1; /*读中断寄存器可以得到中断产生的原因*/ i_st = D12_ReadInterruptRegister(); if(i_st != 0) { /*总线复位中断*/ if(i_st & D12_INT_BUSRESET) { bus_reset(); bEPPflags.bits.bus_reset = 1; } /*DMA操作结束中断*/ if(i_st & D12_INT_EOT) dma_eot(); /*当PDIUSBD12没有收到3个SOF时将会进入挂起状态并将挂起改变位置位*/ if(i_st & D12_INT_SUSPENDCHANGE) bEPPflags.bits.suspend = 1; if(i_st & D12_INT_ENDP0IN) ep0_txdone(); if(i_st & D12_INT_ENDP0OUT) ep0_rxdone(); if(i_st & D12_INT_ENDP1IN) ep1_txdone(); if(i_st & D12_INT_ENDP1OUT) ep1_rxdone(); if(i_st & D12_INT_ENDP2IN) main_txdone(); if(i_st & D12_INT_ENDP2OUT) main_rxdone(); } bEPPflags.bits.in_isr = 0; } 此时 i_st=0x4343 即1000 0011 1000 0011,按照对应解释就进入了: (1)/*总线复位中断*/ (2)ep0_txdone(); (3)ep0_rxdone(); 实际单步执行也是这样, 但在主程序中:把断点打在 while( TRUE ) 之前,却始终停不住,也就是到不了这里。 为了确保那是个实际存在的断点,我特意在那里放了个: i++; i++; i-- while( TRUE ) 请问,您知道这是什么原因吗? 您能帮我解释一下,主程序在执行到while( TRUE )之前,即初始化阶段稍微详细一点的流程吗? |
|