zxl
zxl
驱动牛犊
驱动牛犊
  • 注册日期2002-07-02
  • 最后登录2004-11-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1177回复:2

请问:设备已经上电,但CPU没有运行程序时(指用仿真器时,程序尚未启动),此时D12的INT引脚应该是什么样的?稳定的,还是快速跳变的。

楼主#
更多 发布于:2002-10-29 17:40
请问:
在USB插头已经插好(PC端 和 设备端),即设备已经上电,但CPU没有运行程序时(指用仿真器时,程序尚未启动),此时D12的INT引脚应该是什么样的?稳定的,还是快速跳变的。
因为,我在仿真器下,总是还不到中断的地方,就进入中断:init_unconfig().
cquwyb
驱动牛犊
驱动牛犊
  • 注册日期2002-05-10
  • 最后登录2010-10-23
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望16点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-29 18:00
D12只要上电就中断,你先对D12发0F4H,中断线就会被拉低啦
HonestTreee
zxl
zxl
驱动牛犊
驱动牛犊
  • 注册日期2002-07-02
  • 最后登录2004-11-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于: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 )之前,即初始化阶段稍微详细一点的流程吗?
游客

返回顶部