1
0
forked from me/IronOS
Files
IronOS/S100App/Src/USB_istr.c
2016-04-30 20:56:50 +05:00

139 lines
4.4 KiB
C

/******************** (C) COPYRIGHT 2015 e-Design Co., Ltd. ********************
File Name : USB_istr.c
Version : STM32 USB Disk Ver 3.4 Author : MCD Application Team & bure
*******************************************************************************/
#include "USB_type.h"
#include "USB_regs.h"
#include "USB_pwr.h"
#include "USB_istr.h"
#include "USB_init.h"
#include "USB_int.h"
#include "USB_bot.h"
volatile u16 wIstr; /* ISTR register last read value */
volatile u8 bIntPackSOF = 0; /* SOFs received between 2 consecutive packets */
void (*pEpInt_IN[7])(void) ={
EP1_IN_Callback,
EP2_IN_Callback,
EP3_IN_Callback,
EP4_IN_Callback,
EP5_IN_Callback,
EP6_IN_Callback,
EP7_IN_Callback,
};
void (*pEpInt_OUT[7])(void) ={
EP1_OUT_Callback,
EP2_OUT_Callback,
EP3_OUT_Callback,
EP4_OUT_Callback,
EP5_OUT_Callback,
EP6_OUT_Callback,
EP7_OUT_Callback,
};
/*******************************************************************************
USB_Istr: ISTR events interrupt service routine
*******************************************************************************/
void USB_Istr(void)
{
wIstr = _GetISTR();
#if (IMR_MSK & ISTR_RESET)
if (wIstr & ISTR_RESET & wInterrupt_Mask){
// _SetISTR((u16)CLR_RESET);
Device_Property.Reset();
_SetISTR((u16)CLR_RESET);
//#ifdef RESET_CALLBACK
// RESET_Callback();
//#endif
}
#endif
//-----------------------------------------------------------------------------
#if (IMR_MSK & ISTR_DOVR)
if (wIstr & ISTR_DOVR & wInterrupt_Mask){
_SetISTR((u16)CLR_DOVR);
//#ifdef DOVR_CALLBACK
// DOVR_Callback();
//#endif
}
#endif
//-----------------------------------------------------------------------------
#if (IMR_MSK & ISTR_ERR)
if (wIstr & ISTR_ERR & wInterrupt_Mask){
_SetISTR((u16)CLR_ERR);
//#ifdef ERR_CALLBACK
// ERR_Callback();
//#endif
}
#endif
//-----------------------------------------------------------------------------
#if (IMR_MSK & ISTR_WKUP)
if (wIstr & ISTR_WKUP & wInterrupt_Mask){
// _SetISTR((u16)CLR_WKUP);
Resume(RESUME_EXTERNAL);
_SetISTR((u16)CLR_WKUP);
//#ifdef WKUP_CALLBACK
// WKUP_Callback();
//#endif
}
#endif
//-----------------------------------------------------------------------------
#if (IMR_MSK & ISTR_SUSP)
if (wIstr & ISTR_SUSP & wInterrupt_Mask){ // check if SUSPEND is possible
if (fSuspendEnabled) Suspend();
else Resume(RESUME_LATER); // if not possible then resume after xx ms
_SetISTR((u16)CLR_SUSP); // clear of the ISTR bit must be done after setting of CNTR_FSUSP
//#ifdef SUSP_CALLBACK
// SUSP_Callback();
//#endif
}
#endif
//-----------------------------------------------------------------------------
#if (IMR_MSK & ISTR_SOF)
if (wIstr & ISTR_SOF & wInterrupt_Mask){
_SetISTR((u16)CLR_SOF);
bIntPackSOF++;
//#ifdef SOF_CALLBACK
// SOF_Callback();
//#endif
}
#endif
//-----------------------------------------------------------------------------
#if (IMR_MSK & ISTR_ESOF)
if (wIstr & ISTR_ESOF & wInterrupt_Mask){
// _SetISTR((u16)CLR_ESOF); // resume handling timing is made with ESOFs
Resume(RESUME_ESOF); // request without change of the machine state
_SetISTR((u16)CLR_ESOF); // resume handling timing is made with ESOFs
//#ifdef ESOF_CALLBACK
// ESOF_Callback();
//#endif
}
#endif
//-----------------------------------------------------------------------------
#if (IMR_MSK & ISTR_CTR)
if (wIstr & ISTR_CTR & wInterrupt_Mask){
/* servicing of the endpoint correct transfer interrupt */
/* clear of the CTR flag into the sub */
CTR_LP();
//#ifdef CTR_CALLBACK
// CTR_Callback();
//#endif
}
#endif
} /* USB_Istr */
/*******************************************************************************
EP1_IN_Callback: EP1 IN Callback Routine
*******************************************************************************/
void EP1_IN_Callback(void)
{
Mass_Storage_In();
}
/*******************************************************************************
EP2_OUT_Callback: EP2 OUT Callback Routine.
*******************************************************************************/
void EP2_OUT_Callback(void)
{
Mass_Storage_Out();
}
/********************************* END OF FILE ******************************/