51单片机各类源程序集锦

源代码在线查看: init.c

软件大小: 3620 K
上传用户: leihongcetc
关键词: 51单片机 源程序 集锦
下载地址: 免注册下载 普通下载 VIP

相关代码

				//***********************************************************************
				//									     								                  *  
				//                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_	0x7000;
				
				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;		
				}
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
				
							

相关资源