📄 serial_dolo.c
字号:
//=====================================================================
// 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 + -