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

📄 init.c

📁 周立功dp1581usb2.0实验仪
💻 C
字号:
//***********************************************************************
//									     								                  *  
//                P H I L I P S   P R O P R I E T A R Y          		   *
//                                                                      *
//          COPYRIGHT (c)   1999 BY PHILIPS SINGAPORE (APIC).    		   *
//                    --  ALL RIGHTS RESERVED  --                 		*	
//                                                                      *
// 	File Name	:       Init.c                                        *
// 	Author		:       Albert Goh					 					      *
// 	Created		:      	3 March 2000                               	*
//                  	                                                   *
//***********************************************************************
//***********************************************************************
//                                                                      *
// Init.c is the initialization of the device attached and also the D14 *
// It will initialize the various variables and component.            	*
//                                                                      *
//***********************************************************************
//***********************************************************************
//                                                                      *
//  Module History														            *
//  **************														            *
//																		                  *
//  Date   	Version			Author				Changes					      *
//  ====	=======			======				=======					         *
//  030300	  0.1 			Albert				Created    				      *     
//                                                                      *
//                                                                      *
//***********************************************************************

//***********************************************************************
//*																		               *
//*	                     Include Files Definition						   *
//*																		               *
//***********************************************************************

#include "standard.h"
#include "Kernel.h"
#include "D14.h"

//***********************************************************************
//*																		               *
//*	                 External Variable Definition					 	   *
//*																		               *
//***********************************************************************

extern void Start_mSEC_Timer(Data);
extern void Start_SEC_Timer(Data);
extern KERNEL Kernel_Flag;
extern USB_INT_FLAG	USB_Int_Flag;
extern USB_DEVICE USB_Device;
extern UI Temp,PIO_Count;
extern UC Device_Config_Value;
extern UC idata Endpt_FIFO[MAX_BUF];
extern void DMA_Init(void);
extern ULI bytecount;
extern UC Address_Count;
extern UC xdata Address[20];

//***********************************************************************
//*																		               *
//*	                 Prototype Routine Definition					 	   *
//*																		               *
//***********************************************************************

void Init_D14_SFR(void);
void Init_Endpoint(void);

void Init_Main(void);
void Init_8051(void);
void Init_D14(void);

//***********************************************************************
//*																		               *
//*	                     Variable Definition 							      *
//*																		               *
//***********************************************************************

TIMER Timer;
DATA_SWAP	idata	Data_Swap;
DMA_INT_FLAG	DMA_Int_Flag;

UI	count;
UC	Device_Config_Value;
UC 	Type;

UI	idata	Init_Count;

 D14_CNTRL_REG	volatile xdata	  D14_Cntrl_Reg	_at_	0x0000;

D14_CNTRL_REG xdata *D14_Cntrl_Ptr = &D14_Cntrl_Reg;


//***********************************************************************
//*										    							               *
//*	Routine 	: Init_Main                                       		   *
//*	Input		: None              									            *
//*	Output	: None                                					      *
//*	Function	: To initialize the D14 and the 8051        			      *
//*																		               *
//***********************************************************************

void Init_Main(void)
{
	
	AUXR = 0x02;
	CKCON = 0x01;
		

	//disable ISP1581 chip select
	ISP1581_CS = 1;		//关1581片选
	bytecount = 0;
	PIO_Count = 64;
	
    Type = 0;
	USB_Device.BITS.DMA_Test_Mode = PIO_Test;
	
	//初始化8051
	Init_8051();							
	
	ISP1581_CS = 0;		//片选ISP1581

	D14_Cntrl_Reg.D14_MODE.BITS.SOFTCT = 0;	
	
	//检查是否连接了ISP1581
	do
	{
		//reset ISP1581                  
		ISP1581_RESET = 0;
		Start_mSEC_Timer(100);
		ISP1581_RESET = 1;
		Start_mSEC_Timer(100);
		
		//读取接口器件是否ISP1581            
		if(D14_Cntrl_Ptr->D14_CHIP_ID_MBYTE == 0x81 && D14_Cntrl_Ptr->D14_CHIP_ID_MSB == 0x15)
			break;
	}while(1);
	
	//初始化标志寄存器
	USB_Int_Flag.VALUE = 0;//USB中断标志寄存器
	DMA_Int_Flag.VALUE = 0;//DMA中断标志寄存器
	Kernel_Flag.VALUE = 0;//ISP1581状态标志寄存器
	
	//设置为设备默认状态
	Kernel_Flag.BITS.HS_FS_State = FULL_SPEED;//设置为全速状态
	HS_FS_LED = FULL_SPEED_LED;
	
	//初始化ISP1581
	Init_D14();				
}




//***********************************************************************
//*										    							               *
//*	Routine 	: Init 8051                                        		*
//*	Input		: 8051 Special Function Register   				            *
//*	Output	: None                                  					   *
//*	Function	: To initialize 8051                        			      *
//*																		               *
//***********************************************************************

void Init_8051(void)
{
	
	//定义定时器方式
	TMOD = 0x11;
	
	//初始化定时器时间
	Timer.mSEC_Scale = 2000;
	Timer.Hundred_mSEC_Scale = 20000;
	TL1=80;
	TH1=60;
	//reset timer control
	TCON = 0;		    
	
	//disable all interrupt
	EA = 0;				  
	
	//disable UART interrupt
	//disable timer 1 overflow interrupt
	//disable external interrupt 1
	//enable timer 0 overflow interrupt
	//enable external interrupt 0
	IE = 0x03;			
	ET1=0;
	//reset interrupt priority
	IP = 0;				
	PT1 = 1;
	PT0 = 1;
//	EX0 = 1;		//开ISP1581中断	
	//enable all interrupt
	EA = 1;				
	TR1=0;
	
	//disable all power mode control
	//enable half/doble baud rate 
	PCON = 0x40;	
}

//***********************************************************************
//*										    							               *
//*	Routine 	: Init D14                                         		*
//*	Input		: ISP1581 SFR                      				            *
//*	Output	: None                                  					   *
//*	Function	: To initialize ISP1581                     			      *
//*																		               *
//***********************************************************************

void Init_D14(void)
{
	
	//初始化ISP1581寄存器
	Init_D14_SFR();
	
	//初始化ISP1581端点
	Init_Endpoint();		
	
	//初始化ISP1581工作标志寄存器
	USB_Device.BITS.State = USB_Default;
	Device_Config_Value = 0;
	USB_Device.BITS.Alter_Interface = 0;
	USB_Device.BITS.Big_Endian = On;
	Kernel_Flag.BITS.Tx_Done = 0;
	EX0 = 1;		//开ISP1581中断
	
}

//***********************************************************************
//*										    							               *
//*	Routine 	: Init D14 SFR                                     		*
//*	Input		: ISP1581 SFR                      				            *
//*	Output	: None                                  					   *
//*	Function	: To initialize ISP1581                     			      *
//*																		               *
//***********************************************************************

void Init_D14_SFR(void)
{
	//enable Global Interrupt enable
	//enable soft connect and other feature
	//enable wakeup on chip select
	//disable soft connect
	//设置模式:时钟始终有效,全局中断使能,片选唤醒
	D14_Cntrl_Reg.D14_MODE.VALUE |= 0x8C;
	
	//set all interrupt source to mode 1
	//设置全部中断为模式1,电平触发,低电平有效
	D14_Cntrl_Reg.D14_INT_CONFIG.VALUE = 0x54;			
	
	//设置中断使能寄存器
	//注释: D14_Cntrl_Reg.D14_INT_ENABLE.VALUE = 0x790D0000;先发送高字节
	//0x14(xdata)=0x79
	//0x15(xdata)=0x0D
	//0x16(xdata)=00
	//0x17(xdata0=00
	//使用端点0和端点2
	D14_Cntrl_Reg.D14_INT_ENABLE.VALUE = 0x39fd0000;	

}


//***********************************************************************
//*										    							               *
//*	Routine 	: Init Endpoint                                    		*
//*	Input		: ISP1581 FIFO                     				            *
//*	Output	: None                                  					   *
//*	Function	: To initialize ISP1581 endpoint FIFO       			      *
//*																		               *
//***********************************************************************

void Init_Endpoint(void)
{
	//设置全速端点
	if(Kernel_Flag.BITS.HS_FS_State == FULL_SPEED)
	{
		//设置全速端点FIFO大小

		//Interrupt Out MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;	//FIFO=64bytes
		
		//Interrupt In MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
		
		//Bulk Out MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
		
		
		//Bulk In MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
		
		
		//Iso Out MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
		
		//Iso In MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
		
		//设置全速端点类型

		//Interrupt In Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;//设置为中断,使用双缓冲,禁止FIFO,禁止无空包
		
		
		//Interrupt Out Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;//设置为中断,使用双缓冲,禁止FIFO,禁止无空包
		
		
		//Bulk Out Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;//设置为批量,使用双缓冲,禁止FIFO,禁止无空包
		
		
		//Bulk In Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;//设置为批量,使用双缓冲,禁止FIFO,禁止无空包
		
		
		//Iso Out Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;//设置为同步,使用双缓冲,禁止FIFO,禁止无空包
		
		
		//Iso In Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;//设置为同步,使用双缓冲,禁止FIFO,禁止无空包
		
		//端点使能				

		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;			
		
		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;			
		
		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;			
		
		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;			
		
		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;			
		
		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;			
		
	}
	
	//设置高速端点
	if(Kernel_Flag.BITS.HS_FS_State == HIGH_SPEED)
	{
		//设置全速端点FIFO大小
		
		//Interrupt Out MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
		
		//Interrupt In MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
		
		//Bulk Out MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x0002;//FIFO=64bytes
		
		//Bulk In MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x0002;//FIFO=64bytes
		
		
		//Iso Out MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
		
		//Iso In MaxPacketSize Endpoint
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_MAXPKTSIZE.VALUE = 0x4000;//FIFO=64bytes
		
		//设置高速端点类型

		//Interrupt In Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;
		
		
		//Interrupt Out Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1700;
		
		
		//Bulk Out Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;
		
		
		//Bulk In Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1600;
		
		
		//Iso Out Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;
		
		
		//Iso In Endpoint Type
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE = 0x1500;
		
		//端点使能				

		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 2;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;			
		
		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 3;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;			
		
		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 4;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;			
		
		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 5;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;			
		
		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 6;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;			
		
		//enable FIFO
		D14_Cntrl_Reg.D14_ENDPT_INDEX = 7;//选择端点
		D14_Cntrl_Reg.D14_ENDPT_TYPE.VALUE |= 0x0800;
		
	}
	
	//设置默认地址有效
	D14_Cntrl_Reg.D14_ADDRESS.VALUE = 0x80;		
}


























⌨️ 快捷键说明

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