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

📄 d14.h

📁 ISP1581设计的大容量存储器固件程序。 包含以下文件: d14.h i2c.c i2c.h init.c intrpt.c kernel.c
💻 H
字号:
//***********************************************************************
// 	File Name	:       D14.h		                                    *
//***********************************************************************

typedef union ADDRESS_REG		//地址寄存器 0x00h
{

	struct ADDRESS_BITS
	{
		UC	DEVADDR		:	7;	//设备地址值
		UC	DEVEN		:	1;	//使能位 逻辑1 使能
	}BITS;
	UC	VALUE;
}ADDRESS_REG;


typedef union USB_MODE			//模式寄存器 0xOCH
{
	struct USB_MODE_BITS		//
	{
		UC	SOFTCT	:	1;		//软连接1.5K电阻 逻辑1连接
		UC	PWROFF	:	1;		//保留 必须写0
		UC	WKUPC	:	1;		//远程唤醒使能端
		UC	GLINTE	:	1;		//全局中断使能
		UC	SFRESET	:	1;		//软复位 0后写1使能软件复位
		UC	GOSUSP	:	1;		//挂起状态使能 写1使器件进入到挂起状态
		UC	SNDRSU	:	1;		//发送恢复信号 0后写1产生一个持续10ms的信号
		UC	DISGLBL	:	1;		//全局时钟状态设置 1 挂起时时钟运行 0 挂起时时钟停止 适合低功耗需求
	}BITS;
	UC	VALUE;
}USB_MODE;

typedef union INT_CONFIG		//中断配置寄存器 0x10H  决定中断输出的特性.
{
	struct INT_CONFIG_BITS
	{
		UC	INTPOL		:	1;	//中断极性:选择INT 输出信号极性(0=低电平有效,1=高电平有效)。总线复位时值不变。
		UC	INTLVL		:	1;	//中断电平:选择INT 输出信道方式(0=电平,1=脉冲)。若为脉冲方式,一个中断会产生一个60ns 的脉冲。总线复位时值不变
		UC	DDBGMODOUT	:	2;	//数据调试方式OUT		*	00H:中断发生在所有的ACK 和NAK 分组
		UC	DDBGMODIN	:	2;	//数据调试方式IN		*	01H:中断发生在所有的ACK 分组(和NYET分组--DDBGMODOUT)
		UC	CDBGMOD		:	2;	//控制0 调试方式		*	1XH:中断发生在所有的ACK 分组和第一个NAK[1]分组
	}BITS;						//						*	第一个NAK:发生在IN 或OUT 令牌处理的前一个ACK 响应后的第一个NAK
	UC	VALUE;
}INT_CONFIG;


typedef union INT_ENABLE		//中断使能寄存器(地址:14H)
{
	struct INT_ENABLE_BITS
	{
		UC	IERST		: 	1,	//为1,激活检测到一个总线复位的中断
			IESOF		:	1,	//为1,激活检测到一个SOF 的中断
			IEPSOF		:	1,	//为1,激活检测到一个伪SOF 的中断
			IESUSP		:	1,	//为1,激活检测到一个“挂起”状态的中断
			IERESM		:	1,	//为1,激活检测到一个“重新开始”状态的中断
			IEHS_STA	:	1,	//为1,激活检测到一个高速状态变化的中断
			IEDMA		:	1,	//为1,激活检测到DMA 状态变化的中断
			RESERVED3	:	1;	//保留

		UC	IEP0SETUP	:	1,	//为1,激活端点0 的启动数据接收中断
			RESERVED2	: 	1,	//保留
			IEP0RX		:	1,	//为1,激活控制OUT 处理端点0 的中断
			IEP0TX		:	1,	//为1,激活控制IN 处理端点0 的中断
			IEP1RX		:	1,	//为1,激活指定端点1的接收中断
			IEP1TX		:	1,	//为1,激活指定端点1的发送中断
			IEP2RX		:	1,	//为1,激活指定端点2的接收中断
			IEP2TX		:	1;	//为1,激活指定端点2的发送中断

		UC	IEP3RX		:	1,	//为1,激活指定端点3的接收中断
			IEP3TX		:	1,	//为1,激活指定端点3的发送中断
			IEP4RX		:	1,	//为1,激活指定端点4的接收中断
			IEP4TX		:	1,	//为1,激活指定端点4的发送中断
			IEP5RX		:	1,	//为1,激活指定端点5的接收中断
			IEP5TX		:	1,	//为1,激活指定端点5的发送中断
			IEP6RX		:	1,	//为1,激活指定端点6的接收中断
			IEP6TX		:	1;	//为1,激活指定端点6的发送中断

		UC	IEP7RX		:	1,	//为1,激活指定端点7的接收中断
			IEP7TX		:	1,	//为1,激活指定端点7的发送中断
			RESERVED1	:	6;	//保留

	}BITS;
	UL	VALUE;
}INT_ENABLE;


typedef union INTERRUPT_STATUS	//中断寄存器的状态 注释同中断使能寄存器
{
	struct INTERRUPT_STATUS_BITS
	{

		UC	RESET		: 	1;
		UC	SOF			:	1;
		UC	PSOF		:	1;
		UC	SUSP		:	1;
 		UC	RESUME		:	1;
		UC	HS_STAT		:	1;
		UC	DMA			:	1;
		UC	RESERVED3	:	1;

		UC	EP0SETUP	:	1;
		UC	RESERVED2	: 	1;
		UC	EP0RX		:	1;
		UC	EP0TX		:	1;
		UC	EP1RX		:	1;
		UC	EP1TX		:	1;	
		UC	EP2RX		:	1;
		UC	EP2TX		:	1;	

		UC	EP3RX		:	1;
		UC	EP3TX		:	1;
		UC	EP4RX		:	1;
		UC	EP4TX		:	1;	
		UC	EP5RX		:	1;
		UC	EP5TX		:	1;	
		UC	EP6RX		:	1;
		UC	EP6TX		:	1;	

		UC	EP7RX		:	1;
		UC	EP7TX		:	1;
		UC	RESERVED1	:	6;
	}BITS;
	UL	VALUE;
}INTERRUPT_STATUS;

typedef union ENDPT_MAXSIZE		//端点MaxPacketSize 寄存器(地址:04H)
{
	struct ENDPT_MAXSIZE_BITS
	{
		UC	FFOSZ7_0	:	8;	//FIFO 大小:为索引端点以字节形式设置FIFO 的大小。应用在HS 和FS 操作中。
		UC	FFOSZ10_8	:	3;	//FIFO 大小 8-10位
		UC	NTRANS		:	2;	//处理信息数量(仅适用于HS 模式):0-每微幀1 个信息包1-每微幀2 个信息包2-每微幀3 个信息包3-保留这些位仅应用于同步/中断处理中。
		UC	RESERVED2	:	3;	//保留
	}BITS;
	UI	VALUE;
}ENDPT_MAXSIZE;


typedef union ENDPT_INDEX		//端点索引寄存器(地址:2CH)
{
	struct ENDPT_INDEX_BITS
	{
		UC	DIR			:	1;	//方向位:将目标端点设置成IN 或OUT 端点:0-设置成OUT(RX)FIFO 目标端点 / 1-设置成IN(TX)FIFO 目标端点
		UC	ENDPIDX		:	4;	//端点索引:为缓冲器长度、控制功能、数据端口、端口类型、MaxPacketSize 规定值和短包等寄存器的访问选择目标端点
		UC	EP0SETUP	:	1;	//为端点0 选择SETUP 缓冲区:0-EP0 数据缓冲区	1-SETUP 缓冲区 引寄存器来指定目标端点。
		UC	RESERVED	:	2;	//保留
	}BITS;
	UC	VALUE;
}ENDPT_INDEX;


typedef union CONTROL			//控制功能寄存器(地址:28H)
{
	struct CONTROL_BITS
	{
		UC	STALL		:	1;	//终止端点:为1,终止索引的端点。这一位不能用于同步传输。
		UC	STATUS		:	1;	//状态响应:这一位用于控制在SETUP 传输状态阶段ACK 或NAK 信号的产生。在该状态结束和接收到一个SETUP 令牌时自动清除。
								//0-发送NAK
								//1-IN 令牌(主机到设备)处理之后发送一个空包或OUT 令牌处理(设备到主机)之后发送ACK 信号。
		UC	RESERVED2	:	1;	//保留
		UC	VENDP		:	1;	//端点有效:为1,使一个IN 端点的TX FIFO 数据有效,为下一个IN 令牌的处理发送做准备。
								//一般而言,当端点的FIFO 字节数达到端点MaxPacketSize 规定值时端
								//点自动生效。这一位通常用在当端点的FIFO 字节数低于端点MaxPacketSize 规定
								//值时仍要求端点有效的情况下。
		UC	CLBUF		:	1;	//清除缓冲区:为1,清除索引端点的RX 缓冲区;对TX 缓冲器无影响。一旦端点内容完全读出,RX 缓冲区自动清零。这一位通常用在需要强制清除缓冲区的情况下。
		UC	RESERVED1	:	3;	//保留
	}BITS;
	UC	VALUE;
}CONTROL;


typedef union ENDPT_TYPE		//端点类型寄存器
{
	struct ENDPT_TYPE_BITS
	{
		UC	ENDPTYP		:	2;	//端点类型:这2 位用于选择端点类型:01H-同步02H-批量03H-中断
		UC	DBLBUF		: 	1;	//双缓冲区设置:为1,使能索引端点的双缓冲区设置。为0 禁止双缓冲区设置
		UC	ENABLE		:	1;	//端点使能:为1,使能索引端点的FIFO。在端点MaxPacketSize 寄存器中指定存储区大小。为0 禁用FIFO。
		UC	ZERO_PKT_DIS:	1;	//无空包:如果缓冲区长度寄存器或端点MaxPacketSize寄存器内容为0,该位为0表示将一个空包添加到USB数据的下一个IN令牌。为1时这个功能禁止。这位仅应用于DMA模式。
		UC	RESERVED1	:	3;	//保留
		UC	RESRVED2	:	8;	//保留
	}BITS;
	UI	VALUE;
}ENDPT_TYPE;


typedef union ERROR_CODE
{
	struct ERROR_CODE_BITS
	{
		UC	RTOK	:	1;
		UC	ERROR	:	4;
		UC	RESERVED:	1;
		UC	DATA01	:	1;
		UC	UNREAD	:	1;
	}BITS;
	UC	VALUE;
}ERROR_CODE;

typedef union VALIDSHORT
{
	struct VALIDSHORT_BITS
	{
		UC 	RESERVED	:	8;

		UC	OUT0SH	:	1;
		UC	OUT1SH	:	1;
		UC	OUT2SH	:	1;
		UC	OUT3SH	:	1;
		UC	OUT4SH	:	1;
		UC	OUT5SH	:	1;
		UC	OUT6SH	:	1;
		UC	OUT7SH	:	1;
	}BITS;
	UI	VALUE;
}VALIDSHORT;


typedef union FRAME_NO		//幀数目寄存器(地址:74H)这是个只读寄存器,它的内容是最近成功接收到的数据的幀开始(SOF)对应的幀的编号。
{
	struct FRAME_NO_BITS
	{

	UC	SOFL		:	8;	//幀数目0-7位
	UC	SOFH		:	3;	//幀数目8-10位
	UC	USOF		:	3;	//微祯数目
	UC	RESERVED	:	2;	//保留
	
	}BITS;
	
	UI	VALUE;
		
}FRAME_NO; 


typedef union TESTMODE		//测试方式寄存器(地址:84H)
{
	struct TESTMODE_BITS
	{

	UC	SE0_NAK	:	1;
	UC	JSTATE	:	1;
	UC	KSTATE	:	1;
	UC	PRBS	:	1;
	UC	FORCEFS	:	1;
	UC	LPBK	:	1;
	UC	PHYTEST	:	1;
	UC	FORCEHS	:	1;

	}BITS;

	UC	VALUE;

}TESTMODE;


typedef union DMA_CONFIG
{
	struct DMA_CONFIG_BITS
	{

	UC	WIDTH			: 	1;
	UC	RES1			:	1;
	UC	DMA_MODE   		:	2;
	UC	BURST			:	3;
	UC	CNTENA			:	1;
	
    UC	PIO_MODE		:	3;
	UC	UDMA_MODE		:	2;
	UC	ATA_MODE    	:	1;
	UC	IGNORE_IORDY    :	1;
	UC	RES2			:	1;

	}BITS;

	UI	VALUE;

}DMA_CONFIG;

typedef union DMA_HARDWARE
{
	struct DMA_HARDWARE_BITS
	{

	UC	READ_POL	:	1;
	UC	WRITE_POL	:	1;
	UC	DREQ_POL	:	1;
	UC	ACK_POL		:	1;
	UC	MASTER		:	1;
	UC	EOT_POL		:	1;
	UC	ENDIAN		:	2;


	}BITS;

	UC	VALUE;

}DMA_HARDWARE;



typedef union DMA_STROBE
{

	struct DMA_STROBE_BITS
	{

	UC	DMA_STROBE	:	5;
	UC	RES			:	3;
	
	}BITS;

	UC	VALUE;

}DMA_STROBE;
	



typedef union DMA_INT
{
	struct DMA_INT_BITS
	{

	UC	CMD_AUTO_COMPLETE		:	1;
	UC	INTRQ_PENDING			:	1;
	UC	TASKFILE_READ_COMPLETE	:	1;
	UC	BSY_DRQ_POLL_DONE		:	1;
	UC	START_READ_1F0_RD_FIFO	:	1;
	UC	RD_1F0_FIFO_EMPTY		:	1;
	UC	WR_1F0_FIFO_FULL		:	1;
	UC	WR_1F0_FIFO_EMPTY		:	1;

	UC	DMA_DONE				:	1;
	UC	PENDING_INTRQ			:	1;
         UC       INT_EOT                             :        1;
         UC       EXT_EOT                             :        1;
	UC	RES1					:	4;
	
	}BITS;
	
	UI	VALUE;
		
}DMA_INT;

typedef union DMA_INT_ENABLE
{
	struct DMA_INT_ENABLE_BITS
	{

	UC	CMD_AUTO_COMPLETE		:	1;
	UC	INTRQ_PENDING			:	1;
	UC	TASKFILE_READ_COMPLETE	:	1;
	UC	BSY_DRQ_POLL_DONE		:	1;
	UC	START_READ_1F0_RD_FIFO	:	1;
	UC	RD_1F0_FIFO_EMPTY		:	1;
	UC	WR_1F0_FIFO_FULL		:	1;
	UC	WR_1F0_FIFO_EMPTY		:	1;

	UC	DMA_DONE				:	1;
	UC	RES1					:	7;

	}BITS;

	UI	VALUE;

}DMA_INT_ENABLE;

/*
typedef union DMA_ENDPT
{

	struct DMA_ENDPT_BITS
	{

	UC	DMADIR		:	1;
	UC	EDPIDX		:	3;
	UC	NOT_USED	: 	4;
	
	}BITS;

	UC	VALUE;

}DMA_ENDPT;
*/

typedef	union	DMA_STATE_1
{

	struct DMA_STATE_1_BITS
	{

	UC	PIO_SEQ_STATE	:	3;
	UC	PIO_CMD_STATE	:	5;
	
	}BITS;

	UC	VALUE;

}DMA_STATE_1;
/*
typedef	union	DMA_STATE_2
{

	struct DMA_STATE_2_BITS
	{

	UC	RES		:	8;
	
	}BITS;

	UC	VALUE;

}DMA_STATE_2;
*/

typedef struct D14_CNTRL_REG
{

	ADDRESS_REG			D14_ADDRESS;		

	UC					DUMMY_01;
	UC					DUMMY_02;
	UC					DUMMY_03;

 	ENDPT_MAXSIZE		D14_ENDPT_MAXPKTSIZE;

	UC					DUMMY_06;
	UC					DUMMY_07;

	ENDPT_TYPE			D14_ENDPT_TYPE;	

	UC					DUMMY_0A;
	UC					DUMMY_0B;

	USB_MODE			D14_MODE;

	UC					DUMMY_0D;
	UC					DUMMY_0E;
	UC					DUMMY_0F;

	INT_CONFIG			D14_INT_CONFIG;

	UC					DUMMY_11;
	UC					DUMMY_12;
	UC					DUMMY_13;

	INT_ENABLE			D14_INT_ENABLE;


	INTERRUPT_STATUS	D14_INT;


	UC					D14_BUFFER_LENGTH_LSB;
	UC					D14_BUFFER_LENGTH_MSB;

	UC					DUMMY_1E;
	UC					DUMMY_1F;

  	UC					D14_DATA_PORT_LSB;
  	UC					D14_DATA_PORT_MSB;

	UC					DUMMY_22;
	UC					DUMMY_23;

	VALIDSHORT			D14_VALIDATE_SHORT;

	UC					DUMMY_26;
	UC					DUMMY_27;

	CONTROL				D14_CONTROL_FUNCTION;

	UC					DUMMY_29;
	UC					DUMMY_2A;
	UC					DUMMY_2B;

	UC					D14_ENDPT_INDEX;

	UC					DUMMY_2D;
	UC					DUMMY_2E;
	UC					DUMMY_2F;

	UC					D14_DMA_COMMAND;

	UC					DUMMY_31;
	UC					DUMMY_32;
	UC					DUMMY_33;

	UC					D14_DMA_TRANSFER_COUNTER_LSB;
	UC					D14_DMA_TRANSFER_COUNTER_BYTE2;
	UC					D14_DMA_TRANSFER_COUNTER_BYTE3;
	UC					D14_DMA_TRANSFER_COUNTER_MSB;

	DMA_CONFIG          D14_DMA_CONFIG;
	
	UC					DUMMY_3A;
	UC					DUMMY_3B;

 	DMA_HARDWARE		D14_DMA_HARDWARE;

	UC					DUMMY_3D;
	UC					DUMMY_3E;
	UC					DUMMY_3F;

	UC					D14_DATA_TASKFILE_LSB;
	UC					DATA_TASKFILE_BYTE2;
	UC					DATA_TASKFILE_BYTE3;
	UC					DATA_TASKFILE_MSB;

	UC					D14_CMD_STATUS_TASKFILE;

	UC					DUMMY_45;
	UC					DUMMY_46;
	UC					DUMMY_47;

	UC					D14_ERROR_FEATURE_TASKFILE;
	UC					D14_INTERRUPT_TASKFILE;
	UC					D14_SECTOR_NUMBER;
	UC					D14_BYTECOUNT_LSB_TASKFILE;
	UC					D14_BYTECOUNT_MSB_TASKFILE;
	UC					D14_DRIVE_SELECT_TASKFILE;
	UC					D14_ALT_STATUS_DEVCNTRL_TASKFILE;
	UC					D14_TASKFILE;

	DMA_INT				D14_DMA_INT; //DMA reason register.

	UC					DUMMY_52;
	UC					DUMMY_53;

	DMA_INT_ENABLE		D14_DMA_INT_ENABLE;

	UC					DUMMY_56;
	UC					DUMMY_57;

	UC					D14_DMA_ENDPOINT; //Select ep for DMA transfer.

	UC					DUMMY_59;
	UC					DUMMY_5A;
	UC					DUMMY_5B;
	
	DMA_STATE_1			D14_DMA_STATE_1; //Not defined. Not use 
	
	UC					DUMMY_5D;
	UC					DUMMY_5E;
	UC					DUMMY_5F;

	DMA_STROBE			DMA_STROBE_TIMING; //only for ATA Application

	UC					DUMMY_61;
	UC					DUMMY_62;
	UC					DUMMY_63;
	
	UC					UDMA_BYTE_COUNT_LSB;
	UC					UDMA_BYTE_COUNT_MSB;

	UC					DUMMY_66;
	UC					COUNT_1F0;
	
	
	UC					PMU_TRANSFER_COUNT_0;
	UC					PMU_TRANSFER_COUNT_1;
	UC					PMU_TRANSFER_COUNT_2;
	UC					PMU_TRANSFER_COUNT_3;

	UC					DUMMY_6C;
	UC					DUMMY_6D;
	UC					DUMMY_6E;
	UC					DUMMY_6F;
							  
	UC					D14_CHIP_ID_LSB;
	UC					D14_CHIP_ID_MBYTE;
	UC					D14_CHIP_ID_MSB;


	UC					DUMMY_73;

	FRAME_NO			D14_FRAME_NUMBER;

	UC					DUMMY_76;
	UC					DUMMY_77;

	UI					D14_SCRATCH_REGISTER;

	UC					DUMMY_7A;
	UC					DUMMY_7B;

	UC					D14_UNLOCK_DEVICE_LSB;
	UC					D14_UNLOCK_DEVICE_MSB;

	UC					DUMMY_7E;
	UC					DUMMY_7F;

	ERROR_CODE			D14_ERROR_CODE;

	UC					DUMMY_81;
	UC					DUMMY_82;
	UC					DUMMY_83;

	TESTMODE			D14_TEST_MODE;

	UC					DUMMY_85;
	UC					DUMMY_86;
	UC					DUMMY_87;
	UC					DUMMY_88;

}D14_CNTRL_REG;


⌨️ 快捷键说明

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