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

📄 com.c

📁 本程序在S3C44B0 uClinux的嵌入式GUI
💻 C
字号:
#include "44b0x.h"#include "w83977.h"//extern unsigned int MCLK;#ifndef MCLK#define MCLK 60000000#endifstatic void Delay(int time){	while(time --);}//*****************************************************************************static void Ext_Funct_Reg_W( unsigned char addr, unsigned char data ){	Extend_Index_Reg = addr ;	Extend_Date_Reg = data ;}//*****************************************************************************static unsigned char Ext_Funct_Reg_R( unsigned char addr ){	unsigned char d ;		Extend_Index_Reg = addr ;	d = Extend_Date_Reg ;		return ( d ) ;}/*****************************************************************************	COM ports initilization*****************************************************************************/int COM_Init( int com_port,unsigned int baudrate ) // baudrate,N,8,1{	unsigned char temp;	int divisor;		if((com_port >= 0)&&(com_port)){		switch(com_port){			case 0:				rUFCON0 = 0x0;     //disable FIFO				rUMCON0 = 0x0;     //disable FIFO				rULCON0 = 0x3;     //NO Parity?one stop bit?8bits data				rUCON0 = 0x45;    //TX&RX  used PULSE not LEVEL trigger interrupt  						//rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling				rUBRDIV0 = (int)(MCLK/(16.0*baudrate)+0.5)-1;	   				temp = rURXH0;									break;						case 1:				rUFCON1 = 0x0;     //disable FIFO				rUMCON1 = 0x0;     //disable FIFO				rULCON1 = 0x3;     //NO Parity?one stop bit?8bits data				rUCON1 = 0x45;      				 				//rx=edge,tx=level,disable timeout int.,enable rx error int.,normal,interrupt or polling	    				//baud *= 16;	    				rUBRDIV1 = (int)(MCLK/(16.0*baudrate)+0.5)-1;	    				temp = rURXH1;								break;							case 2:				Extend_Index_Reg = 0x87 ;	//Enter the extended function mode				Extend_Index_Reg = 0x87 ;				Delay(50000);				//Configurate logical device				Ext_Funct_Reg_W( W83977_CR07, 0x02 ) ;		//select logical device 2					Ext_Funct_Reg_W( UARTA_CR30, 0x01 ) ;		//Logical device 2 is active				Ext_Funct_Reg_W( UARTA_CR60, UARTA_BaseH ) ;		//Serial Port 1 I/O base address				Ext_Funct_Reg_W( UARTA_CR61, UARTA_BaseL ) ;				Ext_Funct_Reg_W( UARTA_CR70, 0x04 ) ;		//select IRQ resource for Uart A				Ext_Funct_Reg_W( UARTA_CRf0, 0x00 ) ;		//UART A clock source is 1.8461Mhz (24MHz/13)				Extend_Index_Reg = 0xaa ;		//Exit extended function mode				//////////////////////////////////////////////////////				UARTA_UCR = (3)|(0<<2)|(0<<3)|(0<<4)|(0<<5)|(0<<6)|(1<<7);				//DBLAB=1, 8 data bits, 1 stop bit, no parity								divisor = (int)(115200 / baudrate);				UARTA_BLL = (unsigned char)divisor ;		//BHL_BLL = 1.8461MHz/2/(Baud_Rate * 16)				UARTA_BHL = (unsigned char)(divisor >> 8) ;		//BHL_BLL = 1.8461MHz/2/(Baud_Rate * 16)								UARTA_UCR = (3)|(0<<2)|(0<<3)|(0<<4)|(0<<5)|(0<<6)|(0<<7);				//DBLAB=0, 8 data bits, 1 stop bit, no parity								UARTA_HCR = 0x00 ;		//handshake control				UARTA_ICR = 0x00 ;		//interrupt control									UARTA_UFR = (1)|(1<<1)|(1<<2)|(0<<3)|(2<<6);		//Fifo control								break;							case 3:				Extend_Index_Reg = 0x87 ;	//Enter the extended function mode				Extend_Index_Reg = 0x87 ;				Delay(50000);				//Configurate logical device				Ext_Funct_Reg_W( W83977_CR07, 0x03 ) ;		//select logical device 3								Ext_Funct_Reg_W( UARTB_CR30, 0x01 ) ;		//Logical device 2 is active								Ext_Funct_Reg_W( UARTB_CR60, UARTB_BaseH ) ;	//Serial Port 1 I/O base address				Ext_Funct_Reg_W( UARTB_CR61, UARTB_BaseL ) ;				Ext_Funct_Reg_W( UARTB_CR70, 0x04 ) ;		//select IRQ resource for Uart B				Ext_Funct_Reg_W( UARTB_CRf0, 0x00 ) ;		//UART B clock source is 1.8461Mhz (24MHz/13)				Extend_Index_Reg = 0xaa ;		//Exit extended function mode				//*************************************************************************				UARTB_UCR = (3)|(0<<2)|(0<<3)|(0<<4)|(0<<5)|(0<<6)|(1<<7);				//DBLAB=1, 8 data bits, 1 stop bit, no parity								divisor = (int)(115200 / baudrate);				UARTB_BLL = (unsigned char)divisor ;		//BHL_BLL = 1.8461MHz/2/(Baud_Rate * 16)				UARTB_BHL = (unsigned char)(divisor >> 8) ;		//BHL_BLL = 1.8461MHz/2/(Baud_Rate * 16)								UARTB_UCR = (3)|(0<<2)|(0<<3)|(0<<4)|(0<<5)|(0<<6)|(0<<7);				//DBLAB=0, 8 data bits, 1 stop bit, no parity				UARTB_HCR = 0x00 ;		//handshake control				UARTB_ICR = 0x00 ;		//interrupt control				UARTB_UFR = (1)|(1<<1)|(1<<2)|(0<<3)|(2<<6);		//Fifo control								break;		} //end of switch				Delay(1000);		return 1;	}	else		return 0;}			/*****************************************************************************	COM ports can recieving?*****************************************************************************/int COM_RecvStatus( int com_port ){	int status;		status = 0;		if((com_port >= 0)&&(com_port <= 3)){		switch(com_port){			case 0:				if(rUTRSTAT0&0x1)					status = 1;				break;			case 1:				if(rUTRSTAT1&0x1)					status = 1;				break;			case 2:				if(UARTA_USR&0x01)					status = 1;				break;			case 3:				if(UARTB_USR&0x01)					status = 1;				break;		} //end of switch				return (status);	}	else		return 0;}/*****************************************************************************	COM ports recieving a Byte data*****************************************************************************/int COM_Receive( int com_port,char * pdata ) {	if((com_port >= 0)&&(com_port <= 3)){		switch(com_port){			case 0:				* pdata = (rURXH0);				break;			case 1:				* pdata = (rURXH1);				break;			case 2:				* pdata = (UARTA_RBR);				break;			case 3:				* pdata = (UARTB_RBR);				break;		} //end of switch		return 1;	}	else		return 0;}/*****************************************************************************	COM ports can transmitting?*****************************************************************************/int COM_PortStatus( int com_port ){	int status;		status = 0;		if((com_port >= 0)&&(com_port <= 3)){		switch(com_port){			case 0:				if(rUTRSTAT0&0x2)					status = 1;				break;			case 1:				if(rUTRSTAT1&0x2)					status = 1;				break;			case 2:				if(UARTA_USR&0x40)					status = 1;				break;			case 3:				if(UARTB_USR&0x40)					status = 1;				break;		} //end of switch				return (status);	}	else		return 0;}/*****************************************************************************	transmitting a Byte data to COM port****************************************************************************/int COM_Send( int com_port,unsigned char data ) {	if((com_port >= 0)&&(com_port <= 3)){		switch(com_port){			case 0:				rUTXH0 = data;				break;			case 1:				rUTXH1 = data;				break;			case 2:				UARTA_TBR = data;				break;			case 3:				UARTB_TBR = data;				break;		} //end of switch		return 1;	}	else		return 0;}

⌨️ 快捷键说明

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