#include "gpio.h"
#ifdef CFG_CHIBI
-#include "drivers/chibi/chb_drvr.h"
+#include "drivers/rf/chibi/chb_drvr.h"
volatile uint32_t chibi_counter = 0;
#endif
/**************************************************************************/
/*!
@brief IRQ Handler for GPIO port 0 (currently checks pin 0.1)
+
+ @note By default, this IRQ handler is probably disabled in
+ projectconfig.h (see GPIO_ENABLE_IRQ0), but you can use
+ the code below as a model to implement this interrupt
+ handler in an appropriate place in your project.
*/
/**************************************************************************/
+#if defined GPIO_ENABLE_IRQ0
void PIOINT0_IRQHandler(void)
{
uint32_t regVal;
}
return;
}
+#endif
/**************************************************************************/
/*!
@brief IRQ Handler for GPIO port 1 (currently checks pin 1.1)
*/
/**************************************************************************/
+#if defined GPIO_ENABLE_IRQ1
void PIOINT1_IRQHandler(void)
{
uint32_t regVal;
return;
}
+#endif
/**************************************************************************/
/*!
@brief IRQ Handler for GPIO port 2 (currently checks pin 2.1)
+
+ @note By default, this IRQ handler is probably disabled in
+ projectconfig.h (see GPIO_ENABLE_IRQ2), but you can use
+ the code below as a model to implement this interrupt
+ handler in an appropriate place in your project.
*/
/**************************************************************************/
+#if defined GPIO_ENABLE_IRQ2
void PIOINT2_IRQHandler(void)
{
uint32_t regVal;
}
return;
}
+#endif
/**************************************************************************/
/*!
@brief IRQ Handler for GPIO port 3 (currently checks pin 3.1)
+
+ @note By default, this IRQ handler is probably disabled in
+ projectconfig.h (see GPIO_ENABLE_IRQ3), but you can use
+ the code below as a model to implement this interrupt
+ handler in an appropriate place in your project.
*/
/**************************************************************************/
+#if defined GPIO_ENABLE_IRQ3
void PIOINT3_IRQHandler(void)
{
uint32_t regVal;
}
return;
}
+#endif
/**************************************************************************/
/*!
the pin low and 1 will set the pin high.
*/
/**************************************************************************/
-void gpioSetValue (uint32_t portNum, uint32_t bitPos, uint32_t bitVal)
+inline void gpioSetValue (const uint32_t portNum, const uint32_t bitPos, const uint32_t bitVal)
{
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));
+ // Take advantage of the fact the GPIO registers are bit-banded
+ (*(pREG32 ((GPIO_GPIO0_BASE + (portNum << 16)) + ((1 << bitPos) << 2)))) = bitVal ? 0xFFF : 0;
}
/**************************************************************************/
break;
}
-
if (sense == gpioInterruptSense_Edge)
{
*gpiois &= ~(0x1<<bitPos);