📄 44blib.c
字号:
{
char *string2=string;
char c;
while((c=Uart_Getch())!='\r') //输入字符不等于回车
{
if(c=='\b') //输入字符等于退格
{
if( (int)string2 < (int)string )
{
Uart_Printf("\b \b");
string--;
}
}
else
{
*string++=c;
Uart_SendByte(c);
}
}
*string='\0'; //内容为空
Uart_SendByte('\n'); //换行
}
/*
*************************************************************************************************************
- 函数名称 : Uart_GetIntNum(void)
- 函数说明 : 得到串口初始号
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
int Uart_GetIntNum(void)
{
char str[30];
char *string=str;
int base=10;
int minus=0;
int lastIndex;
int result=0;
int i;
Uart_GetString(string);
if(string[0]=='-')
{
minus=1;
string++;
}
if(string[0]=='0' && (string[1]=='x' || string[1]=='X'))
{
base=16;
string+=2;
}
lastIndex=strlen(string)-1;
if( string[lastIndex]=='h' || string[lastIndex]=='H' )
{
base=16;
string[lastIndex]=0;
lastIndex--;
}
if(base==10)
{
result=atoi(string);
result=minus ? (-1*result):result;
}
else
{
for(i=0;i<=lastIndex;i++)
{
if(isalpha(string[i]))
{
if(isupper(string[i]))
result=(result<<4)+string[i]-'A'+10;
else
result=(result<<4)+string[i]-'a'+10;
}
else
{
result=(result<<4)+string[i]-'0';
}
}
result=minus ? (-1*result):result;
}
return result;
}
/*
*************************************************************************************************************
- 函数名称 : Uart_SendByte(int data)
- 函数说明 : 串口发送字节
- 输入参数 : data
- 输出参数 : 无
*************************************************************************************************************
*/
void Uart_SendByte(int data)
{
if(whichUart==0)
{
if(data=='\n')
{
while(!(rUTRSTAT0 & 0x2));
Delay(10); //because the slow response of hyper_terminal
WrUTXH0('\r');
}
while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
Delay(5);
WrUTXH0(data);
}
else
{
if(data=='\n')
{
while(!(rUTRSTAT1 & 0x2));
Delay(10); //because the slow response of hyper_terminal
rUTXH1='\r';
}
while(!(rUTRSTAT1 & 0x2)); //Wait until THR is empty.
Delay(5);
rUTXH1=data;
}
}
/*
*************************************************************************************************************
- 函数名称 : Uart_SendString(char *pt)
- 函数说明 : 串口发送字符串
- 输入参数 : pt
- 输出参数 : 无
*************************************************************************************************************
*/
void Uart_SendString(char *pt)
{
while(*pt)
Uart_SendByte(*pt++);
}
/*
*************************************************************************************************************
- 函数名称 : Uart_Printf(char *fmt,...)
- 函数说明 : 串口打印字符
- 输入参数 : fmt ...
- 输出参数 : 无
*************************************************************************************************************
*/
//if you don't use vsprintf(), the code size is reduced very much.
void Uart_Printf(char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
Uart_SendString(string);
va_end(ap);
}
/*
*************************************************************************************************************
- 函数名称 : Timer_Start
- 函数说明 : 启动定时器
- 输入参数 : divider
- 输出参数 : 无
*************************************************************************************************************
*/
void Timer_Start(int divider) //0:16us,1:32us 2:64us 3:128us
{
rWTCON=((MCLK/1000000-1)<<8)|(divider<<3);
rWTDAT=0xffff;
rWTCNT=0xffff;
// 1/16/(65+1),nRESET & interrupt disable
rWTCON=((MCLK/1000000-1)<<8)|(divider<<3)|(1<<5);
}
/*
*************************************************************************************************************
- 函数名称 : Timer_Stop
- 函数说明 : 停止定时器
- 输入参数 : 无
- 输出参数 : (0xffff-rWTCNT)
*************************************************************************************************************
*/
int Timer_Stop(void)
{
// int i;
rWTCON=((MCLK/1000000-1)<<8);
return (0xffff-rWTCNT);
}
/*
*************************************************************************************************************
- 函数名称 : ChangePllValue(int mdiv,int pdiv,int sdiv)
- 函数说明 : 改变PLL的值
- 输入参数 : int mdiv,int pdiv,int sdiv
- 输出参数 : 无
*************************************************************************************************************
*/
void ChangePllValue(int mdiv,int pdiv,int sdiv)
{
int i = 1;
rPLLCON = (mdiv << 12) | (pdiv << 4) | sdiv;
while(sdiv--)
i *= 2;
MCLK = (EXT_OSC_CLK*(mdiv+8))/((pdiv+2)*i);
}
/*
*************************************************************************************************************
- 函数名称 : malloc
- 函数说明 : 动态分配函数
- 输入参数 : nbyte
- 输出参数 : 无
*************************************************************************************************************
*/
void * malloc(unsigned nbyte)
/*Very simple; Use malloc() & free() like Stack*/
//void *mallocPt=Image$$RW$$Limit;
{
void *returnPt=mallocPt;
mallocPt= (int *)mallocPt+nbyte/4+((nbyte%4)>0); //to align 4byte
if( (int)mallocPt > HEAPEND )
{
mallocPt=returnPt;
return NULL;
}
return returnPt;
}
/*
*************************************************************************************************************
- 函数名称 : free
- 函数说明 : 动态释放函数
- 输入参数 : *pt
- 输出参数 : 无
*************************************************************************************************************
*/
void free(void *pt)
{
mallocPt=pt;
}
/*
*************************************************************************************************************
- 函数名称 : Cache_Flush(void)
- 函数说明 : 高速缓存清空
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void Cache_Flush(void)
{
int i,saveSyscfg;
saveSyscfg=rSYSCFG;
rSYSCFG=SYSCFG_0KB;
for(i=0x10004000;i<0x10004800;i+=16)
{
*((int *)i)=0x0;
}
rSYSCFG=saveSyscfg;
}
/*
*************************************************************************************************************
*- 结束文件 -*
*************************************************************************************************************
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -