📄 lib_at91sam9261.h
字号:
#ifndef lib_AT91SAM9261_H
#define lib_AT91SAM9261_H
/* *****************************************************************************
SOFTWARE API FOR MATRIX
***************************************************************************** */
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_Set_TCM_Size
//* \brief Enable one or more TCM block
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_Set_TCM_Size (
AT91PS_MATRIX pMATRIX,
unsigned int tcm_size)
{
pMATRIX->MATRIX_TCMR = tcm_size;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_Remap_ARM
//* \brief Enable Remap of ARM
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_Remap_ARM (
AT91PS_MATRIX pMATRIX)
{
pMATRIX->MATRIX_MCFG = AT91C_MATRIX_RCA926I | AT91C_MATRIX_RCA926D;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_Disable_Remap_ARM
//* \brief Disable Remap of ARM
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_Disable_Remap_ARM (
AT91PS_MATRIX pMATRIX)
{
pMATRIX->MATRIX_MCFG = AT91C_MATRIX_RCA926I | AT91C_MATRIX_RCA926D;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_Remap_ARMI
//* \brief Enable Remap of ARM-I
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_Remap_ARMI (
AT91PS_MATRIX pMATRIX)
{
pMATRIX->MATRIX_MCFG = AT91C_MATRIX_RCA926I;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_Disable_Remap_ARMI
//* \brief Disable Remap of ARM-I
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_Disable_Remap_ARMI (
AT91PS_MATRIX pMATRIX)
{
pMATRIX->MATRIX_MCFG = AT91C_MATRIX_RCA926I;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_Remap_ARMD
//* \brief Enable Remap of ARM-D
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_Remap_ARMD (
AT91PS_MATRIX pMATRIX)
{
pMATRIX->MATRIX_MCFG = AT91C_MATRIX_RCA926D;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_Disable_Remap_ARM-D
//* \brief Disable Remap of ARM-D
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_Disable_Remap_ARMD (
AT91PS_MATRIX pMATRIX)
{
pMATRIX->MATRIX_MCFG = AT91C_MATRIX_RCA926D;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_EnableSDRAMC
//* \brief Enable the Chip Select of the SDRAM Controller
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_EnableSDRAMC (
AT91PS_MATRIX pMATRIX) // \arg pointer to the MATRIX registers
{
pMATRIX->MATRIX_EBICSA |= AT91C_MATRIX_CS1A_SDRAMC;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_DisableSDRAMC
//* \brief Disable the Chip Select of the SDRAM Controller
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_DisableSDRAMC (
AT91PS_MATRIX pMATRIX) // \arg pointer to the MATRIX registers
{
pMATRIX->MATRIX_EBICSA &= ~AT91C_MATRIX_CS1A_SDRAMC;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_EnableSM_On_CS3
//* \brief Enable the Chip Select 3 for CF Controller
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_EnableSM_On_CS3 (
AT91PS_MATRIX pMATRIX) // \arg pointer to the MATRIX registers
{
pMATRIX->MATRIX_EBICSA |= AT91C_MATRIX_CS3A_SM;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_DisableSM_On_CS3
//* \brief Disable the Chip Select 3 for CF Controller
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_DisableSM_On_CS3 (
AT91PS_MATRIX pMATRIX) // \arg pointer to the MATRIX registers
{
pMATRIX->MATRIX_EBICSA &= ~AT91C_MATRIX_CS3A_SM;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_EnableCF_On_CS4
//* \brief Enable the Chip Select 4 for CF Controller
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_EnableCF_On_CS4 (
AT91PS_MATRIX pMATRIX) // \arg pointer to the MATRIX registers
{
pMATRIX->MATRIX_EBICSA |= AT91C_MATRIX_CS4A_CF;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_DisableCF_On_CS4
//* \brief Disable the Chip Select 4 for CF Controller
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_DisableCF_On_CS4 (
AT91PS_MATRIX pMATRIX) // \arg pointer to the MATRIX registers
{
pMATRIX->MATRIX_EBICSA &= ~AT91C_MATRIX_CS4A_CF;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_EnableCF_On_CS5
//* \brief Enable the Chip Select 5 for CF Controller
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_EnableCF_On_CS5 (
AT91PS_MATRIX pMATRIX) // \arg pointer to the MATRIX registers
{
pMATRIX->MATRIX_EBICSA |= AT91C_MATRIX_CS5A_CF;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_DisableCF_On_CS5
//* \brief Disable the Chip Select 5 for CF Controller
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_DisableCF_On_CS5 (
AT91PS_MATRIX pMATRIX) // \arg pointer to the MATRIX registers
{
pMATRIX->MATRIX_EBICSA &= ~AT91C_MATRIX_CS5A_CF;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_EnableEBIPULLUP
//* \brief Enable the EBI PULLUP
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_EnableEBIPULLUP (
AT91PS_MATRIX pMATRIX) // \arg pointer to the MATRIX registers
{
pMATRIX->MATRIX_EBICSA |= AT91C_MATRIX_DBPUC;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_MATRIX_DisableEBIPULLUP
//* \brief Disable the EBI PULLUP
//*----------------------------------------------------------------------------
__inline void AT91F_MATRIX_DisableEBIPULLUP (
AT91PS_MATRIX pMATRIX) // \arg pointer to the MATRIX registers
{
pMATRIX->MATRIX_EBICSA &= ~AT91C_MATRIX_DBPUC;
}
/* *****************************************************************************
SOFTWARE API FOR AIC
***************************************************************************** */
#define AT91C_AIC_BRANCH_OPCODE ((void (*) ()) 0xE51FFF20) // ldr, pc, [pc, #-&F20]
//*----------------------------------------------------------------------------
//* \fn AT91F_AIC_ConfigureIt
//* \brief Interrupt Handler Initialization
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_AIC_ConfigureIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id, // \arg interrupt number to initialize
unsigned int priority, // \arg priority to give to the interrupt
unsigned int src_type, // \arg activation and sense of activation
void (*newHandler) () ) // \arg address of the interrupt handler
{
unsigned int oldHandler;
unsigned int mask ;
oldHandler = pAic->AIC_SVR[irq_id];
mask = 0x1 << irq_id ;
//* Disable the interrupt on the interrupt controller
pAic->AIC_IDCR =0xffffffff;// mask ;
//* Clear the interrupt on the interrupt controller
pAic->AIC_ICCR = 0xffffffff ;
//Disable fast int
pAic->AIC_FFDR=0xffffffff;
//end of int
pAic->AIC_EOICR=0xffffffff;
//* Store the Source Mode Register
pAic->AIC_SMR[irq_id] =(AT91C_AIC_SRCTYPE_HIGH_LEVEL|AT91C_AIC_PRIOR_HIGHEST);// src_type | priority ;
//* Save the interrupt handler routine pointer and the interrupt priority
pAic->AIC_SVR[irq_id] = (unsigned int) newHandler ;
return oldHandler;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_AIC_EnableIt
//* \brief Enable corresponding IT number
//*----------------------------------------------------------------------------
__inline void AT91F_AIC_EnableIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id ) // \arg interrupt number to initialize
{
//* Enable the interrupt on the interrupt controller
pAic->AIC_IECR = 0x1 << irq_id ;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_AIC_DisableIt
//* \brief Disable corresponding IT number
//*----------------------------------------------------------------------------
__inline void AT91F_AIC_DisableIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id ) // \arg interrupt number to initialize
{
unsigned int mask = 0x1 << irq_id;
//* Disable the interrupt on the interrupt controller
pAic->AIC_IDCR = mask ;
//* Clear the interrupt on the Interrupt Controller ( if one is pending )
pAic->AIC_ICCR = mask ;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_AIC_ClearIt
//* \brief Clear corresponding IT number
//*----------------------------------------------------------------------------
__inline void AT91F_AIC_ClearIt (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id) // \arg interrupt number to initialize
{
//* Clear the interrupt on the Interrupt Controller ( if one is pending )
pAic->AIC_ICCR = (0x1 << irq_id);
}
//*----------------------------------------------------------------------------
//* \fn AT91F_AIC_AcknowledgeIt
//* \brief Acknowledge corresponding IT number
//*----------------------------------------------------------------------------
__inline void AT91F_AIC_AcknowledgeIt (
AT91PS_AIC pAic) // \arg pointer to the AIC registers
{
pAic->AIC_EOICR = pAic->AIC_EOICR;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_AIC_SetExceptionVector
//* \brief Configure vector handler
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_AIC_SetExceptionVector (
unsigned int *pVector, // \arg pointer to the AIC registers
void (*Handler) () ) // \arg Interrupt Handler
{
unsigned int oldVector = *pVector;
if ((unsigned int) Handler == (unsigned int) AT91C_AIC_BRANCH_OPCODE)
*pVector = (unsigned int) AT91C_AIC_BRANCH_OPCODE;
else
*pVector = (((((unsigned int) Handler) - ((unsigned int) pVector) - 0x8) >> 2) & 0x00FFFFFF) | 0xEA000000;
return oldVector;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_AIC_Trig
//* \brief Trig an IT
//*----------------------------------------------------------------------------
__inline void AT91F_AIC_Trig (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id) // \arg interrupt number
{
pAic->AIC_ISCR = (0x1 << irq_id) ;
}
//*----------------------------------------------------------------------------
//* \fn AT91F_AIC_IsActive
//* \brief Test if an IT is active
//*----------------------------------------------------------------------------
__inline unsigned int AT91F_AIC_IsActive (
AT91PS_AIC pAic, // \arg pointer to the AIC registers
unsigned int irq_id) // \arg Interrupt Number
{
return (pAic->AIC_ISR & (0x1 << irq_id));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -