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

📄 serial_poll.c

📁 s3c2400 ads1.2 usos portting
💻 C
字号:
//=======================================================================================
//
//	SERIAL_POLL.C - UART Polling Routines.
//
//	(C) Copyright 2003-4-20, ARM STUDY GROUP 
//      By Lee Chae-Won (ichijo@hanafos.com ; ichijo99@hanmail.net)
//	http://arm.cim.co.kr/ , http://user.chollian.net/~hebb/
//      
//=======================================================================================

typedef unsigned char   byte;
typedef unsigned short  word;
typedef unsigned int    dword;

#define	UARTClock	75000000

#define	PNone	0x00000000
#define	D8Bit	0x00000003
#define	S1Bit	0x00000000

#define CR	0x0d#define BS	0x08
#define	BAUD	115200 


#include "REG_DEFINE.H"
void ser_init(byte Port)
{
	switch(Port){
		case 0:
			rINTMSK |= (0x1<<23);  // Rx INT. Disable
			rINTMSK |= (0x1<<28);  // Tx INT. Disable
	
			rULCON0 = D8Bit + PNone + S1Bit;
			rUCON0 = 0x00000005; // Tx, Rx Pulse mode, INT. or Polling mode
			rUFCON0 = 0;  // FIFO Disable
			rUMCON0 = 0x1; // ACF Off, RTS: Low (Active)
	
			rUBRDIV0 = (dword) ((UARTClock / (BAUD*16))-1);
			break;
		case 1:
			rINTMSK |= (0x1<<24);  // Rx INT. Disable
			rINTMSK |= (0x1<<29);  // Tx INT. Disable
	
			rULCON1 = D8Bit + PNone + S1Bit;
			rUCON1 = 0x00000005; // Tx, Rx Pulse mode, INT. or Polling mode
			rUFCON1 = 0;  // FIFO Disable
			rUMCON1 = 0x1; // ACF Off, RTS: Low (Active)
	
			rUBRDIV1 = (dword) ((UARTClock / (BAUD*16))-1);
			break;
	}
}
void ser_putch(byte Port, char ch) {
	switch(Port){
		case 0:
			while(!(rUTRSTAT0&0x02));
			rUTXH0 = ch;
			break;
		case 1:
			while(!(rUTRSTAT1&0x02));
			rUTXH1 = ch;
			break;
	}} char ser_getch(byte Port)
{
	char ch;
	
	switch(Port){
		case 0:
			while(!(rUTRSTAT0&0x01));
			ch = rURXH0;
			break;
		case 1:
			while(!(rUTRSTAT1&0x01));
			ch = rURXH1;
			break;
	}
	
	ser_putch(Port, ch);       // Echo!!	return (ch);
}

int asc2int(char ch)			/* Conv. ASCII code into Integer */
{
	if      ((ch>='0') && (ch<='9')) return   (ch-'0');
	else if ((ch>='A') && (ch<='F')) return ( (ch-'A')+10 );
	else if ((ch>='a') && (ch<='f')) return ( (ch-'a')+10 );
	else return -1;
}

int int2asc(int i)			/* Conv. integer into ASCII code */
{
	if ((i >= 0) && (i <= 9)) return (i&0x0f)+'0';
	else if ((i >= 10) && (i <= 15)) return (i&0x0f)+'A';
	else return -1;
}

void puthex1(byte Port, char c)		/* Output 1 nibble HEX code  */
{
        if( c>=10) ser_putch(Port, c+'A'-10);
        else ser_putch(Port, c+'0');
}

void puthex(byte Port, char ch)		/* Out 1 Byte HEX code */
{
        puthex1(Port, (ch>>4)&0x0f);
	puthex1(Port, ch&0x0f);
}

void puthexw(byte Port, unsigned short ch)	/* Output 2 Byte HEX code */
{
        puthex(Port, (ch>>8)&0xff);
        puthex(Port, ch&0xff);
}

int ser_gets(byte Port, char* str)	/* read string */
{
	int i;

	for( i=0; *(str+i) != 0;)
	{
		*(str+i) = ser_getch(Port);	/* read 1 byte... */

		if(*(str+i) == BS)		/* if it is Back space? */
		{
			if( i>0)
			{
				ser_putch(Port, *(str+i)); /* Echo */
				i--;		 /* Decrease */
			}
		}
		else if(*(str+i) == CR)    /* If ENTER? */
		{
			*(str+i) = 0;   /* Insert NULL */
			break;          /* Escape */
		}
		else if(!(((*(str+i)>0) &&(*(str+i)<0x1F))||(*(str+i)==0x7F))){                /* If neither 0~1F nor 7F*/ 	             ser_putch(Port, *(str+i));       /* Echo */ 		                     i++;      /* Increase */		                }
	}   				/* Repeat */
	return( i);                     /* Return No. of characters */
}

void ser_puts(byte Port, char* str)
{
	int i;

	for( i=0; *(str+i) != 0; i++)
	{
		ser_putch(Port, *(str+i));
	}
}

short getdec(byte Port)
{
	short dec;
	dec = asc2int(ser_getch(Port));
	return dec;
}

short getdecw(byte Port)
{
	short high, low;
	short result;
	high = getdec(Port); low = getdec(Port);
	result = 10*high + low;
	return result;
}

void putdec(byte Port, unsigned short ch)
{
	ch = ch % 100;
	puthex1(Port, ch/10);
	puthex1(Port, ch%10);
}

void putdecw(byte Port, unsigned short ch)
{
	ch = ch % 10000;

	putdec(Port, ch/100);
	putdec(Port, ch%100);
}

⌨️ 快捷键说明

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