/* CH375中断服务程序,假定CH375的INT#引脚连接到单片机的INT0,使用寄存器组1 */ void mCH375Interrupt( void ) interrupt 0 using 1 { UINT8 cnt; UINT8 dat; EX0 = 0; #define IntStatus dat /* 节约一个变量存储单元 */ CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 获取中断状态并取消中断请求 */ IntStatus = CH375_RD_DAT_PORT( ); /* 获取中断状态 */ IE0 = 0; EX0 = 1;// 清中断标志,与单片机硬件有关,对应于INT0中断 */ if ( IntStatus == USB_INT_EP2_OUT ) { /* 批量端点下传成功,接收到命令包 */
CH375_WR_CMD_PORT( CMD_RD_USB_DATA ); /* 从当前USB中断的端点缓冲区读取数据块,并释放缓冲区 */ cnt = CH375_RD_DAT_PORT( ); /* 首先读取后续数据长度 */ Print("EP2_OUT."); if( cnt ==1 ) { dat = CH375_RD_DAT_PORT( ); P1 = dat ; if( dat ==0x22 ) { P1 = dat ; CH375_WR_CMD_PORT(CMD_SET_ENDP5); CH375_WR_DAT_PORT(0x0E); Print("ML."); ClrScreen(); } else { P1 = dat ; CH375_WR_CMD_PORT(CMD_WR_USB_DATA5); CH375_WR_DAT_PORT(0x01); CH375_WR_DAT_PORT(dat); Print("SJ."); }
}
} else if ( IntStatus == USB_INT_EP2_IN ) { /* 批量数据发送成功,状态包已发送 */ /* 释放当前USB缓冲区,收到上传成功中断后,必须解锁USB缓冲区,以便继续收发 */ CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); GotoXY(0,0); Print("EP2_IN."); } else if ( IntStatus == USB_INT_EP1_IN ) { /* 中断数据发送成功,本程序未用到 */ //GotoXY(0,1); Print("EP1_IN."); CH375_WR_CMD_PORT( CMD_UNLOCK_USB ); /* 释放当前USB缓冲区 */ CH375_WR_CMD_PORT(CMD_WR_USB_DATA7); CH375_WR_DAT_PORT(0x01); CH375_WR_DAT_PORT(0x55); ClrScreen(); }
/* 内置固件的USB方式下不应该出现其它中断状态 */ } 大家帮忙看一下,这是CH375的中断,主机先发送个数据,然后向端口1发送数据,在端口1的发送完中断中向端口2发数据,本来主机发一次,端口1,2分别上传一次,但在主机端如果不读端口2,端口1就发两次,为什么?