BlinkenArea - GitList
Repositories
Blog
Wiki
mips_sys
Code
Commits
Branches
Tags
Search
Tree:
e5fcec6
Branches
Tags
master
mips_sys
fw
main.c
improve 200ms tick and task processing, get rid of UART output of received ethernet frames
Stefan Schuermans
commited
e5fcec6
at 2012-03-24 19:05:42
main.c
Blame
History
Raw
#include "arp.h" #include "cyc_cnt.h" #include "eth.h" #include "ip.h" #include "lcd.h" #include "leds.h" #include "switches.h" #include "uart.h" #include "udp.h" unsigned char leds_val = 0x88; void switches(void) { lcd_chr(1, 0, switches_get_state(sw_0) ? '0' : ' '); lcd_chr(1, 1, switches_get_state(sw_1) ? '1' : ' '); lcd_chr(1, 2, switches_get_state(sw_2) ? '2' : ' '); lcd_chr(1, 3, switches_get_state(sw_3) ? '3' : ' '); lcd_chr(1, 4, switches_get_state(sw_east) ? 'E' : ' '); lcd_chr(1, 5, switches_get_state(sw_north) ? 'N' : ' '); lcd_chr(1, 6, switches_get_state(sw_south) ? 'S' : ' '); lcd_chr(1, 7, switches_get_state(sw_west) ? 'W' : ' '); lcd_chr(1, 8, switches_get_state(sw_center) ? 'C' : ' '); lcd_chr(1, 9, switches_get_state(sw_rot_a) ? 'a' : ' '); lcd_chr(1, 10, switches_get_state(sw_rot_b) ? 'b' : ' '); unsigned int cnt = switches_get_rot_cnt(); lcd_chr(1, 12, '0' + (cnt >> 9 & 0x7)); lcd_chr(1, 13, '0' + (cnt >> 6 & 0x7)); lcd_chr(1, 14, '0' + (cnt >> 3 & 0x7)); lcd_chr(1, 15, '0' + (cnt & 0x7)); } void uart(void) { unsigned short chr; while (uart_can_rx()) { chr = uart_rx(); if (!uart_is_err(chr)) uart_tx(chr); } } void eth_task(void) { void *vptr; unsigned int sz, i; while (eth_rx(&vptr, &sz)) ethernet_recv(vptr, sz); i = eth_rx_get_cnt(); lcd_chr(0, 11, '0' + (i >> 3 & 0x7)); lcd_chr(0, 12, '0' + (i & 0x7)); i = eth_tx_get_cnt(); lcd_chr(0, 14, '0' + (i >> 3 & 0x7)); lcd_chr(0, 15, '0' + (i & 0x7)); } void tasks(void) { switches(); uart(); eth_task(); } void leds_tick200(void) { leds_val = leds_val << 1 | leds_val >> 7; leds_set_state(leds_val); } void tick200(void) { leds_tick200(); arp_tick200(); ip_tick200(); udp_tick200(); } int main() { unsigned int start_cyc; leds_set_state(0x01); eth_mac_init(); eth_rx_init(); eth_tx_init(); leds_set_state(0x02); lcd_init(); lcd_str(0, "MIPS I"); lcd_str(1, ""); leds_set_state(0x04); uart_cfg_scale(62); /* 115200 */ uart_cfg_bits(8); uart_cfg_stop(1); uart_tx('M'); uart_tx('I'); uart_tx('P'); uart_tx('S'); uart_tx(' '); uart_tx('I'); uart_tx('\r'); uart_tx('\n'); leds_set_state(0x08); arp_init(); ip_init(); leds_set_state(0x10); while (1) { start_cyc = cyc_cnt_read(); while (cyc_cnt_read() - start_cyc < 200 * CYC_CNT_MS) tasks(); tick200(); } return 0; }