?? console.c
字號(hào):
#include <stdarg.h>
#include"EX3.h"
#include "44b0x.h"
#include "DataType.h"
#include "console.h"
extern unsigned int MCLK;
struct UartBuffS bufin0,bufin1;
struct UartBuffS *alloc_ubs(struct UartBuffS *ubs)
{
ubs->data=ubs->buf;
ubs->read=ubs->buf;
ubs->truelen=0;
return ubs;
}
static void Delay(int time)
{
while(time--);
}
void UartInit(int ch, int baud)
{
U8 a;
if(!ch)
{
rUFCON0 = 0x0; //rUFCON0 = (6)|1; //禁止使用FIFO
rUMCON0 = 0x0; //禁止Modem
rULCON0 = 0x3; //正常無(wú)奇偶校驗(yàn),一個(gè)停止位,8個(gè)數(shù)據(jù)位
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.0*baud)+0.5)-1;
a = rURXH0;
}
else
{
rUFCON1 = 0x0; //禁止使用FIFO
rUMCON1 = 0x0; //禁止使用FIFO
rULCON1 = 0x3; //正常無(wú)奇偶校驗(yàn),一個(gè)停止位,8個(gè)數(shù)據(jù)位
rUCON1 = 0x45;
//rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling
//baud *= 16;
rUBRDIV1 = (int)(MCLK/(16.0*baud)+0.5)-1;
a = rURXH1;
}
}
void UartSend(int ch, char data)
{
if(!ch)
{
if(data=='\n')
{
while(!(rUTRSTAT0&0x2));
//改動(dòng)延時(shí)時(shí)間1--10
Delay(10); //由于超級(jí)終端反應(yīng)較慢,有一個(gè)微小延遲
WrUTXH0('\r');
}
while(!(rUTRSTAT0&0x2)); //等待知道THR變空
//改動(dòng)延時(shí)時(shí)間1--10
Delay(10);
rUTXH0 = data;
}
else
{
if(data=='\n')
{
while(!(rUTRSTAT1&0x2));
//改動(dòng)延時(shí)時(shí)間1--10
Delay(10); //由于超級(jí)終端反應(yīng)較慢,有一個(gè)微小延遲
rUTXH1 = '\r';
}
while(!(rUTRSTAT1&0x2)); //等待知道THR變空
//改動(dòng)延時(shí)時(shí)間1--10
Delay(10);
rUTXH1 = data;
}
}
int UartReceive(int ch)
{
if(!ch)
{
while(!(rUTRSTAT0&0x1)); //等待直到接受到一個(gè)數(shù)據(jù)
return rURXH0;
}
else
{
while(!(rUTRSTAT1&0x1)); //等待直到接受到一個(gè)數(shù)據(jù)
return rURXH1;
}
}
void UartSend1(int ch, char data)
{
if(!ch)
{
while(!(rUTRSTAT0&0x2)); //等待知道THR變空 //改動(dòng)延時(shí)時(shí)間1--10
Delay(10);
rUTXH0 = data;
}
else
{
while(!(rUTRSTAT1&0x2)); //等待知道THR變空
Delay(10);
rUTXH1 = data;
}
}
int SendUart(WORD UartNo,BYTE * cbuff,WORD len)
{
int i;
int nbytes=0;
for(i=0;i<len;i++)
{
UartSend1(UartNo, *cbuff++);
nbytes++;
}
return(nbytes);
}
int RecvUart(WORD UartNo,BYTE * cbuff,WORD len)
{
int i;
int nbytes=0;
struct UartBuffS *ubs;
(!UartNo)?(ubs=&bufin0):(ubs=&bufin1);
for(i=0;i<len&&ubs->truelen>0;i++)
{
*cbuff++=*(ubs->read++);
nbytes++;
ubs->truelen--;
if(ubs->read-ubs->buf==MAX_UART_BUFF_LEN)
ubs->read=ubs->buf;
}
return (nbytes);
}
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; //如果沒(méi)有收到字符就返回0
}
else
{
if(rUTRSTAT1&0x1) //如果收到字符就返回該字符
return rURXH1;
else
return -1; //如果沒(méi)有收到字符就返回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);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -