📄 docontrol.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 + -