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

📄 gpio.h

📁 PXA27X裸机测试程序
💻 H
字号:
#ifndef _GPIO_H_
#define _GPIO_H_

#define GPIOREGS_PHYSICAL_BASE 0x40E00000
#define GPLR0_OFFSET	0x0       //GPIO pin-level register 31:0
#define GPLR1_OFFSET	0x4       //GPIO pin-level register 63:32
#define GPLR2_OFFSET	0x8       //GPIO pin-level register 95:64
#define GPLR3_OFFSET	0x100     //GPIO pin-level register 120:96
#define GPDR0_OFFSET	0xC       //GPIO pin-direction register 31:0
#define GPDR1_OFFSET 	0x10      //GPIO pin-direction register 63:32
#define GPDR2_OFFSET	0x14      //GPIO pin-direction register 95:64
#define GPDR3_OFFSET	0x10C     //GPIO pin-direction register 120:96
#define GPSR0_OFFSET	0x18      //GPIO pin output set register 31:0
#define GPSR1_OFFSET	0x1C      //GPIO pin output set register 63:32
#define GPSR2_OFFSET	0x20      //GPIO pin output set register 95:64
#define GPSR3_OFFSET	0x118     //GPIO pin output set register 120:96
#define GPCR0_OFFSET	0x24      //GPIO pin output clear register 31:0
#define GPCR1_OFFSET	0x28      //GPIO pin output clear register 63:32
#define GPCR2_OFFSET	0x2C      //GPIO pin output clear register 95:64
#define GPCR3_OFFSET	0x124     //GPIO pin output clear register 120:96

#define GPSR0 (GPIOREGS_PHYSICAL_BASE + GPSR0_OFFSET)
#define GPSR1 (GPIOREGS_PHYSICAL_BASE + GPSR1_OFFSET)
#define GPSR2 (GPIOREGS_PHYSICAL_BASE + GPSR2_OFFSET)
#define GPSR3 (GPIOREGS_PHYSICAL_BASE + GPSR3_OFFSET)
#define GPCR0 (GPIOREGS_PHYSICAL_BASE + GPCR0_OFFSET)
#define GPCR1 (GPIOREGS_PHYSICAL_BASE + GPCR1_OFFSET)
#define GPCR2 (GPIOREGS_PHYSICAL_BASE + GPCR2_OFFSET)
#define GPCR3 (GPIOREGS_PHYSICAL_BASE + GPCR3_OFFSET)
#define GPLR0 (GPIOREGS_PHYSICAL_BASE + GPLR0_OFFSET)
#define GPLR1 (GPIOREGS_PHYSICAL_BASE + GPLR1_OFFSET)
#define GPLR2 (GPIOREGS_PHYSICAL_BASE + GPLR2_OFFSET)
#define GPLR3 (GPIOREGS_PHYSICAL_BASE + GPLR3_OFFSET)
#define GPDR0 (GPIOREGS_PHYSICAL_BASE + GPDR0_OFFSET)
#define GPDR1 (GPIOREGS_PHYSICAL_BASE + GPDR1_OFFSET)
#define GPDR2 (GPIOREGS_PHYSICAL_BASE + GPDR2_OFFSET)
#define GPDR3 (GPIOREGS_PHYSICAL_BASE + GPDR3_OFFSET)


void TestGpioSetHigh(UINT32 num)
{
	unsigned char buffer[]="FFFFFFFF";	
	unsigned char str[]="Data of the address FFFFFFFF is  ";
	if(num>118)return;
	if(num<31)
		{
			switch(num)
			{
				case 2:
				case 5:
				case 6:
				case 7:
				case 8:
					break;
				default:
					*((volatile UINT32*)GPDR0) |= (0x1u<<num);
					*((volatile UINT32*)GPCR0) &= ~(0x1u<<num);
					*((volatile UINT32*)GPSR0) |= (0x1u<<num);
					
					break;
			}
			return;
		}
	if(num<63)
		{
			*((volatile UINT32*)GPDR1) |= (0x1u<<(num-32));
			*((volatile UINT32*)GPCR1) &= ~(0x1u<<(num-32));
			*((volatile UINT32*)GPSR1) |= (0x1u<<(num-32));
			
			return;
		}
		if(num<95)
		{
			*((volatile UINT32*)GPDR2) |= (0x1u<<(num-64));
			*((volatile UINT32*)GPCR2) &= ~(0x1u<<(num-64));
			*((volatile UINT32*)GPSR2) |= (0x1u<<(num-64));
			
			return;
		}
	if(num<118)
		{
			*((volatile UINT32*)GPDR3) |= (0x1u<<(num-96));
			*((volatile UINT32*)GPCR3) &= ~(0x1u<<(num-96));
			*((volatile UINT32*)GPSR3) |= (0x1u<<(num-96));
			sprintf(str, "Data of the address %X is  ",GPLR3);
			OEMWriteDebugString(str);
			sprintf(buffer, "%X",*((volatile UINT32* )GPLR3));
			OEMWriteDebugString(buffer);
			OEMWriteDebugByte('\r');
			OEMWriteDebugByte('\n');
			
			return;
		}
	
}

void TestGpioSetLow(UINT32 num)
{
	unsigned char buffer[]="FFFFFFFF";	
	unsigned char str[]="Data of the address FFFFFFFF is  ";
	if(num>118)return;
	if(num<31)
		{
			switch(num)
			{
				case 2:
				case 5:
				case 6:
				case 7:
				case 8:
					break;
				default:
					*((volatile UINT32*)GPDR0) |= (0x1u<<num);
					*((volatile UINT32*)GPSR0) &= ~(0x1u<<num);
					*((volatile UINT32*)GPCR0) |= (0x1u<<num);	
					
					break;
			}
			return;
		}
	if(num<63)
		{
			*((volatile UINT32*)GPDR1) |= (0x1u<<(num-32));
			*((volatile UINT32*)GPSR1) &= ~(0x1u<<(num-32));
			*((volatile UINT32*)GPCR1) |= (0x1u<<(num-32));
			
			return;
		}
		if(num<95)
		{
			*((volatile UINT32*)GPDR2) |= (0x1u<<(num-64));
			*((volatile UINT32*)GPSR2) &= ~(0x1u<<(num-64));
			*((volatile UINT32*)GPCR2) |= (0x1u<<(num-64));
			
			return;
		}
	if(num<118)
		{
			*((volatile UINT32*)GPDR3) |= (0x1u<<(num-96));
			*((volatile UINT32*)GPSR3) &= ~(0x1u<<(num-96));
			*((volatile UINT32*)GPCR3) |= (0x1u<<(num-96));
			sprintf(str, "Data of the address %X is  ",GPLR3);
			OEMWriteDebugString(str);
			sprintf(buffer, "%X",*((volatile UINT32* )GPLR3));
			OEMWriteDebugString(buffer);
			OEMWriteDebugByte('\r');
			OEMWriteDebugByte('\n');
			
			return;
		}
	
}

void TestGPIO()
{
	UINT32 IoPin = 102;
	UINT32 num;
	UINT32 sleep;
	UINT32 sleeptime = 40000000;
	for(num = 0; num<50; num++)
	{
		TestGpioSetHigh(IoPin);
		for(sleep = 0; sleep<sleeptime; sleep++);
		TestGpioSetLow(IoPin);
		for(sleep = 0; sleep<sleeptime; sleep++);
	}
	return;
}

void InitGPIO()
{
	*((volatile UINT32*)GPDR0) = 0x0;
	*((volatile UINT32*)GPDR1) = 0x0;
	*((volatile UINT32*)GPDR2) = 0x0;
	*((volatile UINT32*)GPDR3) = 0x0;
	
	*((volatile UINT32*)GPCR0) = 0x0;
	*((volatile UINT32*)GPCR1) = 0x0;
	*((volatile UINT32*)GPCR2) = 0x0;
	*((volatile UINT32*)GPCR3) = 0x0;
	
	*((volatile UINT32*)GPSR0) = 0x0;
	*((volatile UINT32*)GPSR1) = 0x0;
	*((volatile UINT32*)GPSR2) = 0x0;
	*((volatile UINT32*)GPSR3) = 0x0;
	
	return;
}

#endif  // _GPIO_H_.

⌨️ 快捷键说明

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