⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 platform.c

📁 本代码包含已经移植好的UCGUI代码,控制器是S3C44B0,通过UCGUI,在LCD上图片显示.
💻 C
📖 第 1 页 / 共 2 页
字号:

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 + -