📄 main_t8019.c
字号:
#include "..\inc\44b.h"
#include "..\44blibs\sysloader.h"
#include "..\44blibs\lcd.h"
#include "..\44blibs\io_port.h"
#include "..\44blibs\intserve.h"
#include "..\44blibs\int_onoff.h"
#include "..\tcpip\Rtl8019.h"
#include "..\tcpip\net.h"
#include "..\tcpip\arp.h"
#include "..\tcpip\ip.h"
#include "..\tcpip\Udp.h"
#define ENABLE_TIMER5() EnableInt()
#define DISABLE_TIMER5() DisableInt()
unsigned int TIME_EVENT = 0;
unsigned int INT_EVENT = 0;
extern unsigned char CONTROL_LED;
extern unsigned char ETH_isTXing;
extern unsigned char ETH_TX_TimeOut;
extern unsigned char udp_data;
INT32U CHX_DAT,CHY_DAT;
INT8U KEY_BUF[15],KEY_COUNT,SEND_EN;
void __irq Int_Net();
void __irq Int_Ext2();
void __irq Int_Ext3();
void __irq Int_Ext4567();
void __irq Int_Timer5();
void KEY();
/***************************************************************/
unsigned char my_hwaddr[6] = {0x00,0x80,0x48,0x12,0x34,0x56};
unsigned char broadcast_hwaddr[6] = {0xFF,0xFF,0xFF,0xFF,0xFF,0xff};
//unsigned int my_ipaddr = 0xC0A80105; //192.168.1.5
unsigned int my_ipaddr = 0xC0A80165;
unsigned int my_subnet = 0xFFFFFF00; //255.255.255.0
//unsigned int gateway_ipaddr = 0x00000000;
unsigned int gateway_ipaddr = 0xC0A80164;
/***************************************************************/
unsigned int MainDC[240][10];
void CPU_Timer5Init()
{
IntServe_Reg((unsigned int)ISR_TIMER5,(unsigned int)Int_Timer5);
//pISR_TIMER5 = (int)TickHandler;
rTCFG0 = (rTCFG0 & 0xFF00FFFF) | 0x00640000; // T5 = MCLK / 100
rTCFG1 = (rTCFG1 & 0x0F0FFFFF) | 0x00000000; // T5 = T5/2
rTCNTB5= 1650;
rTCON = (rTCON & 0x00FFFFFF) | 0x02000000;
rINTMSK = ~( (~rINTMSK) | BIT_TIMER5 );
rTCON = (rTCON & 0x00FFFFFF) | 0x05000000;
}
int Main(int argc, char **argv)
{
int i,j,count = 0;
unsigned char bbq;
unsigned char temp1;
unsigned int ck;
unsigned int TIME_EVENT_Copy;
/*初始化Cache*/
Cache_Init();
/*初始化IO*/
IO_PortInit();
// IO_PortSetLed(LEDOFF);
// IO_PortSetLed(LEDON);
Led_Disp();
/*初始化字库*/
//Sysloader_LoadFont0816(); // 8*16 ASCII 字库
// Sysloader_LoadFont1616(); //16*16 国标字库
/*初始化LCD 256色320*240*/
//Lcd_Init(DC);
//Lcd_Clr(DC,greecolor);
//San_speed (low);
//Disbmp(DC,(unsigned int*)0x90000); // 调入位图
DISABLE_TIMER5();
/*初始化串口*/
ETH_Init();
//Lcd_printf(DC,redcolor,ncolor,"Rlt8019_Init.\n");
/* 外部中断向量*/ //注册中断,打开中断
IntServe_Reg((unsigned int)ISR_EINT1,(unsigned int)Int_Net);
rINTMSK = ~( (~rINTMSK) | BIT_EINT1 );
IntServe_Reg((unsigned int)ISR_EINT2,(unsigned int)Int_Ext2);
rINTMSK = ~( (~rINTMSK) | BIT_EINT2 );
IntServe_Reg((unsigned int)ISR_EINT3,(unsigned int)Int_Ext3);
rINTMSK = ~( (~rINTMSK) | BIT_EINT3 );
IntServe_Reg((unsigned int)ISR_EINT4567,(unsigned int)Int_Ext4567);
rINTMSK = ~( (~rINTMSK) | BIT_EINT4567 );
/*打开中断*/
rINTCON = 0x01;
rINTMSK = ~( (~rINTMSK) | BIT_GLOBAL );//rINTMSK IS 0X7FFFFFF AT RESET TIME
/*系统开始*/
/*
for( i = 0 ; i < 256 ; i++ )
{
Wr24LCxx( 0xA0,i,(unsigned char) i );
}
for( i = 0 ; i < 256 ; i++ )
{
Rd24LCxx( 0xA0 , i , iic_data + i );
Lcd_printf("%c", *(iic_data + i) );
}
*/
ETH_StartSend();
CPU_Timer5Init();
init_arp();
init_tcp();
init_http();
//将arp_rcve 注册到ETH_Arp_Receive函数指针变量。
//将ip_rcve 注册到ETH_Ip_Receive函数指针变量. . . .在..\TCPIP\rtl8019.c中
ETH_Reg_ArpReceive( arp_rcve ); //arp_rcve是函数名在tcpip\arp.c
ETH_Reg_IPReceive( ip_rcve ); //ip_rcve 是函数在名tcpip\ip.c
i = sizeof(IP_HEADER);
//for( ck = 0 ; ck < 200000 ; ck++ ){}
udp_rxlen = 0;
SEND_EN = 0;
//KEY_COUNT = 0;
//VGA_X = 20;
//VGA_Y = 14;
//在Rlt8019_RX()里有统计接收包数ETH_ReceivePackets++;
// Lcd_printf(DC,redcolor,0xff,"接收:%d<=>发送:%d",ETH_ReceivePackets,ETH_SendPackets );
while(i)
{
ETH_Receive(); //以太网接收 在..\TCPIP\rtl8019.c中
// KEY();
if (udp_rxlen > 0)
{
if (udp_rxlen <15)
{udp_rxbuf[udp_rxlen] = 0;}
else
{
udp_rxbuf[15] = 0;
udp_rxbuf[16] = 0;
}
/* VGA_X = 23;
VGA_Y = 11;
Lcd_printf(DC,00,0xff," ");
VGA_X = 23;
VGA_Y = 11;
Lcd_printf2(DC,00,0xff,udp_rxbuf);*/
udp_rxlen = 0;
}
if(SEND_EN == 1)
{
temp1 = KEY_COUNT;
mytt(KEY_BUF,KEY_COUNT);
for( ck = 0 ; ck < 200000 ; ck++ ){}
SEND_EN =0;
KEY_COUNT= temp1;
}
DISABLE_TIMER5();
TIME_EVENT_Copy = TIME_EVENT;
ENABLE_TIMER5();
//if(udp_data == 0x34)
//{
// for( ck = 0 ; ck < 6 ; ck++ ){}
//}
// See if TCP retransmit(重发) timer has expired(到期)
if (TIME_EVENT_Copy & EVENT_TCP_RETRANSMIT) //if TIME_EVENT_COPY的EVENT_TCP_RETRANSMIT位=1,
{
DISABLE_TIMER5();
TIME_EVENT &= (~EVENT_TCP_RETRANSMIT); //清 TIME_EVENT_COPY的EVENT_TCP_RETRANSMIT位为零
ENABLE_TIMER5();
tcp_retransmit(); ////??????????
}
// See if TCP inactivity timer has expired
else if (TIME_EVENT_Copy & EVENT_TCP_INACTIVITY)
{
DISABLE_TIMER5();
TIME_EVENT &= (~EVENT_TCP_INACTIVITY);
ENABLE_TIMER5();
tcp_inactivity();
}
// See if ARP retransmit timer has expired
else if (TIME_EVENT_Copy & EVENT_ARP_RETRANSMIT)
{
DISABLE_TIMER5();
TIME_EVENT &= (~EVENT_ARP_RETRANSMIT);
ENABLE_TIMER5();
arp_retransmit();
}
// See if it is time to age the ARP cache
else if (TIME_EVENT_Copy & EVENT_AGE_ARP_CACHE)
{
DISABLE_TIMER5();
TIME_EVENT &= (~EVENT_AGE_ARP_CACHE);
ENABLE_TIMER5();
age_arp_cache();
}
// See if it is time to read the analog inputs
else if (TIME_EVENT_Copy & EVENT_READ_ANALOG)
{
DISABLE_TIMER5();
TIME_EVENT &= (~EVENT_READ_ANALOG);
ENABLE_TIMER5();
// Read one of the 3 analog inputs each time
//read_analog_inputs();
}
else if( TIME_EVENT_Copy & EVENT_TX_TIMEOUT )
{
DISABLE_TIMER5();
TIME_EVENT &= (~EVENT_TX_TIMEOUT);
ENABLE_TIMER5();
ETH_StartSend();
}
//***************************
if(INT_EVENT & 0x01)
{
DISABLE_TIMER5();
INT_EVENT &= (~0x01);
ENABLE_TIMER5();
/*
VGA_X = 20;
VGA_Y = 14;
//在Rlt8019_RX()里有统计接收包数ETH_ReceivePackets++;
Lcd_printf(DC,redcolor,0xff,"接收:%d<=>发送:%d",ETH_ReceivePackets,ETH_SendPackets );
*/
}
else if(INT_EVENT & 0x02)
{
DISABLE_TIMER5();
INT_EVENT &= (~0x02);
ENABLE_TIMER5();
/* for debug */
// Lcd_printf(DC,redcolor,ncolor,"extint2.\n");
}
else if(INT_EVENT & 0x04)
{
DISABLE_TIMER5();
INT_EVENT &= (~0x04);
ENABLE_TIMER5();
CONTROL_LED = 1;
IO_PortSetLed(LEDON);
}
else if(INT_EVENT & 0x08)
{
DISABLE_TIMER5();
INT_EVENT &= (~0x08);
ENABLE_TIMER5();
CONTROL_LED = 0;
IO_PortSetLed(LEDOFF);
}
}
return 1;
}
void __irq Int_Net()
{
Rlt8019_Rx();
rI_ISPC = BIT_EINT1;
INT_EVENT = INT_EVENT | 0x01;
}
void __irq Int_Ext2()
{
rI_ISPC = BIT_EINT2;
INT_EVENT = INT_EVENT | 0x02;
}
void __irq Int_Ext3()
{
rI_ISPC = BIT_EINT3;
INT_EVENT = INT_EVENT | 0x04;
}
void __irq Int_Ext4567()
{
rEXTINTPND = 0xFF;
rI_ISPC = BIT_EINT4567;
INT_EVENT = INT_EVENT | 0x08;
}
void __irq Int_Timer5()
{
static unsigned short int count1 = 0;
static unsigned short int count2 = 0;
//Lcd_printf("TIMER5 INT. %d\n",count1);
if( ETH_isTXing )
{
ETH_TX_TimeOut++;
if( ETH_TX_TimeOut > 2 )
{
TIME_EVENT |= EVENT_TX_TIMEOUT;
ETH_TX_TimeOut = 0;
ETH_isTXing = 0;
}
}
count1++;
// These events happens every 0.50 seconds, not simultaneously
if (count1 == 25) TIME_EVENT |= EVENT_ARP_RETRANSMIT;
if (count1 == 50) TIME_EVENT |= EVENT_TCP_INACTIVITY;
if (count1 == 75) TIME_EVENT |= EVENT_READ_ANALOG;
if (count1 == 100)
{
count1 = 0;
//TIME_EVENT |= EVENT_TCP_RETRANSMIT;
}
count2++;
if (count2 == 12000)
{
// This happens every 60.025 seconds, not simultaneous
// with above tasks
count2 = 0;
TIME_EVENT |= EVENT_AGE_ARP_CACHE;
}
rI_ISPC = BIT_TIMER5;
}
/*INT32U VGAX_COPY = 23,VGAY_COPY = 7;
void dis_key(char ck)
{
VGA_X = VGAX_COPY;
VGA_Y = VGAY_COPY;
if (VGAX_COPY < 38)
{
Lcd_printf(DC,00,0xff,"%c ",ck);
KEY_BUF[VGAX_COPY - 23] = (INT8U)ck;
KEY_COUNT++;
VGAX_COPY++;
}
}*/
/*
void key_pp()
{
if(CHX_DAT >40 && CHX_DAT <64 && CHY_DAT >134 && CHY_DAT <153) // 1
{dis_key('1');}
else if(CHX_DAT >71 && CHX_DAT <94 && CHY_DAT >134 && CHY_DAT <153) // 2
{dis_key('2');}
else if(CHX_DAT >100 && CHX_DAT <127 && CHY_DAT >134 && CHY_DAT <153) // 3
{dis_key('3');}
else if(CHX_DAT >40 && CHX_DAT <64 && CHY_DAT >105 && CHY_DAT <120) // 4
{dis_key('4');}
else if(CHX_DAT >71 && CHX_DAT <94 && CHY_DAT >105 && CHY_DAT <120) // 5
{dis_key('5');}
else if(CHX_DAT >100 && CHX_DAT <127 && CHY_DAT >105 && CHY_DAT <120) // 6
{dis_key('6');}
else if(CHX_DAT >40 && CHX_DAT <64 && CHY_DAT >75 && CHY_DAT <89) // 7
{dis_key('7');}
else if(CHX_DAT >71 && CHX_DAT <94 && CHY_DAT >75 && CHY_DAT <89) // 8
{dis_key('8');}
else if(CHX_DAT >100 && CHX_DAT <127 && CHY_DAT >75 && CHY_DAT <89) // 9
{dis_key('9');}
else if(CHX_DAT >71 && CHX_DAT <94 && CHY_DAT >45 && CHY_DAT <65) // 0
{dis_key('0');}
else if(CHX_DAT >40 && CHX_DAT <64 && CHY_DAT >45 && CHY_DAT <65) // CLR
{
VGA_X = 23;
VGA_Y = 7;
Lcd_printf(DC,00,0xff," ");
VGAX_COPY = 23;
KEY_COUNT = 0;
}
else if(CHX_DAT >100 && CHX_DAT <127 && CHY_DAT >45 && CHY_DAT <65) // OK
{
SEND_EN = 1;
}
}
*/
INT8U ad_run(INT8U AD_CH);
/*INT32U Enkey;
void KEY()
{
INT32U CHX_BUF,CHY_BUF;
INT32U k;
CHX_BUF = ad_run(0x0dD);
if(CHX_BUF >15)
{
CHY_BUF = ad_run(0x09D);
for (k=0; k<20000; k++){} //延时
CHX_DAT = ad_run(0x0dD);
CHY_DAT = ad_run(0x09D);
if(((CHX_BUF>>4) == (CHX_DAT>>4)) && ((CHY_BUF>>4) == (CHY_DAT>>4)) && Enkey <4)
{
Enkey = 8;
key_pp();
}
}
else
{
Enkey = 0;
}
}
*/
INT8U ad_run(INT8U AD_CH)
{
INT32U AD_DAT;
INT32U k,i,TM;
rPDATF = ~( (~rPDATF) | 1<<8 ); // CLK =0
for(i=0; i<8; i++)
{
if(AD_CH>>7 == 1)
{rPDATF = rPDATF | 1<<5;} // DIN =1
else{rPDATF = ~( (~rPDATF) | 1<<5 );} // DIN =0
rPDATF = ~( (~rPDATF) | 1<<8 ); // CLK =0
for (k=0; k<4; k++){}
rPDATF = rPDATF | 1<<8; // CLK =1
AD_CH = AD_CH <<1;
}
rPDATF = ~( (~rPDATF) | 1<<5 ); // DIN =0
for (k=0; k<2000; k++){} //延时
AD_DAT = 0;
rPDATF = ~( (~rPDATF) | 1<<8 ); // CLK =0
for(i=0; i<16; i++)
{
rPDATF = rPDATF | 1<<8; // CLK =1
for (k=0; k<4; k++){}
AD_DAT = AD_DAT & 0x0ffff00;
rPDATF = ~( (~rPDATF) | 1<<8 ); // CLK =0
TM = rPDATF;
AD_DAT = AD_DAT | (TM & 0x0ff);
AD_DAT = AD_DAT <<1;
}
return (INT8U)(AD_DAT>>16);
//for (k=0; k<40000; k++){}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -