📄 gpio.c
字号:
if( uEINT_No <= 6)
{
uGpioPort = uEINT_No;
uFunc = 7; // EINT Function
GPIO_SetFunctionEach(eGPIO_G, (GPIO_eBitPos)uGpioPort, uFunc); // ??
GPIO_SetPullUpDownEach(eGPIO_G, (GPIO_eBitPos)uGpioPort, 0x0); // disable Pull-up/dn
}
else if (uEINT_No >= 7)
{
printf("Error Eint No. \n");
Assert(0);
}
// Interrupt Type
uType =(uEINT_No>>2);
pEINTx_Reg = pGPIO_EINT_Addr ; //rEINT56CON
uConValue = *pEINTx_Reg;
uConValue = (uConValue & ~(0xF<<(uType*4))) | (uIntType<<(uType*4));
*pEINTx_Reg = uConValue;
// Fliter & Filter width
if(uFltWidth <= 0x3F)
{
uType =(uEINT_No>>3);
pFLTx_Reg = pGPIO_EINT_Addr + 8 ; // rEINT56FLTCON
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_EINT5ClrPend
// Function Desctiption : Clear Eint pending bit of the Eint Group 5(EINT5[6:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT5ClrPend(u32 uEINT_No )
{
volatile u32 *pEINT0PEND;
u32 uConValue;
pEINT0PEND = &(GPIO->rEINT56PEND);
uConValue = (1<<uEINT_No);
*pEINT0PEND = uConValue;
}
//////////
// Function Name : GPIO_EINT5DisMask
// Function Desctiption : Disable Mask bit of the Eint Group 5(EINT5[6:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT5DisMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT56MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_EINT5EnMask
// Function Desctiption : Enable Mask bit of the Eint Group 5(EINT5[6:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT5EnMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT56MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)))|(1<<uEINT_No);
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_SetEint6
// Function Desctiption : This function setup Eint Group 6(EINT6[9:0] -> GPH[9: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_SetEint6(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
if( uEINT_No <= 9)
{
uGpioPort = uEINT_No;
uFunc = 7; // EINT Function
GPIO_SetFunctionEach(eGPIO_H, (GPIO_eBitPos)uGpioPort, uFunc); // ??
GPIO_SetPullUpDownEach(eGPIO_H, (GPIO_eBitPos)uGpioPort, 0x0); // disable Pull-up/dn
}
else if (uEINT_No >= 10)
{
printf("Error Eint No. \n");
Assert(0);
}
// Interrupt Type
uType =(uEINT_No>>2);
pEINTx_Reg = pGPIO_EINT_Addr ; //rEINT56CON
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);
pFLTx_Reg = pGPIO_EINT_Addr + 8 ; // rEINT56FLTCON
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_EINT6ClrPend
// Function Desctiption : Clear Eint pending bit of the Eint Group 6(EINT6[9:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT6ClrPend(u32 uEINT_No )
{
volatile u32 *pEINT0PEND;
u32 uConValue;
pEINT0PEND = &(GPIO->rEINT56PEND);
uConValue = (1<<(uEINT_No+16));
*pEINT0PEND = uConValue;
}
//////////
// Function Name : GPIO_EINT6DisMask
// Function Desctiption : Disable Mask bit of the Eint Group 6(EINT6[9:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT6DisMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT56MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No+16)));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_EINT6EnMask
// Function Desctiption : Enable Mask bit of the Eint Group 6(EINT6[9:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT6EnMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT56MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No+16)))|(1<<(uEINT_No+16));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_SetEint7
// Function Desctiption : This function setup Eint Group 7(EINT7[15:0] -> GPO[15: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_SetEint7(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->rEINT78CON);
// EINT Port
if(uEINT_No <= 15)
{
uGpioPort = uEINT_No;
uFunc = 3; // EINT Function
GPIO_SetFunctionEach(eGPIO_O, (GPIO_eBitPos)uGpioPort, uFunc); // ??
GPIO_SetPullUpDownEach(eGPIO_O, (GPIO_eBitPos)uGpioPort, 0x0); // disable Pull-up/dn
}
else if (uEINT_No >= 16)
{
printf("Error Eint No. \n");
Assert(0);
}
// Interrupt Type
uType =(uEINT_No>>2);
pEINTx_Reg = pGPIO_EINT_Addr ; //rEINT78CON
uConValue = *pEINTx_Reg;
uConValue = (uConValue & ~(0xF<<(uType*4))) | (uIntType<<(uType*4));
*pEINTx_Reg = uConValue;
// Fliter & Filter width
if( uFltWidth <= 0x3F)
{
uType =(uEINT_No>>3);
pFLTx_Reg = pGPIO_EINT_Addr + 8 ; // rEINT78FLTCON
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_EINT7ClrPend
// Function Desctiption : Clear Eint pending bit of the Eint Group 7(EINT7[15:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT7ClrPend(u32 uEINT_No )
{
volatile u32 *pEINT0PEND;
u32 uConValue;
pEINT0PEND = &(GPIO->rEINT78PEND);
uConValue = (1<<uEINT_No);
*pEINT0PEND = uConValue;
}
//////////
// Function Name : GPIO_EINT7DisMask
// Function Desctiption : Disable Mask bit of the Eint Group 7(EINT7[15:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT7DisMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT78MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_EINT7EnMask
// Function Desctiption : Enable Mask bit of the Eint Group 7(EINT7[15:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT7EnMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT78MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)))|(1<<uEINT_No);
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_SetEint8
// Function Desctiption : This function setup Eint Group 8(EINT8[14:0] -> GPP[14: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_SetEint8(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->rEINT78CON);
// EINT Port
if( uEINT_No <= 14)
{
uGpioPort = uEINT_No;
uFunc = 3; // EINT Function
GPIO_SetFunctionEach(eGPIO_P, (GPIO_eBitPos)uGpioPort, uFunc); // ??
GPIO_SetPullUpDownEach(eGPIO_P, (GPIO_eBitPos)uGpioPort, 0x0); // disable Pull-up/dn
}
else if (uEINT_No >= 15)
{
printf("Error Eint No. \n");
Assert(0);
}
// Interrupt Type
uType =(uEINT_No>>2);
pEINTx_Reg = pGPIO_EINT_Addr ; //rEINT78CON
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);
pFLTx_Reg = pGPIO_EINT_Addr + 8 ; // rEINT78FLTCON
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_EINT8ClrPend
// Function Desctiption : Clear Eint pending bit of the Eint Group 8(EINT8[14:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT8ClrPend(u32 uEINT_No )
{
volatile u32 *pEINT0PEND;
u32 uConValue;
pEINT0PEND = &(GPIO->rEINT78PEND);
uConValue = (1<<(uEINT_No+16));
*pEINT0PEND = uConValue;
}
//////////
// Function Name : GPIO_EINT8DisMask
// Function Desctiption : Disable Mask bit of the Eint Group 8(EINT8[14:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT8DisMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT78MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No+16)));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_EINT8EnMask
// Function Desctiption : Enable Mask bit of the Eint Group 8(EINT8[14:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT8EnMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT78MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No+16)))|(1<<(uEINT_No+16));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_SetEint9
// Function Desctiption : This function setup Eint Group 9(EINT9[8:0] -> GPQ[8: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_SetEint9(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->rEINT9CON);
// EINT Port
if( uEINT_No <= 8)
{
uGpioPort = uEINT_No;
uFunc = 3; // EINT Function
GPIO_SetFunctionEach(eGPIO_Q, (GPIO_eBitPos)uGpioPort, uFunc); // ??
GPIO_SetPullUpDownEach(eGPIO_Q, (GPIO_eBitPos)uGpioPort, 0x0); // disable Pull-up/dn
}
else if (uEINT_No >= 9)
{
printf("Error Eint No. \n");
Assert(0);
}
// Interrupt Type
uType =(uEINT_No>>2);
pEINTx_Reg = pGPIO_EINT_Addr ; //rEINT78CON
uConValue = *pEINTx_Reg;
uConValue = (uConValue & ~(0xF<<(uType*4))) | (uIntType<<(uType*4));
*pEINTx_Reg = uConValue;
// Fliter & Filter width
if( uFltWidth <= 0x3F)
{
uType =(uEINT_No>>3);
pFLTx_Reg = pGPIO_EINT_Addr + 8 ; // rEINT78FLTCON
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_EINT9ClrPend
// Function Desctiption : Clear Eint pending bit of the Eint Group 9(EINT9[8:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT9ClrPend(u32 uEINT_No )
{
volatile u32 *pEINT0PEND;
u32 uConValue;
pEINT0PEND = &(GPIO->rEINT9PEND);
uConValue = (1<<uEINT_No);
*pEINT0PEND = uConValue;
}
//////////
// Function Name : GPIO_EINT9DisMask
// Function Desctiption : Disable Mask bit of the Eint Group 9(EINT9[8:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT9DisMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT9MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)));
*pMASK_Reg = uConValue;
}
//////////
// Function Name : GPIO_EINT9EnMask
// Function Desctiption : Enable Mask bit of the Eint Group 9(EINT9[8:0] )
// Input : uEINT_No: EINT No.
// Output : NONE
//
// Version : v0.1
void GPIO_EINT9EnMask(u32 uEINT_No )
{
volatile u32 *pMASK_Reg;
u32 uConValue;
pMASK_Reg = &(GPIO->rEINT9MASK);
uConValue = *pMASK_Reg;
uConValue = (uConValue & ~(0x1<<(uEINT_No)))|(1<<uEINT_No);
*pMASK_Reg = uConValue;
}
//////////
// Function Name : Isr_Eintx
// Function Description : EINT ISR Routine
// Input : None
// Output : None
// Version : v0.1
void __irq Isr_Eint9(void)
{
GPIO_EINT0ClrPend(9);
g_IntCnt++;
printf("EINT9 interrupt is occurred %d.\n", g_IntCnt);
INTC_ClearVectAddr();
}
void __irq Isr_Eint10(void)
{
GPIO_EINT0ClrPend(10);
g_IntCnt++;
printf("EINT10 interrupt is occurred %d.\n", g_IntCnt);
INTC_ClearVectAddr();
}
void __irq Isr_Eint11(void)
{
GPIO_EINT0ClrPend(11);
g_IntCnt++;
printf("EINT11 interrupt is occurred %d.\n", g_IntCnt);
INTC_ClearVectAddr();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -