📄 gpio.c
字号:
pFLTx_Reg = pGPIO_EINT_Addr + 4 ; // EINT0FLTCON0
uConValue = *pFLTx_Reg;
uConValue = (uConValue & ~(0xFF<<(uType*8))) |((uFltWidth<<(uType*8))|(eFltType<<(uType*8+6)));
*pFLTx_Reg = uConValue;
}
else if(uEINT_No >= 8 && uEINT_No <= 15)
{
uType =(uEINT_No>>4);
pFLTx_Reg = pGPIO_EINT_Addr + 5 ; // EINT0FLTCON1
uConValue = *pFLTx_Reg;
uConValue = (uConValue & ~(0xFF<<(uType*8))) |((uFltWidth<<(uType*8))|(eFltType<<(uType*8+6)));
*pFLTx_Reg = uConValue;
}
else if(uEINT_No >= 16 && uEINT_No <= 23)
{
uType =(uEINT_No>>7);
pFLTx_Reg = pGPIO_EINT_Addr + 6 ; // EINT0FLTCON2
uConValue = *pFLTx_Reg;
uConValue = (uConValue & ~(0xFF<<(uType*8))) |((uFltWidth<<(uType*8))|(eFltType<<(uType*8+6)));
*pFLTx_Reg = uConValue;
}
else if(uEINT_No >= 24 && uEINT_No <= 27)
{
uType =(uEINT_No>>10);
pFLTx_Reg = pGPIO_EINT_Addr + 7 ; // EINT0FLTCON3
uConValue = *pFLTx_Reg;
uConValue = (uConValue & ~(0xFF<<(uType*8))) |((uFltWidth<<(uType*8))|(eFltType<<(uType*8+6)));
*pFLTx_Reg = uConValue;
}
}
//////////
// Function Name : GPIO_EINT0ClrPend
// Function Desctiption : Clear Eint pending bit of the Eint[27:0]
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT0ClrPend(u32 uEINT_No )
{
volatile u32 *pEINT0PEND;
u32 uConValue;
pEINT0PEND = &(GPIO->rEINT0PEND);
uConValue = (1<<uEINT_No);
*pEINT0PEND = uConValue;
}
//////////
// Function Name : GPIO_EINT0DisMask
// Function Desctiption : Disable Mask bit of the Eint[27:0]
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT0DisMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT0MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_EINT0EnMask
// Function Desctiption : Enable Mask bit of the Eint[27:0]
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT0EnMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT0MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)))|(1<<uEINT_No);
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_SetEint1
// Function Desctiption : This function setup Eint Group 1(EINT1[14:0] -> GPA[7:0], GPB[6:0])
// Input : uEINT_No: EINT No.
// uINTType: Select EINT Type.
// Low, High, Falling, Rising, Both
// uFltType : Select Filter Type
// DisFLT(Disable Filter), EnFLT(Digital Filter)
// uFltWidth : Filter Width
// Output : NONE
//
// Version : v0.1
void GPIO_SetEint1(u32 uEINT_No , u32 uIntType, FLT_eTYPE eFltType, u32 uFltWidth)
{
volatile u32 *pEINTx_Reg, *pFLTx_Reg;
volatile u32 *pGPIO_EINT_Addr;
u32 uGpioPort, uFunc, uType ;
u32 uConValue;
GPIO_pBase = (void *)GPIO_BASE;
pGPIO_EINT_Addr = &(GPIO->rEINT12CON);
// EINT Port
if( uEINT_No <= 7)
{
uGpioPort = uEINT_No;
uFunc = 7; // EINT Function
GPIO_SetFunctionEach(eGPIO_A,(GPIO_eBitPos)uGpioPort, uFunc); // ??
GPIO_SetPullUpDownEach(eGPIO_A, (GPIO_eBitPos)uGpioPort, 0x0); // disable Pull-up/dn
}
else if(uEINT_No >= 8 && uEINT_No <= 14)
{
uGpioPort = (uEINT_No - 8) ;
uFunc = 7;
GPIO_SetFunctionEach(eGPIO_B, (GPIO_eBitPos)uGpioPort, uFunc); // ??
GPIO_SetPullUpDownEach(eGPIO_B, (GPIO_eBitPos)uGpioPort, 0x0);
}
else if (uEINT_No >= 15)
{
printf("Error Eint No. \n");
Assert(0);
}
// Interrupt Type
uType =(uEINT_No>>2);
pEINTx_Reg = pGPIO_EINT_Addr ; //rEINT12CON
uConValue = *pEINTx_Reg;
uConValue = (uConValue & ~(0xF<<(uType*4))) | (uIntType<<(uType*4));
*pEINTx_Reg = uConValue;
// Fliter & Filter width
if( uFltWidth <= 0x3F)
{
uType =(uEINT_No>>3); // EINT1[7:0], EINT1[14:8]
pFLTx_Reg = pGPIO_EINT_Addr + 8 ; // rEINT12FLTCON
uConValue = *pFLTx_Reg;
uConValue = (uConValue & ~(0xFF<<(uType*8))) |((uFltWidth<<(uType*8))|(eFltType<<(uType*8+7)));
*pFLTx_Reg = uConValue;
}
else
{
printf("Error Filter Width. \n");
Assert(0);
}
}
//////////
// Function Name : GPIO_EINT1ClrPend
// Function Desctiption : Clear Eint pending bit of the Eint Group 1(EINT1[14:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT1ClrPend(u32 uEINT_No )
{
volatile u32 *pEINT0PEND;
u32 uConValue;
pEINT0PEND = &(GPIO->rEINT12PEND);
uConValue = (1<<uEINT_No);
*pEINT0PEND = uConValue;
}
//////////
// Function Name : GPIO_EINT1DisMask
// Function Desctiption : Disable Mask bit of the Eint Group 1(EINT1[14:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT1DisMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT12MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_EINT1EnMask
// Function Desctiption : Enable Mask bit of the Eint Group 1(EINT1[14:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT1EnMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT12MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)))|(1<<uEINT_No);
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_SetEint2
// Function Desctiption : This function setup Eint Group 2(EINT2[7:0] -> GPC[7:0])
// Input : uEINT_No: EINT No.
// uINTType: Select EINT Type.
// Low, High, Falling, Rising, Both
// uFltType : Select Filter Type
// DisFLT(Disable Filter), EnFLT(Digital Filter)
// uFltWidth : Filter Width
// Output : NONE
//
// Version : v0.1
void GPIO_SetEint2(u32 uEINT_No , u32 uIntType, FLT_eTYPE eFltType, u32 uFltWidth)
{
volatile u32 *pEINTx_Reg, *pFLTx_Reg;
volatile u32 *pGPIO_EINT_Addr;
u32 uGpioPort, uFunc, uType ;
u32 uConValue;
GPIO_pBase = (void *)GPIO_BASE;
pGPIO_EINT_Addr = &(GPIO->rEINT12CON);
// EINT Port
if( uEINT_No <= 7)
{
uGpioPort = uEINT_No;
uFunc = 7; // EINT Function
GPIO_SetFunctionEach(eGPIO_C, (GPIO_eBitPos)uGpioPort, uFunc); // ??
GPIO_SetPullUpDownEach(eGPIO_C, (GPIO_eBitPos)uGpioPort, 0x0); // disable Pull-up/dn
}
else if (uEINT_No >= 8)
{
printf("Error Eint No. \n");
Assert(0);
}
// Interrupt Type
uType =(uEINT_No>>2);
pEINTx_Reg = pGPIO_EINT_Addr ; //rEINT12CON
uConValue = *pEINTx_Reg;
uConValue = (uConValue & ~(0xF<<(uType*4+16))) | (uIntType<<(uType*4+16));
*pEINTx_Reg = uConValue;
// Fliter & Filter width
if( uFltWidth <= 0x3F)
{
pFLTx_Reg = pGPIO_EINT_Addr + 8 ; // rEINT12FLTCON
uConValue = *pFLTx_Reg;
uConValue = (uConValue & ~(0xFF<<16)) |((uFltWidth<<16)|(eFltType<<23));
*pFLTx_Reg = uConValue;
}
else
{
printf("Error Filter Width. \n");
Assert(0);
}
}
//////////
// Function Name : GPIO_EINT2ClrPend
// Function Desctiption : Clear Eint pending bit of the Eint Group 2(EINT2[7:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT2ClrPend(u32 uEINT_No )
{
volatile u32 *pEINT0PEND;
u32 uConValue;
pEINT0PEND = &(GPIO->rEINT12PEND);
uConValue = (1<<(uEINT_No+16));
*pEINT0PEND = uConValue;
}
//////////
// Function Name : GPIO_EINT1DisMask
// Function Desctiption : Disable Mask bit of the Eint Group 2(EINT2[7:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT2DisMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT12MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No+16)));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_EINT1EnMask
// Function Desctiption : Enable Mask bit of the Eint Group 2(EINT2[7:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT2EnMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT12MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No+16)))|(1<<uEINT_No+16);
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_SetEint3
// Function Desctiption : This function setup Eint Group 3(EINT3[9:0] -> GPD[4:0], GPE[4:0])
// Input : uEINT_No: EINT No.
// uINTType: Select EINT Type.
// Low, High, Falling, Rising, Both
// uFltType : Select Filter Type
// DisFLT(Disable Filter), EnFLT(Digital Filter)
// uFltWidth : Filter Width
// Output : NONE
//
// Version : v0.1
void GPIO_SetEint3(u32 uEINT_No , u32 uIntType, FLT_eTYPE eFltType, u32 uFltWidth)
{
volatile u32 *pEINTx_Reg, *pFLTx_Reg;
volatile u32 *pGPIO_EINT_Addr;
u32 uGpioPort, uFunc, uType ;
u32 uConValue;
GPIO_pBase = (void *)GPIO_BASE;
pGPIO_EINT_Addr = &(GPIO->rEINT34CON);
// EINT Port
if( uEINT_No <= 4)
{
uGpioPort = uEINT_No;
uFunc = 7; // EINT Function
GPIO_SetFunctionEach(eGPIO_D, (GPIO_eBitPos)uGpioPort, uFunc); // ??
GPIO_SetPullUpDownEach(eGPIO_D,(GPIO_eBitPos)uGpioPort, 0x0); // disable Pull-up/dn
}
else if(uEINT_No >= 5 && uEINT_No <= 9)
{
uGpioPort = (uEINT_No - 5) ;
uFunc = 7;
GPIO_SetFunctionEach(eGPIO_E,(GPIO_eBitPos)uGpioPort, uFunc); // ??
GPIO_SetPullUpDownEach(eGPIO_E,(GPIO_eBitPos)uGpioPort, 0x0);
}
else if (uEINT_No >= 10)
{
printf("Error Eint No. \n");
Assert(0);
}
// Interrupt Type
uType =(uEINT_No>>2);
pEINTx_Reg = pGPIO_EINT_Addr ; //rEINT34CON
uConValue = *pEINTx_Reg;
uConValue = (uConValue & ~(0xF<<(uType*4))) | (uIntType<<(uType*4));
*pEINTx_Reg = uConValue;
// Fliter & Filter width
if( uFltWidth <= 0x3F)
{
uType =(uEINT_No>>3); // EINT3[7:0], EINT3[9:8]
pFLTx_Reg = pGPIO_EINT_Addr + 8 ; // rEINT34FLTCON
uConValue = *pFLTx_Reg;
uConValue = (uConValue & ~(0xFF<<(uType*8))) |((uFltWidth<<(uType*8))|(eFltType<<(uType*8+7)));
*pFLTx_Reg = uConValue;
}
else
{
printf("Error Filter Width. \n");
Assert(0);
}
}
//////////
// Function Name : GPIO_EINT3ClrPend
// Function Desctiption : Clear Eint pending bit of the Eint Group 3(EINT3[9:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT3ClrPend(u32 uEINT_No )
{
volatile u32 *pEINT0PEND;
u32 uConValue;
pEINT0PEND = &(GPIO->rEINT34PEND);
uConValue = (1<<uEINT_No);
*pEINT0PEND = uConValue;
}
//////////
// Function Name : GPIO_EINT3DisMask
// Function Desctiption : Disable Mask bit of the Eint Group 3(EINT3[9:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT3DisMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT34MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_EINT3EnMask
// Function Desctiption : Enable Mask bit of the Eint Group 3(EINT3[9:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT3EnMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT34MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)))|(1<<uEINT_No);
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_SetEint4
// Function Desctiption : This function setup Eint Group 4(EINT4[13:0] -> GPF[13:0])
// Input : uEINT_No: EINT No.
// uINTType: Select EINT Type.
// Low, High, Falling, Rising, Both
// uFltType : Select Filter Type
// DisFLT(Disable Filter), EnFLT(Digital Filter)
// uFltWidth : Filter Width
// Output : NONE
//
// Version : v0.1
void GPIO_SetEint4(u32 uEINT_No , u32 uIntType, FLT_eTYPE eFltType, u32 uFltWidth)
{
volatile u32 *pEINTx_Reg, *pFLTx_Reg;
volatile u32 *pGPIO_EINT_Addr;
u32 uGpioPort, uFunc, uType ;
u32 uConValue;
GPIO_pBase = (void *)GPIO_BASE;
pGPIO_EINT_Addr = &(GPIO->rEINT34CON);
// EINT Port
if( uEINT_No <= 13)
{
uGpioPort = uEINT_No;
uFunc = 3; // EINT Function
GPIO_SetFunctionEach(eGPIO_F, (GPIO_eBitPos)uGpioPort, uFunc); // ??
GPIO_SetPullUpDownEach(eGPIO_F, (GPIO_eBitPos)uGpioPort, 0x0); // disable Pull-up/dn
}
else if (uEINT_No >= 14)
{
printf("Error Eint No. \n");
Assert(0);
}
// Interrupt Type
uType =(uEINT_No>>2);
pEINTx_Reg = pGPIO_EINT_Addr ; //rEINT34CON
uConValue = *pEINTx_Reg;
uConValue = (uConValue & ~(0xF<<(uType*4+16))) | (uIntType<<(uType*4+16));
*pEINTx_Reg = uConValue;
// Fliter & Filter width
if( uFltWidth <= 0x3F)
{
uType =(uEINT_No>>3); // EINT4[7:0], EINT4[13:8]
pFLTx_Reg = pGPIO_EINT_Addr + 8 ; // rEINT34FLTCON
uConValue = *pFLTx_Reg;
uConValue = (uConValue & ~(0xFF<<(uType*8+16))) |((uFltWidth<<(uType*8+16))|(eFltType<<(uType*8+23)));
*pFLTx_Reg = uConValue;
}
else
{
printf("Error Filter Width. \n");
Assert(0);
}
}
//////////
// Function Name : GPIO_EINT4ClrPend
// Function Desctiption : Clear Eint pending bit of the Eint Group 4(EINT4[13:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT4ClrPend(u32 uEINT_No )
{
volatile u32 *pEINT0PEND;
u32 uConValue;
pEINT0PEND = &(GPIO->rEINT34PEND);
uConValue = (1<<(uEINT_No+16));
*pEINT0PEND = uConValue;
}
//////////
// Function Name : GPIO_EINT4DisMask
// Function Desctiption : Disable Mask bit of the Eint Group 4(EINT4[13:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT4DisMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT34MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No+16)));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_EINT4EnMask
// Function Desctiption : Enable Mask bit of the Eint Group 4(EINT4[13:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT4EnMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT34MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No+16)))|(1<<(uEINT_No+16));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_SetEint5
// Function Desctiption : This function setup Eint Group 5(EINT5[6:0] -> GPG[6:0])
// Input : uEINT_No: EINT No.
// uINTType: Select EINT Type.
// Low, High, Falling, Rising, Both
// uFltType : Select Filter Type
// DisFLT(Disable Filter), EnFLT(Digital Filter)
// uFltWidth : Filter Width
// Output : NONE
//
// Version : v0.1
void GPIO_SetEint5(u32 uEINT_No , u32 uIntType, FLT_eTYPE eFltType, u32 uFltWidth)
{
volatile u32 *pEINTx_Reg, *pFLTx_Reg;
volatile u32 *pGPIO_EINT_Addr;
u32 uGpioPort, uFunc, uType ;
u32 uConValue;
GPIO_pBase = (void *)GPIO_BASE;
pGPIO_EINT_Addr = &(GPIO->rEINT56CON);
// EINT Port
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -