📄 44btest.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 + -