📄 main.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 + -