You need to access the GPIO registers in the same way as any other special functions registered in the chip. LPC2378 documents show this data:
#define GPIO_BASE 0xE0028000
#define IOPIN0 (GPIO_BASE + 0x00)
#define IOSET0 (GPIO_BASE + 0x04)
#define IODIR0 (GPIO_BASE + 0x08)
#define IOCLR0 (GPIO_BASE + 0x0C)
#define IOPIN1 (GPIO_BASE + 0x10)
#define IOSET1 (GPIO_BASE + 0x14)
#define IODIR1 (GPIO_BASE + 0x18)
#define IOCLR1 (GPIO_BASE + 0x1C)
I like to use this macro to access the mappable registers:
Then the code for reading the port is as follows:
unsigned long port0 = mmioReg(IOPIN0);
unsigned long port1 = mmioReg(IOPIN1);
The same macro works to access the set / clear / direction registers. Examples:
mmioReg(IOSET1) = (1UL << 3);
mmioReg(IOCLR0) = (1UL << 2);
mmioReg(IODIR0) |= (1UL << 4);
mmioReg(IODIR1) &= ~(1UL << 7);
In a real system, I usually write some macros or functions for these operations to reduce magic numbers.