⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libassp.c

📁 utisoftware c code for linux,机卡分离方案。
💻 C
字号:
#include "linux/module.h"
#include  "defusr.h"
#include  "macusr.h"
#include  "libassp.h"
#include  "extern.h"


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Enable USB ASSP interrupt
 *-----------------------------------------------------------------------------
 * Declaration	: void enableINT_Assp(void)
 *-----------------------------------------------------------------------------
 * Argument		: void
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void enableINT_Assp(void)
{
/**	USB_SET_PAT(INTENB1, (BCHGE|BEMPE|NRDYE|BRDYE|SIGNE|SACKE)); **/
	USB_SET_PAT(INTENB0, (BEMPE|NRDYE|BRDYE));
	USB_SET_PAT(INTENB1, (SIGNE));
	USB_SET_PAT(NRDYENB, 0x00FF);
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Enable INTR
 *-----------------------------------------------------------------------------
 * Declaration	: void EnableIntR(U16 Pipe)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Pipe			; Pipe Number
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void EnableIntR(U16 Pipe)
{
	U16  tmp;

	USBRD(INTENB0, tmp);							/* Value Save */
	USB_CLR_PAT(INTENB0, (BEMPE | NRDYE | BRDYE));	/* Interrupt Disable */
	switch( Pipe ) {
	case PIPE1: USB_SET_PAT(BRDYENB, BRDY1);  break;
	case PIPE2: USB_SET_PAT(BRDYENB, BRDY2);  break;
	case PIPE3: USB_SET_PAT(BRDYENB, BRDY3);  break;
	case PIPE4: USB_SET_PAT(BRDYENB, BRDY4);  break;
	case PIPE5: USB_SET_PAT(BRDYENB, BRDY5);  break;
	case PIPE6: USB_SET_PAT(BRDYENB, BRDY6);  break;
	case PIPE7: USB_SET_PAT(BRDYENB, BRDY7);  break;
	}
	USBWR(INTENB0, tmp);							/* Interrupt Enable */
}
void ClearIntR(U16 Pipe)
{

	switch( Pipe ) {
	case PIPE1: USB_CLR_STS(BRDYSTS, BRDY1);  break;
	case PIPE2: USB_CLR_STS(BRDYSTS, BRDY2);  break;
	case PIPE3: USB_CLR_STS(BRDYSTS, BRDY3);  break;
	case PIPE4: USB_CLR_STS(BRDYSTS, BRDY4);  break;
	case PIPE5: USB_CLR_STS(BRDYSTS, BRDY5);  break;
	case PIPE6: USB_CLR_STS(BRDYSTS, BRDY6);  break;
	case PIPE7: USB_CLR_STS(BRDYSTS, BRDY7);  break;
	}

}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Disable INTR
 *-----------------------------------------------------------------------------
 * Declaration	: void DisableIntR(U16 Pipe)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Pipe			; Pipe Number
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void DisableIntR(U16 Pipe)
{
	U16  tmp;

	USBRD(INTENB0, tmp);							/* Value Save */
	USB_CLR_PAT(INTENB0, (BEMPE | NRDYE | BRDYE));	/* Interrupt Disable */
	switch( Pipe ) {
	case PIPE1: USB_CLR_PAT(BRDYENB, BRDY1);  break;
	case PIPE2: USB_CLR_PAT(BRDYENB, BRDY2);  break;
	case PIPE3: USB_CLR_PAT(BRDYENB, BRDY3);  break;
	case PIPE4: USB_CLR_PAT(BRDYENB, BRDY4);  break;
	case PIPE5: USB_CLR_PAT(BRDYENB, BRDY5);  break;
	case PIPE6: USB_CLR_PAT(BRDYENB, BRDY6);  break;
	case PIPE7: USB_CLR_PAT(BRDYENB, BRDY7);  break;
	}
	USBWR(INTENB0, tmp);							/* Interrupt Enable */
}

void EnableIntNR(U16 Pipe)
{
	U16  tmp;

	USBRD(INTENB0, tmp);							/* Value Save */
	USB_CLR_PAT(INTENB0, (BEMPE | NRDYE | BRDYE));	/* Interrupt Disable */
	switch( Pipe ) {
	case PIPE1: USB_SET_PAT(NRDYENB, NRDY1);  break;
	case PIPE2: USB_SET_PAT(NRDYENB, NRDY2);  break;
	case PIPE3: USB_SET_PAT(NRDYENB, NRDY3);  break;
	case PIPE4: USB_SET_PAT(NRDYENB, NRDY4);  break;
	case PIPE5: USB_SET_PAT(NRDYENB, NRDY5);  break;
	case PIPE6: USB_SET_PAT(NRDYENB, NRDY6);  break;
	case PIPE7: USB_SET_PAT(NRDYENB, NRDY7);  break;
	}
	USBWR(INTENB0, tmp);							/* Interrupt Enable */
}
void ClearIntNR(U16 Pipe)
{

	switch( Pipe ) {
	case PIPE1: USB_CLR_STS(NRDYSTS, NRDY1);  break;
	case PIPE2: USB_CLR_STS(NRDYSTS, NRDY2);  break;
	case PIPE3: USB_CLR_STS(NRDYSTS, NRDY3);  break;
	case PIPE4: USB_CLR_STS(NRDYSTS, NRDY4);  break;
	case PIPE5: USB_CLR_STS(NRDYSTS, NRDY5);  break;
	case PIPE6: USB_CLR_STS(NRDYSTS, NRDY6);  break;
	case PIPE7: USB_CLR_STS(NRDYSTS, NRDY7);  break;
	}

}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Disable INTR
 *-----------------------------------------------------------------------------
 * Declaration	: void DisableIntR(U16 Pipe)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Pipe			; Pipe Number
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void DisableIntNR(U16 Pipe)
{
	U16  tmp;

	USBRD(INTENB0, tmp);							/* Value Save */
	USB_CLR_PAT(INTENB0, (BEMPE | NRDYE | BRDYE));	/* Interrupt Disable */
	switch( Pipe ) {
	case PIPE1: USB_CLR_PAT(NRDYENB, NRDY1);  break;
	case PIPE2: USB_CLR_PAT(NRDYENB, NRDY2);  break;
	case PIPE3: USB_CLR_PAT(NRDYENB, NRDY3);  break;
	case PIPE4: USB_CLR_PAT(NRDYENB, NRDY4);  break;
	case PIPE5: USB_CLR_PAT(NRDYENB, NRDY5);  break;
	case PIPE6: USB_CLR_PAT(NRDYENB, NRDY6);  break;
	case PIPE7: USB_CLR_PAT(NRDYENB, NRDY7);  break;
	}
	USBWR(INTENB0, tmp);							/* Interrupt Enable */
}

/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Check current speed
 *-----------------------------------------------------------------------------
 * Declaration	: U16 isHiSpeed(void)
 *-----------------------------------------------------------------------------
 * Argument		: void
 *-----------------------------------------------------------------------------
 * Return		: U16				; YES : Hi-Speed
 *				:					; NO  : Full-Speed
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
U16 isHiSpeed(void)
{
	U16	buf;

	USBRD(DVSTCTR, buf);
	if( (buf & RHST) == HSMODE )
		return YES;									/* Hi-Speed mode */
	return NO;										/* Full-Speed mode */
}


/*""FUNC COMMENT""*************************************************************
 *-----------------------------------------------------------------------------
 * Function		: Set endpoint PID
 *-----------------------------------------------------------------------------
 * Declaration	: void SetEpPid(U16 Pipe, U16 Pid)
 *-----------------------------------------------------------------------------
 * Argument		: U16 Pipe			; Pipe Number
 *				: U16 Pid			; PID : PID_BUF or PID_NAK or PID_STALL
 *-----------------------------------------------------------------------------
 * Return		: void
 *-----------------------------------------------------------------------------
 * Note			:
 *-----------------------------------------------------------------------------
 *""FUNC COMMENT END""********************************************************/
void SetEpPid(U16 Pipe, U16 Pid)
{
	REGP	*reg;

	if( Pipe == PIPE0 ) {
		reg = (REGP *)(DCPCTR_ADR);
	} else {
		reg = (REGP *)(PIPECTR_ADR + ((Pipe - 1) * 2));
	}
	switch( Pid ) {
	case PID_BUF:	 USB_SET_PAT(*reg, PID_BUF);	break;
	case PID_NAK:	 USB_CLR_PAT(*reg, PID_BUF);	break;
	case PID_STALL:  USB_SET_PAT(*reg, PID_STALL);	break;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -