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