⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gpio.c

📁 s3c6400 ADS下官方测试程序
💻 C
📖 第 1 页 / 共 4 页
字号:
//
// Version : v0.1
void GPIO_SetConRegSleepAll(GPIO_eId Id, u32 uValue)
{
	volatile u32 *pGPIOx_ConSleepReg;
	volatile u32 *pGPIO_Base_Addr;
	u32 uConRegNum, uDataRegNum, uPullUDRegNum, uOffset;

	uConRegNum = (Id&0x0F00)>>8;
	uOffset = Id&0x00FF;
	uDataRegNum = 1;
	uPullUDRegNum = 1;

	pGPIO_Base_Addr = &(GPIO->rGPIOACON);
	
	pGPIOx_ConSleepReg = pGPIO_Base_Addr + (uOffset*0x10)/4 + (uConRegNum + uDataRegNum + uPullUDRegNum);
	*pGPIOx_ConSleepReg = uValue;
}


//////////
// Function Name : GPIO_SetPullUDSleepAll
// Function Desctiption : This function set all GPIO Pull-up/down when system enter to sleep mode
// Input : 	Id : GPIO port
//			uValue : value(32bit)
// Output : NONE
//
// Version : v0.1
void GPIO_SetPullUDSleepAll(GPIO_eId Id, u32 uValue)
{
	volatile u32 *pGPIOx_PullUDSleepReg;
	volatile u32 *pGPIO_Base_Addr;
	u32 uConRegNum, uDataRegNum, uPullUDRegNum, uConSleepRegNum, uOffset;

	uConRegNum = (Id&0x0F00)>>8;
	uOffset = Id&0x00FF;
	uDataRegNum = 1;
	uPullUDRegNum = 1;
	uConSleepRegNum = 1;

	pGPIO_Base_Addr = &(GPIO->rGPIOACON);
	
	pGPIOx_PullUDSleepReg = pGPIO_Base_Addr + (uOffset*0x10)/4 + (uConRegNum + uDataRegNum + uPullUDRegNum + uConSleepRegNum);
	*pGPIOx_PullUDSleepReg = uValue;
}

//////////
// Function Name : GPIO_SetLCDType
// Function Desctiption : This function set "LCD_SEL" field at SPCON register
// Input : 	eLCDType : eHOSTIF, eRGBIF, eYCbCr, eHidden
//			
// Output : NONE
//
// Version : v0.1
void GPIO_SetLCDType(LCD_eTYPE eLCDType)
{
	volatile u32 *pGPIO_SPCON_Addr;
	u32 uRegValue, uTemp;

	GPIO_pBase = (void *)GPIO_BASE;

	uTemp = eLCDType;
	
	pGPIO_SPCON_Addr = &(GPIO->rSPCON);
	uRegValue = *pGPIO_SPCON_Addr;
	uRegValue = (uRegValue & ~(0x3<<0)) | (uTemp<<0);

	*pGPIO_SPCON_Addr = uRegValue;
}



//////////
// Function Name : GPIO_SetEint0
// Function Desctiption : This function setup Eint[27:0]
// Input : 			uEINT_No: EINT No.
//					uINTType: Select EINT Type. 
//								Low, High, Falling, Rising, Both
//					uFltType :  Select Filter Type
//								DisFLT(Disable Filter), DLYFLT(Delay Filter), DIGFLT(Digital Filter)
//					uFltWidth : Digital Filter Width ( 1~0x3F)
// Output : NONE
//
// Version : v0.1
void GPIO_SetEint0(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->rEINT0CON0);

	// EINT Port
	if( uEINT_No <= 15)
	{
		uGpioPort = uEINT_No;
		uFunc = 2;  					// EINT Function 
		GPIO_SetFunctionEach(eGPIO_N, (GPIO_eBitPos)uGpioPort, uFunc);		// ??
		GPIO_SetPullUpDownEach(eGPIO_N,(GPIO_eBitPos) uGpioPort, 0x0);		// disable Pull-up/dn
	}
	else if(uEINT_No >= 16 && uEINT_No <= 22)
	{
		uGpioPort = (uEINT_No - 8) ;
		uFunc = 3;
		GPIO_SetFunctionEach(eGPIO_L,(GPIO_eBitPos) uGpioPort, uFunc);   		  // ??
		GPIO_SetPullUpDownEach(eGPIO_L, (GPIO_eBitPos)uGpioPort, 0x0);

	}
	else if(uEINT_No >=23 && uEINT_No <=27)
	{
		uGpioPort = (uEINT_No - 23 );
		uFunc = 3;
		GPIO_SetFunctionEach(eGPIO_M, (GPIO_eBitPos)uGpioPort, uFunc);		// ??
		GPIO_SetPullUpDownEach(eGPIO_M, (GPIO_eBitPos)uGpioPort, 0x0);		// disable Pull-up/dn
	}
	else if (uEINT_No >= 27)
	{
		printf("Error Eint No. \n");
		Assert(0);
	}

	
	//  Interrupt Type 
	if( uEINT_No <= 15)
	{
		uType =(uEINT_No>>1);
		pEINTx_Reg = pGPIO_EINT_Addr ; 	
		uConValue = *pEINTx_Reg;
		uConValue = (uConValue & ~(0xF<<(uType*4))) | (uIntType<<(uType*4));
		*pEINTx_Reg = uConValue;
		
	}
	else if(uEINT_No >= 16 && uEINT_No <= 27)
	{
		uType = (uEINT_No>>5);
		pEINTx_Reg = pGPIO_EINT_Addr + 1;		// EINT0CON1
		uConValue= *pEINTx_Reg;
		uConValue = (uConValue & ~(0xF<<(uType*4))) | (uIntType<<(uType*4));
		*pEINTx_Reg = uConValue;
	}

	// Check Filter Width 
	if(uFltWidth >=0x40)
	{
		printf("Error Filter Width. \n");
		Assert(0);
	}

	// Fliter Type & Filter Width 
	if( uEINT_No <= 7)
	{
		uType =(uEINT_No>>1);
		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>>1)-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>>1)-8;
		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>>1)-12;
		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;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -