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

📄 uartcommon.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 3 页
字号:
//------------------------------------------------------------------------------
//            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 + -