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

📄 u_main.c

📁 The combined demo is dedicated for S1C33L05, so DMT33L05 should be used to load and run the demo. F
💻 C
📖 第 1 页 / 共 2 页
字号:
/******************************************************************************
 * File name   : main.c
 * Module name : main module
 * Author	   : Hiromichi.Kondo
 *-----------------------------------------------------------------------------
 * $Id: main.c,v 1.6 2003/05/26 02:34:45 9551619 Exp $
 *****************************************************************************/

/*--- Include ---------------------------------------------------------------*/
#include "u_value.h"
#include "u_macro.h"

#include "u_c33cpu.h"
#include "u_regNikka.h"
#include "u_com_fp.h"
#include "u_usb_fp.h"
#include "u_ram_data.h"
#include "u_rom_data.h"
#include "u_dev_fp.h"

#include "usbfw_if.h"


/*--- Function Prototype ---------------------------------------------------*/
void PowerOnProc_i(void);
static void InitTargetIC(void);
static int	Diagnostic(int loop);
static void SetReplyDescriptorData(void);
void InitWorkArea(void);

void InterruptProc(void);
void WaitTMIntProc(void);
void SCIRxCMP(void);
void SCIRxErr(void);
void SCITxCMP(void);
void SCITxEnd(void);

/*--- External Function Prototype ------------------------------------------*/
extern void InitUSBWorkArea(void);


/* Global Variable */
S_rMainIntStat	main_int_stat_sv;	/* Main */
S_rSIE_IntStat	sie_int_stat_sv;	/* SIE */
S_rEPrIntStat	epr_int_stat_sv;	/* EPr */
S_rDMA_IntStat	dma_int_stat_sv;	/* DMA */
S_rFIFO_IntStat	fifo_int_stat_sv;	/* FIFO */
S_rEP0IntStat	ep0_int_stat_sv;	/* EP0 */
S_rEPaIntStat	epa_int_stat_sv;	/* EPa */
S_rEPbIntStat	epb_int_stat_sv;	/* EPb */
S_rEPcIntStat	epc_int_stat_sv;	/* EPc */

/*****************************************************************************
 *
 *			: PowerOn
 *			: 
 *			: 
 *		: special_flag			
 *
 *****************************************************************************/
void PowerOnProc_i(void)
{
	ControlLED(ALL_TURN_ON);			/* LED */

	InitIFData();
	InitWorkArea();
	InitTargetIC();
	ControlLED(ALL_TURN_OFF);			/* LED */

	special_flag.Attach = 1 ;			/* Attach */

}

/*****************************************************************************
 *
 *			: IC
 *			: 
 *			: 
 *		: 
 *
 *****************************************************************************/
void InitTargetIC(void)
{

	/*  */
	if (Diagnostic(0) == FALSE_U) {
		/*  */
		panic(2);
	}
	
	/*  */
	rEP0IntStat = 0xFF;
	rEPaIntStat = 0xFF;
	rEPbIntStat = 0xFF;
	rEPcIntStat = 0xFF;
	rEPrIntStat = 0xFF;
	rDMA_IntStat = 0xFF;
	rFIFO_IntStat = 0xFF;
	rSIE_IntStat = 0xFF;
	rMainIntStat = 0xFF;

	/*  */
	rMainIntEnb_BP.EnSIE_IntStat = 1;
	rMainIntEnb_BP.EnEPrIntStat = 1;
	rMainIntEnb_BP.EnDMA_IntStat = 1;
	rMainIntEnb_BP.EnFIFO_IntStat = 1;
	rMainIntEnb_BP.EnEP0IntStat = 1;

	rSIE_IntEnb_BP.EnVBUS_Changed = 1;
	rSIE_IntEnb_BP.EnSetAddressCmp = 1;

	rEPrIntEnb_BP.EnEPaIntStat = 1;
	rEPrIntEnb_BP.EnEPbIntStat = 1;
	rEPrIntEnb_BP.EnEPcIntStat = 1;

	rFIFO_IntEnb_BP.EnFIFO_IN_Cmp = 1;
	rFIFO_IntEnb_BP.EnFIFO_OUT_Cmp = 1;
	rFIFO_IntEnb_BP.EnDescriptorCmp = 1;

	/* USB Configuration */
	rUSB_Control = 0x00;		/*  */
	rXcvrControl = 0x01;		/*  */
	rUSB_Test = 0x00;			/*  */
	


	/* Bus Configuration */
//	rDMA_Config_0_BP.PDREQ_Level = 1;			/* Active-Low  */
	rDMA_Config_0_BP.PDREQ_Level = 0;			/* Active-High  */
	rDMA_Config_0_BP.PDACK_Level = 1;			/* Active-Low  */
	rDMA_Config_0_BP.PDRDWR_Level = 1;			/* Active-Low  */
	rDMA_Config_0_BP.ActivePort = 1;
	rDMA_Config_1_BP.SingleWord = 1;
	rDMA_Config_1_BP.CountMode = 1;				/* CountMode */

	SetReplyDescriptorData();

	/* FIFO */
#ifdef BULKONLY
	rEPaStartAdrs_H = 0x02;						/* EPa = 0x200-0x27F(128Byte) */
	rEPaStartAdrs_L = 0x00;
	rEPbStartAdrs_H = 0x02;						/* EPb = 0x280-0x2FF(128Byte) */
	rEPbStartAdrs_L = 0x80;
	rEPcStartAdrs_H = 0x03;						/* EPc = 0x300-0x300(0Byte) */
	rEPcStartAdrs_L = 0x00;
	rEPdStartAdrs_H = 0x03;						/* EPd = 0x300-0x300(0Byte) */
	rEPdStartAdrs_L = 0x00;
	rEPeStartAdrs_H = 0x03;						/* EPe = 0x300-0x300(0Byte) */
	rEPeStartAdrs_L = 0x00;
	rEPfStartAdrs_H = 0x03;						/* EPf = 0x300-0x300(0Byte) */
	rEPfStartAdrs_L = 0x00;
	rEPgStartAdrs_H = 0x03;						/* EPg = 0x300-0x300(0Byte) */
	rEPgStartAdrs_L = 0x00;
	rEPhStartAdrs_H = 0x03;						/* EPh = 0x300-0x300(0Byte) */
	rEPhStartAdrs_L = 0x00;
#else /* BULKONLY */
	rEPaStartAdrs_H = 0x02;						/* EPa = 0x200-0x27F(128Byte) */
	rEPaStartAdrs_L = 0x00;
	rEPbStartAdrs_H = 0x02;						/* EPb = 0x280-0x2FF(128Byte) */
	rEPbStartAdrs_L = 0x80;
	rEPcStartAdrs_H = 0x03;						/* EPc = 0x300-0x37F(128Byte) */
	rEPcStartAdrs_L = 0x00;
	rEPdStartAdrs_H = 0x03;						/* EPd = 0x380-0x380(0Byte) */
	rEPdStartAdrs_L = 0x80;
	rEPeStartAdrs_H = 0x03;						/* EPe = 0x380-0x380(0Byte) */
	rEPeStartAdrs_L = 0x80;
	rEPfStartAdrs_H = 0x03;						/* EPf = 0x380-0x380(0Byte) */
	rEPfStartAdrs_L = 0x80;
	rEPgStartAdrs_H = 0x03;						/* EPg = 0x380-0x380(0Byte) */
	rEPgStartAdrs_L = 0x80;
	rEPhStartAdrs_H = 0x03;						/* EPh = 0x380-0x380(0Byte) */
	rEPhStartAdrs_L = 0x80;
#endif /* BULKONLY */

}
/*****************************************************************************
 *
 *			: 
 *			: 
 *			: 0: -1: 
 *		: DiagRegErrorCount		
 *				  DiagFIFOErrorCount	FIFO 
 *
 *****************************************************************************/
int Diagnostic(int loop)
{
	BYTE temp;
	DWORD cnt;
	WORD fifo_remain;
	int RegErr,FIFOErr;

// for debug Endo
//		return TRUE;
// for debug Endo


	do{
		rEPnControl_BP.AllFIFO_Clr = 1;					/* All FIFO Clear */

		/* DMA Stop */
		rDMA_Control_BP.DMA_Stop = 1;					
		while(rDMA_Control_BP.DMA_Running == 1);

		RegErr	= 1;
		FIFOErr = 1;

		/*  */
		do{
			/*  */
			rEPaIntEnb = 0x7F; if( rEPaIntEnb != 0x7F ) break;
			rEPaIntEnb = 0x55; if( rEPaIntEnb != 0x55 ) break;
			rEPaIntEnb = 0x2A; if( rEPaIntEnb != 0x2A ) break;
			rEPaIntEnb = 0x00; if( rEPaIntEnb != 0x00 ) break;

			rUSB_Address = 0x7F; if( rUSB_Address != 0x7F ) break;
			rUSB_Address = 0x55; if( rUSB_Address != 0x55 ) break;
			rUSB_Address = 0x2A; if( rUSB_Address != 0x2A ) break;
			rUSB_Address = 0x00; if( rUSB_Address != 0x00 ) break;

			rDMA_Count_HH = 0xFF; if( rDMA_Count_HH != 0xFF ) break;
			rDMA_Count_HH = 0x55; if( rDMA_Count_HH != 0x55 ) break;
			rDMA_Count_HH = 0xAA; if( rDMA_Count_HH != 0xAA ) break;
			rDMA_Count_HH = 0x00; if( rDMA_Count_HH != 0x00 ) break;

			rDMA_Latency = 0x0F; if( rDMA_Latency != 0x0F ) break;
			rDMA_Latency = 0x05; if( rDMA_Latency != 0x05 ) break;
			rDMA_Latency = 0x0A; if( rDMA_Latency != 0x0A ) break;
			rDMA_Latency = 0x00; if( rDMA_Latency != 0x00 ) break;

			rEPaMaxSize_L = 0xFF; if( rEPaMaxSize_L != 0xFF ) break;
			rEPaMaxSize_L = 0x55; if( rEPaMaxSize_L != 0x55 ) break;
			rEPaMaxSize_L = 0xAA; if( rEPaMaxSize_L != 0xAA ) break;
			rEPaMaxSize_L = 0x00; if( rEPaMaxSize_L != 0x00 ) break;

			RegErr = 0;
			
			/* FIFO  */
			rEP0MaxSize = 0x08;							/* EP0 MaxPacketSize = 8Byte */
			rEPnControl_BP.AllFIFO_Clr = 1;				/* All FIFO Clear */

			rCPU_JoinRd = 0x00;
			rCPU_JoinWr = 0x00;
			rEnEPnFIFO_Access_BP.EnEPnFIFO_Wr = 1;

			rEPnFIFOforCPU = 0x00;
			rEPnFIFOforCPU = 0xFF;
			rEPnFIFOforCPU = 0x55;
			rEPnFIFOforCPU = 0xAA;
			rEnEPnFIFO_Access_BP.EnEPnFIFO_Wr = 0;

			fifo_remain = MKWORD( rEPnRdRemain_H,rEPnRdRemain_L );
			if( fifo_remain != 0x04 ) break;

#if 0		/* 03/07/01 Endo :L11  */
			temp = rEPnFIFOforCPU;				// 
#endif		/* 03/07/01 Endo :L11  */
			
			fifo_remain = MKWORD( rEPnRdRemain_H,rEPnRdRemain_L );
			if( fifo_remain != 0x04 ) break;
			
			rEnEPnFIFO_Access_BP.EnEPnFIFO_Rd = 1;
			if( rEPnFIFOforCPU != 0x00 ) break;
			if( rEPnFIFOforCPU != 0xFF ) break;
			if( rEPnFIFOforCPU != 0x55 ) break;
			if( rEPnFIFOforCPU != 0xAA ) break;
			rEnEPnFIFO_Access_BP.EnEPnFIFO_Rd = 0;

			fifo_remain = MKWORD( rEPnRdRemain_H,rEPnRdRemain_L );
			
			if( fifo_remain != 0x00 ) break;
			
			FIFOErr = 0;

		} while (0);
		
		if (RegErr) {
			DiagRegErrorCount++;
		}
		if (FIFOErr) {
			DiagFIFOErrorCount++;
		}
	} while (loop);
	
	if( RegErr == 0 && FIFOErr == 0 ){
		return TRUE_U;
	}else{
		return FALSE_U;
	}
}
/*****************************************************************************
 *
 *			: Descriptor
 *			: 
 *			: 
 *		: desc_addr_fs_device	FSDevice Descriptor
 *				  desc_addr_hs_device	HSDevice Descriptor
 *				  desc_addr_fs_config	FSConfiguration Descriptor
 *				  desc_addr_hs_config	HSConfiguration Descriptor
 *				  desc_addr_string[]	String Descriptor
 *
 *****************************************************************************/
void SetReplyDescriptorData(void)
{
	BYTE *temp_ptr, num_alt_set;
	WORD i, j, k, l, len;
	ConfigDesc *p_c_desc;
	InterfaceDesc *p_i_desc;
	
	rDescAdrs_H = 0x00;								/* Descriptor */
	rDescAdrs_L = 0x40;								/*  */

	/* FSDevice Descriptor */
	desc_addr_fs_device = MKWORD( rDescAdrs_H,rDescAdrs_L );


	/* FSDevice Descriptor */
	temp_ptr = (BYTE *)&fs_device_desc;
	for( i=0; i<fs_device_desc.bLength; i++){
		rDescDoor = temp_ptr[i];
	}


	/* FSConfiguration Descriptor */
	desc_addr_fs_config = MKWORD( rDescAdrs_H,rDescAdrs_L );

	p_c_desc = &fs_config_desc;
	p_i_desc = &fs_interface_desc[0];
	num_alt_set = NUM_FS_ALT_SET;			/* FS */

	len = p_c_desc->bLength;					/*  */

	/* Configuration Descriptor */
	temp_ptr = (BYTE *)p_c_desc;
	for( j=0; j<len; j++ ){
		rDescDoor = temp_ptr[j];
	}

	for( j=0; ; j++ ){
		len = p_i_desc->bLength;				/*  */

		/* Interface Descriptor */
		temp_ptr = (BYTE *)&p_i_desc[j];
		for( k=0; k<len; k++ ){
			rDescDoor = temp_ptr[k];
		}
		for( k=0; k<p_i_desc[j].bNumEndpoints; k++ ){
			len = p_i_desc[j].p_e_desc[k].bLength;
			temp_ptr = (BYTE *)&(p_i_desc[j].p_e_desc[k]);
			for( l=0; l<len; l++ ){
				rDescDoor = temp_ptr[l];
			}
		}
		if( j >= num_alt_set ){
			break;
		}
	}

	for( i=0; i<NUM_STRING; i++ ){
		/* String Descriptor */
		desc_addr_string[i] = MKWORD( rDescAdrs_H, rDescAdrs_L );

		/* String Descriptor */
		temp_ptr = (BYTE *)string_table[i];
		len = temp_ptr[0];
		for( j=0; j<len; j++ ){
			rDescDoor = temp_ptr[j];
		}
	}
}

/*****************************************************************************
 *
 *			: 
 *			: 
 *			: 
 *		: main_int_stat			Main
 *				  sie_int_stat			SIE
 *				  epn_int_stat			EPn
 *				  ep0_int_stat			EP0
 *				  timer0_cnt			Timer0
 *				  timer1_cnt			timer1
 *				  control_state			Control
 *				  fw_flag				
 *				  i2c_buf				ROM
 *				  usb_wk_buffer			USB 
 *				  usb_wk_data			USB 
 *				  dev_desc_info			
 *				  fs_config_info		FS 
 *				  hs_config_info		HS 
 *				  string_info			

⌨️ 快捷键说明

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