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

📄 main.c

📁 ARP协议,含ARP
💻 C
字号:
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>

#include "m128.h"


#include "typedef.h"
#include "mcu128.h"
volatile uc rx1_char;
volatile uc event_flag;
volatile uc dm9k_isr;

#include "delay_1ms.c"

#include "timer0.c"
#include "usart1.c"


#include "tick.h"
#include "tick.c"
#include "cfg.h"
#include "cfg.c"
#include "mem.h"
#include "mem.c"
#include "dm9k.h"
#include "eth.h"

#include "intsvr.c"
#include "dm9k_io.c"
#include "arp.h"
#include "arp.c"
#include "eth.c"

#include "dm9k.c"

//DM9000中断引脚
#define DM9000_INT_PIN                  25
#define SECOND_INT_PIN                  9


/*
 *  外部中断
 *  在本系统中,外部中断来自DM9000
 */
void init_ext_intr (void) {
    //DM9000的中断
    init_pin (DM9000_INT_PIN, DIR_INPUT);
    set_pin (DM9000_INT_PIN, 1); //使能上拉电阻

    init_pin (SECOND_INT_PIN, DIR_INPUT);
    set_pin (SECOND_INT_PIN, 1); //使能上拉电阻

    EICRB = 0x80; //中断7: 下降沿触发
    EIMSK = 0x81; //外部中断:INT0
}
/*
 *  扩展存储器接口
 */
void init_ext_memory (void) {

    MCUCR |= _BV (SRE);

    //没有使用等待状态
    //使用全部16位地址线,其中最高两位分别做CS和CMD
    XMCRB = 0x00;
}
/*I/O端口初始化*/
void init_io(void){

//系统端口初始化
    //设置为输入
    DDRA = 0x00;
    DDRB = 0x00;
    DDRC = 0x00;
    DDRD = 0x00;
    DDRE = 0x00;
    DDRF = 0x00;
    DDRG = 0x00;

    //输入,使能上拉电阻
    PORTA = 0xff;
    PORTB = 0xff;
    PORTC = 0xff;
    PORTD = 0xff;
    PORTE = 0xff;
    PORTF = 0xff;
    PORTG = 0xff;	
	
}


void system_initial (void){

    init_io();
	init_timer0();
    init_uart1();
	init_tick();
	init_cfg();
	init_mem();
	
	init_ext_intr();
	init_ext_memory();
	dm9k_init();
	init_arp();
	
	event_flag=0;
   
}

int main (void){
	uc r;
//	uc *p=(uc *)"HelloWorldNiHao";							
	system_initial();
	sei();	

	while(1)
	{
		
		while (0 == event_flag);
		
		cli ();
		r = event_flag;
		event_flag = 0;
		sei ();
		
		if(0 != ( r & INTR_TIMER_10MS ))
		{
			exec_tick();
			
		}	
		if (0 != (r & INTR_UART1_RECV ))
		{					
			if(0x63==rx1_char)
			{
				put_char(0x62);
				uc ui=arp_find_empty_item();
				put_hex(ui);
				
				uc  src_ip_temp[4];
				uc  dst_ip_temp[4];
				cfg_get_src_addr(src_ip_temp);
				cfg_get_dst_addr(dst_ip_temp);
				arp_put_ip(ui,dst_ip_temp);
				arp_send_request(dst_ip_temp,src_ip_temp);
				
			}
			
			if(0x64==rx1_char)
			{
			
				dm9k_read_PAR();
			}
			if(0x61==rx1_char)
			{
				print_arp_items();
			}
		}
		if(0 != (r & INTR_DM9K_EVENT))
		{
			//put_char(0x66);
			//put_char(dm9k_isr);
			dm9k_event();
		}
		
		
		
		
	}
	return 0;
	
}


⌨️ 快捷键说明

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