BlinkenArea - GitList
Repositories
Blog
Wiki
mips_sys
Code
Commits
Branches
Tags
Search
Tree:
d05a5bb
Branches
Tags
master
mips_sys
fw
main.c
nicer output on LCD: decimal numbers
Stefan Schuermans
commited
d05a5bb
at 2012-03-24 23:13:53
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 uint2digits(unsigned int uint, unsigned int cnt, char digits[]) { while (cnt > 0) { --cnt; digits[cnt] = '0' + uint % 10; uint /= 10; } } void switches(void) { char cnt_digits[4]; 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' : ' '); uint2digits(switches_get_rot_cnt(), 4, cnt_digits); lcd_chr(1, 12, cnt_digits[0]); lcd_chr(1, 13, cnt_digits[1]); lcd_chr(1, 14, cnt_digits[2]); lcd_chr(1, 15, cnt_digits[3]); } 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; char digits[2]; while (eth_rx(&vptr, &sz)) ethernet_recv(vptr, sz); uint2digits(eth_rx_get_cnt(), 2, digits);; lcd_chr(0, 11, digits[0]); lcd_chr(0, 12, digits[1]); uint2digits(eth_tx_get_cnt(), 2, digits);; lcd_chr(0, 14, digits[0]); lcd_chr(0, 15, digits[1]); } 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; }