📄 usb_driver.c
字号:
#include"usb_driver.h"
#include"port.h"
#include"d12_value.h"
#include"d12_command.h"
#include"epsetup.h"
#include"epmain.h"
#include"uar.h"
USB_FLAGS usb_flags;
INT_REG Interrupt_Register;
CONTROL_DATA_BUFF Control_Data;
LAST_STATUS Last_Status;
void init_usb(void)
{disp(0x00);
disconnect_usb(); //断开USB连接
del(1000); //延迟
set_addr_enable(0);
set_endpoint_enable(); //初始化USB芯片
usb_flags.value=0;
connect_usb(); //连接USB
}
void usb_int(void)
{
read_interrupt_register();
if(Interrupt_Register.value!=0)
{
if(Interrupt_Register.Status.bus_reset)
usb_flags.Status.bus_reset = 1; //USB总线复位标志
else if(Interrupt_Register.Status.DMA_EOT )
dma_eot(); //;DMA传输技术处理
else if(Interrupt_Register.Status.suspend_change)
usb_flags.Status.suspend = 1; //挂起改变标志置1
else if(Interrupt_Register.Status.control_out_port)// & D12_INT_ENDP0OUT)
endp0_out(); //控制端点接收数据处理
else if(Interrupt_Register.Status.control_in_port)// & D12_INT_ENDP0IN)
endp0_in(); //控制端点发送数据处理
else if(Interrupt_Register.Status.port_in_1)
ep1_in(); //端点 1发送数据处理
else if(Interrupt_Register.Status.port_out_1)
ep1_out(); //端点 1接收数据处理
else if(Interrupt_Register.Status.main_in_port)
ep2_in(); //端点 2发送数据处理
else if(Interrupt_Register.Status.main_out_port)
ep2_out(); //端点 2接收数据处理
}
}
void usb_serve(void)
{
if (usb_flags.Status.setup_packet&&(!usb_flags.Status.not_end))
{ //Setup包处理
usb_flags.Status.setup_packet = 0;
call_c9(); //调用请求处理子程序
}//if setup_packet
if (usb_flags.Status.bus_reset) { //USB总线复位处理
usb_flags.value=0;
usb_bus_reset();
} // if bus reset
if (usb_flags.Status.suspend) { //D12挂起改变处理
usb_flags.Status.suspend= 0;
usb_bus_suspend();
} // if suspend change
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -