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

📄 docontrol.c

📁 16位单片机H8的例子源代码
💻 C
字号:
/*
****************************************************************************
					H I T A C H I    P R O P R I E T A R Y

	COPYRIGHT (c)	2001 BY Semiconductor & Integrated Circuits,Hitachi,Ltd.
						---  ALL RIGHTS RESERVED  ---

	File Name	:DoControl.c
	Working		:Executing Control transfer
	Modified	:Rev 2001_09_28 {Author : T.Ishikawa}
	Created		:Rev 1.0 {Author : T.Ishikawa[2001.Jan.10]}
****************************************************************************
*/

#ifndef SysMemMap
#include	"SysMemMap.h"
#endif	/*	SysMemMap	*/

#ifndef CatProType
#include	"CatProType.h"
#endif	/*	CatProType	*/



/*	Prototype	*/
void	ActControl(unsigned long,unsigned char);
void	ActControlIn(unsigned long,unsigned char);
void	ActControlOut(unsigned long,unsigned char);



/*	Contents	*/
/***************************************************************************
Function Name	:ActControl(void)
Working			:Executing Control transfer SetUp Stage
Return Value	:void
Modified		:{Author : T.Ishikawa[2000.Jun.09]}
Modified		:{Author : T.Takenaga[1999.Jan.22]}
Modified		:{Author : S.Suzuki[1998.Oct.5]}
Modified		:{Author : T.Ishikawa[1998.Mar.11]}
Created			:{Author : T.Ishikawa[1997.Nov.18]}
***************************************************************************/
void	ActControl(unsigned long interruptBitStreamLVar ,unsigned char epInfoNumberLVar) {

	/*	ISET_CLEAR;	clear interrupt flag	*/
	SETUP_INTF_CLEAR
	
	/*	clear In and Out FIFOs	*/
	FIFO_CLEAR_REGISTER = EpInfo[epInfoNumberLVar].fifoClearEnable;
	
	EpInfo[0].PresentState = WAIT;
	contCMDGPtr.AccessDataType.WriteType.startPtr = &ep0PacketGVar.byteVal[0];
	contCMDGPtr.AccessDataType.WriteType.endPtr = &ep0PacketGVar.byteVal[8];
	
	GetPacket(&EpInfo[epInfoNumberLVar],&contCMDGPtr);
	
	/*	decode Setup Commands	*/
	DecStandardCommands();
	
	GO_DATA_STAGE
	
	if (EpInfo[0].PresentState == TRANS_IN) {
		/*	mask EP0i_TR interrupt	*/
		CTRL_IN_REG_SET
		PutPacket(&EpInfo[1],&dataBuffGPtr[0]);
	}
	else {
		/*	enable EP0i_TR interrupt	*/
		CTRL_OUT_REG_SET
	}
}



/***************************************************************************
Function Name	:ActControlIn(unsigned long ,unsigned char )
Working			:Executing Control transfer Data Stage and Status Stage
				:in case Data Stage direction is IN
Return Value	:void
Modified		:{Author : T.Ishikawa[2001.Aug.09]}
Modified		:{Author : T.Ishikawa[1999.Jan.22]}
Modified		:{Author : S.Suzuki[1998.Nov.5]}
Modified		:{Author : T.Ishikawa[1998.Mar.11]}
Created			:{Author : T.Ishikawa[1997.Dec.11]}
***************************************************************************/
void	ActControlIn(unsigned long interruptBitStreamLVar ,unsigned char epInfoNumberLVar) {
/*------------------- end of status stage -----------------------------*/
	if ((interruptBitStreamLVar & EP0_O_ACK_BITS) == EP0_O_ACK_BITS) {	/*	EP0o_TS (completed receive)	*/
		/*	clear EP0 interrupt flag except for SETUP	*/
		CTRL_IN_OTSF_CLEAR
		
		EpInfo[0].PresentState = WAIT;
		/*	set read_finish flag	*/
		READ_TRIGER_REGISTER = EpInfo[epInfoNumberLVar].getFinish;
		/*	completed Control transfer	*/
	}
/*-------------- transition state (from data to status) ---------*/
	else {	/*	EP0i_TS(completed transfer)	*/
		/*	clear EP0i_TS interrupt flag	*/
		CTRL_ITSF_CLEAR
		
		PutPacket(&EpInfo[epInfoNumberLVar],&dataBuffGPtr[0]);
	}
}



/***************************************************************************
Function Name	:ActControlOut(unsigned long ,unsigned char )
Working			:Executing Control transfer Data Stage and Status Stage
				:in case Data Stage direction is OUT
Return Value	:void
Modified		:曄峏		{Author : T.Ishikawa[2001.Aug.09]}
Modified		:曄峏		{Author : T.Ishikawa[1999.Jan.22]}
Modified		:曄峏		{Author : S.Suzuki[1998.Nov.5]}
Modified		:曄峏		{Author : T.Ishikawa[1998.Mar.11]}
Created			:怴婯嶌惉	{Author : T.Ishikawa[1997.Dec.11]}
***************************************************************************/
void	ActControlOut(unsigned long interruptBitStreamLVar ,unsigned char epInfoNumberLVar) {

	enum SetCompleteType setcomplete;

/*------------------ data stage --------------------------------*/
	if ((interruptBitStreamLVar & EP0_O_ACK_BITS) == EP0_O_ACK_BITS) {	/*	EP0o_TS (completed receive)	*/
		/*	clear EP0o_TS interrupt flag	*/
		CTRL_OTSF_CLEAR
		
		GetPacket(&EpInfo[epInfoNumberLVar],&dataBuffGPtr[0]);
	}
/*-------------- transition state (from data to status) ---------*/
	else if ((interruptBitStreamLVar & EP0_I_NACK_BITS) == EP0_I_NACK_BITS) {	/*	EP0i_TR(transfer request)	*/
		/*	clear EP0i_TR interrupt flag	*/
		CTRL_ITRF_CLEAR

		/*	handling Data Stage transfered data	*/
		setcomplete = INCOMPLETE;
		setcomplete = SetControlOutContents(&transStageGPtr,&dataBuffGPtr[0]);

		if (setcomplete != INCOMPLETE) {
			/*	enable taranfer packet data in FIFO after completed Data Stage	*/
			WRITE_TRIGER_REGISTER = EpInfo[epInfoNumberLVar].putEnable;
		}
		else {
			error();
		}
	}
/*------------------ end of status stage -------------------------*/
	else {	/*	EP0i_TS(completed transfer)	*/
		/*	clear EP0i_TS interrupt flag	*/
		CTRL_ITSF_CLEAR
		
		EpInfo[0].PresentState = WAIT;
		/*	completed Control transfer	*/
	}
}

⌨️ 快捷键说明

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