📄 ep_pair.c
字号:
#pragma NOIV // Do not generate interrupt vectors
//-----------------------------------------------------------------------------
// File: periph.c
// Contents: Hooks required to implement USB peripheral function.
//
// Copyright (c) 1997 AnchorChips, Inc. All rights reserved
//-----------------------------------------------------------------------------
#include "ezusb.h"
#include "ezregs.h"
extern BOOL GotSUD; // 收到装载数据的标志
extern BOOL Sleep;
void TD_Poll(void);
BYTE Configuration; // 当前配置
BYTE AlternateSetting; // 替换配置
//-----------------------------------------------------------------------------
// Task Dispatcher hooks
// The following hooks are called by the task dispatcher.
//-----------------------------------------------------------------------------
void TD_Init(void) // 开始时调用
{
// 使能端点2输入和端点2输出
IN07VAL = bmEP2;
OUT07VAL = bmEP2;
// 使能端点2的输入缓存和输出缓存
USBPAIR = 0x09;
// 使端点2输出接收数据
EPIO[OUT2BUF_ID].bytes = 0;
// 设置断点以便在TD_Poll()函数中触发
BPADDR = (WORD)TD_Poll;
USBBAV |= bmBPEN; // 使能断点
USBBAV &= ~bmBPPULSE;
}
void TD_Poll(void) // 当设备闲置时重复调用
{
BYTE count, i;
if( !(EPIO[OUT2BUF_ID].cntrl & bmEPBUSY) ) // 判断OUT2BUF缓存是否有效
if( !(EPIO[IN2BUF_ID].cntrl & bmEPBUSY) ) // IN2BUF缓存是否有效
{
count = EPIO[OUT2BUF_ID].bytes; // 将OUT2BUF中的数据回送至IN2BUF
for(i=0;i<count;++i)
IN2BUF[i] = OUT2BUF[i];
EPIO[OUT2BUF_ID].bytes = 0;
EPIO[IN2BUF_ID].bytes = count;
}
}
BOOL TD_Suspend(void) // 设备进入挂起状态前调用该函数
{
// 在进入挂起状态之前屏蔽断点
USBBAV |= bmBREAK; // 清除断点
return(TRUE);
}
BOOL TD_Resume(void) // 设备重启后调用
{
return(TRUE);
}
//-----------------------------------------------------------------------------
// Device Request hooks
// The following hooks are called by the end point 0 device request parser.
//-----------------------------------------------------------------------------
BOOL DR_GetDescriptor(void) //当一个获取设备描述命令有效时调用该函数
{
return(TRUE);
}
BOOL DR_SetConfiguration(void) // 当一个设置配置命令有效时调用该函数
{
Configuration = SETUPDAT[2]; // 设置配置信息
return(TRUE); // 由用户代码处理
}
BOOL DR_GetConfiguration(void) // 当一个获取配置命令有效时调用该函数
{
IN0BUF[0] = Configuration; // 获取配置信息
EZUSB_SET_EP_BYTES(IN0BUF_ID,1);
return(TRUE); // 由用户代码处理
}
BOOL DR_SetInterface(void) // 当一个设置接口命令有效时调用该函数
{
AlternateSetting = SETUPDAT[2];
return(TRUE); // 由用户代码处理
}
BOOL DR_GetInterface(void) // 当一个获取接口命令有效时调用该函数
{
IN0BUF[0] = AlternateSetting;
EZUSB_SET_EP_BYTES(IN0BUF_ID,1);
return(TRUE); // 由用户代码处理
}
BOOL DR_GetStatus(void) // 当一个获取状态命令有效时调用该函数
{
return(TRUE);
}
BOOL DR_ClearFeature(void) // 清除设备请求特征
{
return(TRUE);
}
BOOL DR_SetFeature(void) // 设置设备请求特征
{
return(TRUE);
}
BOOL DR_VendorCmnd(void) // 获取厂商信息
{
return(TRUE);
}
//-----------------------------------------------------------------------------
// USB Interrupt Handlers
// The following functions are called by the USB interrupt jump table.
//-----------------------------------------------------------------------------
// Setup Data Available Interrupt Handler
void ISR_Sudav(void) interrupt 0
{
GotSUD = TRUE; // 设置标志位
EZUSB_IRQ_CLEAR();
USBIRQ = bmSUDAV; // 清除SUDAV中断请求
}
// Setup Token Interrupt Handler
void ISR_Sutok(void) interrupt 0
{
EZUSB_IRQ_CLEAR();
USBIRQ = bmSUTOK; // 清除SUTOK中断请求
}
void ISR_Sof(void) interrupt 0
{
EZUSB_IRQ_CLEAR();
USBIRQ = bmSOF; // 清除SOF中断请求
}
void ISR_Ures(void) interrupt 0
{
EZUSB_IRQ_CLEAR();
USBIRQ = bmURES; // 清除URES中断请求
}
void ISR_IBN(void) interrupt 0
{
// ISR for the IN Bulk NAK (IBN) interrupt.
}
void ISR_Susp(void) interrupt 0
{
Sleep = TRUE;
EZUSB_IRQ_CLEAR();
USBIRQ = bmSUSP;
}
void ISR_Ep0in(void) interrupt 0
{
}
void ISR_Ep0out(void) interrupt 0
{
}
void ISR_Ep1in(void) interrupt 0
{
}
void ISR_Ep1out(void) interrupt 0
{
}
void ISR_Ep2in(void) interrupt 0
{
}
void ISR_Ep2out(void) interrupt 0
{
}
void ISR_Ep3in(void) interrupt 0
{
}
void ISR_Ep3out(void) interrupt 0
{
}
void ISR_Ep4in(void) interrupt 0
{
}
void ISR_Ep4out(void) interrupt 0
{
}
void ISR_Ep5in(void) interrupt 0
{
}
void ISR_Ep5out(void) interrupt 0
{
}
void ISR_Ep6in(void) interrupt 0
{
}
void ISR_Ep6out(void) interrupt 0
{
}
void ISR_Ep7in(void) interrupt 0
{
}
void ISR_Ep7out(void) interrupt 0
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -