?? intrn.c
字號:
//#include "stddefs.h"
#include <linux/time.h>
#include "defusr.h"
#include "macusr.h"
#include "libassp.h"
#include "extern.h"
//#include "sttbx.h"
extern U8 UsbDeviceTS[4];
U8 SendCount = 0;
U8 ReceiveCount = 0;
extern U16 USBerror;
struct timeval PreTime;
struct timeval CurrentTime;
extern U16 USBerror, USBerrorPre;
/*""FUNC COMMENT""*************************************************************
*-----------------------------------------------------------------------------
* Function : INTR interrupt
*-----------------------------------------------------------------------------
* Declaration : void INTR_int(U16 Status, U16 Int_enbl)
*-----------------------------------------------------------------------------
* Argument : U16 Status ; BRDYSTS Register Value
* : U16 Int_enbl ; BRDYENB Register Value
*-----------------------------------------------------------------------------
* Return : void
*-----------------------------------------------------------------------------
* Note :
*-----------------------------------------------------------------------------
*""FUNC COMMENT END""********************************************************/
void INTR_int(U16 Status, U16 Int_enbl)
{
register U16 buffer;
if( (Status & BRDY0) && (Int_enbl & BRDY0) ) {
USB_CLR_STS(BRDYSTS, BRDY0);
USB_MDF_PAT(CFIFOSEL, PIPE0, CURPIPE);
USBRD(CFIFOSEL, buffer);
if( (buffer & ISEL) == 0 ) {
Control_Read();
}
} else {
if( (Status & BRDY1) && (Int_enbl & BRDY1) ) {
USB_CLR_STS(BRDYSTS, BRDY1);
USBWR(PIPESEL, PIPE1);
USBRD(PIPECFG, buffer);
if( (buffer & DIR) == DIR_H_IN ) {
ReceiveCount++;
if (ReceiveCount >3)
{
SetEpPid(PIPE1, PID_NAK);
SetEpPid(PIPE2, PID_BUF);
ReceiveCount = 0;
}
/* DisableIntR(PIPE1);
DisableIntR(PIPE2);
USBWR(D0FIFOSEL,DCLRM|MBW_8|PIPE1);
USBWR(D1FIFOSEL,DCLRM|DREQE|MBW_8|PIPE2);
Buffer_Write_Data_Flag[PIPE1] = DATA_OK;
Buffer_Write_Data_Flag[PIPE2] = DATA_NONE;
return;*/
/* Data_In(PIPE1);*/
} else {
DMA_Out(PIPE1);
}
}
if( (Status & BRDY2) && (Int_enbl & BRDY2) ) {
USB_CLR_STS(BRDYSTS, BRDY2);
USBWR(PIPESEL, PIPE2);
USBRD(PIPECFG, buffer);
if( (buffer & DIR) == DIR_H_IN ) {
Data_In(PIPE2);
} else {
SendCount++;
if (SendCount >3)
{
SetEpPid(PIPE2, PID_NAK);
SetEpPid(PIPE1, PID_BUF);
SendCount = 0;
}
/*DMA_Out(PIPE2);*/
/* DisableIntR(PIPE1);
DisableIntR(PIPE2);
USBWR(D1FIFOSEL,DCLRM|MBW_8|PIPE2);
USBWR(D0FIFOSEL,DCLRM|DREQE|MBW_8|PIPE1);
Buffer_Write_Data_Flag[PIPE1] = DATA_NONE;
Buffer_Write_Data_Flag[PIPE2] = DATA_OK;
return;*/
/*User_Data_In (PIPE1, 512, (U8 *)P1_Buff);*/
}
}
if( (Status & BRDY3) && (Int_enbl & BRDY3) ) {
USB_CLR_STS(BRDYSTS, BRDY3);
USBWR(PIPESEL, PIPE3);
USBRD(PIPECFG, buffer);
if( (buffer & DIR) == DIR_H_IN ) {
Data_In(PIPE3);
} else {
Data_Out(PIPE3);
}
}
if( (Status & BRDY4) && (Int_enbl & BRDY4) ) {
USB_CLR_STS(BRDYSTS, BRDY4);
USBWR(PIPESEL, PIPE4);
USBRD(PIPECFG, buffer);
if( (buffer & DIR) == DIR_H_IN ) {
Data_In(PIPE4);
} else {
Data_Out(PIPE4);
}
}
if( (Status & BRDY5) && (Int_enbl & BRDY5) ) {
USB_CLR_STS(BRDYSTS, BRDY5);
USBWR(PIPESEL, PIPE5);
USBRD(PIPECFG, buffer);
if( (buffer & DIR) == DIR_H_IN ) {
Data_In(PIPE5);
} else {
Data_Out(PIPE5);
}
}
if( (Status & BRDY6) && (Int_enbl & BRDY6) ) {
USB_CLR_STS(BRDYSTS, BRDY6);
USBWR(PIPESEL, PIPE6);
USBRD(PIPECFG, buffer);
if( (buffer & DIR) == DIR_H_IN ) {
Data_In(PIPE6);
} else {
Data_Out(PIPE6);
}
}
if( (Status & BRDY7) && (Int_enbl & BRDY7) ) {
USB_CLR_STS(BRDYSTS, BRDY7);
USBWR(PIPESEL, PIPE7);
USBRD(PIPECFG, buffer);
if( (buffer & DIR) == DIR_H_IN ) {
Data_In(PIPE7);
} else {
Data_Out(PIPE7);
}
}
}
}
/*""FUNC COMMENT""*************************************************************
*-----------------------------------------------------------------------------
* Function : INTN interrupt
*-----------------------------------------------------------------------------
* Declaration : void INTN_int(U16 Status, U16 Int_enbl)
*-----------------------------------------------------------------------------
* Argument : U16 Status ; NRDYSTS Register Value
* : U16 Int_enbl ; NRDYENB Register Value
*-----------------------------------------------------------------------------
* Return : void
*-----------------------------------------------------------------------------
* Note :
*-----------------------------------------------------------------------------
*""FUNC COMMENT END""********************************************************/
void INTN_int(U16 Status, U16 Int_enbl)
{
if( (Status & NRDY0) && (Int_enbl & NRDY0) )
{
USB_CLR_STS(NRDYSTS, NRDY0);
}
else
{
if( (Status & NRDY1) && (Int_enbl & NRDY1) )
{
USB_CLR_STS(NRDYSTS, NRDY1);
SetEpPid(PIPE1, PID_BUF);
USBerror++;
do_gettimeofday(&CurrentTime);
if (((CurrentTime.tv_sec - PreTime.tv_sec) * 1000000 + (CurrentTime.tv_usec - PreTime.tv_usec))<10000)
{
if (USBerror>50)
{
BchgFlg = YES;
DisableIntNR(PIPE1);
DisableIntNR(PIPE2);
usb_detach();
USBerror =0;
USBerrorPre = 0;
}
}
else
{
USBerror =0;
USBerrorPre = 0;
}
PreTime = CurrentTime;
}
if( (Status & NRDY2) && (Int_enbl & NRDY2) ) {
USB_CLR_STS(NRDYSTS, NRDY2);
SetEpPid(PIPE2, PID_BUF);
USBerror++;
}
if( (Status & NRDY3) && (Int_enbl & NRDY3) ) {
USB_CLR_STS(NRDYSTS, NRDY3);
}
if( (Status & NRDY4) && (Int_enbl & NRDY4) ) {
USB_CLR_STS(NRDYSTS, NRDY4);
}
if( (Status & NRDY5) && (Int_enbl & NRDY5) ) {
USB_CLR_STS(NRDYSTS, NRDY5);
}
if( (Status & NRDY6) && (Int_enbl & NRDY6) ) {
USB_CLR_STS(NRDYSTS, NRDY6);
}
if( (Status & NRDY7) && (Int_enbl & NRDY7) ) {
USB_CLR_STS(NRDYSTS, NRDY7);
}
}
}
/*""FUNC COMMENT""*************************************************************
*-----------------------------------------------------------------------------
* Function : BEMP interrupt
*-----------------------------------------------------------------------------
* Declaration : void BEMP_int(U16 Status, U16 Int_enbl)
*-----------------------------------------------------------------------------
* Argument : U16 Status ; BEMPSTS Register Value
* : U16 Int_enbl ; BEMPENB Register Value
*-----------------------------------------------------------------------------
* Return : void
*-----------------------------------------------------------------------------
* Note :
*-----------------------------------------------------------------------------
*""FUNC COMMENT END""********************************************************/
void BEMP_int(U16 Status, U16 Int_enbl)
{
register U16 buffer;
if( (Status & BEMP0) && (Int_enbl & BEMP0) ) {
USB_CLR_STS(BEMPSTS, BEMP0);
USB_MDF_PAT(CFIFOSEL, PIPE0, CURPIPE);
USBRD(CFIFOSEL, buffer);
if( (buffer & ISEL) != 0 ) {
Control_Write();
}
} else {
if( (Status & BEMP1) && (Int_enbl & BEMP1) ) {
USB_CLR_STS(BEMPSTS, BEMP1);
}
if( (Status & BEMP2) && (Int_enbl & BEMP2) ) {
USB_CLR_STS(BEMPSTS, BEMP2);
}
if( (Status & BEMP3) && (Int_enbl & BEMP3) ) {
USB_CLR_STS(BEMPSTS, BEMP3);
}
if( (Status & BEMP4) && (Int_enbl & BEMP4) ) {
USB_CLR_STS(BEMPSTS, BEMP4);
}
if( (Status & BEMP5) && (Int_enbl & BEMP5) ) {
USB_CLR_STS(BEMPSTS, BEMP5);
}
if( (Status & BEMP6) && (Int_enbl & BEMP6) ) {
USB_CLR_STS(BEMPSTS, BEMP6);
}
if( (Status & BEMP7) && (Int_enbl & BEMP7) ) {
USB_CLR_STS(BEMPSTS, BEMP7);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -