www.pudn.com > mp3decoder.rar > CONSOLE.C
#include "..\inc\board.h" #include "..\inc\console.h" #include#define CONSOLE_OUTPUT 1 #define NULL 0 int console_init(int mclk,int baud) { outl(0x00, rUFCON0); outl(0x00, rUFCON1); outl(0x00, rUMCON0); outl(0x00, rUMCON0); outl(0x03, rULCON0); outl(0x245, rUCON0); // outl(( (int)(mclk/16./baud + 0.5) -1 ), rUBRDIV0); outl(32,rUBRDIV0); return 0; } int console_write(int ch) { #ifdef CONSOLE_OUTPUT while (!(inl(rUTRSTAT0) & 0x04)); outl(ch, rUTXH0); #endif return 0; } int console_read(void) { while (!(inl(rUTRSTAT0) & 0x01)); return (int)inl(rURXH0); } int kbhit(void) { return ((inl(rUTRSTAT0) & 0x01)); } int getch(void) { return console_read(); } int putch(int ch) { return console_write(ch); } int puts(const unsigned char *s) { while (*s != 0) { putch(*s++); } return 0; } char *gets(char *s, int n) { char *p; int ch; p = s; while (1) { ch = getch(); if (ch == KEY_ENTER) break; if (ch == KEY_BACKSPACE && p > s) { p--; putch(ch); } else if ((p - s) < (n - 1)) { *p++ = (char)ch; putch(ch); } } *p = '\0'; return s; } unsigned long getul(unsigned long def) { char buf[9]; gets(buf, 9); if (buf[0] == '\0') return def; return strtoul(buf, NULL, 16); } void print_0nx(char ch2, unsigned long l) { unsigned char ch; int i; ch2 = ch2 - '0'; for (i = ch2 - 1; i >= 0; i--) { ch = (l >> (i * 4)) & 0x0f; if (ch < 10) putch(ch + '0'); else putch(ch - 10 + 'a'); } } void print_d(unsigned long l) { unsigned long prod, t; int flag = 0; unsigned char ch; int i, j; for (i = 15; i >= 0; i--) { prod = 1; t = l; for (j = 0; j < i; j++) { prod = prod * 10; t = t / 10; } ch = t; l -= prod * t; if (ch == 0 && flag == 0) continue; if (ch < 10) putch(ch + '0'); else putch('?'); flag = 1; } } int printf(const char *s, ...) { va_list ap; unsigned long arg; const unsigned char *str; char ch1, ch2, ch3; va_start(ap, s); while (*s != 0) { if (*s == '%') { s++; ch1 = *s++; if (ch1 == 's') { str = va_arg(ap, unsigned char *); puts(str); } else if (ch1 == 'd') { arg = va_arg(ap, unsigned long); print_d(arg); } else { ch2 = *s++; ch3 = *s++; arg = va_arg(ap, unsigned long); print_0nx(ch2, arg); } } else putch(*s++); } va_end(ap); return 0; } int get_select(char min, char max) { int select; int ch; while (1) { ch = getch(); if (ch >= min && ch <= max) { putch(ch); select = ch - min + 1; break; } if (ch == KEY_ESC) { select = -1; break; } } return select; }