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

📄 main.h

📁 D12和89s52+K9F5608组成的系统
💻 H
📖 第 1 页 / 共 2 页
字号:
  /*--------------------------------------------------------------------------
REG52.H

Header file for generic 80C52 and 80C32 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef __REG52_H__
#define __REG52_H__

/*  BYTE Registers  */
sfr P0    = 0x80;
sfr P1    = 0x90;
sfr P2    = 0xA0;
sfr P3    = 0xB0;
sfr PSW   = 0xD0;
sfr ACC   = 0xE0;
sfr B     = 0xF0;
sfr SP    = 0x81;
sfr DPL   = 0x82;
sfr DPH   = 0x83;
sfr PCON  = 0x87;
sfr TCON  = 0x88;
sfr TMOD  = 0x89;
sfr TL0   = 0x8A;
sfr TL1   = 0x8B;
sfr TH0   = 0x8C;
sfr TH1   = 0x8D;
sfr IE    = 0xA8;
sfr IP    = 0xB8;
sfr SCON  = 0x98;
sfr SBUF  = 0x99;

/*  8052 Extensions  */
sfr T2CON  = 0xC8;
sfr RCAP2L = 0xCA;
sfr RCAP2H = 0xCB;
sfr TL2    = 0xCC;
sfr TH2    = 0xCD;


/*  BIT Registers  */
/*  PSW  */
sbit CY    = PSW^7;
sbit AC    = PSW^6;
sbit F0    = PSW^5;
sbit RS1   = PSW^4;
sbit RS0   = PSW^3;
sbit OV    = PSW^2;
sbit P     = PSW^0; //8052 only

/*  TCON  */
sbit TF1   = TCON^7;
sbit TR1   = TCON^6;
sbit TF0   = TCON^5;
sbit TR0   = TCON^4;
sbit IE1   = TCON^3;
sbit IT1   = TCON^2;
sbit IE0   = TCON^1;
sbit IT0   = TCON^0;

/*  IE  */
sbit EA    = IE^7;
sbit ET2   = IE^5; //8052 only
sbit ES    = IE^4;
sbit ET1   = IE^3;
sbit EX1   = IE^2;
sbit ET0   = IE^1;
sbit EX0   = IE^0;

/*  IP  */
sbit PT2   = IP^5;
sbit PS    = IP^4;
sbit PT1   = IP^3;
sbit PX1   = IP^2;
sbit PT0   = IP^1;
sbit PX0   = IP^0;

/*  P3  */
sbit RD    = P3^7;
sbit WR    = P3^6;
sbit T1    = P3^5;
sbit T0    = P3^4;
sbit INT1  = P3^3;
sbit INT0  = P3^2;
sbit TXD   = P3^1;
sbit RXD   = P3^0;

/*  SCON  */
sbit SM0   = SCON^7;
sbit SM1   = SCON^6;
sbit SM2   = SCON^5;
sbit REN   = SCON^4;
sbit TB8   = SCON^3;
sbit RB8   = SCON^2;
sbit TI    = SCON^1;
sbit RI    = SCON^0;

/*  P1  */
sbit T2EX  = P1^1; // 8052 only
sbit T2    = P1^0; // 8052 only
             
/*  T2CON  */
sbit TF2    = T2CON^7;
sbit EXF2   = T2CON^6;
sbit RCLK   = T2CON^5;
sbit TCLK   = T2CON^4;
sbit EXEN2  = T2CON^3;
sbit TR2    = T2CON^2;
sbit C_T2   = T2CON^1;
sbit CP_RL2 = T2CON^0;

#endif


/*
** 文   件   名: D12Config.h
** 最后修改日期: 2004年10月15日
** 描        述: PDIUSBD12 设备端驱动程序 硬件配置头文件
** 版	     本: V5.0
**********************************************************************************************************/
//typedef unsigned char  INT8U;                   /* 无符号8位整型变量                        */
typedef unsigned short INT16U;                  /* 无符号16位整型变量                       */
typedef signed   short INT16;                   /* 有符号16位整型变量                       */
typedef unsigned long  INT32U;                  /* 无符号32位整型变量                       */
typedef signed   long  INT32;                   /* 有符号32位整型变量                       */
//typedef float          FP32;                    /* 单精度浮点数(32位长度)                 */
//typedef double         FP64;                    /* 双精度浮点数(64位长度)                 */

#define DISABLE() 	EA = 0       		//关总中断 disable all interrupt 
#define ENABLE()  	EA = 1				//开总中断 enable  all interrupt

//PDIUSBD12命令与数据地址
#define 	D12_DATA 			0xff02	//D12 数据地址
#define 	D12_COMMAND 		0xff03	//D12 命令地址


sbit MCU_D12CS	  = P1 ^ 6;				//D12 片选引脚
sbit MCU_D12RST   = P1 ^ 7;				//D12 复位引脚
sbit MCU_D12SUSPD = P3 ^ 3;				//D12 挂起

//下面的函数较少用,如需要,可将其值改为1即可
#define D12_SendResume_EN					0
#define D12_ReadCurrentFrameNumber_EN		0
#define D12_ClearBuff_EN					0
#define D12_ReadEndpointStatus_EN			0

/*
** 文   件   名: D12CI.h
** 最后修改日期: 2004年11月15日
** 描        述: PDIUSBD12 设备端驱动程序 接口控制驱动层头文件
** 版	     本: V5.0
**********************************************************************************************************/

#ifndef __D12CI_H__
#define __D12CI_H__

/**  D12 相关定义 ***/
#define D12_NOLAZYCLOCK			0x02
#define D12_CLOCKRUNNING        0x04
#define D12_INTERRUPTMODE		0x08
#define D12_SOFTCONNECT			0x10
#define D12_ENDP_NONISO			0x00
#define D12_ENDP_ISOOUT			0x40
#define D12_ENDP_ISOIN			0x80
#define D12_ENDP_ISOIO			0xC0

#define D12_CLOCK_12M			0x03
#define D12_CLOCK_4M			0x0b
#define D12_SETTOONE            0x40
#define D12_SOFONLY				0x80

#define D12_DMASINGLE			0x00
#define D12_BURST_4				0x01
#define D12_BURST_8				0x02
#define D12_BURST_16			0x03
#define D12_DMAENABLE           0x04
#define D12_DMA_INTOKEN			0x08
#define D12_AUTOLOAD			0x10
#define D12_NORMALPLUSSOF		0x20
#define D12_ENDP4INTENABLE		0x40
#define D12_ENDP5INTENABLE		0x80

#define D12_INT_ENDP0OUT		0x01
#define D12_INT_ENDP0IN			0x02
#define D12_INT_ENDP1OUT		0x04
#define D12_INT_ENDP1IN			0x08
#define D12_INT_ENDP2OUT		0x10
#define D12_INT_ENDP2IN			0x20
#define D12_INT_BUSRESET		0x40
#define D12_INT_SUSPENDCHANGE	0x80
#define D12_INT_EOT				0x0100

#define D12_SETUPPACKET			0x20

#define D12_BUFFER0FULL			0x20
#define D12_BUFFER1FULL			0x40

#define D12_FULLEMPTY			0x01
#define D12_STALL				0x02
#define INT8U unsigned char
/**  D12CI.c 函数 ***/
INT16U D12_ReadChipID(void);
void D12_SetAddressEnable(INT8U bAddress, INT8U bEnable);
void D12_SetEndpointEnable(INT8U bEnable);
void D12_SetMode(INT8U bConfig, INT8U bClkDiv);

void D12_SetDMA(INT8U bMode);
INT16U D12_ReadInterruptRegister(void);
INT8U D12_SelectEndpoint(INT8U bEndp);

INT8U D12_ReadLastTransactionStatus(INT8U bEndp);
INT8U D12_ReadEndpointStatus(INT8U bEndp);
void D12_SetEndpointStatus(INT8U bEndp,INT8U bStalled);

void D12_SendResume(void);
INT16U D12_ReadCurrentFrameNumber(void);
INT8U D12_ReadEndpoint(INT8U endp, INT8U len, INT8U * buf);
INT8U D12_WriteEndpoint(INT8U endp, INT8U len, INT8U * buf);

void D12_AcknowledgeEndpoint(INT8U endp);
void D12_ClearBuff(INT8U endp);

#endif


/*

** 文   件   名: Chap_9.h
** 最后修改日期: 2004年11月15日
** 描        述: USB驱动程序软件包: PDIUSBD12 设备端驱动程序 协议层头文件
** 版	     本: V5.0
**********************************************************************************************************/

#ifndef __CHAP_9_H__
#define __CHAP_9_H__

#define MSB(x)    (((x) >> 8) & 0xFF)

#define MAX_ENDPOINTS      (INT8U)0x3

// 下面的值为 Get Status 命令的返回值
#define USB_GETSTATUS_SELF_POWERED                0x01
#define USB_GETSTATUS_REMOTE_WAKEUP_ENABLED       0x02

/********* USB  状态取值 **************/ 
#define USB_IDLE           0
#define USB_TRANSMIT       1
#define USB_RECEIVE        2


   //*************************************************************************
   // Chap_9.c 使用的结构体
   //*************************************************************************

/************ USB事件结构体 *********************/
typedef union _epp_flags
{
	struct _flags
	{
		INT8U bus_reset           	: 1;	//总线复位标志
		INT8U suspend             	: 1;	//挂起改变标志
		INT8U setup_packet  	  	: 1;	//收到SETUP包
		INT8U remote_wakeup		   	: 1;	//远程唤醒标志(未使用)
		INT8U in_isr		      	: 1;	//USB中断服务标志
		INT8U control_state			: 2;	//控制端点处理标志
													//0: IDLE	   空闲状态
													//1: TRANSMIT  数据发送状态
													//2: RECEIVE   数据接收状态
 		INT8U configuration			: 1;	//配置标志(0: 未配置; 1: 已经配置)
		//INT8U command				: 1;	//未使用
		INT8U ep1_rxdone			: 1;	//端点 1 收到数据标志
		INT8U ep2_rxdone			: 1;	//端点 2 收到数据标志
		//INT8U ep2_txdone			: 1;	//端点 2 发送数据标志
		//INT8U ep2buf_full			: 1;	//端点 2 接收双缓冲区满标志
	} bits;
	INT16U value;
} EPPFLAGS;

typedef struct _device_request
{
	INT8U bmRequestType;
	INT8U bRequest;
	INT16U wValue;
	INT16U wIndex;
	INT16U wLength;
} DEVICE_REQUEST;


/*********** 控制传输结构体 ************/
#define MAX_CONTROLDATA_SIZE	8

typedef struct _control_xfer
{
	DEVICE_REQUEST DeviceRequest;
	INT16U wLength;
	INT16U wCount;
	INT8U * pData;
	INT8U dataBuffer[MAX_CONTROLDATA_SIZE];
} CONTROL_XFER;

//定义控制传输结构变量
extern CONTROL_XFER ControlData;

//定义USB事件标志变量
extern EPPFLAGS bEPPflags;

   //*************************************************************************
   // USB 标准设备请求函数
   //*************************************************************************

extern void get_status(void);
extern void clear_feature(void);
extern void set_feature(void);
extern void set_address(void);
extern void get_descriptor(void);
extern void get_configuration(void);
extern void set_configuration(void);
extern void get_interface(void);
extern void set_interface(void);
extern void reserved(void);
extern void stall_ep0(void);
extern void ep0_txdone(void);
extern void ep0_rxdone(void);

extern void init_unconfig(void);
extern void init_config(void);
extern void single_transmit(INT8U * pData, INT8U len);
extern void code_transmit(INT8U * pRomData, INT16U len);
extern void control_handler(void);

extern code void (*StandardDeviceRequest[])(void);

#endif
/*
** 文   件   名: D12Driver.h
** 最后修改日期: 2004年11月15日
** 描        述: PDIUSBD12 设备端驱动程序 应用层头文件
** 版	     本: V5.0
**********************************************************************************************************/

#ifndef __D12DRIVER_H__
#define __D12DRIVER_H__

//全局变量
//extern INT8U idata GenEpBuf[];
extern INT8U  EpBuf[64];
//extern INT8U  BULKLength;
//extern INT8U  *BULKpp;

typedef struct
{
	unsigned char b[64];//传送缓冲数据区
	unsigned int wrLength;//传送长度
//	const char *pp;//CONST数据
	unsigned char *p;//一般数据
	unsigned char p_p;//数据选择控制
}TRANSMIT_STRUCT;
extern TRANSMIT_STRUCT XmtBuff;

/************************************************************
		  		D12Driver.c  提供的API函数 
*************************************************************/

/************************************************************
** 函数名称: BULK_submit()
** 功能描述: BULK端点传输提交
** 输	 入: 无
** 输	 出: 无
************************************************************/
extern Bulk_submit(INT8U *pRomData, INT16U len);

/*****************************************************************
** 函数名称: Init_D12()
** 功能描述: 设置D12与硬件的连接, 初始化D12,  复位D12
** 输 入:   无
** 输 出:   0: 初始化成功    1: 初始化失败  
******************************************************************/
extern INT8U Init_D12(void);

/******************************************************************
** 函数名称: D12_WriteEndpoint()
** 功能描述: 把数据写入端点
** 输   入: INT8U endp:     端点索引号,取值 0 ~ 5 
	     	 INT8U len:	     要写入的数据长度
	     	 INT8U * buf:    发送数据指针
** 输   出: 实际写入的字节数
*******************************************************************/
extern INT8U D12_WriteEndpoint(INT8U endp, INT8U len, INT8U * buf);

/*******************************************************************
** 函数名称: usbserve()
** 功能描述: USB事件处理函数
** 输	 入: 无
** 输	 出: 无
********************************************************************/
extern void usbserve(void);

/************************************************************
** 函数名称: Get_D12_FirmwareVer()
** 功能描述: 重新连接USB总线
** 输	 入: 无

⌨️ 快捷键说明

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