{
if (!_gpioInitialised) gpioInit();
- // Get the appropriate register (handled this way to optimise code size)
- REG32 *gpiodata = &GPIO_GPIO0DATA;
- switch (portNum)
- {
- case 0:
- gpiodata = &GPIO_GPIO0DATA;
- break;
- case 1:
- gpiodata = &GPIO_GPIO1DATA;
- break;
- case 2:
- gpiodata = &GPIO_GPIO2DATA;
- break;
- case 3:
- gpiodata = &GPIO_GPIO3DATA;
- break;
- }
-
- // Toggle value
- bitVal == 1 ? (*gpiodata |= (1 << bitPos)) : (*gpiodata &= ~(1 << bitPos));
+ // // Get the appropriate register (handled this way to optimise code size)
+ // REG32 *gpiodata = &GPIO_GPIO0DATA;
+ // switch (portNum)
+ // {
+ // case 0:
+ // gpiodata = &GPIO_GPIO0DATA;
+ // break;
+ // case 1:
+ // gpiodata = &GPIO_GPIO1DATA;
+ // break;
+ // case 2:
+ // gpiodata = &GPIO_GPIO2DATA;
+ // break;
+ // case 3:
+ // gpiodata = &GPIO_GPIO3DATA;
+ // break;
+ // }
+ //
+ // // Toggle value
+ // bitVal == 1 ? (*gpiodata |= (1 << bitPos)) : (*gpiodata &= ~(1 << bitPos));
+
+ // Take advantage of the fact the GPIO registers are bit-banded
+ (*(pREG32 ((GPIO_GPIO0_BASE + (portNum << 16)) + ((1 << bitPos) << 2)))) = bitVal ? 0xFFF : 0;
}
/**************************************************************************/