📄 main.c
字号:
#include "ntp.h"#include "serial.h"#include "sys.h"#include "proc_tsk3000.h"#include "mac.h"#include "mac_low.h"#include "ip.h"#include "dhcp.h"#define INIT_INTERVAL 20 //Interval before starting ethernet modulevolatile Uint8 x = 0;volatile Uint16 cnt1 = 0;volatile Uint8 init_counter = INIT_INTERVAL;volatile Uint8 dhcp_getip_flag = 0;extern volatile Uint16 dhcp_timer;extern Uint8 flags[];extern Uint32 rxcounter;extern Uint32 txcounter;extern Uint8 rxbdindex;extern Uint8 txbdindex;extern Uint8 rxbdindex_rd;extern Uint16 crc_counter;extern ARP_TABLE arptable;extern IP_TABLE iptable;extern IP_SETTINGS ipsettings;/*extern ARPFRAME arp_frame;extern ICMPHEADER icmp_header;extern IPHEADER ip_header; */void interrupt_init(void){ tsk3000_disable_interrupts(); tsk3000_set_vectored_interrupts (1); tsk3000_set_interrupt_mode (0x2); tsk3000_clear_interrupt_edge_flags (0x2); tsk3000_set_enabled_interrupts (0x3); //Setup interval timer //Disable timer tsk3000_set_status_reg(tsk3000_get_status_reg() & ~TSK3000_Status_IntervalTimerEnable); //Reset timer tsk3000_reset_interval_timer(); //Set timer register tsk3000_set_interval_timer(0xc350); //Enable timer tsk3000_set_status_reg(tsk3000_get_status_reg() | TSK3000_Status_IntervalTimerEnable); tsk3000_enable_interrupts();}void mac_handler(){ volatile Uint32 *wordptr; //tsk3000_disable_interrupts(); //x ^= 0x44; //LEDS ^= 0x80; flags[rxbdindex] |= NOOP_RDY; //Increment rxbdindex - will point to next free slot after incrementing rxbdindex++; if (rxbdindex == RXBDCOUNT) { rxbdindex=0; } //tsk3000_enable_interrupts();}void __interrupt( 1 ) mac_isr(void){ tsk3000_clear_interrupt_edge_flags (tsk3000_get_pending_interrupts() | 0x2); //Check if MAC fired interrupt mac_clr_rxint(); mac_handler();}void __interrupt( 0 ) timer_isr(void){ //tsk3000_clear_interrupt_edge_flags (tsk3000_get_pending_interrupts() | 0x1); //Reset interrupt //Timer interrupt cnt1++; if (cnt1 == 1000) { //LEDS ^= 1; dhcp_timer--; if (dhcp_timer == 0) { dhcp_timer = DHCP_REFRESH_INTERVAL; //Grab DHCP IP //dhcp_getip(); dhcp_getip_flag = 1; } cnt1 = 0; } tsk3000_reset_interval_timer();}void main(void){ Uint16 x; Uint16 intbuf[50]; Uint16 tmpint, *intptr; volatile Uint8 tmpchar,*charptr; Uint32 *wordptr,word; BD_TYPE *bdptr; LEDS = 1; interrupt_init(); //Init serial ports dbg_init(); dbg(0xeeef); mac_init(); while (1) { if (flags[rxbdindex_rd]) { rxcounter++; mac_process(rxbdindex_rd); //completed processing, reset bd mac_clr_rxbd(rxbdindex_rd); flags[rxbdindex_rd]=0; rxbdindex_rd++; if (rxbdindex_rd == RXBDCOUNT) { rxbdindex_rd = 0; //Reset the WR bit //mac_setwr(RXBDCOUNT-1); } } //Check if DHCP update requried if (dhcp_getip_flag) { dhcp_getip(); dhcp_getip_flag = 0; } //dbg_char(LEDS); //LEDS = tmpchar; if (DBG_RXI) { dbg(0xffff); DBG_SCON &= ~1; switch (DBG_SBUF) { case 'a': dbg_string((Uint16 *) &iptable,sizeof(IP_TABLE)/2); break; case 'b': dbg_string((Uint16 *) &ipsettings,sizeof(IP_SETTINGS)/2); break; case 'c': dbg_char(rxbdindex); dbg_char(rxbdindex_rd); dbg(crc_counter); dbg_string((Uint16 *) &rxcounter,2); dbg_string((Uint16 *) &txcounter,2); break; case 'd': dhcp_getip(); //tsk3000_disable_interrupts(); break; case 'e': dbg_string((Uint16 *) EMAC_TX_PTR,200); break; case 'f': dbg_string((Uint16 *) &arptable,sizeof(ARP_TABLE)/2); break; case 'g': wordptr = (Uint32 *) EMAC_RXBD_PTR; for (x=0;x<RXBDCOUNT;x++,wordptr++) { word = *wordptr; dbg_string((Uint16 *) &(word),2); wordptr++; word = *wordptr; dbg_string((Uint16 *) &(word),2); } break; case 'h': for (x=0;x<RXBDCOUNT;x++) dbg_char(flags[x]); break; case 'i': ntp_get_time(); break; case 'j': dbg(dhcp_timer); break; default: break; } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -