⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51_atf_transmit.c

📁 关于1394包发送的C代码
💻 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 + -