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

📄 console.c

📁 一个基于ARM平台的触摸屏程序。
💻 C
字号:
#include <stdarg.h>
#include "system.h"
#include "types.h"#include "console.h"//#include "utils.h"

int console_init(void){	HAL_WRITE_UINT32(URT_SERIAL1_BASE+URT_BAUD_LO,BAUD_RATE_38400_LO);
	HAL_WRITE_UINT32(URT_SERIAL1_BASE+URT_BAUD_HI,BAUD_RATE_38400_HI);
	HAL_WRITE_UINT32(URT_SERIAL1_BASE+URT_STAT,0x0);	HAL_WRITE_UINT32(URT_SERIAL1_BASE+URT_INT_MODE,0x88);
	HAL_WRITE_UINT32(URT_SERIAL1_BASE+URT_INT_ENA,0x0);	return 0;}

int console_write(char c){	unsigned long status;
	while(1){
		HAL_READ_UINT32(URT_SERIAL1_BASE + URT_STAT,status);
		if(status & XMIT_FIFO_FULL)
			continue;
		else
			break;
	}
	
	HAL_WRITE_UINT8(URT_SERIAL1_BASE,c);
	}

char  console_read(void){	char c;
	unsigned long status;
	while(1){
		HAL_READ_UINT32(URT_SERIAL1_BASE + URT_STAT,status);
		if( (status & RECV_AVAIL_MASK) == 0)
			break;
		else	
			continue;
	}
	
	HAL_READ_UINT8(URT_SERIAL1_BASE,c);
	return c;}

char getch(void){	return console_read();}int putch(char ch){	return console_write(ch);}int puts(const char *s){	while (*s != 0) {		putch(*s++);	}	return 0;}void gets (char * buf, int n){		int i;		for(i = 0;i< n; i ++)        {            buf[i] = (char )getch();            if (buf[i] == CR){                //putch(LF);                putch(CR);                break;            }            else            {            	 if(buf[i] == KEY_BACKSPACE)            	 {            	 	if (i >= 1)            	 		buf[i-1] = 0; 			else 			{ 				buf[i]= 0; 				i --;            	 		continue;            	 	}            	 	            	 	putch(KEY_BACKSPACE);            	 	putch(' ');            	 	putch(KEY_BACKSPACE);            	 	i -= 2;            	 	continue;	            	 }            	else                	putch(buf[i]);                           }        }                if (i == n)        {        	//putch(LF);        	putch(CR);	        }                buf[i] = '\0';        return;}/*void gets(char *s, int n){	char *p;	int ch;	int i ;	p = s;		for(i = 0 ;; i ++) {			ch = getch();		if (ch == KEY_ENTER)		{			putch(LF);                	putch(CR);                	break;		}		if (ch == KEY_BACKSPACE) 		{			if (i == 0 )				continue;			else			{				putch(ch);				i--;			}			if(p > s)			{				p--;				putch(ch);				continue;			}		}				if ((p - s) < (n - 1))		{			i++;			*p++ = (char)ch;			putch(ch);		}	}		*p = '\0';	return ;}
*/
unsigned long getul(unsigned long def){    char buf[11];    char *p = buf;    long hex;
    int  i;
    int  n;    gets(buf,11);    if (buf[0] == '\0')	return def;	    buf[10] = '\0';		    if ((buf[0]== '0' ) && ((buf[1]== 'x')||(buf[1] == 'X')) )    	p = &buf[2];    //printf("%s \r\n",buf);    //printf("%s\r\n",p);
    return strtoul(p, 0, 16);}



void print_0nx(char ch2, unsigned long l)
{	unsigned char ch;
	int i;
	ch2 = ch2 - '0';	for (i = ch2 - 1; i >= 0; i--) {		ch = (l >> (i * 4)) & 0x0f;		if (ch < 10)			putch(ch + '0');		else			putch(ch - 10 + 'a');	}}

void print_d(unsigned long l)
{
	
	unsigned long  t;
	unsigned char ch;
	int i, j, k ;
	char buf[8];
	
	memset(buf,'0',8);
	t = l;
	k = 7;

	for(;;)
	{
		if (t > 9)
		{
			i = t % 10;
		}else
			i = t;
	
		if (i < 10){
			buf[k--] = i + '0';	
		}	

		if (t < 9)
			break;
		t /= 10;
	}

	j = 0;
	for(i =0 ;i < 8 ; i ++)
	{
		if(buf[i] != '0')
			j = 1;
		if (j)
			putch(buf[i]);
	}
	

/*	unsigned long prod, t;	int flag = 0;
	unsigned char ch;
	int i, j;
	for (i = 15; i >= 0; i--) {		prod = 1;		t = l;		for (j = 0; j < i; j++) {			prod = prod * 10;			t = t / 10;		}
		ch = t;		l -= prod * t;		if (ch == 0 && flag == 0)			continue;		if (ch < 10)
			putch(ch + '0');		else			putch('?');		flag = 1;	}*/
 }

void print_x(unsigned long l)
{	unsigned long  t;	unsigned char ch;
	int i, j, k ;	char buf[8];		memset(buf,'0',8);	t = l;
	k = 7;

	for(;;)
	{
		if (t > 15)
		{
			i = t % 16;
		}else
			i = t;
	
		if (i < 10){
			buf[k--] = i + '0';	
		}	
		else
		    if(i < 16)
			{
		       buf[k--] = i -10 +'a';
			}

		if (t < 15)
			break;
		t >>= 4;
	}

	for(i =0 ;i < 8 ; i ++)
		putch(buf[i]);}

int printf(const char *s, ...)
{
	va_list ap;
	unsigned long arg;	const char *str;
	char ch1, ch2, ch3;

	va_start(ap, s);
	while (*s != 0) {
		if (*s == '%') {
			s++;
			ch1 = *s++;
			if (ch1 == 's') {
				str = va_arg(ap, unsigned char *);
				puts(str);
			}else if (ch1 == 'd') {				arg = va_arg(ap, unsigned long);				print_d(arg);
			}			 else if (ch1 == 'x') {				arg = va_arg(ap, unsigned long);				print_x(arg);
			}else {
				ch2 = *s++;
				ch3 = *s++;
				arg = va_arg(ap, unsigned long);
				print_0nx(ch2, arg);
			}
		} else
			putch(*s++);
	}
	va_end(ap);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -