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

📄 uartmodem.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
📖 第 1 页 / 共 3 页
字号:
}

//--------------------------------------------------------------------
// 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 efr4old, 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 mcr6old, 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,
                       const UARTMOD_SleepModeToggle_t  SleepMode,
                       const UARTMOD_XoffItToggle_t     XoffIt,
                       const UARTMOD_RtsItToggle_t      RtsIt,
                       const UARTMOD_CtsItToggle_t      CtsIt,
                       UARTMOD_UartType_t               UartType)
{
UWORD8 efrold, lcrold, iermodem;
  //Set registers access
efrold = UMOD_SetEfr4(UartType);
lcrold = UMOD_ClearLcr7(UartType);


  UARTMOD_IER_REG(UartType) = ( RhrIt                     |
                      ThrIt                << 1 |
                      ReceiverLineStatusIt << 2 |
                      ModemStatusIt        << 3 |
	    SleepMode            << 4 |
                      XoffIt               << 5 |
                      RtsIt                << 6 |
                      CtsIt                << 7);
 iermodem = UARTMOD_IER_REG(UartType);

//Restore registers access
UMOD_RestoreEfr(efrold,UartType);
UARTMOD_LCR_REG(UartType)=lcrold;

 return iermodem;
}


//-----------------------------------------
//         UMOD_ModifyIer
//-----------------------------------------
UWORD8 UMOD_ModifyIer(const UARTMOD_RhrItToggle_t      RhrIt,
                         const UARTMOD_ThrItToggle_t      ThrIt,
                         const UARTMOD_LineStsItToggle_t  ReceiverLineStatusIt,
                         const UARTMOD_ModemStsItToggle_t ModemStatusIt,
                         const UARTMOD_SleepModeToggle_t  SleepMode,
                         const UARTMOD_XoffItToggle_t     XoffIt,
                         const UARTMOD_RtsItToggle_t      RtsIt,
                         const UARTMOD_CtsItToggle_t      CtsIt,
                         UARTMOD_UartType_t               UartType)
{
  UWORD8 iermodem;
  //Set registers access
  UMOD_CheckLcr7Is0(UartType);

  UARTMOD_IER_REG(UartType) = ( RhrIt                     |
                      ThrIt                << 1 |
                      ReceiverLineStatusIt << 2 |
                      ModemStatusIt        << 3 |
	    SleepMode            << 4 |
                      XoffIt               << 5 |
                      RtsIt                << 6 |
                      CtsIt                << 7);
 iermodem = UARTMOD_IER_REG(UartType);


 return iermodem;
}


//------------------------------------------------
//         UMOD_InitEfr
//------------------------------------------------
void UMOD_InitEfr( const UARTMOD_RxSwflowCtr_t       RxSwFlowCtrol,
                      const UARTMOD_TxSwflowCtr_t       TxSwFlowCtrol,
                      const UARTMOD_EnhancedEnable_t    EnhEnable,
                      const UARTMOD_SpecialCharDetect_t SpecialCharDetect,
                      const UARTMOD_AutoRtsEnable_t     AutoRtsEnable,
                      const UARTMOD_AutoCtsEnable_t     AutoCtsEnable,
                      UARTMOD_UartType_t                UartType)
{
UWORD8 lcrold;
 //Store current value LCR and set it to 0xBF to access EFR
 lcrold =  UMOD_SetBfToLcr(UartType);

 UARTMOD_EFR_REG(UartType) = ( RxSwFlowCtrol           |
                     TxSwFlowCtrol     << 2  |
                     EnhEnable         << 4  |
                     SpecialCharDetect << 5  |
                     AutoRtsEnable     << 6  |
                     AutoCtsEnable     << 7);

 //Restore LCR
 UARTMOD_LCR_REG(UartType) = lcrold;
}


// UNUSED IN PERSEUS

//------------------------------------------------------
// UMOD_InitUir
//------------------------------------------------------
UWORD8 UMOD_InitUir(UARTMOD_Access_t         access,
                       UARTMOD_MaskInterrupt_t  itmask,
                       UARTMOD_UartType_t       UartType)
{
UWORD8 status;

  UARTMOD_UIR_REG(UartType)= (access | itmask << 1);
  status=UARTMOD_UIR_REG(UartType) ;

  return status;
}






//--------------------------------------------------------------
// UMOD_InitDivLatch: Setup Divisor Latches
//--------------------------------------------------------------
void UMOD_InitDivLatch(const UWORD8 dll, const UWORD8 dlh, UARTMOD_UartType_t UartType)
{
UWORD8 lcrold;
// DLL and DLH are accessible only when LCR Bit-7, is 1
//Store current value LCR and set it to 0xBF to access DLL
 lcrold =  UMOD_SetBfToLcr(UartType);

  UARTMOD_DLL_REG(UartType) = dll;
  UARTMOD_DLH_REG(UartType) = dlh;

 //Restore LCR
 UARTMOD_LCR_REG(UartType) = lcrold;
}


//---------------------------------------
//  UMOD_ReadDll                    -
//---------------------------------------
UWORD8 UMOD_ReadDll(UARTMOD_UartType_t UartType)
{
UWORD8 dll, lcrold;
//Store current value LCR and set it to 0xBF to access DLL
 lcrold = UMOD_SetBfToLcr(UartType);

 dll = UARTMOD_DLL_REG(UartType);

 //Restore LCR
 UARTMOD_LCR_REG(UartType) = lcrold;

 return dll;
}


//---------------------------------------
//  UMOD_ReadDlh                    -
//---------------------------------------
UWORD8 UMOD_ReadDlh(UARTMOD_UartType_t UartType)
{
UWORD8 dlh, lcrold;
 // DLL and DLH are accessible only when LCR[7]=1 or LCR=0xBF
 //Store current value LCR and set it to 0xBF to access DLL
 lcrold = UMOD_SetBfToLcr(UartType);

 dlh =  UARTMOD_DLH_REG(UartType);

 //Restore LCR
 UARTMOD_LCR_REG(UartType) = lcrold;

 return dlh;
}




//----------------------------------------------------
//           UMOD_ReadLsr
//----------------------------------------------------
UWORD8 UMOD_ReadLsr(UARTMOD_UartType_t UartType)
{
  return UARTMOD_LSR_REG(UartType);
}



//------------------------------------------------
//            UMOD_ReadMsr
//------------------------------------------------
UWORD8 UMOD_ReadMsr(UARTMOD_UartType_t UartType)
{
UWORD8  msrmodem,oldlcr;
 //Store current LCR and set LCR[7]=0
 oldlcr = UARTMOD_LCR_REG(UartType);
 UARTMOD_LCR_REG(UartType) &= 0x7F;

 msrmodem = UARTMOD_MSR_REG(UartType);

 //Restore LCR
 UARTMOD_LCR_REG(UartType) = oldlcr;

 return msrmodem;
}





//----------------------------------
//    UMOD_ReadIsr
//----------------------------------
UWORD8 UMOD_ReadIsr(UARTMOD_UartType_t UartType)
{
  return UARTMOD_ISR_REG(UartType);
}


//-----------------------------------
//        UMOD_Read
//-----------------------------------
UWORD8 UMOD_Read(UARTMOD_UartType_t UartType)
{
  return UARTMOD_RHR_REG(UartType)  & 0xff;;
}





//-----------------------------------------------
//               UMOD_Send
//-----------------------------------------------
void UMOD_Send(const UWORD8 Value,UARTMOD_UartType_t UartType)
{
  UARTMOD_THR_REG(UartType) = Value ;
}


//-----------------------------------------------------------------
// MODE DEFINITION REGISTER (MDR1)
//--------------------------------------------------------------------
UWORD8 UMOD_InitMdr1(const UARTMOD_SelectMode_t SelectMode,UARTMOD_UartType_t UartType)
{

 UARTMOD_MDR1_REG(UartType) = (UWORD8)SelectMode;
 return UARTMOD_MDR1_REG(UartType);
}





//--------------------------------
//   UMOD_InitScr
//--------------------------------
UWORD8 UMOD_InitScr( const UARTMOD_DmaModeCtl_t        DmaModeCtl,
                        const UARTMOD_DmaMode2_t          DmaMode2,
                        const UARTMOD_TxEmptyCtrolIt_t    TxEmptyCtrolIt,
                        const UARTMOD_RxCtsWakeupEnable_t RxCtsWakeupEnable,
                        const UARTMOD_DSR_It_t            DsrIt,
                        const UARTMOD_Txtriggranu_t       Txtriggranu,
                        const UARTMOD_Rxtriggranu_t       Rxtriggranu,
                        UARTMOD_UartType_t                UartType)

{
  UWORD8 scr_modem;

  UARTMOD_SCR_REG(UartType) = (  DmaModeCtl             |
                       DmaMode2          << 1 |
                       TxEmptyCtrolIt    << 3 |
                       RxCtsWakeupEnable << 4 |
                       DsrIt             << 5 |
                       Txtriggranu         << 6 |
                       Rxtriggranu          <<7);

  scr_modem = UARTMOD_SCR_REG(UartType);

  return scr_modem;
}

//----------------------
// UMOD_SetFifoTrig
//
//this function allows the setting of Tx and Rx fifotrig at any level between 1 and 64
//
// SCR[6] (bit Txtriggranu has to be set to 1
// SCR[7] (bit Rxtriggranu has to be set to 1
// Tx and Rx triglevel LSB and MSB are loaded in FCR and TLR
//----------------------
UWORD8 UMOD_SetFifoTrig(UARTMOD_FifoEnable_t      EnFifo  ,
                          UARTMOD_RxFifoClear_t     ClRxFifo,
                          UARTMOD_TxFifoClear_t     ClTxFifo,
                          UARTMOD_DmaMode_t         DmaMode,
                          UWORD8   TxTriggerFifoLevel,
                          UWORD8   RxTriggerFifoLevel,
                          UARTMOD_UartType_t        UartType)

⌨️ 快捷键说明

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