亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? usb.c

?? utisoftware c code for linux,機(jī)卡分離方案。
?? C
字號(hào):
#include <linux/config.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/delay.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/wait.h>
#include <linux/timer.h>

#include <asm/irq.h>
#include "libassp.h"
#include "def596.h"
#include "defusr.h"
#include "extern.h"
#include "datatbl.h"
#include "macusr.h"

extern void usbint(int irq, void * meaningless, struct pt_regs * none);		// gengyue
extern U16	BchgFlg;
extern void TSPIP_Config_SD(void);

MODULE_AUTHOR("Gengyue");					// gengyue
MODULE_DESCRIPTION("USB Device driver for Linux");
MODULE_LICENSE("GPL");


#define FPGA0_MODE	0xf032//0xF03A
/*#define FPGA0_MODE	0x005c*/

U8   flag=0;
U8   flag1=0;
U32  translen=2048;
U32  translen1=64;
U8	 UsbDeviceTS[4];
U16  USBerror=0;
U16  USBerrorPre=0 ;

const int  USB_PROCESS_WORKSPACE                       = 2048;
int  intcount = 0;
U32 usb_write(U8 *SendBuf, U32 Size);

struct timer_list usb_timer;

static void write_uint32(unsigned long byte_address, unsigned long data)
{
        *((volatile unsigned long *) byte_address) = data;
}

static unsigned long read_uint32(unsigned long byte_address)
{
        return *((volatile unsigned long *) byte_address);
}

static void USBProcess(unsigned long data)				// test device on or off
{
	U16	buffer;
	int full_cnt=0;
	U16	buff;
	
	if (USBerror>USBerrorPre)
	{
		USB_MODULE_PRINT("USB error = %d\n", USBerror);
		USBerrorPre=USBerror;
	}

	/* zkt print */
	/* if put this print code in the block of "if( ConfigNum != 0 )",
	   and put two vaialble define in the block. Re-run this program, 
	   audio is ok, but no video. Why? */
	USBRD(FPGA0, buff);
	if((buff & 0x0400) != 0x0000)
	{
		full_cnt++;
		USBWR(FPGA0, FPGA0_MODE); 
		USB_MODULE_PRINT("TSI FULL CNT = %d\n", full_cnt);
	}

	if(BchgFlg == YES)
	{
		if( ChkAttach() == YES )			/* Attach? */
		{
			usb_attach();						/* Attach processing */
			usb_enumerate();
			TSPIP_Config_SD();
		} 
		else 
		{
			usb_detach();
			BchgFlg = YES;
		}
	} 
	else 
		USBRD(SYSCFG, buffer);					/* USB active? */
	init_timer(&usb_timer);
	usb_timer.function = USBProcess;
	usb_timer.data = (unsigned long)0;
	usb_timer.expires = jiffies + 20;
	add_timer(&usb_timer);
}
/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Main
 *-----------------------------------------------------------------------------
 * Declaration	: void main(void)
 *-----------------------------------------------------------------------------
 * Argument		: void
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
int init_module(void)
{
	U32 translenTemp=1024*3;
	unsigned long buffer;
		
	USBWR(FPGA0, FPGA0_MODE);
	USBWR(DMA0CFG, 0xffff); 
		
	UsbDeviceTS[0]=(U8)(translenTemp&0x00FF);
	UsbDeviceTS[1]=(U8)((translenTemp>>8)&0x00FF);
	UsbDeviceTS[2]=(U8)((translenTemp>>16)&0x00FF);
	UsbDeviceTS[3]=(U8)((translenTemp>>24)&0x00FF);

	{
		register U16	buf;
		USBRD(SYSCFG, buf);
		USBWR(SYSCFG, USBE);
		USBRD(SYSCFG, buf);
		USBRD(DVSTCTR, buf);
		USBWR(DVSTCTR, WKUP);
		USBRD(DVSTCTR, buf);
	}
	waitAssp();				// wait for enable chip  read-write
	initAssp();				// initial register
	usb_detach();			// clear usb device bit
	BchgFlg = YES;
				
	cli();							// gengyue
	if (request_irq(USB_INT_LEVEL, usbint, SA_INTERRUPT, "usb chip device", 0) == 0)	// gengyue
		enable_irq((unsigned int)USB_INT_LEVEL);
	else
		USB_MODULE_PRINT("interrupt_install failed\n");
	sti();							// gengyue

	init_timer(&usb_timer);
	usb_timer.function = USBProcess;
	usb_timer.data = (unsigned long)0;
	usb_timer.expires = jiffies + 100;
	add_timer(&usb_timer);
	
	return 0;												// gengyue
}

void cleanup_module(void)									// gengyue
{
	del_timer(&usb_timer);
	free_irq(USB_INT_LEVEL, NULL);
}

/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Delay 1milli-second
 *-----------------------------------------------------------------------------
 * Declaration	: void delay_1ms(void)
 *-----------------------------------------------------------------------------
 * Argument		: void
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			: Please change for your MCU
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void delay_1ms(void)
{
	mdelay(1);
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Delay n micro-second
 *-----------------------------------------------------------------------------
 * Declaration	: void delay_xms(U16 Time)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Time			; Wait Time
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void delay_xms(U16 Time)
{
	volatile register U16	i;

	for( i = 0; i < Time; ++i ) {
		delay_1ms();
	}
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Delay 10micro-second
 *-----------------------------------------------------------------------------
 * Declaration	: void delay_10us(U16 Time)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Time			; Wait Time
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			: Please change for your MCU
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void delay_10us(U16 Time)
{
	udelay(10);
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: User application
 *-----------------------------------------------------------------------------
 * Declaration	: void User_Application(void)
 *-----------------------------------------------------------------------------
 * Argument		: void
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void User_Application(void)
{
	if (flag1==0){
	flag1=1;
	User_Data_Out(PIPE6, (U32)translen1, (U8 *)P6_Buff);
	}
	if( Buffer_Write_Data_Flag[PIPE7] == DATA_NONE) 
		if (flag1==1) {
			User_Data_In(PIPE7, (U32)translen1, (U8 *)P7_Buff);
			flag1=2;		
		}	
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: User data in
 *-----------------------------------------------------------------------------
 * Declaration	: void User_Data_In(U16 Pipe, U32 Size, U8 *Table)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Pipe			; Pipe Number
 *				: U16 Size			; Data Size
 *				: U8  *Table		; Data Table Address
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void User_Data_In(U16 Pipe, U32 Size, U8 *Table)
{
	if( Buffer_Read_Data_Flag[Pipe] == DATA_NONE ) {
		DI_Start(Pipe, Size, Table);
	}
	else if( Buffer_Read_Data_Flag[Pipe] == DATA_OK ) {
		if( Read_Data(Pipe, Buffer_Read_Data_Size[Pipe], Table) == BUF_READY ) {
			Buffer_Read_Data_Flag[Pipe] = DATA_NONE;
		}
	}
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: User data out
 *-----------------------------------------------------------------------------
 * Declaration	: void User_Data_Out(U16 Pipe, U32 Size, U8 *Table)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Pipe			; Pipe Number
 *				: U16 Size			; Data Size
 *				: U8  *Table		; Data Table Address
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void User_Data_Out(U16 Pipe, U32 Size, U8 *Table)
{
	if( Buffer_Write_Data_Flag[Pipe] == DATA_NONE ) {
		if( Create_Data(Pipe) != DATA_NONE ) {
	delay_xms(200);
			DO_Start(Pipe, Size, Table);
			
	}
	}
}
void DMA_RW(U16 Pipe)
{
	U16	buf;

	
	SetEpPid(Pipe, PID_BUF);				/* Set BUF */
	
	
	/* USBWR(PIPE2CTR, 0x0001); */

	USBRD(PIPE2CTR, buf);
	udelay(10);
	USB_MODULE_PRINT("PIPE2CTR register's value = %x\n", buf);

	USBRD(BRDYENB, buf);
	udelay(10);
	USB_MODULE_PRINT("BRDYENB register's value = %x\n", buf);

	USBRD(NRDYENB, buf);
	udelay(10);
	USB_MODULE_PRINT("NRDYENB register's value = %x\n", buf);

	USBRD(BEMPENB, buf);
	udelay(10);
	USB_MODULE_PRINT("BEMPENB register's value = %x\n", buf);

/*
	USBWR(PIPESEL, 0x0002);
	USBWR(PIPECFG, 0x4302);
	USBWR(PIPEBUF, 0x3c36);
	USBWR(PIPEMAXP, 0x4040);
	USBWR(PIPESEL, 0x0000); */

}

/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Create send(OUT) data
 *-----------------------------------------------------------------------------
 * Declaration	: U16 Create_Data(U16 Pipe)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Pipe			; Pipe Number
 *-----------------------------------------------------------------------------
 * Return		: U16				; DATA_WAIT : Enable  Send Data
 *				:					; DATA_NONE : Disable Send Data
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
U16 Create_Data(U16 Pipe)
{
	/*
	 * Create send(OUT) data routine
	 */

	/* Enable send(OUT) data */
	return DATA_WAIT;

	/* Disable send(OUT) data */
	/* return DATA_NONE; */
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Read receive(IN) data
 *-----------------------------------------------------------------------------
 * Declaration	: U16 Read_Data(U16 Pipe, U16 Bsize, U8 *Table)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Pipe			; Pipe Number
 *				: U16 Bsize			; Data Size
 *				: U8  *Table		; Data Table Address
 *-----------------------------------------------------------------------------
 * Return		: U16				; BUF_READY : Processing Of Receive Data Is Completed
 *				:					; BUF_BUSY  : Receive Data Is Under Processing
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
U16 Read_Data(U16 Pipe, U16 Bsize, U8 *Table)
{
	/*
	 * Read receive(IN) data routine
	 */

	/* Processing of receive data is completed */
	return BUF_READY;

	/* Received data is under processing */
	/* return BUF_BUSY; */
}

#if 0
U16 usb_read(U8 *ReceiveBuf, U32 Size)
{	
	if( Buffer_Read_Data_Flag[PIPE7] == DATA_NONE ) 
	{
		DI_Start(PIPE7, Size, ReceiveBuf);

		while(1)
		{
			USB_TASK_DELAY(1);
			if (Buffer_Read_Data_Flag[PIPE7] == DATA_NONE)
				break;

		}
		USB_MODULE_PRINT(("recieve bytes value = %x\n", Buffer_Read_Data_Size[PIPE7]));
		return Buffer_Read_Data_Size[PIPE7];
	}
	else
	{
		return 0;
	}
}
#endif

#if 1
U16 usb_read(U8 *ReceiveBuf, U32 Size)
{	

	U16 temp; 
	if( Buffer_Read_Data_Flag[PIPE7] == DATA_NONE ) 
	{
		DI_Start(PIPE7, Size, ReceiveBuf);
	}
	if (Buffer_Read_Data_Flag[PIPE7] == DATA_OK)
	{
		/*
		USB_MODULE_PRINT(("recieve bytes value = %x\n", Buffer_Read_Data_Size[PIPE7]));
		*/
		Buffer_Read_Data_Flag[PIPE7] = DATA_NONE;
		temp = Buffer_Read_Data_Size[PIPE7];
		DI_Start(PIPE7, Size, ReceiveBuf);
		
		return temp;
	}

	return 0;
}
#endif

U32 usb_write(U8 *SendBuf, U32 Size)
{
	 U32 ErrorCode;

	if( Buffer_Write_Data_Flag[PIPE6] == DATA_NONE )
	{
		DO_Start(PIPE6, Size, SendBuf);

		while(1)
		{
			udelay(10);
			if (Buffer_Write_Data_Flag[PIPE6] == DATA_NONE)
				break;
		}
		/*USB_MODULE_PRINT(("send success\n"));*/
		
		ErrorCode =  0; //NO_ERROR
	}
	else
	{
		ErrorCode = 12; //ERROR_DEVICE_BUSY
	}

	return ErrorCode;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区四区视频精品免费 | 亚洲在线成人精品| 91精品国产综合久久香蕉的特点| 国内精品自线一区二区三区视频| 亚洲人成小说网站色在线| 日韩色在线观看| 在线免费不卡视频| 日韩欧美中文一区| 在线观看日韩国产| 成人高清视频在线| 久久99精品久久久久久国产越南| 亚洲国产日日夜夜| 亚洲另类春色国产| 日本一区二区视频在线观看| 日韩欧美国产高清| 欧美日韩在线播放| 99re热视频这里只精品| 国产91精品在线观看| 美女尤物国产一区| 视频在线在亚洲| 亚洲大型综合色站| 亚洲黄色av一区| 中文字幕一区二区三区在线观看| 久久久久9999亚洲精品| 亚洲精品在线观看视频| 91精品国产免费| 欧美视频完全免费看| 欧美在线观看一二区| 91亚洲国产成人精品一区二区三| 成人在线综合网| 成人免费视频app| 国产99久久久久久免费看农村| 激情小说欧美图片| 极品瑜伽女神91| 激情久久五月天| 经典三级视频一区| 国产精品一卡二卡| 懂色一区二区三区免费观看| 成人丝袜高跟foot| 99国内精品久久| 在线亚洲高清视频| 欧美视频在线播放| 欧美肥妇free| 欧美变态凌虐bdsm| 久久免费看少妇高潮| 久久精品男人的天堂| 国产亚洲午夜高清国产拍精品 | 色婷婷久久久亚洲一区二区三区| 99精品在线免费| 一本色道综合亚洲| 欧美亚洲国产bt| 777久久久精品| 精品国产一区二区三区久久久蜜月 | 久久久精品免费网站| 国产清纯美女被跳蛋高潮一区二区久久w | 成人开心网精品视频| 成人精品免费看| 色综合视频在线观看| 欧美性videosxxxxx| 91精品久久久久久蜜臀| 精品国产成人系列| 国产精品天美传媒| 国产精品18久久久久久久久| 成人动漫在线一区| 欧美色窝79yyyycom| 日韩欧美在线网站| 欧美激情一区二区三区蜜桃视频| 亚洲视频一区二区免费在线观看| 亚洲国产成人av网| 黄色成人免费在线| av不卡在线观看| 欧美日韩亚州综合| 国产亚洲美州欧州综合国| 亚洲欧美日本韩国| 蜜臀久久99精品久久久久宅男| 国产91在线看| 欧美久久一区二区| 中文无字幕一区二区三区| 亚洲一线二线三线久久久| 麻豆视频观看网址久久| 91视频国产资源| 日韩精品一区二区三区三区免费 | 欧美性欧美巨大黑白大战| 欧美成人激情免费网| 中文字幕一区二区三区乱码在线| 丝袜亚洲精品中文字幕一区| 成人免费毛片片v| 日韩视频在线你懂得| 亚洲精品免费在线播放| 国产精品一区二区黑丝| 555www色欧美视频| 国产精品国产三级国产普通话三级| 无吗不卡中文字幕| 白白色 亚洲乱淫| 欧美一区二区精美| 樱花影视一区二区| 成人一二三区视频| 欧美成人video| 亚洲福利视频三区| 91亚洲男人天堂| 国产欧美1区2区3区| 日本亚洲天堂网| 色吊一区二区三区| 欧美国产在线观看| 久久精品国产99| 欧美日韩一区二区三区四区五区| 国产精品网站在线观看| 麻豆一区二区在线| 欧美日韩国产乱码电影| 又紧又大又爽精品一区二区| 丁香婷婷深情五月亚洲| 欧美精品一区二区三区一线天视频 | 美国av一区二区| 欧美日韩aaa| 亚洲午夜视频在线观看| 91在线观看免费视频| 国产亚洲一区二区三区四区| 久久99精品久久久久久动态图 | 亚洲欧洲日产国产综合网| 国产在线国偷精品免费看| 欧美一区日韩一区| 亚洲国产精品人人做人人爽| 91麻豆swag| 亚洲欧美怡红院| www.欧美精品一二区| 中文av字幕一区| 国产精品一区二区视频| 久久精品一区四区| 国产一区中文字幕| 久久综合久久综合九色| 久久99精品国产.久久久久久| 欧美一区二区三区性视频| 青青草91视频| 日韩欧美国产一区二区三区| 男女激情视频一区| 精品理论电影在线观看| 国产一区视频在线看| 日韩综合在线视频| 在线播放中文一区| 日本aⅴ免费视频一区二区三区| 欧美一区欧美二区| 国内偷窥港台综合视频在线播放| 欧美精品一区在线观看| 国产乱人伦精品一区二区在线观看| 久久综合九色综合97婷婷| 国产乱码精品一区二区三| 国产日产欧美一区二区视频| 成人a区在线观看| 亚洲欧美另类综合偷拍| 欧美亚洲国产bt| 蜜桃在线一区二区三区| 久久综合狠狠综合久久激情| 国产白丝网站精品污在线入口| 国产精品视频看| 91色综合久久久久婷婷| 亚洲国产中文字幕| 欧美不卡一二三| www..com久久爱| 亚洲一区成人在线| 欧美成人官网二区| 成人美女视频在线看| 亚洲综合色视频| 欧美videofree性高清杂交| 国产精品羞羞答答xxdd| 日韩理论在线观看| 欧美精品黑人性xxxx| 久久99久久久欧美国产| 国产精品国产精品国产专区不片 | 色综合天天做天天爱| 亚洲1区2区3区视频| 精品久久久久久久久久久久久久久久久| 国产麻豆一精品一av一免费| 最新国产成人在线观看| 欧美日韩精品一区二区| 国产成+人+日韩+欧美+亚洲| 亚洲午夜av在线| 久久久久综合网| 欧美性一级生活| 国产一区二区三区四区五区入口| 亚洲欧洲精品一区二区三区不卡| 欧美精品一级二级三级| 国产成人综合视频| 午夜精彩视频在线观看不卡| 久久久久久久久蜜桃| 国产精品私人自拍| 欧美一区二区在线免费播放| 国产成人亚洲综合a∨猫咪| 亚洲中国最大av网站| 久久综合色之久久综合| 欧美日韩国产一二三| 老司机一区二区| 91福利资源站| 欧美日韩免费一区二区三区视频| 欧美日本一区二区在线观看| 亚洲精品一区二区三区四区高清 | 午夜精彩视频在线观看不卡| 人人狠狠综合久久亚洲| 成人丝袜高跟foot| 欧美日韩一区精品| 国产精品久久久久影院|