📄 libassp.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 + -