📄 usb_otg_dev_main.c
字号:
/*******************************************************************************
* File Name : usb_otg_dev_main.c
* Description : S3C2460A USB OTG endpoint interrupt handler, OTG initialization
* Author : Haksoo Kim
* Dept : Mobile solution, AP
* Created Date : 2005.06.02
* Version : 1.0
* History
* R1.0 (2005.06.02): First Release
********************************************************************************/
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include "Option.h"
#include "2460addr.h"
#include "2460lib.h"
#include "2460usb_otg_dev.h"
#include "usb_otg.h"
#include "usb_otg_dev_main.h"
#include "usb_otg_dev_lib.h"
#include "usb_otg_dev_setup.h"
#include "usb_otg_dev_out.h"
#include "usb_otg_dev_in.h"
uint8 *ptrTxFifo0 = OTG_DEV_TX_FIFO(0);
uint8 *ptrTxFifo1 = OTG_DEV_TX_FIFO(1);
uint32 *ptrRxFifo = OTG_DEV_RX_FIFO;
extern volatile int isUsbOtgSetConfiguration;
void UsbOtgDevMain(void)
{
// Standard USB Descriptor Definitions
InitDescriptorTable();
ConfigUsbOtgDev();
PrepareEp1Fifo();
}
extern unsigned char not_suspend;
extern unsigned char not_resume;
extern unsigned char sus_res_print;
void __irq IsrUsbOtgDev(void)
{
uint32 devIntr, epIntr, i;
devIntr = apOTG_TLI_DEV_G->devIntr;
if (devIntr & OTG_DEV_SUSPEND_INTR) {
//* clear interrupt
apOTG_TLI_DEV_G->devIntr |= OTG_DEV_SUSPEND_INTR;
if(apOTG_TLI_DEV_G->devStatus & (0x1<<12)) //suspend interrupt
{
if(sus_res_print==TRUE)
printf("!!!SUSPEND!!!\n");
not_suspend = FALSE;
}
else if(not_suspend == FALSE) //resume interrupt
{
if(sus_res_print==TRUE)
printf("!!!RESUME!!!\n");
not_resume = FALSE;
}
}
if (devIntr & OTG_DEV_BUSRESET_INTR) {
while (devIntr & OTG_DEV_BUSRESET_INTR) {
apOTG_TLI_DEV_G->threshold = OTG_RX_FIFO_SIZE<<16 | 0<<0; //no rx/tx threshold interrupt
//* Disable and clear interrupts
apOTG_TLI_DEV_G->devIntr = ~0x0;
apOTG_TLI_DEV_G->epIntr = ~0x0;
apOTG_TLI_DEV_G->devIntrMask = OTG_DEV_RX_FIFO_INTR | OTG_DEV_SETUP_INTR | OTG_DEV_BUSRESET_INTR | OTG_DEV_SETCFG_INTR;
apOTG_TLI_DEV_G->epIntrMask = 0x03; //enable inEP0, inEP1 interrupt
/* Set RX FIFO readies so we can receive packets */
apOTG_TLI_DEV_S->OutEP[OTG_DEV_CTRL_ENDP].control = OTG_DEV_RX_FIFOREADY;
apOTG_TLI_DEV_S->OutEP[OTG_DEV_BULKOUT_ENDP].control = OTG_DEV_RX_FIFOREADY;
devIntr = apOTG_TLI_DEV_G->devIntr;
ClearPending(BIT_USB);
rSUBSRCPND=BIT_SUB_OTG;
}
return;
}
if (devIntr & OTG_DEV_I2C_INTR) {
//* clear interrupt
apOTG_TLI_DEV_G->devIntr |= OTG_DEV_I2C_INTR;
}
if (devIntr & (OTG_DEV_RX_FIFO_INTR | OTG_DEV_SETUP_INTR)) {
UsbOtgDev_ServiceRxEP(devIntr);
}
if (devIntr & OTG_DEV_SETCFG_INTR) {
isUsbOtgSetConfiguration = 1;
//* clear interrupt
apOTG_TLI_DEV_G->devIntr |= OTG_DEV_SETCFG_INTR;
}
epIntr = apOTG_TLI_DEV_G->epIntr;
if (epIntr & OTG_DEV_ENDPT_MASK) {
for (i = 0; i < OTG_DEV_NUM_ENDPTS; i++) {
if (epIntr & OTG_DEV_ENDPT_MASK & (1 << i)) {
UsbOtgDev_ServiceTxEP(i);
}
}
}
ClearPending(BIT_USB);
rSUBSRCPND=BIT_SUB_OTG;
return;
}
void UsbOtgDev_ServiceRxEP(uint32 devIntr)
{
uint8 epNum;
//* If Setup interrupt (must check this first) */
if (devIntr & OTG_DEV_SETUP_INTR)
{
//* call sub-function
UsbOtg_SetupHandler();
//* clear interrupt
apOTG_TLI_DEV_G->setupStatus = OTG_DEV_SETUP_STATUS_INTR;
//* clear interrupt
apOTG_TLI_DEV_G->devIntr |= OTG_DEV_SETUP_INTR;
}
if (devIntr & OTG_DEV_RX_FIFO_INTR)
{
epNum = ((apOTG_TLI_DEV_G->rxStatus) >> OTG_DEV_RX_ENDP_SHIFT) & OTG_DEV_RX_ENDP_MASK;
//* call sub-function
if(epNum == OTG_DEV_CTRL_ENDP)
{
UsbOtg_Ep0RxHandler();
}
else if(epNum == OTG_DEV_BULKOUT_ENDP)
{
UsbOtg_Ep3RxHandler();
}
//* clear interrupt
apOTG_TLI_DEV_G->rxStatus |= OTG_DEV_RX_STATUS_INTR;
//* clear interrupt
apOTG_TLI_DEV_G->devIntr |= OTG_DEV_RX_FIFO_INTR;
}
return;
}
void UsbOtgDev_ServiceTxEP(uint32 epIntr)
{
//* Check Control EP first
if(epIntr == 0)
{
//* call sub-function
UsbOtg_Ep0TxHandler();
//* clear interrupt
apOTG_TLI_DEV_G->epIntr |= 1<<0;
}
else
{
//* call sub-function
UsbOtg_Ep1TxHandler();
//* clear interrupt
apOTG_TLI_DEV_G->epIntr |= 1<<epIntr;
}
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -