void main(void)<br />{<br /> init_port();<br /> init_special_interrupts();<br /> MCU_D12CS = 0x1;<br /> MCU_D12CS = 0x0;<br /> bEPPflags.value = 0;<br /> reconnect_USB();<br /> while( TRUE ){<br /><br /> if (bEPPflags.bits.bus_reset) {//设备复位处理<br /> DISABLE;<br /> bEPPflags.bits.bus_reset = 0;<br /> ENABLE;<br /> <br /> } <br /> if (bEPPflags.bits.setup_packet){//Setup包处理<br /> DISABLE;<br /> bEPPflags.bits.setup_packet = 0;<br /> ENABLE;<br /> control_handler();//调用请求处理子程序<br /> D12SUSPD = 1;<br /> } <br /> } <br />}<br />//中断设置<br />void init_special_interrupts(void)<br />{<br /> IT1 = 0;<br /> EX1 = 1;<br /> PX1 = 0;<br />}<br /><br />//I/O口初始化程序<br />void init_port()<br />{<br /> P0M1=0x00;<br /> P0M2=0x00;<br /> P1M1=0x3C;<br /> P1M2=0x3C;<br /> P2M1=0x00;<br /> P2M2=0x00;<br /> CS_LED=0;<br /> CS_KEYIN=1;<br /> CS_KEYOUT=0;<br /> INT_USB=1;<br /> P0=0X5F;<br /> P1=0X33;<br /> P2=0xFF;<br /> P2=0xFF;<br /> P2=0xFF;<br /><br /> MCU_D12CS = 0x0;<br /> D12SUSPD = 0;<br />}<br />/断开USB总线<br />void disconnect_USB(void)<br />{<br />D12_SetMode(0x02,0x43);<br /><br />}<br /><br />//连接USB总线<br />void connect_USB(void)<br />{<br /> DISABLE;<br /> bEPPflags.value = 0;//清除所有状态<br /> ENABLE;<br /><br />D12_SetMode(0x12,0x43);<br /><br />}<br />//重新连接到USB总线<br />void reconnect_USB(void)<br />{<br /> <br /> D12SUSPD = 0;<br /> disconnect_USB();<br /> delayms(10);<br /> connect_USB();<br />}<br />//模式设置<br />void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)<br />{<br /> if(bEPPflags.bits.in_isr == 0)<br /> DISABLE;<br /><br /> outportb(D12_COMMAND, 0xF3);//设置模式<br /> outportb(D12_DATA, bConfig);<br /> outportb(D12_DATA, bClkDiv);<br /><br />}<br />//读取中断寄存器<br />unsigned short D12_ReadInterruptRegister(void)<br />{<br /> unsigned char b1;<br /> unsigned int j;<br /><br /> outportb(D12_COMMAND, 0xF4);//读取中断寄存器<br /> b1 = inportb(D12_DATA);<br /> j = inportb(D12_DATA);<br /><br /> j <<= 8;<br /> j += b1;<br /><br /> return j;<br />}<br />/输出数据<br />void outportb(unsigned int Addr, unsigned char Data)<br />{ WR=1;<br /> MCU_A0=Addr;<br /> P2=Data;<br /> WR=0;<br /> WR=1;<br /><br />}<br /><br />//输入数据<br />unsigned char inportb(unsigned int Addr)<br />{<br /> unsigned char rt;<br /> RD=1;<br /> MCU_A0=Addr;<br /> RD=0;<br /> rt=P2;<br /> RD=1;<br /> return rt;<br /><br />}<br />//USB中断处理<br />usb_isr() interrupt 2<br />{<br /> DISABLE;<br /> fn_usb_isr();<br /> ENABLE;<br />}<br /><br />//USB中断服务子程序<br />void fn_usb_isr()<br />{<br /> unsigned int i_st;<br /><br /> bEPPflags.bits.in_isr = 1;<br /><br /> i_st = D12_ReadInterruptRegister();//读取中断寄存器<br /><br /> if(i_st != 0) {<br /> if(i_st & D12_INT_BUSRESET) {<br /> bus_reset();//USB总线服务<br /> bEPPflags.bits.bus_reset = 1;<br /> }<br /><br /> if(i_st & D12_INT_ENDP0IN)<br /> ep0_txdone();//端点0IN中断<br /> if(i_st & D12_INT_ENDP0OUT)<br /> ep0_rxdone();//端点0OUT中断<br /> if(i_st & D12_INT_ENDP1IN)<br /> ep1_txdone();//端点1IN中断<br /> <br /> }<br /><br /> bEPPflags.bits.in_isr = 0;<br />}<br /><br />//总线复位处理子程序<br />void bus_reset(void)<br />{<br />}<br /><br />
|