📄 pdiusbd12.c
字号:
#include <iom16v.h>
#include <macros.h>
#include "define.h"
#include "initial.h"
#include "pdiusbd12.h"
void Output_D12(uchar Address,uchar Data)
{
PORTD |=(1<<ALE);
DDRC=0xff;
PORTC=Address;
NOP();
PORTD &=~(1<<ALE);
PORTC=Data;
PORTD &=~(1<<D12WR);
NOP();
NOP();
PORTD |=(1<<D12WR);
}
uchar Input_D12(uchar Address)
{
uchar temp;
PORTD |=(1<<ALE);
DDRC=0xff ;
PORTC=Address;
NOP();
PORTD &=~(1<<ALE);
DDRC=0x00;
PORTC=0xff;
PORTD &=~(1<<D12RD);
NOP();
temp=PINC;
PORTD |=(1<<D12RD);
return temp;
}
uint D12_ReadChipID()
{
uint aa,bb;
Output_D12(COMMAND,0xFD);
aa=Input_D12(DATA);
bb=Input_D12(DATA);
aa +=(bb<<8);
return aa;
}
void D12_SetAddress(uchar address,uchar enable)
{
if(bEPPflags.bits.in_isr == 0)
DISABLE;
if(enable)
address |=0x80;
Output_D12(COMMAND,0xD0);
Output_D12(DATA,address);
if(bEPPflags.bits.in_isr == 0)
//EA=1;
ENABLE;
}
void D12_SetEndpointEnable( uchar aa)
{
if(bEPPflags.bits.in_isr == 0)
//EA=0;
DISABLE;
Output_D12(COMMAND,0xD8);
Output_D12(DATA, aa);
if(bEPPflags.bits.in_isr == 0)
//EA=1;
ENABLE;
}
void D12_SetMode(uchar configuration,uchar division)
{
Output_D12(COMMAND,0xF3);
Output_D12(DATA,configuration);
Output_D12(DATA,division);
}
void D12_SetDMA()
{
Output_D12(COMMAND,0xFB);
Output_D12(DATA,0);
}
uint D12_ReadInterruptRegister()
{
uint a,b;
Output_D12(COMMAND,0xF4);
a=Input_D12(DATA);
b=Input_D12(DATA);
a+=(b<<8);
return a;
}
uchar D12_SelectEndpoint(uchar num_point)
{
uchar temp;
if(bEPPflags.bits.in_isr == 0)
//EA=0;
DISABLE;
Output_D12(COMMAND,num_point);
temp=Input_D12(DATA);
if(bEPPflags.bits.in_isr == 0)
//EA=1;
ENABLE;
return temp;
}
uchar D12_ReadLastStatus(uchar num_point)
{
uchar aa,temp;
aa=0x40+num_point;
Output_D12(COMMAND,aa);
temp=Input_D12(DATA);
return temp;
}
void D12_SetEndpointStatus(uchar endpoint,uchar status)
{
if(bEPPflags.bits.in_isr == 0)
//EA=0;
DISABLE;
Output_D12(COMMAND,0x40+endpoint);
Output_D12(DATA,status);
if(bEPPflags.bits.in_isr == 0)
//EA=1;
ENABLE;
}
void D12_Ackonwledge(uchar Endp)
{
Output_D12(COMMAND,Endp);
Output_D12(COMMAND,0xf1);
if(Endp==0)
Output_D12(COMMAND,0xf2);
}
uchar D12_WriteEndpoint(uchar Endp,uchar leng,uchar volatile * buff)
{
uchar temp;
if(bEPPflags.bits.in_isr == 0)
DISABLE; //EA=0;
Output_D12(COMMAND, Endp);
temp=Input_D12(DATA);
Output_D12(COMMAND,0xF0);
Output_D12(DATA,0);
Output_D12(DATA,leng);
for(temp=0;temp<leng;temp++)
{
Output_D12(DATA,*(buff+temp));
}
Output_D12(COMMAND,0xFA);
if(bEPPflags.bits.in_isr == 0)
ENABLE; //EA=1;
return leng;
}
uchar const_WriteEndpoint(uchar Endp,uchar leng,const uchar * buff)
{
uchar temp;
if(bEPPflags.bits.in_isr == 0)
DISABLE; //EA=0;
Output_D12(COMMAND, Endp);
temp=Input_D12(DATA);
Output_D12(COMMAND,0xF0);
Output_D12(DATA,0);
Output_D12(DATA,leng);
for(temp=0;temp<leng;temp++)
{
Output_D12(DATA,*(buff+temp));
}
Output_D12(COMMAND,0xFA);
if(bEPPflags.bits.in_isr == 0)
ENABLE; //EA=1;
return leng;
}
uchar D12_ReadEndpoint(uchar Endp,uchar leng,uchar volatile *buff)
{
uchar temp,i,j;
if(bEPPflags.bits.in_isr == 0)
DISABLE; //EA=0;
temp=D12_SelectEndpoint(Endp);
if(temp & 0x01)
{
Output_D12(COMMAND,0xf0);
j=Input_D12(DATA);
j=Input_D12(DATA);
if(j>leng)
j=leng;
for(i=0;i<j;i++)
*(buff+i)=Input_D12(DATA);
Output_D12(COMMAND,0xf2);
return j;
}
else
{ if(bEPPflags.bits.in_isr == 0)
DISABLE; //EA=0;
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -