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

📄 kernel.c

📁 该代码是基于菲利普ISP1581USB接口芯片与STC89C51单片机的USB2.0开发代码
💻 C
字号:
/****************************************Copyright (c)**************************************************

** 文   件   名: kernel.c
** 最后修改日期: 2006年10月19日
** 描        述: USB驱动程序软件包: D14 设备端驱动程序 主程序
** 版	     本: V1.0
**********************************************************************************************************/



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


//外部函数
extern Init_Main();
extern USBserve();

extern USB_INT_FLAG USB_Int_Flag;
extern DMA_INT_FLAG DMA_Int_Flag;
extern USB_DEVICE USB_Device;
extern volatile D14_CNTRL_REG	xdata	D14_Cntrl_Reg;
extern void Check_Busy(void);
extern void Init_D14(void);
extern void Init_Endpoint(void);
extern void Init_Device(void);
extern void Get_PIDVID(void);
extern unsigned int read_endpoint(unsigned char endp,unsigned int len,unsigned char *buf);
extern unsigned int write_endpoint(unsigned char endp,unsigned int len,unsigned char *buf);


extern UC VID[2],PID[2];
extern UC	idata Endpt_FIFO[MAX_BUF];
extern Set_USB(void);
extern TIMER	Timer;


//内部函数
void Start_mSEC_Timer(Data);
void Start_SEC_Timer(Data);


//变量定义
UI	Temp;
KERNEL Kernel_Flag;


/////////////////////////////////


//主函数
void Main(void)
{
	unsigned int a;
	unsigned char b[16];
	unsigned char c[16];

	//初始化子程序
	Init_Main();
	//enable device and reset the device address
	D14_Cntrl_Reg.D14_MODE.BITS.SOFTCT = 1;
	
	while(1)
	{
		
		USBserve();
	
	//端点1收发	
	   if (USB_Int_Flag.BITS.EP1RX)
		{	
			USB_Int_Flag.BITS.EP1RX = 0;
			a=read_endpoint(0x02,8,c);
			a=write_endpoint(0x03,8,c);
		}
		
	 //端点2收发
		if (USB_Int_Flag.BITS.EP2RX)
		{	
			USB_Int_Flag.BITS.EP2RX = 0;
			a=read_endpoint(0x04,8,b);
			a=write_endpoint(0x05,8,b);
		}
	
		
		
	}

	
}



//***********************************************************************
//*										    							               *
//*	Routine 	: Start_mSEC_Timer(Delay)                          		*
//*	Input		: Delay in milli second									         *  
//*	Output		: Start timer operation               					   *
//*	Function	: To start the timeout operation based on the delay i/p  *
//*																		               *
//***********************************************************************

void Start_mSEC_Timer(Data)
{
	
   	
	do
	{
		
		//calculate timer value
		Temp = Timer.mSEC_Scale;		
		Temp = 0xffff - Temp;
		
		ET0 = 1;
		
		//calculate timer value
		//initialize timer 0 counter
		Temp >>= 8;
		TH0 = (UC) Temp;
		Temp = Timer.mSEC_Scale;		
		Temp = 0xffff - Temp;
		TL0 = (UC) Temp;
		
		//start timer count
		TR0 = 1;							
		
		Kernel_Flag.BITS.Timer_Expired = 0;
		while(!Kernel_Flag.BITS.Timer_Expired);
		Kernel_Flag.BITS.Timer_Expired = 0;
		
		
		//stop timer
		TR0 = 0;							
		ET0 = 0;
		
		Data--;
	}
	while(Data != 0);
}


⌨️ 快捷键说明

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