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

📄 44btest.c

📁 S3C44B0X接8019的源代码
💻 C
字号:
 #include <stdlib.h>
#include <string.h>
#include "..\inc\option.h"
#include "..\inc\44b.h"
#include "..\inc\44blib.h"
#include "..\inc\def.h"
#include "..\inc\cache.h"

#include "rtl8019.h"
#include "rtl8019as.h"
#include "NetProtocol.h"


void InitRTL8019AS();
void AutoTest(void);
void HaltUndef(void);
void HaltSwi(void);
void HaltPabort(void);
void HaltDabort(void);
void Isr_Init(void);
void show(void);
void S3c44b0x_init_for_RTL8019(void);
void EtherUnPack(Frame8019 *Packet);
void PrintProtocolS(Frame8019 *Packet);
WORD MakeArpRequest(BYTE *pDesIP, ARP_PACK *pArpPack);
WORD MakeArpResponse(ARP_PACK *pArpPack);
WORD MakeEtherFrame(BYTE *pDestMacAddr, BYTE *pProtocol, 
					BYTE *pPacketData, WORD lenth, Frame8019 *pFrame);

#define IMGH    240
#define  IMGW    320
#define  IMGSIZE	(IMGH*IMGW)

unsigned char g_BitmapBuff[310000];//309444

BYTE g_Buffer[IMGSIZE];
Frame8019 g_tempPacket;
Frame8019 g_Packet;
/****************************************************************
 *		  S3C44B0X developer's notes		 *  
 ****************************************************************

 1. 99.6.6:KIW: For H/W vectored interrupt test, add the codes in Isr_Init()
 2. 99.8.27:    Stop,SL_IDLE mode is modified.
 3. 99.10.13:   check KS32C41000 date:A937 or after.
 4. 99.10.19:   AM29LV800 flash writing routine is added
 5. 00.4.25:KWT: Modify for S3C44B0X
 ***************************************************************/

void Main(void)
{
    long i, j; 
    unsigned int save_PCONE;
	unsigned char  re = 0;
	unsigned char  reType = 0;
	int	count = 0;
	ARP_PACK	arpPack;
	IP_Header   ipHeader;
	ICMP_Header   icmpHeader;
	UDP_Header 	udpHeader;
	Frame8019   *newPacket;
	BYTE			DesIP_Addr[] = {192, 168, 0, 129};
	BYTE			BroadCastMAC_Addr[] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
	BYTE			Protocol_IP[] = {0x08, 0x00};
	BYTE			Protocol_ARP[] = {0x08, 0x06};
	BYTE				temp[256];
	WORD		len = 0;
	short        sum;
	short          nCount = 0;
char GetImage=1;
    rSYSCFG=CACHECFG;

    //__rt_lib_init(); //for ADS 1.0

for(i = 0; i < IMGSIZE; i++)
	g_Buffer[i] = (BYTE)(255*((i % IMGW)/(float)IMGW));



    Port_Init();
    Isr_Init();

    Uart_Init(0,115200);
    Uart_Select(0);
    Delay(1000);  //calibrate Delay()
    S3c44b0x_init_for_RTL8019();
	InitRTL8019AS();

	DelayMs(100);
//	RegTest();
	
//	len = MakeArpRequest(DesIP_Addr, &arpPack);
//	len = MakeEtherFrame(BroadCastMAC_Addr, Protocol_ARP, (BYTE *)&arpPack, len, &g_Packet);
//	DelayMs(1000);	
//	RTL8019AS_SndPacket(&g_Packet, len);
//Uart_Printf("RTL8019AS_SndPacket\n");

//Uart_Printf("SIZE = %d\n", sizeof(g_Packet)); 

	i = 0;
	while(1)
	{

		reType  = RTL8019AS_RcvPacket(&g_Packet);
		
		switch(reType)
		{
	
				case PROTOCOL_ARP:
				switch (EtherToArp(&g_Packet,&arpPack)) 
				{
					case ARP_REQ:
						len = MakeArpResponse(&arpPack);
						len = MakeEtherFrame((BYTE *)&arpPack.DestMAC_Addr[0], Protocol_ARP, 
											(BYTE *)&arpPack, len, &g_Packet);
						RTL8019AS_SndPacket(&g_Packet, len);
						break;
					case ARP_RESP:
						
						break;
					default:
						break;
				}
	
	//PrintARP(&arpPack);	
						break;
			case PROTOCOL_IP:

				 switch (EtherToIP(&g_Packet,&ipHeader)) {
					case PROTOCOL_IP_ICMP:
							switch (EtherToICMP(&g_Packet,&icmpHeader)) {
								case PROTOCOL_ICMP_REQU:

										len = ipHeader.TotalLength[0]*256+ipHeader.TotalLength[1];
										MakeICMPRespond(&g_Packet, len);

										RTL8019AS_SndPacket(&g_Packet, len+14);

									break;
								case PROTOCOL_ICMP_RESP:
									break;
								default:
									break;

							}

						break;
					case PROTOCOL_IP_TCP:
						break;
					case PROTOCOL_IP_UDP:


if(g_Packet.Packet[28] == 'C' && g_Packet.Packet[20] == 0x03 && g_Packet.Packet[21] == 0xe8)
{

 					

							//DelayMs(5000);
							for(i = 0; i < IMGH; i++)
							{
								for(j = 0; j < IMGW; j++)
								{
									sum = g_BitmapBuff[2*i*2*IMGW + 2*j] + g_BitmapBuff[2*i*2*IMGW + 2*j+1] +
										 g_BitmapBuff[(2*i+1)*2*IMGW + 2*j] + g_BitmapBuff[(2*i+1)*2*IMGW + 2*j+1];
									g_Buffer[i*IMGW+j] = sum/4;
								}
							}

							for(i = 0; i < IMGH/4; i++)
							{
							SendData(&g_Packet, &g_tempPacket, (BYTE *)&g_Buffer[4*IMGW*i], 4*IMGW, i);
								RTL8019AS_SndPacket(&g_tempPacket, 4*IMGW+5+28+14);

							}
}

						break;
						
					default:
						break;
				}

				break;

			default:
				break;


		}

	}
	


}



void Isr_Init(void)
{
    pISR_UNDEF=(unsigned)HaltUndef;
    pISR_SWI  =(unsigned)HaltSwi;
    pISR_PABORT=(unsigned)HaltPabort;
    pISR_DABORT=(unsigned)HaltDabort;

    //rINTCON=0x1;	  // Vectored Int. IRQ enable,FIQ disable    
    rINTCON=0x5;	  // Non-vectored,IRQ enable,FIQ disable    

    rINTMOD=0x0;	  // All=IRQ mode
    rINTMSK=BIT_GLOBAL;	  // All interrupt is masked.
}




void HaltUndef(void)
{
    Uart_Printf("Undefined instruction exception!!!\n");
    while(1);
}

void HaltSwi(void)
{
    Uart_Printf("SWI exception!!!\n");
    while(1);
}

void HaltPabort(void)
{
    Uart_Printf("Pabort exception!!!\n");
    while(1);
}

void HaltDabort(void)
{
    Uart_Printf("Dabort exception!!!\n");
    while(1);
}

void show(void)
{
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -