📄 c51_atf_transmit.c
字号:
//这属于"写响应“
void asypacket_analyze_send(receive_packet,n)
unsigned long receive_packet[];
unsigned char n;
{
unsigned char data i,attack;
unsigned long data result,value;
struct package data *hpsb_packet=NULL;
unsigned char data tcode;
unsigned int data datalength;
unsigned int data addr;
TH0=0xFB;
TL0=0xFB;
datalength = (receive_packet[4]>>16)&0xffff;
if(datalength==0)
return;
tcode = (receive_packet[0]>>4)&0x0f;
switch(tcode)
{
case TCODE_READQ_REQ:...;break;
case TCODE_READB_REQ:
{
addr=(((receive_packet[2]&0xffff)<<32)|receive_packet[3])-csr_space_base;
if(addr&0x3)
{
hpsb_packet->rcode=Resp_Type_Error;//事务代码出错
return;
}
datalength +=((datalength%4)?4-(datalength%4):0);
hpsb_packet->tlable=(receive_packet[1]>>10)&0x3f;
hpsb_packet->spd=SPD_400;
hpsb_packet->rt=RT_x;
hpsb_packet->tcode=TCODE_READB_RESPONSE;
hpsb_packet->destination_id=(receive_packet[2]>>16)&0xff;
hpsb_packet->rcode=Resp_Complete;
receive_packet[0]=((hpsb_packet->spd)<<16|(hpsb_packet->tlabel)<<10
|(hpsb_packet->rt)<<8|(hpsb_packet->tcode)<<4);
receive_packet[1]=((hpsb_packet->destination_id)<<16|(hpsb_packet->rcode)<<12);
receive_packet[2]=0;
receive_packet[3]=(datalength<<16);
if(addr==CONFIG_ROM)
for(i=0;i<=n-4;i++)
{
wr_fpga(out_ram+i,receive_packet[i]);
}
P3_1=0;
for(;;)
{
TR0=1;
if(P3_0==0)
{
for(i=0;i<=1000;i++)
{
result= ReadReg_1394(reg_interrupt);
if(result&0x0400 0000)
value=ReadReg_1394(node_addr);
atack=(value>>4)&0x1f;
switch(atack)
{
case(ACK_COMPLETE):break;
case(ACK_PENDING):break;
case(ACK_DATA_ERROR):...;
case(ACK_TYPE_ERROR):...;
case(ACK_OVERTIME):...;
case(ACK_ERROR):...;
}
}
}
else if(TF0==1)break;
}
P3_1=1;
wr_fpga(addr_base|reg_interrupt,result^0x0400 0000);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -