www.pudn.com > S3C44B0X_USB.rar > console.c
#include#include "44b0x.h" #include "DataType.h" #include "console.h" extern unsigned int MCLK; void Delay(U32 time) { while(time--); } /************************* UART ****************************/ void UartInit(int ch, int baud) { U8 a; if(!ch) { rUFCON0 = 0x0; //禁止使用FIFO rUMCON0 = 0x0; //禁止使用FIFO rULCON0 = 0x3; //正常无奇偶校验,一个停止位,8个数据位 rUCON0 = 0x45; //TX RX 都用PULSE非LEVEL中断 //rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling //rUBRDIV0 = (int)(MCLK/16./baud+0.5)-1; rUBRDIV0 = MCLK/(16*baud); a = rURXH0; } else { rUFCON1 = 0x0; //禁止使用FIFO rUMCON1 = 0x0; //禁止使用FIFO rULCON1 = 0x3; //正常无奇偶校验,一个停止位,8个数据位 rUCON1 = 0x45; //rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling //baud *= 16; //rUBRDIV1 = MCLK/baud+((MCLK%baud)>=(baud/2))?1:0; rUBRDIV1 = MCLK/(baud*16); a = rURXH1; } } void UartSend(int ch, char data) { if(!ch) { if(data=='\n') { while(!(rUTRSTAT0&0x2)); //改动延时时间1--10 Delay(10); //由于超级终端反应较慢,有一个微小延迟 WrUTXH0('\r'); } while(!(rUTRSTAT0&0x2)); //等待知道THR变空 //改动延时时间1--10 Delay(10); rUTXH0 = data; } else { if(data=='\n') { while(!(rUTRSTAT1&0x2)); //改动延时时间1--10 Delay(10); //由于超级终端反应较慢,有一个微小延迟 rUTXH1 = '\r'; } while(!(rUTRSTAT1&0x2)); //等待知道THR变空 //改动延时时间1--10 Delay(10); rUTXH1 = data; } } int UartReceive(int ch) { if(!ch) { while(!(rUTRSTAT0&0x1)); //等待直到接受到一个数据 return rURXH0; } else { while(!(rUTRSTAT1&0x1)); //等待直到接受到一个数据 return rURXH1; } } int UartRxStat(int ch) { if(!ch) return (rUTRSTAT0&0x1); else return (rUTRSTAT1&0x1); } int UartGetch(int ch) { if(!ch) { if(rUTRSTAT0&0x1) //如果收到字符就返回该字符 return rURXH0; else return -1; //如果没有收到字符就返回0 } else { if(rUTRSTAT1&0x1) //如果收到字符就返回该字符 return rURXH1; else return -1; //如果没有收到字符就返回0 } } int UartGetkey(int ch) { return ch?rURXH1:rURXH0; } void UartSendString(int ch, char *pt) { while(*pt) UartSend(ch, *pt++); } /************************************************/ void console_init(int baud) { UartInit(CONSOLE_UART, baud); } void putch(char data) { UartSend(CONSOLE_UART, data); } void puts(char *str) { while(*str) UartSend(CONSOLE_UART, *str++); } int getch() { return UartReceive(CONSOLE_UART); } int getkey() { return UartGetkey(CONSOLE_UART); } int kbhit() { return UartRxStat(CONSOLE_UART); } #ifdef __SDT_COMPILER typedef char *__va_list[1]; #else typedef int *__va_list[1]; #endif int vsprintf(char * /*s*/, const char * /*format*/, __va_list /*arg*/); void printf(char *fmt, ...) { va_list ap; char string[256]; va_start(ap, fmt); vsprintf(string, fmt, ap); UartSendString(CONSOLE_UART, string); va_end(ap); }