📄 d12op.c
字号:
#include "DataType.h"
#include "D12Def.h"
#include "UsbDesc.h"
#include "ctrl_set.h"
#include "console.h"
void D12SetEpStat(U8 Ep,U8 Stat)
{
D12Cmd = Ep+0x40;
D12Dat = Stat;
}
void D12SetAddr(U8 Addr)
{
D12Cmd = 0xd0;
D12Dat = Addr;
}
void D12SetEp(U8 Val)
{
D12Cmd = 0xd8;
D12Dat = Val;
}
void D12SetDma(U8 Dma)
{
D12Cmd = 0xfb;
D12Dat = Dma;
}
void D12SetMode(U8 Val1, U8 Val2)
{
D12Cmd = 0xf3;
D12Dat = Val1;
D12Dat = Val2;
}
void D12SendResume()
{
D12Cmd = 0xf6;
}
void D12AckEp(U8 Ep)
{
D12Cmd = Ep; // 选择端点
D12Cmd = 0xf1; // 应答SETUP
if(!Ep)
D12Cmd = 0xf2;
}
U32 D12RdChipId()
{
U32 tmp;
D12Cmd = 0xfd;
tmp = D12Dat;
tmp = tmp<<8|D12Dat;
return tmp;
}
U8 D12GetDma()
{
D12Cmd = 0xfb;
return D12Cmd;
}
U8 D12RdEp(U8 Ep,U8 buf[],U8 cnt)
//读取端点缓冲区
{
U8 tmp;
D12SelEp(Ep);//选择端点
if(D12Cmd&1) //选择的端点缓冲区已满
{
D12Cmd = 0xf0; //读缓冲区
tmp = D12Cmd; //返回第一个字节,无效
tmp = D12Cmd; //返回第二个字节,数据字节的个数
if(tmp<cnt)
cnt = tmp;
tmp = cnt;
while(cnt) //读取剩余的数据
{
*buf++ = D12Cmd;
cnt--;
}
D12Cmd = 0xf2; //清缓冲区
return tmp;
}
else
return 0;
}
void D12WrEp(U8 Ep, U8 buf[], U8 cnt)
{
while(1)
{
D12SelEp(Ep); //选择端点
if(!(D12Cmd&1)) //选择端点的缓冲区已空
break;
}
D12Cmd = 0xf0; //向端点缓冲区写数据
D12Dat = 0; //第一个数据,无效
D12Dat = cnt; //第二个数据,字节数
while(cnt)
{
D12Dat = *buf++;
cnt--;
}
D12Cmd = 0xfa; // 设置IN缓冲区已满
}
U8 D12RdInt()
{
D12Cmd = 0xf4;
return D12Cmd;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -