📄 usbmain.c
字号:
while ((writeArea != 0) && (memoryReadLPtr != memoryLPtr->AccessDataType.ReadType.endPtr)) {
/* transfer data from ring buffer RAM to FIFO */
*usbDataRegPtr = *memoryReadLPtr;
if (memoryReadLPtr >= (unsigned char*)returnAddLVar) {
/* reset ring buffer RAM pointer */
memoryReadLPtr = (unsigned char*)memoryLPtr->beginAriaPtr;
}
else {
/* Normal */
memoryReadLPtr++;
}
writeArea--;
}
/* enable transfer data in FIFO */
WRITE_FINISH
memoryLPtr->AccessDataType.ReadType.startPtr = memoryReadLPtr;
return (*epInfoPtr->FifoSize - writeArea);
}
/***************************************************************************
Function Name :PutPacket4(EpInfoType*,BuffType*)
Working :Transfering data from RAM to FIFO in 4 byte units
Return Value :short
Modified :{Author : T.Ishikawa & E.Ondou[2001.Nov.28]}
Created :{Author : T.Ishikawa[2001.Jan.10]}
***************************************************************************/
short PutPacket4(EpInfoType* epInfoPtr,BuffType* memoryLPtr) {
/* FIFO size */
unsigned short writeArea = *epInfoPtr->FifoSize;
/* ring buffer RAM pointer address */
unsigned long returnAddLVar = (unsigned long)memoryLPtr->endAriaPtr & 0xFFFFFFFC;
unsigned long* usbDataRegLPtr = epInfoPtr->epdrLPtr;
unsigned long* memoryReadLongLPtr = memoryLPtr->AccessDataType.ReadType4.startPtr;
while ((writeArea != 0) && (memoryReadLongLPtr != memoryLPtr->AccessDataType.ReadType4.endPtr)) {
/* transfer data from ring buffer RAM to FIFO */
*usbDataRegLPtr = *memoryReadLongLPtr;
if (memoryReadLongLPtr >= (unsigned long*)returnAddLVar) {
/* reset ring buffer RAM pointer */
memoryReadLongLPtr = (unsigned long*)memoryLPtr->beginAriaPtr;
}
else {
/* Normal */
memoryReadLongLPtr++;
}
writeArea -= 4;
}
/* enable transfer data in FIFO */
WRITE_FINISH
memoryLPtr->AccessDataType.ReadType4.startPtr = memoryReadLongLPtr;
return (*epInfoPtr->FifoSize - writeArea);
}
/***************************************************************************
Function Name :PutPacket4S(EpInfoType*,BuffType*)
Working :Transfering data from RAM to FIFO in 4 byte units
Return Value :short
Created :{Author : T.Ishikawa & E.Ondou[2001.Nov.28]}
***************************************************************************/
short PutPacket4S(EpInfoType* epInfoPtr,BuffType* memoryLPtr) {
/* FIFO size */
unsigned short writeArea = *epInfoPtr->FifoSize;
/* ring buffer RAM pointer address */
unsigned long returnAddLVar = (unsigned long)memoryLPtr->endAriaPtr & 0xFFFFFFFC;
unsigned long* usbDataRegLPtr = epInfoPtr->epdrLPtr;
unsigned long* memoryReadLongLPtr = memoryLPtr->AccessDataType.ReadType4.startPtr;
while ((writeArea != 0) && (memoryReadLongLPtr != memoryLPtr->AccessDataType.ReadType4.endPtr)) {
/* transfer data from ring buffer RAM to FIFO */
*usbDataRegLPtr = *memoryReadLongLPtr;
memoryReadLongLPtr++;
writeArea -= 4;
}
/* enable transfer data in FIFO */
WRITE_FINISH
memoryLPtr->AccessDataType.ReadType4.startPtr = memoryReadLongLPtr;
return (*epInfoPtr->FifoSize - writeArea);
}
/***************************************************************************
Function Name :SetControlOutContents(ControlType*,BuffType*)
Working :Changing transfered data from Host
Return Value :enum SetCompleteType (COMPLETE or INCOMPLETE)
Created :{Author : S.Suzuki[1998.Nov.6]}
***************************************************************************/
enum SetCompleteType SetControlOutContents(ControlType* addLPtr,BuffType* memoryLPtr) {
/* in case of existing data from Host */
if (memoryLPtr->AccessDataType.ReadType.startPtr != memoryLPtr->AccessDataType.ReadType.endPtr) {
/* change data */
for (;((memoryLPtr->AccessDataType.ReadType.startPtr != memoryLPtr->AccessDataType.ReadType.endPtr) && (addLPtr->beginPtr != addLPtr->endPtr));
addLPtr->beginPtr++,memoryLPtr->AccessDataType.ReadType.startPtr++) {
*addLPtr->beginPtr = *memoryLPtr->AccessDataType.ReadType.startPtr;
}
}
return COMPLETE;
}
/***************************************************************************
Function Name :SetUsbModule(unsigned long ,unsigned char )
Working :Intializing USB Module
Return Value :void
Modified :{Author : T.Ishikawa[2001.Nov.28]}
Modified :{Author : T.Ishikawa[2001.Nov.14]}
Created :{Author : T.Ishikawa[2000.Jun.23]}
***************************************************************************/
void SetUsbModule(unsigned long interruptBitStreamLVar ,unsigned char epInfoNumberLVar) {
RUN_USB_MODULE_2
F_CLEAR_PLLREADY
/* Set USB Information Register */
SET_USB_EPINFO
/* set USB interrupt and DMA */
SET_USB_INTERRUPT
/* get interrupt enable flag */
GET_INTERRUPT_ENABLE
SET_USB_INTERRUPT_SELECT
}
/***************************************************************************
Function Name :ActBusReset(unsigned long ,unsigned char )
Working :Clear FIFO in USB Bus Reset
Return Value :void
Modified :{Author : T.Ishikawa[2001.Aug.09]}
Modified :{Author : T.Ishikawa[2001.Jan.10]}
Created :{Author : T.Ishikawa[2000.Jun.23]}
***************************************************************************/
void ActBusReset(unsigned long interruptBitStreamLVar ,unsigned char epInfoNumberLVar) {
/* clear interrupt flag */
F_CLEAR_BUSRESET
/* clear all FIFO */
CLEAR_ALL_FIFO
/* clear STALL */
EP_STALL_ALL_OFF
}
/************************************************************************
Function Name :ActBusVcc(unsigned long ,unsigned char )
Working :Handling VBUS interrupt
Return Value :void
Modified :{Author : T.Ishikawa[2001.Nov.28]}
Modified :{Author : T.Sekine[2001.Nov.09]}
Created :{Author : T.Ishikawa[2000..]}
************************************************************************/
void ActBusVcc(unsigned long interruptBitStreamLVar ,unsigned char EpInfoNumberLVar) {
InterruptType deviceSideLVar; /* For stored present value of interrupt flag resisters */
F_CLEAR_BUSVCC /* Clear VBUSi flag */
GET_INTERRUPT_REGISTER /* For renewal deviceSideLVar (Re-get the value of interrupt flag registers) */
CHECK_CABLE_STATE
CLEAR_ALL_FIFO /* Clear all FIFO */
ENABLE_DPLUS_PULLUP /* Enable D+ Pullup */
RUN_USB_MODULE_3 /* Disable UDC core reset */
}
else { /* USB cable is disconnecteed */
STOP_USB_MODULE_3 /* Enable UDC core reset */
DISABLE_DPLUS_PULLUP /* Disable D+ Pullup */
}
}
/***************************************************************************
Function Name :ConvRealn(unsigned char* ,unsigned char )
Working :Reading data in specified address
Return Value :unsigned long
Created :{Author : T.Ishikawa[2001.Jan.10]}
***************************************************************************/
unsigned long ConvRealn(unsigned char* sourceLPtr ,unsigned char counterVer) {
unsigned char counterLVer = 0;
register unsigned long workLVer = (unsigned char)*(sourceLPtr);
counterVer -= 1;
while (counterLVer < counterVer) {
counterLVer++;
workLVer <<= 8;
++sourceLPtr;
workLVer |= (unsigned char)*(sourceLPtr);
}
return workLVer;
}
/***************************************************************************
Function Name :ConvReflexn(unsigned char* ,unsigned char )
Working :Changing row of data in specified address
Return Value :unsigned long
Created :{Author : T.Ishikawa[2001.Jan.10]}
***************************************************************************/
unsigned long ConvReflexn(unsigned char* sourceLPtr ,unsigned char counterVer) {
register unsigned long workLVer = 0;
while (counterVer != 0) {
counterVer--;
workLVer <<= 8;
workLVer |= (unsigned char)*(sourceLPtr + counterVer);
}
return workLVer;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -