📄 arm920t.c
字号:
// ****************************************************************************
// CP15 Register 0
// Read: ID code | cache type
// Write: Unpredictable
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_ReadIDCode
//* \brief Read ID code register
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_ARM_ReadIDCode()
{
register unsigned int id;
__asm("MRC p15, 0, %0, c0, c0, 0" : "=r"(id) );
return id;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_ReadCacheType
//* \brief Read cache type
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_ARM_ReadCacheType()
{
register unsigned int type;
__asm("MRC p15, 0, %0, c0, c0, 1" : "=r"(type) );
return type;
}
// ****************************************************************************
// CP15 Register 1
// Read: Control
// Write: Control
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_ReadControl
//* \brief Read Control register
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_ARM_ReadControl()
{
register unsigned int ctl;
__asm("MRC p15, 0, %0, c1, c0, 0" : "=r"(ctl) );
return ctl;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_WriteControl
//* \brief Write Control register
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_WriteControl(unsigned int ctl)
{
__asm("MCR p15, 0, %0, c1, c0, 0" : : "r"(ctl) );
}
// ****************************************************************************
// CP15 Register 2
// Read: Translation table Base
// Write: Translation table Base
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_ReadTTB
//* \brief Read Translation table base register
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_ARM_ReadTTB()
{
register unsigned int ttb;
__asm("MRC p15, 0, %0, c2, c0, 0" : "=r"(ttb) );
return ttb;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_WriteTTB
//* \brief Write Translation table base register
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_WriteTTB(unsigned int ttb)
{
ttb = ttb & 0xFFFFC000;
__asm("MCR p15, 0, %0, c2, c0, 0" : : "r"(ttb) );
}
// ****************************************************************************
// CP15 Register 3
// Read: Read domain access control
// Write: Write domain access control
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_ReadDomain
//* \brief Read domain access control
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_ARM_ReadDomain()
{
register unsigned int domain;
__asm("MRC p15, 0, %0, c3, c0, 0" : "=r"(domain) );
return domain;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_WriteDomain
//* \brief Write domain access control
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_WriteDomain(unsigned int domain)
{
__asm("MCR p15, 0, %0, c3, c0, 0" : : "r"(domain) );
}
// ****************************************************************************
// CP15 Register 5
// Read: Read Fault Status
// Write: Write Fault Status
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_ReadDataFSR
//* \brief Read data FSR value
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_ARM_ReadDataFSR()
{
register unsigned int dataFSR;
__asm("MRC p15, 0, %0, c5, c0, 0" : "=r"(dataFSR) );
return dataFSR;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_WriteDataFSR
//* \brief Write data FSR value
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_WriteDataFSR(unsigned int dataFSR)
{
__asm("MCR p15, 0, %0, c5, c0, 0" : : "r"(dataFSR) );
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_ReadPrefetchFSR
//* \brief Read prefetch FSR value
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_ARM_ReadPrefetchFSR()
{
register unsigned int prefetchFSR;
__asm("MRC p15, 0, %0, c5, c0, 1" : "=r"(prefetchFSR) );
return prefetchFSR;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_WritePrefetchFSR
//* \brief Write prefetch FSR value
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_WritePrefetchFSR(unsigned int prefetchFSR)
{
__asm("MCR p15, 0, %0, c5, c0, 1" : : "r"(prefetchFSR) );
}
// ****************************************************************************
// CP15 Register 6
// Read: Read Fault Address
// Write: Write Fault Address
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_ReadFAR
//* \brief Read FAR data
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_ARM_ReadFAR()
{
register unsigned int dataFAR;
__asm("MRC p15, 0, %0, c6, c0, 0" : "=r"(dataFAR) );
return dataFAR;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_WriteFAR
//* \brief Write FAR data
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_WriteFAR(unsigned int dataFAR)
{
__asm("MCR p15, 0, %0, c6, c0, 0" : : "r"(dataFAR) );
}
// ****************************************************************************
// CP15 Register 7
// Read: Unpredictable
// Write: Cache operations
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_InvalidateIDCache
//* \brief Invalidate ICache and DCache
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_InvalidateIDCache()
{
register unsigned int sbz = 0;
__asm("MCR p15, 0, %0, c7, c7, 0" : : "r"(sbz) );
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_InvalidateICache
//* \brief Invalidate ICache
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_InvalidateICache()
{
register unsigned int sbz = 0;
__asm("MCR p15, 0, %0, c7, c5, 0" : : "r"(sbz) );
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_InvalidateICacheMVA
//* \brief Invalidate ICache single entry (using MVA)
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_InvalidateICacheMVA(unsigned int mva)
{
mva = mva & 0xFFFFFFE0;
__asm("MCR p15, 0, %0, c7, c5, 1" : : "r"(mva) );
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_PrefetchICacheLine
//* \brief Prefetch ICache line (using MVA)
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_PrefetchICacheLine(unsigned int mva)
{
mva = mva & 0xFFFFFFE0;
__asm("MCR p15, 0, %0, c7, c13, 1" : : "r"(mva) );
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_InvalidateDCache
//* \brief Invalidate DCache
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_InvalidateDCache()
{
register unsigned int sbz = 0;
__asm("MCR p15, 0, %0, c7, c6, 0" : : "r"(sbz) );
}
//*----------------------------------------------------------------------------
//* \fn AT91F_ARM_InvalidateDCacheMVA
//* \brief Invalidate DCache single entry (using MVA)
//*----------------------------------------------------------------------------
__inline void AT91F_ARM_InvalidateDCacheMVA(unsigned int mva)
{
mva = mva & 0xFFFFFFE0;
__asm("MCR p15, 0, %0, c7, c6, 1" : : "r"(mva) );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -