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

📄 main.c

📁 AVR以太网开发板中的几个例子。文件中定义了网卡芯片的IP地址,默认值是192.168.0.99。
💻 C
字号:
//ICC-AVR application builder : 2002-1-1 7:57:28
// Target : M64
// Crystal: 12.000Mhz
#include "main.h"
#include "rtl8019as.h"
#include "arp.h"
#include "ip.h"
#include "icmp.h"
#include "udp.h"


extern unsigned int curr;//网卡RAM页指针
extern unsigned int curr_temp;


//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////

unsigned char rtl_isr_status=0;


void main(void)
{
  unsigned char rtl8019status=0;
  unsigned char udptest1=0;
  unsigned char udptest2=0;
  
  key1_ok=0;
  init_devices();
  LED1_ON;
  udp_init();
  curr=0x4d00;
  curr_temp=0;
  delay_100ms();
  rtl8019_reset();
  rtl8019_init();
  rtl8019_writemynodeid();
  LED1_OFF;
     
  while(1)
  {
   WDR();
   uartsenddata();
   
   if(key1_ok)
   { 
    udpsendbuffer_ex[0]=udptest1;
	udpsendbuffer_ex[1]=udptest2;
    send_ippack(44,0x0800,17);
	key1_ok=0;
	udptest1++;
	udptest2+=2;
   }
   
   //rtl_errchk();
   switch(rtl_isr_status&0x03)
   {//收发数据包事件处理
    case 0x01://接收到有效数据包
	     //isr_ok=0;
	     rtl8019_read(curr,1536);
		 rtl_packhandle();//数据包处理
		 curr_temp=curr;
		 curr=rtl_readcurr();
		 curr<<=8;
	     if(curr<curr_temp){rtl_setcurr();}//如果接收缓冲满,则重置
		 rtl_isr_status=0;
		 break;
	case 0x02://数据包已正确发送
	     //isr_ok=0;
		 rtl_setcurr();
		 rtl_isr_status=0;
	     break;
   }
  }
}


#pragma interrupt_handler uart1_rx_isr:31
void uart1_rx_isr(void)
{
 //uart has received a character in UDR
}


#pragma interrupt_handler int0_isr:2
void int0_isr(void)
{
 rtl_isr_status=rtl_isrstatus();
 //isr_ok=1;
}

#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
 key1_ok=1;//external interupt on INT1
}

//////////////////////////////////////////////////////////////////
void port_init(void)
{
 PORTA = 0x00;
 DDRA  = 0x00;
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0x00;
 PORTD = 0x02;
 DDRD  = 0x30;
 PORTE = 0x00;
 DDRE  = 0x00;
 PORTF = 0x00;
 DDRF  = 0x00;
 PORTG = 0x00;
 DDRG  = 0x08;
}

//call this routine to initialize all peripherals
void init_devices(void)
{
 //stop errant interrupts until set up
 CLI(); //disable all interrupts
 XDIV  = 0x00; //xtal divider
 XMCRA = 0x04; //external memory
 mapping_init();
 port_init();
 uart1_init();
 
 MCUCR = 0x80;
 EICRA = 0x0b; //extended ext ints
 EICRB = 0x00; //extended ext ints
 EIMSK = 0x03;
 TIMSK = 0x00; //timer interrupt sources
 ETIMSK = 0x00; //extended timer interrupt sources
 SEI(); //re-enable interrupts
 //all peripherals are now initialized
}

void delay_100ms(void)
{
 unsigned int i=0;
 unsigned int k=0;
 for(;i<1000;i++)
 {
  for(k=0;k<100;k++)
  {
   WDR();
  }
 }
}


void rtl_errchk(void)
{
   if(rtl_isrstatus()&0x04) //异常状态监视
   { 
      if(rtl_isrstatus()&0x04)
	  {   
	   rtl8019_hotreset();   //网卡芯片热复位
	   rtl8019_init();       //重新初始化
	   curr_temp=0x0000;
      }
   }
}


//UART1 initialize
// desired baud rate:19200
// actual baud rate:19200 (0.0%)
void uart1_init(void)
{
 UCSR1B = 0x00; //disable while setting baud rate
 UCSR1A = 0x00;
 UCSR1C = 0x06;
 UBRR1L = 0x26; //set baud rate lo
 UBRR1H = 0x00; //set baud rate hi
 UCSR1B = 0x98;
}


void uartsenddata(void)
{
   unsigned int udpdata=0;
   
   if(UCSR1A&0x20)
   {
    udpdata=udp_readdata();
   }
   if(udpdata&0x8000)     //有新的UDP数据到达
   {
    UDR1=(udpdata&0x00FF);    ///////////////////////////////////////
	udpdata=0;
   }
}

void led_cont(unsigned char data)
{
 LEDPORT=(data&0x30)|0xCF;
}

////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//define mappings
void mapping_init(void)
{ 
 asm( ".area memory(abs)\n"
      ".org 0x01F0\n" 
	  " _key1_ok:: .blkb 1\n"
	);

 asm( ".area memory(abs)\n"
      ".org 0x01F4\n" 
	  " _udpbuffer_in_rp:: .blkb 2\n"
	);

 asm( ".area memory(abs)\n"
      ".org 0x01F6\n" 
	  " _udpbuffer_in_p:: .blkb 2\n"
	);

 asm( ".area memory(abs)\n"
      ".org 0x01F8\n" 
	  " _udpdatalen:: .blkb 2\n"
	);
 
 asm( ".area memory(abs)\n"
      ".org 0x01FA\n" 
	  " _to_udpport:: .blkb 2\n"
	);
 
 asm( ".area memory(abs)\n"
      ".org 0x01FC\n" 
	  " _curr_temp:: .blkb 2\n"
	);
 asm( ".area memory(abs)\n"
      ".org 0x01FE\n" 
	  " _curr:: .blkb 2\n"
	);

 asm( ".area memory(abs)\n"
      ".org 0x0200\n" 
	  " _ip_id:: .blkb 2\n"
	);
	
 asm(".area memory(abs)\n"
     ".org 0x0202\n"
     " _buffer:: .blkb 1536\n"
    );
	
 asm( ".area memory(abs)\n"
      ".org 0x08FF\n" 
	  " _udpbuffer_in:: .blkb 1024\n"
	);
 asm( ".area memory(abs)\n"
      ".org 0x1100\n" 
	  " _udpbuffer_ex:: .blkb 8192\n"
	);
	
 asm( ".area memory(abs)\n"
      ".org 0x3100\n" 
	  " _udpsendbuffer_ex:: .blkb 2048\n"
	)
	
 asm(".area memory(abs)\n"
     ".org 0xC000\n"
     " _reg_00:: .blkb 1\n"
     ".org 0xC100\n"
     " _reg_01:: .blkb 1\n"
     ".org 0xC200\n"
     " _reg_02:: .blkb 1\n"
     ".org 0xC300\n"
  );
 asm(
      " _reg_03:: .blkb 1\n"
      ".org 0xC400\n"
      " _reg_04:: .blkb 1\n"
      ".org 0xC500\n"
      " _reg_05:: .blkb 1\n"
      ".org 0xC600\n"
      " _reg_06:: .blkb 1\n"
      ".org 0xC700\n"
  );
 asm(
      " _reg_07:: .blkb 1\n"
      ".org 0xC800\n"
      " _reg_08:: .blkb 1\n"
      ".org 0xC900\n"
      " _reg_09:: .blkb 1\n"
      ".org 0xCA00\n"
      " _reg_0a:: .blkb 1\n"
      ".org 0xCB00\n"
  );
 asm(
      " _reg_0b:: .blkb 1\n"
      ".org 0xCC00\n"
      " _reg_0c:: .blkb 1\n"
      ".org 0xCD00\n"
      " _reg_0d:: .blkb 1\n"
      ".org 0xCE00\n"
      " _reg_0e:: .blkb 1\n"
      ".org 0xCF00\n"
  );
 asm(
      " _reg_0f:: .blkb 1\n"
      ".org 0xD000\n"
      " _reg_10:: .blkb 1\n"
      ".org 0xD100\n"
      " _reg_11:: .blkb 1\n"
      ".org 0xD200\n"
      " _reg_12:: .blkb 1\n"
      ".org 0xD300\n"
  );
 asm(
      " _reg_13:: .blkb 1\n"
      ".org 0xD400\n"
      " _reg_14:: .blkb 1\n"
      ".org 0xD500\n"
      " _reg_15:: .blkb 1\n"
      ".org 0xD600\n"
      " _reg_16:: .blkb 1\n"
      ".org 0xD700\n"
  );
 asm(
      " _reg_17:: .blkb 1\n"
      ".org 0xD800\n"
      " _reg_18:: .blkb 1\n"
      ".org 0xD900\n"
      " _reg_19:: .blkb 1\n"
      ".org 0xDA00\n"
      " _reg_1a:: .blkb 1\n"
      ".org 0xDB00\n"
  );
 asm(
      " _reg_1b:: .blkb 1\n"
      ".org 0xDC00\n"
      " _reg_1c:: .blkb 1\n"
      ".org 0xDD00\n"
      " _reg_1d:: .blkb 1\n"
      ".org 0xDE00\n"
      " _reg_1e:: .blkb 1\n"
      ".org 0xDF00\n"
      " _reg_1f:: .blkb 1\n"
      ".text\n"
 );
 	
}

⌨️ 快捷键说明

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