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

📄 main_t8019.c

📁 44B0+8019系统
💻 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 + -