📄 uartcommon.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.
//
// Filename : uartmoden_a9.c
// Description : Body file for the UART_MODEM MODEM module
// Project : Import form Samson to Perseus
// Author : rJULLIEN@tif.ti.com JULLIEN.Richard
// adapted by freygagne@tif.ti.com Francois Reygagne
// adapted by fhugueni@ti.com Francois Huguenin
// LIMITATIONS
// Some few registers have some fields with some undefined values
// such as:
// To access them without violation, we must use the files force.do
// which makes VHDL forcing some values to each undefined fields
//------------------------------------------------------------------------------
#include "uartcommon.h"
void UMOD_InitFcr(UARTMOD_FifoEnable_t EnFifo ,
UARTMOD_RxFifoClear_t ClRxFifo,
UARTMOD_TxFifoClear_t ClTxFifo,
UARTMOD_DmaMode_t DmaMode,
UARTMOD_TxFifoTrigger_t TxnbFifo,
UARTMOD_RxFifoTrigger_t RxnbFifo,
UARTMOD_UartType_t UartType)
{
// Local variable
UWORD8 efrtemp,mdr1temp,lcrtemp,dlltemp,dlhtemp;
volatile UWORD8 i;
// Read MDR1(Mode Definition Register 1) to save value
mdr1temp =UARTMOD_MDR1_REG(UartType);
// Read LCR (Line Control Register) to save value
lcrtemp= UMOD_SetBfToLcr(UartType);
//Store current value EFR register
efrtemp= UARTMOD_EFR_REG(UartType);
//Set bit EFR[4]=1
UARTMOD_EFR_REG(UartType)=(efrtemp | 0x10);
// Set MODE_SELECT bit in reset mode
UARTMOD_MDR1_REG(UartType) |= 0x07;
dlltemp= UARTMOD_DLL_REG(UartType);/* Save value to DLL register */
dlhtemp= UARTMOD_DLH_REG(UartType);/* Save value to DLH register */
UARTMOD_DLL_REG(UartType) &= 0x00; /* Set DLL register to zero*/
UARTMOD_DLH_REG(UartType) &= 0x00; /*Set DLH register to zero */
// Wait 18 clock cycles
// delay();
for (i=0;i<10; i++);
UMOD_ClearLcr7(UartType);
// Program FCR register
UARTMOD_FCR_REG(UartType) = (EnFifo |
ClRxFifo << 1 |
ClTxFifo << 2 |
DmaMode << 3 |
TxnbFifo << 4 |
RxnbFifo << 6);
// restore values to DLH,DLL,LCR,MDR1,EFR registers
UMOD_SetBfToLcr(UartType);
UARTMOD_EFR_REG(UartType)=efrtemp;
UARTMOD_DLH_REG(UartType)=dlhtemp;
UARTMOD_DLL_REG(UartType)=dlltemp;
UARTMOD_LCR_REG(UartType)=lcrtemp;
UARTMOD_MDR1_REG(UartType)=mdr1temp;
}
//-----------------------------------------------------------------
// UMOD_InitLcr
//-----------------------------------------------------------------
UWORD8 UMOD_InitLcr(const UARTMOD_CharLength_t CharLength,
const UARTMOD_NbStop_t nbStop,
const UARTMOD_ParityEnable_t ParityEnable,
const UARTMOD_ParityType_t ParityType,
const UARTMOD_BreakEnable_t BreakEnable,
const UARTMOD_DivisorEnable_t DivisorEnable,
UARTMOD_UartType_t UartType)
{
UWORD8 lcrmodem;
UARTMOD_LCR_REG(UartType) = ( CharLength | nbStop << 2 |
ParityEnable << 3 | ParityType << 4 |
BreakEnable << 6 | DivisorEnable << 7 );
UARTMOD_LCR_REG(UartType)&=0xDF;
lcrmodem = UARTMOD_LCR_REG(UartType);
return lcrmodem;
}
//--------------------------------------------------------------------
// UMOD_SetBfToLcr
//--------------------------------------------------------------------
UWORD8 UMOD_SetBfToLcr(UARTMOD_UartType_t UartType)
{
UWORD8 LCR_Storedvalue = UARTMOD_LCR_REG(UartType)&0xDF;
UARTMOD_LCR_REG(UartType) = 0xBF;
return LCR_Storedvalue;
}
//--------------------------------------------------------------------
// UMOD_CheckLcr7Is0
//--------------------------------------------------------------------
void UMOD_CheckLcr7Is0(UARTMOD_UartType_t UartType)
{
/*
if(((UARTMOD_LCR_REG(UartType))&0x80)!=0)
{
RES_Set(SET_UART_ERROR(UartType,LCR_IS_NOT_WELL_DEFINED));
UARTMOD_LCR_REG(UartType) &= 0x7F;
}
*/
}
//--------------------------------------------------------------------
// UMOD_ClearLcr7
//--------------------------------------------------------------------
UWORD8 UMOD_ClearLcr7(UARTMOD_UartType_t UartType)
{
UWORD8 oldlcr;
//Store LCR and set LCR[7]=0
oldlcr = UARTMOD_LCR_REG(UartType);
UARTMOD_LCR_REG(UartType) &= 0x7F;
return oldlcr;
}
//--------------------------------------------------------------------
// CheckEFR4IsSet
//--------------------------------------------------------------------
void UMOD_CheckEfr4IsSet(UARTMOD_UartType_t UartType)
{
/*
if((UARTMOD_EFR_REG(UartType)&0x10)==0)
{
RES_Set(SET_UART_ERROR(UartType,EFR_IS_NOT_WELL_DEFINED));
UARTMOD_EFR_REG(UartType)|=0x10;
}
*/
}
//--------------------------------------------------------------------
// UMOD_SetEfr4
//--------------------------------------------------------------------
UWORD8 UMOD_SetEfr4(UARTMOD_UartType_t UartType)
{
UWORD8 efr4, efrold, lcrold;
//To access EFR
lcrold=UMOD_SetBfToLcr(UartType);
//Store old value EFR register & Set bit EFR[4]
efrold= UARTMOD_EFR_REG(UartType);
efr4=efrold | 0x10;
UARTMOD_EFR_REG(UartType) = efr4;
//Restore LCR
UARTMOD_LCR_REG(UartType)=lcrold;
return efrold;
}
//--------------------------------------------------------------------
// UMOD_SetEfr4
//--------------------------------------------------------------------
UWORD8 UMOD_ClearEfr4(UARTMOD_UartType_t UartType)
{
UWORD8 efr4, efrold, lcrold;
//To access EFR
lcrold=UMOD_SetBfToLcr(UartType);
//Store old value EFR register & Set bit EFR[4]
efrold= UARTMOD_EFR_REG(UartType);
efr4=efrold & 0xEF;
UARTMOD_EFR_REG(UartType) = efr4;
//Restore LCR
UARTMOD_LCR_REG(UartType)=lcrold;
return efrold;
}
//--------------------------------------------------------------------
// UMOD_RestoreEfr
//--------------------------------------------------------------------
void UMOD_RestoreEfr(const UWORD8 value,UARTMOD_UartType_t UartType)
{
UWORD8 lcrold;
//To access EFR
lcrold=UMOD_SetBfToLcr(UartType);
//Restore EFR value
UARTMOD_EFR_REG(UartType) = value;
//Restore LCR
UARTMOD_LCR_REG(UartType)=lcrold;
}
//--------------------------------------------------------------------
// UMOD_SetMcr6
//--------------------------------------------------------------------
UWORD8 UMOD_SetMcr6(UARTMOD_UartType_t UartType)
{
UWORD8 mcr6, mcrold, efrold, lcrold;
//Set registers access
efrold = UMOD_SetEfr4(UartType);
lcrold = UMOD_ClearLcr7(UartType);
//Set bit MCR[6] =1
mcrold = UARTMOD_MCR_REG(UartType);
mcr6 = mcrold | 0x40;
UARTMOD_MCR_REG(UartType) = mcr6;
//Restore registers access
UMOD_RestoreEfr(efrold,UartType);
UARTMOD_LCR_REG(UartType)=lcrold;
return mcrold;
}
//--------------------------------------------------------------------
// UMOD_SetMcr6
//--------------------------------------------------------------------
UWORD8 UMOD_ClearMcr6(UARTMOD_UartType_t UartType)
{
UWORD8 mcr6, mcrold, efrold, lcrold;
//Set registers access
efrold = UMOD_SetEfr4(UartType);
lcrold = UMOD_ClearLcr7(UartType);
//Set bit MCR[6] =1
mcrold = UARTMOD_MCR_REG(UartType);
mcr6 = mcrold & 0xBF;
UARTMOD_MCR_REG(UartType) = mcr6;
//Restore registers access
UMOD_RestoreEfr(efrold,UartType);
UARTMOD_LCR_REG(UartType)=lcrold;
return mcrold;
}
//--------------------------------------------------------------------
// UMOD_RestoreMcr
//--------------------------------------------------------------------
void UMOD_RestoreMcr(const UWORD8 value,UARTMOD_UartType_t UartType)
{
UWORD8 lcrold,efrold;
//To access MCR
efrold = UMOD_SetEfr4(UartType);
lcrold = UMOD_ClearLcr7(UartType);
//Restore MCR value
UARTMOD_MCR_REG(UartType) = value;
//Restore registers access
UMOD_RestoreEfr(efrold,UartType);
UARTMOD_LCR_REG(UartType)=lcrold;
}
//---------------------------------------------------------------------------
// UMOD_InitMcr:Initialise UART_MODEM_MCR ( MODEM Control Register)
//---------------------------------------------------------------------------
void UMOD_InitMcr (const UARTMOD_Dcd_t Dcd,
const UARTMOD_Rts_t Rts,
const UARTMOD_LoopBackEnable_t LoopbackEnable,
const UARTMOD_Xon_t Xon,
const UARTMOD_TcrTlr_t TcrTlr,
const UARTMOD_ClkSel_t ClkSel,
UARTMOD_UartType_t UartType)
{
UWORD8 efr4old, lcrold;
//Set registers access
efr4old = UMOD_SetEfr4(UartType);
lcrold = UMOD_ClearLcr7(UartType);
UARTMOD_MCR_REG(UartType) = ( Dcd |
Rts << 1 |
LoopbackEnable << 4 |
Xon << 5 |
TcrTlr << 6 |
ClkSel << 7);
//Restore registers access
UMOD_RestoreEfr(efr4old,UartType);
UARTMOD_LCR_REG(UartType)=lcrold;
}
//-------------------------------------
// UMOD_IerMaskAllIt *******
//-------------------------------------
void UMOD_IerMaskAllIt(UARTMOD_UartType_t UartType)
{
UWORD8 efrold, lcrold;
//Set registers access
efrold = UMOD_SetEfr4(UartType);
lcrold = UMOD_ClearLcr7(UartType);
//Set registers access
// UMOD_CheckEfr4IsSet(UartType);
// UMOD_CheckLcr7Is0(UartType);
UARTMOD_IER_REG(UartType) = 0x00;
//Restore registers access
UMOD_RestoreEfr(efrold,UartType);
UARTMOD_LCR_REG(UartType)=lcrold;
}
//-----------------------------------------
// UMOD_InitIer
//-----------------------------------------
UWORD8 UMOD_InitIer(const UARTMOD_RhrItToggle_t RhrIt,
const UARTMOD_ThrItToggle_t ThrIt,
const UARTMOD_LineStsItToggle_t ReceiverLineStatusIt,
const UARTMOD_ModemStsItToggle_t ModemStatusIt,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -