?? kd12ci.c
字號:
#include "kd12ci.h"
#include "kmain.h"
#include "khal.h"
extern EPPFLAGS bEPPflags;
//---------------------------------
void outportcmd(unsigned char value)
{
/*
// unsigned char xdata *ext_address;
// ext_address=D12_command;
// *ext_address = val; // write cycle
*((INT8 xdata *)D12_command) = val;
*/
*((unsigned char xdata *)D12_COMMAND)=value;
}
void outportdata(unsigned char value)
{
*((unsigned char xdata *)D12_DATA)=value;
}
unsigned char inportb(void)
{
/*
// unsigned char c;
// unsigned char xdata *ext_address;
// ext_address=(D12_data&0xff00);
// c = *ext_address ; // read cycle
// return c;
return *((INT8 xdata *)D12_data);
*/
return *((unsigned xdata *)D12_DATA);
}
//--------------------------
void D12_SetAddressEnable(unsigned char bAddress, unsigned char bEnable)
{
if(bEPPflags.bits.in_isr == 0)
DISABLE;
outportcmd(0xD0);
if(bEnable)
bAddress |= 0x80;
outportdata(bAddress);
if(bEPPflags.bits.in_isr == 0)
ENABLE;
}
void D12_SetEndpointEnable(unsigned char bEnable)
{
if(bEPPflags.bits.in_isr == 0)
DISABLE;
outportcmd(0xD8);
if(bEnable)
outportdata(1);
else
outportdata(0);
if(bEPPflags.bits.in_isr == 0)
ENABLE;
}
void D12_SetMode(unsigned char bConfig, unsigned char bClkDiv)
{
if(bEPPflags.bits.in_isr == 0)
DISABLE;
outportcmd(0xF3);
outportdata(bConfig);
outportdata(bClkDiv);
if(bEPPflags.bits.in_isr == 0)
ENABLE;
}
void D12_SetDMA(unsigned char bMode)
{
if(bEPPflags.bits.in_isr == 0)
DISABLE;
outportcmd(0xFB);
outportdata(bMode);
if(bEPPflags.bits.in_isr == 0)
ENABLE;
}
/*
unsigned char D12_GetDMA(void)
{
outportcmd(0xFB);
return(inportb());
}
*/
/*
unsigned char D12_ReadEndpointStatus(unsigned char bEndp)
{
unsigned char c;
if(bEPPflags.bits.in_isr == 0)
DISABLE;
outportcmd(0x80 + bEndp);
c = inportb();
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;
outportcmd(0x40 + bEndp);
outportdata(bStalled);
if(bEPPflags.bits.in_isr == 0)
ENABLE;
}
/*
void D12_SendResume(void)
{
outportcmd(0xF6);
}
*/
unsigned char D12_WriteEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
{
unsigned char i;
if(bEPPflags.bits.in_isr == 0)
DISABLE;
//---------------------
outportcmd(endp); //選擇端點
inportb(); //讀入滿/空狀態
outportcmd(0xF0); //寫緩沖區命令
outportdata(0);
outportdata(len);
for(i=0; i<len; i++)
outportdata(*(buf+i));
outportcmd(0xFA); //駛購沖區有效
//--------------------------------
if(bEPPflags.bits.in_isr == 0)
ENABLE;
return len;
}
void D12_AcknowledgeEndpoint(unsigned char endp)
{
outportcmd(endp); //選擇端點
outportcmd(0xF1); //應答設置
if(endp == 0)
outportcmd(0xF2); //緩沖區清零
}
unsigned short D12_ReadInterruptRegister(void)
{
unsigned char b1;
unsigned int j;
//outportb(D12_COMMAND, 0xF4);
outportcmd(0xF4);
b1 = inportb();
j = inportb();
j <<= 8;
j += b1;
return j;
}
unsigned char D12_ReadLastTransactionStatus(unsigned char bEndp)
{
//outportb(D12_COMMAND, 0x40 + bEndp);
outportcmd(0x40 + bEndp);
return inportb();
}
unsigned char D12_ReadEndpoint(unsigned char endp, unsigned char len, unsigned char * buf)
{
unsigned char i, j;
if(bEPPflags.bits.in_isr == 0)
DISABLE;
//--------------------------------
outportcmd(endp); //選擇端點
if((inportb() & D12_FULLEMPTY) == 0) { //如果緩沖區為空,則返回
if(bEPPflags.bits.in_isr == 0)
ENABLE;
return 0;
}
outportcmd(0xF0); //讀緩沖區
j = inportb();
j = inportb();
if(j > len)
j = len;
for(i=0; i<j; i++)
*(buf+i) = inportb();
outportcmd(0xF2); //緩沖區清空
//-------------------------------
if(bEPPflags.bits.in_isr == 0)
ENABLE;
return j;
}
unsigned char D12_SelectEndpoint(unsigned char bEndp)
{
unsigned char c;
if(bEPPflags.bits.in_isr == 0)
DISABLE;
outportcmd(bEndp);
c = inportb();
if(bEPPflags.bits.in_isr == 0)
ENABLE;
return c;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -