?? d12ci.c
字號:
/*
//*************************************************************************
//
// ZLGMCU
// www.zlgmcu.com
// File Name: D12ci.C
// Revision: 0.2(2002-04-08)
// Author: Liu Ying Bin
// Use library: USB51S.LIB
// Note: USB51S.LIB不帶DMA控制功能
//*************************************************************************
*/
#include <reg51.h> /* special function register declarations */
#include "mainloop.h"
#include "isr.h"
#include "d12ci.h"
#include "absacc.h"
extern EPPFLAGS bEPPflags;
#define D12_COMMAND XBYTE[0x7003] //right
#define D12_DATA XBYTE[0x7002]
//test for cpld
//#define D12_COMMAND XBYTE[0x4001]
//#define D12_DATA XBYTE[0x4000]
void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
{
if(bEPPflags.bits.in_isr == 0)
DISABLE;
D12_COMMAND = 0xD0;
if(bEnable)
bAddress |= 0x80;
D12_DATA = bAddress;
if(bEPPflags.bits.in_isr == 0)
ENABLE;
}
void D12_SetEndpointEnable(unsigned char bEnable)
{
if(bEPPflags.bits.in_isr == 0)
DISABLE;
D12_COMMAND = 0xD8;
if(bEnable)
D12_DATA = 1;
else
D12_DATA = 0;
if(bEPPflags.bits.in_isr == 0)
ENABLE;
}
void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
{
if(bEPPflags.bits.in_isr == 0)
DISABLE;
D12_COMMAND = 0xF3;
D12_DATA = bConfig;
D12_DATA = bClkDiv;
if(bEPPflags.bits.in_isr == 0)
ENABLE;
}
void D12_SetDMA(unsigned char bMode)
{
if(bEPPflags.bits.in_isr == 0)
DISABLE;
D12_COMMAND = 0xFB;
D12_DATA = bMode;
if(bEPPflags.bits.in_isr == 0)
ENABLE;
}
unsigned short D12_ReadInterruptRegister(void)
{
unsigned char b1;
unsigned int j;
D12_COMMAND = 0xF4;
b1 = D12_DATA;
j = D12_DATA;
j <<= 8;
j += b1;
return j;
}
unsigned char D12_SelectEndpoint(unsigned char bEndp)
{
unsigned char c;
if(bEPPflags.bits.in_isr == 0)
DISABLE;
D12_COMMAND = bEndp;
c = D12_DATA;
if(bEPPflags.bits.in_isr == 0)
ENABLE;
return c;
}
unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
{
D12_COMMAND = 0x40 + bEndp;
return D12_DATA;
}
/*
unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
{
unsigned char c;
if(bEPPflags.bits.in_isr == 0)
DISABLE;
D12_COMMAND = 0x40 + bEndp;
c = D12_DATA;
if(bEPPflags.bits.in_isr == 0)
ENABLE;
return c;
}
*/
void D12_SetEndpointStatus(unsigned char bEndp, unsigned char bStalled)
{
if(bEPPflags.bits.in_isr == 0)
DISABLE;
D12_COMMAND = 0x40 + bEndp;
D12_DATA = bStalled;
if(bEPPflags.bits.in_isr == 0)
ENABLE;
}
void D12_SendResume(void)
{
D12_COMMAND = 0xF6;
}
unsigned short D12_ReadCurrentFrameNumber(void)
{
unsigned short i,j;
if(bEPPflags.bits.in_isr == 0)
DISABLE;
D12_COMMAND = 0xF5;
i = D12_DATA;
j = D12_DATA;
i += (j<<8);
if(bEPPflags.bits.in_isr == 0)
ENABLE;
return i;
}
/*
unsigned short D12_ReadChipID(void)
{
unsigned short i,j;
if(bEPPflags.bits.in_isr == 0)
DISABLE;
outportb(portbase+D12_COMMAND, 0xFD);
i=inportb(portbase+D12_DATA);
j=inportb(portbase+D12_DATA);
i += (j<<8);
if(bEPPflags.bits.in_isr == 0)
ENABLE;
return i;
}
*/
unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
{
unsigned char i, j;
if(bEPPflags.bits.in_isr == 0)
DISABLE;
D12_COMMAND = endp;
i=D12_DATA;
if((i & D12_FULLEMPTY) == 0) {
if(bEPPflags.bits.in_isr == 0)
ENABLE;
return 0;
}
D12_COMMAND = 0xF0;
j = D12_DATA;
j = D12_DATA;
if(j > len)
j = len;
for(i=0; i<j; i++)
*(buf+i) = D12_DATA;
D12_COMMAND = 0xF2;
if(bEPPflags.bits.in_isr == 0)
ENABLE;
return j;
}
unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
{
unsigned char i;
if(bEPPflags.bits.in_isr == 0)
DISABLE;
D12_COMMAND = endp;
D12_DATA;
D12_COMMAND = 0xF0;
D12_DATA = 0;
D12_DATA = len;
for(i=0; i<len; i++)
D12_DATA = *(buf+i);
D12_COMMAND = 0xFA;
if(bEPPflags.bits.in_isr == 0)
ENABLE;
return len;
}
void D12_AcknowledgeEndpoint(unsigned char endp)
{
D12_COMMAND = endp;
D12_COMMAND = 0xF1;
if(endp == 0)
D12_COMMAND = 0xF2;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -