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

📄 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 页
字号:
 *				  FW_ReqValues			
 * 				  fs_max_interface		FS 
 *				  hs_max_interface		HS 
 *				  fs_config_attr		FS  Config Descriptor  bmAttributes 
 *				  hs_config_attr		HS  Config Descriptor  bmAttributes 
 *				  fs_max_altsetting		FS  Alternate Setting 
 *				  hs_max_altsetting		HS  Alternate Setting 
 *
 *****************************************************************************/
void InitWorkArea(void)
{
	int i;
	DWORD j;
	WORD *sram_addr, temp;

	/*  */
	DIRECT_B(main_int_stat) = 0x00;		/* main_int_stat  */
	DIRECT_B(sie_int_stat)	= 0x00;		/* sie_int_stat  */
	DIRECT_B(epr_int_stat)	= 0x00;		/* epr_int_stat  */
	DIRECT_B(dma_int_stat)	= 0x00;		/* dma_int_stat  */
	DIRECT_B(fifo_int_stat)	= 0x00;		/* fifo_int_stat  */
	DIRECT_B(ep0_int_stat)	= 0x00;		/* ep0_int_stat  */
	DIRECT_B(epa_int_stat)	= 0x00;		/* epa_int_stat  */
	DIRECT_B(epb_int_stat)	= 0x00;		/* epb_int_stat  */
	DIRECT_B(epc_int_stat)	= 0x00;		/* epc_int_stat  */

	/* Timer */
	timer0_cnt = timer1_cnt = 0x00;

	cmd_status = 0x00;
	DIRECT_B(device_flag)	= 0x00;
	wk_lba = wk_cnt = 0x00;
	wk_ptr = 0x00;

	/*  */
	control_state  = CTRL_IDLE;
	bulk_in_state  = BULK_IN_IDLE;
	bulk_out_state = BULK_OUT_IDLE;
	int_in_state   = INT_IN_IDLE;
	device_state   = DEV_WAIT_RCV_CMD;

	/*  */
	protocol_phase = COMMAND_PHASE;

	DiagRegErrorCount  = 0;
	DiagFIFOErrorCount = 0;

#ifdef DEBUG_PRINT
	/*  */
	USBResetCount	 = 0;
	EP0INErrorCount  = 0;
	EP0OUTErrorCount = 0;
	INErrorCount	 = 0;
	OUTErrorCount	 = 0;

	/* RS232C  */
	rs232c_flag.rs232c_rx = 0;
	for (i = 0;i < 64;i++) {
		sci_rxdata[i] = 0x00;
		sci_txdata[i] = 0x00;
	}
	sci_rxoffset = 0;
	sci_txoffset = 0;
	sci_rxbusy	 = 0;
	sci_rxerror  = 0;
	sci_txbusy	 = 0;
	rs232c_dumpaddr = 0;
	rs232c_dumpline = 0;
	sci_msgon = 1;

#endif

	/* USB */
	InitUSBWorkArea();
	/* Device */
	InitDeviceWorkArea();
}
/*****************************************************************************
 *
 *			: 
 *			: 
 *			: 
 *		: main_int_stat	Main
 *				  sie_int_stat	SIE
 *				  epn_int_stat	EPn
 *				  ep0_int_stat	EP0
 *
 *****************************************************************************/
void InterruptProc(void)
{
	volatile unsigned char temp;


	/*  */
	DIRECT_B(main_int_stat_sv) = rMainIntStat;
	DIRECT_B(main_int_stat) |= DIRECT_B(main_int_stat_sv);

	if(main_int_stat_sv.SIE_IntStat){
		/* SIE */

		/* SIE */
		DIRECT_B(sie_int_stat_sv) = rSIE_IntStat;
#ifdef DIS_AUTONEGO
		if(sie_int_stat_sv.DetectJ){
			rSIE_IntEnb_BP.EnDetectJ = 0;	/* DetectJ */
			rUSB_Control_BP.StartDetectJ = 0;	/* J */
			rUSB_Control_BP.DisBusDetect = 0;	/* ResetSuspend */
		}
#endif /* DIS_AUTONEGO */

		if(sie_int_stat_sv.NonJ){
			rSIE_IntEnb_BP.EnNonJ = 0;		/* NonJ */
		}

#ifdef DIS_AUTONEGO
		if(sie_int_stat_sv.DetectRESET) {
			rUSB_Control_BP.DisBusDetect = 1;		/*  ->  */
		}
#endif /* DIS_AUTONEGO */

		DIRECT_B(sie_int_stat) |= DIRECT_B(sie_int_stat_sv);
		rSIE_IntStat = DIRECT_B(sie_int_stat_sv);
	}
	if(main_int_stat_sv.EPrIntStat){
		/* EPr */

		DIRECT_B(epr_int_stat_sv) = rEPrIntStat;	/* EPx */
		rEPrIntStat = DIRECT_B(epr_int_stat_sv);
		DIRECT_B(epr_int_stat) |= DIRECT_B(epr_int_stat_sv);

		if(epr_int_stat_sv.EPaIntStat){
			/* EPa */

			/* EPa */
			DIRECT_B(epa_int_stat_sv) = rEPaIntStat;
			rEPaIntStat = DIRECT_B(epa_int_stat_sv);
			DIRECT_B(epa_int_stat) |= DIRECT_B(epa_int_stat_sv);
		}
		if(epr_int_stat_sv.EPbIntStat){
			/* EPb */

			/* EPb */
			DIRECT_B(epb_int_stat_sv) = rEPbIntStat;
			rEPbIntStat = DIRECT_B(epb_int_stat_sv);
			DIRECT_B(epb_int_stat) |= DIRECT_B(epb_int_stat_sv);
		}
		if(epr_int_stat_sv.EPcIntStat){
			/* EPc */

			/* EPc */
			DIRECT_B(epc_int_stat_sv) = rEPcIntStat;
			rEPcIntStat = DIRECT_B(epc_int_stat_sv);
			DIRECT_B(epc_int_stat) |= DIRECT_B(epc_int_stat_sv);
		}
	}
	if( main_int_stat_sv.DMA_IntStat ){
		DIRECT_B(dma_int_stat_sv) = rDMA_IntStat;	/* DMA */
		rDMA_IntStat = DIRECT_B(dma_int_stat_sv);
		DIRECT_B(dma_int_stat) |= DIRECT_B(dma_int_stat_sv);
	}
	if( main_int_stat_sv.FIFO_IntStat ){
		DIRECT_B(fifo_int_stat_sv) = rFIFO_IntStat;	/* FIFO */
		rFIFO_IntStat = DIRECT_B(fifo_int_stat_sv);
		DIRECT_B(fifo_int_stat) |= DIRECT_B(fifo_int_stat_sv);
	}
	if( main_int_stat_sv.EP0IntStat ){
		/* EP0 */

		/* EP0 */
		DIRECT_B(ep0_int_stat_sv) = rEP0IntStat;
		DIRECT_B(ep0_int_stat) |= DIRECT_B(ep0_int_stat_sv);
		rEP0IntStat = DIRECT_B(ep0_int_stat_sv);
	}
	rMainIntStat = DIRECT_B(main_int_stat_sv) & 0xFE;	/*  */

//	pINT_FP47_FCT_FAD = 0x10;	/* FP6 Clear */
	pINT_FP815 = 0x40 ;		// FP14 interrupt request flag clear

}
/*****************************************************************************
 *
 *			: Timer0
 *			: 
 *			: 
 *		: timer0_cnt			Timer0
 *
 *****************************************************************************/
void WaitTMIntProc(void)
{
	timer0_cnt++;
	*(volatile unsigned char*)REG_TM8_3_IFLAG |= 0x08;		/* 8-bit timer 3 clr intflg	*/
}

#ifdef DEBUG_PRINT
/*****************************************************************************
 *
 *			: RS232C 
 *			: 
 *			: 
 *		: 
 *
 *****************************************************************************/
void SCIRxCmp(void)
{
	BYTE	temp;
	int i;

	pINT_FSIF = 0x02;			/*  */

	if ((pSIF0_STATUS & 0x1C) == 0x00) {			/*  */
		sci_rxbusy = 1;								/*    */
		temp = pSIF0_RXD;

		if (temp == '\r') temp = '\n';
		if (sci_rxoffset < 62 && sci_rxdata[sci_rxoffset] != '\n') {
			if (temp == '\n') {
				sci_rxdata[sci_rxoffset] = '\n';
				sci_rxdata[sci_rxoffset + 1] = '\0';
			} else if (temp == '\b') {
				if (sci_rxoffset > 0) {
					sci_rxoffset--;
					sci_rxdata[sci_rxoffset] = '\0';
					
					sci_txdata[0] = '\b';
					sci_txdata[1] = ' ';
					sci_txdata[2] = '\b';
					sci_txdata[3] = '\0';
					o_rs232c();
				}
			} else {
				sci_rxdata[sci_rxoffset] = temp;
				sci_rxoffset++;
				sci_rxdata[sci_rxoffset] = '\0';

				sci_txdata[0] = temp;
				sci_txdata[1] = '\0';
				o_rs232c();

			}
		} else {
			sci_rxdata[sci_rxoffset] = '\n';
			sci_rxdata[sci_rxoffset + 1] = '\0';
		}
	} else {
		pINT_FSIF = 0x01;			/*  */
		sci_rxbusy = 0;				/*    */
		temp = pSIF0_RXD;			/*  */

		/*  */
		sci_rxoffset = 0;
		sci_rxdata[sci_rxoffset] = '\0';

		bSIF0_STATUS_FER0 = 0;		/* */
		bSIF0_STATUS_PER0 = 0;		/*  */
		bSIF0_STATUS_OER0 = 0;		/*  */

		sci_rxerror = 1;
		rs232c_flag.rs232c_rx = 1;					/* ">"  */
	}

	if (sci_rxdata[sci_rxoffset] == '\n' && rs232c_flag.rs232c_rx == 0) {
		sci_rxdata[sci_rxoffset] = '\0';
		rs232c_flag.rs232c_rx = 1;
	}
}
/*****************************************************************************
 *
 *			: RS232C
 *			: 
 *			: 
 *		: 
 *
 *****************************************************************************/
void SCIRxErr(void)
{
	BYTE temp;

	pINT_FSIF = 0x01;			/*  */
	sci_rxbusy = 0;				/*    */
	temp = pSIF0_RXD;			/*  */

	/*  */
	sci_rxoffset = 0;
	sci_rxdata[sci_rxoffset] = '\0';

	bSIF0_STATUS_FER0 = 0;		/* */
	bSIF0_STATUS_PER0 = 0;		/*  */
	bSIF0_STATUS_OER0 = 0;		/*  */

	sci_rxerror = 1;
	rs232c_flag.rs232c_rx = 1;					/* ">"  */
}
/*****************************************************************************
 *
 *			: RS232C 
 *			: 
 *			: 
 *		: sci_txdata			
 *				: sci_txoffset			
 *
 *****************************************************************************/
void SCITxCmp(void)
{
	BYTE temp;

	pINT_FSIF = 0x04;			/*  */

	if (bSIF0_STATUS_TDBE0 == 1) {
		/* Tx Buffer Empty */
		if (sci_txdata[sci_txoffset] != '\0') {
			pSIF0_TXD = sci_txdata[sci_txoffset];
			sci_txoffset++;
		} else {
			sci_txbusy = 0;
			if (bSIF0_STATUS_TEND0 == 0) {
				/*  */
				bSIF0_CTL_TXEN0 = 0;	/*  */
			}
		}
	}
}

#else	/* DEBUG_PRINT */

/*****************************************************************************
 *
 *			: RS232C 
 *			: 
 *			: 
 *		: 
 *
 *****************************************************************************/
void SCIRxCmp(void)
{
	;	/* */
}
/*****************************************************************************
 *
 *			: RS232C
 *			: 
 *			: 
 *		: 
 *
 *****************************************************************************/
void SCIRxErr(void)
{
	;	/* */
}
/*****************************************************************************
 *
 *			: RS232C 
 *			: 
 *			: 
 *		: sci_txdata			
 *				: sci_txoffset			
 *
 *****************************************************************************/
void SCITxCmp(void)
{
	;	/* */
}
/*****************************************************************************
 *
 *			: RS232C 
 *			: 
 *			: 
 *		: sci_txbusy			
 *
 *****************************************************************************/
void SCITxEnd(void)
{
	;	/* */
}

#endif	/* DEBUG_PRINT */


/*****************************************************************************
 *
 *			: 
 *			: 
 *			: 
 *		: 
 *
 *****************************************************************************/
void NoInt(void)
{
	;	/* */
}

⌨️ 快捷键说明

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