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

📄 serial_dolo.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 2 页
字号:
//=====================================================================  
//       TEXAS INSTRUMENTS INCORPORATED PROPRIETARY INFORMATION             
// Property of Texas Instruments -- For Unrestricted Internal Use Only   
// Unauthorized reproduction and/or distribution is strictly prohibited  
// This product is protected under copyright law and trade secret law as 
// an unpublished work.Created 1987,(C) Copyright 1997 Texas Instruments.
// All rights reserved.                                                  
//=====================================================================  

#include "serial_dolo.h"
#include "dolo_conf.h"
#include "uartirda.h"
#include "ulpd.h"
#include "global_types.h"

SERIAL_Uart_t UartSerialType ;
BOOL uart48Mhz = False;

//===============================================
char toupper(char car)
{
if ((car >= 'a') && (car <= 'z'))
	{
	return(car - 0x20);
	}
return(car);
}

void SERIAL_wait_empty_transmit(void)
{
if (UartSerialType != SERIAL_UART_IRDA)
	{
	// wait till no more data in fifos
	while (UMOD_IsTransmitAndHoldRegNotEmpty(UartSerialType)) ;
	}
else
	while (UIRD_IsTransmitAndHoldRegNotEmpty()) ;

}	


//===============================================
void SERIAL_sendchar(char car)
{
if (UartSerialType != SERIAL_UART_IRDA)
	{
	// wait for Tx register empty
	while ( UMOD_TxFifoIsFull(UartSerialType) ) ;
	UMOD_Send((UWORD8) car, UartSerialType);
	}
else
	{
	while ( UIRD_TxFifoIsFull() ) ;
	UIRD_Send((UWORD8) car);
	}
}


//===============================================
BOOL SERIAL_keypressed(void)
{
if (UartSerialType != SERIAL_UART_IRDA)
	return(UMOD_RxFifoIsNotEmpty(UartSerialType));
else
	return(UIRD_RxFifoIsNotEmptyUartMode()); 

}


//===============================================
char SERIAL_getchar(void)
{
if (UartSerialType != SERIAL_UART_IRDA)
	{
	// wait for one byte received
	while (!UMOD_RxFifoIsNotEmpty(UartSerialType)) ;
	// read and return byte
	return((char) UMOD_Read(UartSerialType));
	}
else
	{
	while (!UIRD_RxFifoIsNotEmptyUartMode()) ;
	return((char) UIRD_Read());
	}
}


//===============================================
void SERIAL_send(char string[])
{
UWORD32 i;
//volatile  UWORD32 j;
for (i=0 ; i < strlen(string);i++)
	{
	SERIAL_sendchar(string[i]);
	}
}


//===============================================
// convert a string which is representing an hexa number to a UWORD32
UWORD32 hexa_to_int(char * string)
{
UWORD32 base,val,i;
val = 0;
base = 1;
for (i=strlen(string); i>0; i--)
	{
	if ((string[i-1]>='A') && (string[i-1]<='F'))
		val += base * (string[i-1] - 'A' +10);
	if ((string[i-1]>='0') && (string[i-1]<='9'))
		val += base * (string[i-1] - '0');
	base = base *16;
	}
return(val);
}


//===============================================
UWORD32 SERIAL_gethexnum(UWORD8 nb_digit)
{
char st_num[80+1];
char car;
UWORD32 val,i;
car = '\0';
i=0;
while ((car != '\n') && (i != nb_digit))
	{
	car=SERIAL_getchar();
	// backspace 
	if ((car == '\b') && (i>0))
		{
		SERIAL_sendchar(car);
		i--;
		}
	else
		{
		// upcase car
		car= toupper(car);
		if (((car >='0') && (car <= '9')) || ((car>='A') && (car<='F')))
			{
			// perform echo 
			SERIAL_sendchar(car);
			st_num[i]=car;
			i++;
			}
		}
	}
// insert terminator at the end of the string
st_num[i]='\0';
// convert hexa string into number
val = hexa_to_int(st_num);
return(val);
}


//===============================================
UWORD32 SERIAL_getnum(UWORD8 nb_digit)
{
char st_num[80+1];
char car;
UWORD32 val,i;
car = '\0';
i=0;
while ((car != '\n') && (i != nb_digit))
	{
	car=SERIAL_getchar();
	if (car == '\b')
		SERIAL_sendchar(car);
	if ((car >='0') && (car <= '9'))
		{
		SERIAL_sendchar(car);
		st_num[i]=car;
		i++;
		}
	}
// insert terminator at the end of the string
st_num[i]='\0';
val = atoi(st_num);
return(val);
}


//===============================================
void SERIAL_receive(char * string, const UWORD32 nb_char)
{
UWORD32 i;
i =0;
while (i < nb_char)
   {
	string[i]= SERIAL_getchar();
	i++;
   }//endwhile
string[i] = '\0';
}

void SERIAL_auto_cts_enable()
{
if (UartSerialType != SERIAL_UART_IRDA)
	{
	UMOD_InitEfr(UARTMOD_RX_NO_FLOW,
	            	UARTMOD_TX_NO_FLOW,
	            	UARTMOD_DISABLE_WRITE_IER,
	            	UARTMOD_DISABLE_SPECIAL_CHAR_DETECT,
	            	UARTMOD_DISABLE_AUTO_RTS,
	            	UARTMOD_ENABLE_AUTO_CTS,
	            	UartSerialType);
	}
else
	{
	UIRD_InitEfr(UARTIRDA_RX_NO_FLOW,
	            	UARTIRDA_TX_NO_FLOW,
	            	UARTIRDA_DISABLE_WRITE_IER,
	            	UARTIRDA_DISABLE_SPECIAL_CHAR_DETECT,
	            	UARTIRDA_DISABLE_AUTO_RTS,
	            	UARTIRDA_ENABLE_AUTO_CTS);
	}

}


void SERIAL_change_baud_rate(void)
{
UWORD32	val;
UWORD8 DLL_High ;
UWORD8 DLL_Low ;
UWORD16 BaudRate,Rate_value ;
val = 1;
   while (val!=0)
   {
      SERIAL_send("\n\r");
      SERIAL_send("********************\n\r");
      SERIAL_send("* Select Baud rate *\n\r");
      SERIAL_send("********************\n\r");
      SERIAL_send("\n\r");	
		SERIAL_send("00: return\n\r");
		SERIAL_send("01: 110\n\r");
		SERIAL_send("02: 300\n\r");
		SERIAL_send("03: 600\n\r");
		SERIAL_send("04: 1200\n\r");
		SERIAL_send("05: 2400\n\r");
		SERIAL_send("06: 4800\n\r");
		SERIAL_send("07: 7200\n\r");
		SERIAL_send("08: 9600\n\r");
		SERIAL_send("09: 19200\n\r");
		SERIAL_send("10: 38400\n\r");
		SERIAL_send("11: 57600\n\r");
		SERIAL_send("12: 115200\n\r");
      SERIAL_send("Enter your choice : ");
      val=SERIAL_getnum(2);
      SERIAL_send("\n\r");
      switch (val)
      {
         case 0 : break;
			case 1: BaudRate= UART_BAUD(110);
						break;
			case 2: BaudRate= UART_BAUD(300);
						break;
			case 3: BaudRate= UART_BAUD(600);
						break;
			case 4: BaudRate= UART_BAUD(1200);
						break;
			case 5: BaudRate= UART_BAUD(2400);
						break;
			case 6: BaudRate= UART_BAUD(4800);
						break;
			case 7: BaudRate= UART_BAUD(7200);
						break;
			case 8: BaudRate= UART_BAUD(9600);
						break;
			case 9: BaudRate= UART_BAUD(19200);
						break;
			case 10: BaudRate= UART_BAUD(38400);
						break;
			case 11: BaudRate= UART_BAUD(57600);
						break;
			case 12: BaudRate= UART_BAUD(115200);
						break;
		}

	if (val!=0)
		{
		if (UartSerialType != SERIAL_UART_IRDA)
			{
			//Set the UART Modem latch in 6.5 divisor 
			if (UartSerialType != UART_EVALUATION)
				{
		  		UARTMOD_OSC_REG(UartSerialType)=1;
		  		Rate_value = (UWORD16) BaudRate;
				}
			else
		  		Rate_value = (UWORD16) (BaudRate*6.5);

			if (uart48Mhz)
		  		Rate_value = Rate_value *4;
			// Set DLL and DLH
			DLL_High = (UWORD8) Rate_value >> 8;
			DLL_Low =  (UWORD8) Rate_value & 0xFF;

⌨️ 快捷键说明

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