⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d12.h

📁 44b0x的U盘源代码
💻 H
字号:
#ifndef D12_H
#define D12_H

#include "def.h"

#define	D12Cmd	*(volatile U8 *)(0x2000001)
#define	D12Dat	*(volatile U8 *)(0x2000000)

typedef union                                          //程序标志位
{
	unsigned short Register;
	struct flags
	{
	 unsigned bus_reset        :1;
	 unsigned suspend          :1;
	 unsigned remote_wakeup    :1;
	 unsigned int_isr          :1;
	 unsigned not_end          :1;
	 unsigned usb_idle         :1;
	 unsigned usb_busy         :1;
	 unsigned setup_packet_in  :1;
	 unsigned setup_packet_out :1;
	 unsigned set_addr         :1;
	 unsigned usb_endp0_in     :1;
	 unsigned usb_endp2_in     :1;
	 unsigned usb_endp2_out    :1;
	 unsigned not_use			:3;
	}flags;
}usb_flags_DEF;

typedef union                        //中断寄存器
{
	 unsigned char Register[2];
	  struct  Interrupt
	  {
	   unsigned control_out_port  :1;
	   unsigned control_in_port   :1;
	   unsigned port_out_1        :1;	   
   	   unsigned port_in_1         :1;
	   unsigned main_out_port     :1;	   
	   unsigned main_in_port      :1;	   	   
	   unsigned bus_reset         :1;	   
	   unsigned suspend_change    :1;
	   unsigned not_use           :7;
	   unsigned DMA_EOT           :1;	   
	  }Interrupt;
}Interrupt_Register_DEF;


typedef union                                    //端点最后处理状态
{
	 unsigned char Register;
	 struct	Status
	 {
	  unsigned successful          :1;
	  unsigned error_code          :4;
	  unsigned setup_packet        :1;
	  unsigned data_1              :1;
	  unsigned prestatus_not_read  :1;
	 }Status;
}Last_Status_DEF;

//PDIUSBD12.h
//PDIUSBD12的命令和数据定义


//*************************************************
//端点号定义
#define CONTROL_POINT_OUT        0x00
#define CONTROL_POINT_IN         0x80
#define POINT_1_OUT              0x01
#define POINT_1_IN               0x81
#define MAIN_POINT_OUT           0x02
#define MAIN_POINT_IN            0x82
//*************************************************
//*************************************************
//初始化命令
#define Set_Address              0xD0
#define Set_Endpoint_Enable      0xD8
#define Set_Mode                 0xF3
#define Set_DMA                  0xFB
//*************************************************


//*************************************************
//数据流命令
#define Read_Interrupt_Register  0xF4
#define Select_EndPoint          0X00
#define Select_Endpoint_C_OUT    0X00
#define Select_Endpoint_C_IN     0X01
#define Select_Endpoint_1_OUT    0X02
#define Select_Endpoint_1_IN     0X03
#define Select_Endpoint_2_OUT    0X04
#define Select_Endpoint_2_IN     0X05
#define Read_Last_Status         0X40
#define Read_Last_Status_C_OUT   0X40
#define Read_Last_Status_C_IN    0X41
#define Read_Last_Status_1_OUT   0X42
#define Read_Last_Status_1_IN    0X43
#define Read_Last_Status_2_OUT   0X44
#define Read_Last_Status_2_IN    0X45
#define Read_Buffer              0XF0
#define Write_Buffer              0XF0
#define Set_Endpoint_Status_C_OUT 0X40
#define Set_Endpoint_Status_C_IN  0X41
#define Set_Endpoint_Status_1_OUT 0X42
#define Set_Endpoint_Status_1_IN  0X43
#define Set_Endpoint_Status_2_OUT 0X44
#define Set_Endpoint_Status_2_IN  0X45
#define Ack_Setup                 0XF1
#define Clear_Buffer              0XF2
#define Validate_Buffer           0XFA
//*************************************************

//*************************************************
//普通命令
#define Send_Resume               0XF6
#define Read_Current_Frame_Number 0XF5
//*************************************************

//*************************************************
//一些数据的定义
#define Endpoint_Enable           0X01
#define Endpoint_Disenable        0X00

#define Mode0_and_no_connect      0X04
#define Mode1_and_no_connect      0X44
#define Mode2_and_no_connect      0X84
#define Mode3_and_no_connect      0XC4
#define Mode0_and_connect         0X14
#define Mode1_and_connect         0X54
#define Mode2_and_connect         0X94
#define Mode3_and_connect         0XD4
#define Mode_Set_secend_byte      0X8B

void write_usb_command(unsigned char usb_command);       //写USB命令
void write_a_usb_data(unsigned char usb_data);        //写一字节USB数据
unsigned char read_a_usb_data(void);                  //读一字节USB数据
void read_interrupt_register(void);             //读USB中断寄存器
void set_usb_addr(unsigned char addr);          //设置USB地址
void set_endpoint_enable(void);                  //端点使能
unsigned char select_endpoint(unsigned char endp);   //选择终端点
unsigned char  read_last_status(unsigned char endp);   //读端点最后状态
void set_endpoint_status(unsigned char endp,unsigned char status);  //设置端点状态
unsigned char read_endpoint_status(unsigned char endp);           //读端点状态
void clear_buffer(void);                        //清缓冲,在读取缓冲数据后调用
void validate_buffer(void);                    //缓冲区数据有效,在写缓冲后调用
void ack_setup(unsigned char endp);            //应答建立包
void error(unsigned char number);             //出错处理
unsigned char write_endpoint_buff(unsigned char endp,unsigned char len,unsigned char const * buff);    //写终端点缓冲
void disconnect_usb(void);
void connect_usb(void);                            //连接USB
void init_usb(void);                              //初始化USB
void usb_bus_reset(void);                         //USB总线复位处理
void usb_bus_suspend(void);                       //USB总线挂起处理
void set_usb_address(void);                       //设置地址
void get_status(unsigned char receiver);           //获取状态响应
U32 D12RdChipId(void);

#define USB_INT	rPDATG^0
extern usb_flags_DEF usb_flags;
extern Interrupt_Register_DEF Interrupt_Register;
extern Last_Status_DEF Last_Status;
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -