?? gpio.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_.
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -