📄 platform.c
字号:
void LedOut(uint8 ch, uint8 flag)
{
char chmod1[]={0x48,0xeb,0x52, 0x62,0xe1,0x64,0x44,0xea,0x40,0x60,0xC0,0x45,0x5c,0x43,0x54,0xd4};
unsigned short value;
volatile short *p = (volatile short *)0x6080000;
if (flag) {
value = chmod1[ch/16];
value <<= 8;
value |= chmod1[ch%16];
} else {
if (ch>99) ch = ch % 100;
value = chmod1[ch/10];
value <<= 8;
value |= chmod1[ch%10];
}
*p = value;
}
void PutChar (uint8 ch,uint8 data)
{
if(ch == 0)
{
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;
}
}
void PutStr(uint8 ch,char *pt)
{
while(*pt) PutChar(ch,*pt++);
}
void FlashNonCache(int n)
{
static uint oldvalue;
if (n) {
oldvalue = rNCACHBE0;
rNCACHBE0 = 0x20000000;
} else {
rNCACHBE0 = oldvalue;
}
}
void OutPut(uint8 ch,char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
PutStr(ch,string);
va_end(ap);
}
void Output(char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
PutStr(UART,string);
va_end(ap);
}
void Uart_Printf(char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
PutStr(UART,string);
va_end(ap);
}
int NetInit()
{
//
// Reset MAC
//
*CPLDREG1 |= 0x20;
Delay(500);
*CPLDREG1 &= 0xDF;
Delay(100);
*(NETBASE+0x1e) = *(NETBASE+0x1e + 0x20);
Delay(100);
// Page 3 Set power status & msic
//
*(NETBASE+0x00) = 0xc1;
*(NETBASE+0x20) = 0xc0;
*(NETBASE+0x04) = 0x80;
*(NETBASE+0x24) = 0x00;
*(NETBASE+0x06) = 0x70;
*(NETBASE+0x26) = 0xFF;
//
// Page 0 Write MAC
//
*(NETBASE+0x00) = 0x21;
*(NETBASE+0x20) = 0;
*(NETBASE+0x02) = 0;
*(NETBASE+0x22) = 0;
*(NETBASE+0x04) = 0;
*(NETBASE+0x24) = 0;
*(NETBASE+0x06) = 0;
*(NETBASE+0x26) = 0;
*(NETBASE+0x08) = 0;
*(NETBASE+0x28) = 0;
*(NETBASE+0x0a) = 0;
*(NETBASE+0x2a) = 0;
*(NETBASE+0x0c) = 0xC4;
*(NETBASE+0x2c) = 0xE0;
*(NETBASE+0x0e) = 0xBC;
*(NETBASE+0x2e) = 0x80;
//
// Page 1 Write MAC
//
*(NETBASE+0x00) = 0x41;
*(NETBASE+0x20) = ' ';
*(NETBASE+0x02) = '4';
*(NETBASE+0x22) = '4';
*(NETBASE+0x04) = 'B';
*(NETBASE+0x24) = '0';
*(NETBASE+0x06) = 'X';
*(NETBASE+0x26) = 0;
*(NETBASE+0x08) = 0;
*(NETBASE+0x28) = 0;
*(NETBASE+0x0a) = 0;
*(NETBASE+0x2a) = 0;
*(NETBASE+0x0c) = 0;
*(NETBASE+0x2c) = 0;
*(NETBASE+0x0e) = 0;
*(NETBASE+0x2e) = 0;
*(NETBASE+0x00) = 0x22;
return 1;
}
void BoardInit (void)
{
LedOut(0x10,1);
rSYSCFG = CACHECFG; //8K cache
rNCACHBE0 = 0xc0002000; //Disable I/O cache
//ZhaoIC
// ChangePllValue(PLLM, PLLP, PLLS);
LedOut(0x11,1);
// PortInit();
LedOut(0x12,1);
// IsrInit();
LedOut(0x13,1);
Uart0Init(0,115200);
Uart1Init(0,115200);
LedOut(0x14,1);
// LcdInit();
LedOut(0x15,1);
// NetInit();
LedOut(0x80,1);
}
void entercritical (void)
{
}
void exitcritical (void)
{
}
int UartGetch(int ch)
{
if(!ch)
{
while(!(rUTRSTAT0&0x1)); //如果收到字符就返回该字符
return rURXH0;
// else
// return -1; //如果没有收到字符就返回0
}
else
{
if(rUTRSTAT1&0x1) //如果收到字符就返回该字符
return rURXH1;
else
return -1; //如果没有收到字符就返回0
}
}
//static int whichUart= 0;
void Uart_SendByte(int data)
{
// if(whichUart==0)
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;
}
}
char Uart_GetKey(void)
{
if(whichUart==0)
{
if(rUTRSTAT0 & 0x1) //Receive data ready
return RdURXH0();
else
return 0;
}
else
{
if(rUTRSTAT1 & 0x1) //Receive data ready
return rURXH1;
else
return 0;
}
}
//***************************************************************************
/****************************************************************************
【功能说明】等待直到串口发送缓冲区内部的数据发送完毕
****************************************************************************/
void Uart_TxEmpty(int ch)
{
if(ch==0)
while(!(rUTRSTAT0 & 0x4)); //wait until tx shifter is empty.
else
while(!(rUTRSTAT1 & 0x4)); //wait until tx shifter is empty.
}
//***************************************************************************
void Uart_GetString(char *string)
{
char *string2=string;
char c;
while((c=UartGetch(0))!='\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');
}
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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -