To get started with Seeed Tiny BLE, include detecting motion, button and battery level.
Dependencies: BLE_API eMPL_MPU6050 mbed nRF51822
Diff: nRF51822/nordic-sdk/components/drivers_nrf/hal/nrf_gpiote.h
- Revision:
- 3:24e365bd1b97
- Parent:
- 2:b61ddbb8528e
diff -r b61ddbb8528e -r 24e365bd1b97 nRF51822/nordic-sdk/components/drivers_nrf/hal/nrf_gpiote.h --- a/nRF51822/nordic-sdk/components/drivers_nrf/hal/nrf_gpiote.h Thu Nov 05 02:46:37 2015 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -/* Copyright (c) 2012 Nordic Semiconductor. All Rights Reserved. - * - * The information contained herein is property of Nordic Semiconductor ASA. - * Terms and conditions of usage are described in detail in NORDIC - * SEMICONDUCTOR STANDARD SOFTWARE LICENSE AGREEMENT. - * - * Licensees are granted free, non-transferable use of the information. NO - * WARRANTY of ANY KIND is provided. This heading must NOT be removed from - * the file. - * - */ -#ifndef NRF_GPIOTE_H__ -#define NRF_GPIOTE_H__ - -#include "nrf.h" - -/** -* @defgroup nrf_gpiote GPIOTE abstraction -* @{ -* @ingroup nrf_drivers -* @brief GPIOTE abstraction for configuration of channels. -*/ - - - /** - * @enum nrf_gpiote_polarity_t - * @brief Polarity for GPIOTE channel enumerator. - */ -typedef enum -{ - NRF_GPIOTE_POLARITY_LOTOHI = GPIOTE_CONFIG_POLARITY_LoToHi, ///< Low to high - NRF_GPIOTE_POLARITY_HITOLO = GPIOTE_CONFIG_POLARITY_HiToLo, ///< High to low - NRF_GPIOTE_POLARITY_TOGGLE = GPIOTE_CONFIG_POLARITY_Toggle ///< Toggle -} nrf_gpiote_polarity_t; - - - /** - * @enum nrf_gpiote_outinit_t - * @brief Initial output value for GPIOTE channel enumerator. - */ -typedef enum -{ - NRF_GPIOTE_INITIAL_VALUE_LOW = GPIOTE_CONFIG_OUTINIT_Low, ///< Low to high - NRF_GPIOTE_INITIAL_VALUE_HIGH = GPIOTE_CONFIG_OUTINIT_High ///< High to low -} nrf_gpiote_outinit_t; - - -/** - * @brief Function for configuring GPIOTE channel as output, setting the properly desired output level. - * - * - * @param channel_number specifies the GPIOTE channel [0:3] to configure as an output channel. - * @param pin_number specifies the pin number [0:30] to use in the GPIOTE channel. - * @param polarity specifies the desired polarity in the output GPIOTE channel. - * @param initial_value specifies the initial value of the GPIOTE channel input after the channel configuration. - */ -static __INLINE void nrf_gpiote_task_config(uint32_t channel_number, uint32_t pin_number, nrf_gpiote_polarity_t polarity, nrf_gpiote_outinit_t initial_value) -{ - /* Check if the output desired is high or low */ - if (initial_value == NRF_GPIOTE_INITIAL_VALUE_LOW) - { - /* Workaround for the OUTINIT PAN. When nrf_gpiote_task_config() is called a glitch happens - on the GPIO if the GPIO in question is already assigned to GPIOTE and the pin is in the - correct state in GPIOTE but not in the OUT register. */ - NRF_GPIO->OUTCLR = (1 << pin_number); - - /* Configure channel to Pin31, not connected to the pin, and configure as a tasks that will set it to proper level */ - NRF_GPIOTE->CONFIG[channel_number] = (GPIOTE_CONFIG_MODE_Task << GPIOTE_CONFIG_MODE_Pos) | - (31UL << GPIOTE_CONFIG_PSEL_Pos) | - (GPIOTE_CONFIG_POLARITY_HiToLo << GPIOTE_CONFIG_POLARITY_Pos); - } - else - { - /* Workaround for the OUTINIT PAN. When nrf_gpiote_task_config() is called a glitch happens - on the GPIO if the GPIO in question is already assigned to GPIOTE and the pin is in the - correct state in GPIOTE but not in the OUT register. */ - NRF_GPIO->OUTSET = (1 << pin_number); - - /* Configure channel to Pin31, not connected to the pin, and configure as a tasks that will set it to proper level */ - NRF_GPIOTE->CONFIG[channel_number] = (GPIOTE_CONFIG_MODE_Task << GPIOTE_CONFIG_MODE_Pos) | - (31UL << GPIOTE_CONFIG_PSEL_Pos) | - (GPIOTE_CONFIG_POLARITY_LoToHi << GPIOTE_CONFIG_POLARITY_Pos); - } - - /* Three NOPs are required to make sure configuration is written before setting tasks or getting events */ - __NOP(); - __NOP(); - __NOP(); - - /* Launch the task to take the GPIOTE channel output to the desired level */ - NRF_GPIOTE->TASKS_OUT[channel_number] = 1; - - - /* Finally configure the channel as the caller expects. If OUTINIT works, the channel is configured properly. - If it does not, the channel output inheritance sets the proper level. */ - NRF_GPIOTE->CONFIG[channel_number] = (GPIOTE_CONFIG_MODE_Task << GPIOTE_CONFIG_MODE_Pos) | - ((uint32_t)pin_number << GPIOTE_CONFIG_PSEL_Pos) | - ((uint32_t)polarity << GPIOTE_CONFIG_POLARITY_Pos) | - ((uint32_t)initial_value << GPIOTE_CONFIG_OUTINIT_Pos); - - /* Three NOPs are required to make sure configuration is written before setting tasks or getting events */ - __NOP(); - __NOP(); - __NOP(); -} - -/** - * @brief Function for configuring GPIOTE channel as input, automatically clearing an event that appears in some cases under configuration. - * - * Note that when configuring the channel as input an event might be triggered. Care of disabling interrupts - * for that channel is left to the user. - * - * @param channel_number specifies the GPIOTE channel [0:3] to configure as an input channel. - * @param pin_number specifies the pin number [0:30] to use in the GPIOTE channel. - * @param polarity specifies the desired polarity in the output GPIOTE channel. - */ -static __INLINE void nrf_gpiote_event_config(uint32_t channel_number, uint32_t pin_number, nrf_gpiote_polarity_t polarity) -{ - /* Configure the channel as the caller expects */ - NRF_GPIOTE->CONFIG[channel_number] = (GPIOTE_CONFIG_MODE_Event << GPIOTE_CONFIG_MODE_Pos) | - ((uint32_t)pin_number << GPIOTE_CONFIG_PSEL_Pos) | - ((uint32_t)polarity << GPIOTE_CONFIG_POLARITY_Pos); - - /* Three NOPs are required to make sure configuration is written before setting tasks or getting events */ - __NOP(); - __NOP(); - __NOP(); - - /* Clear the event that appears in some cases */ - NRF_GPIOTE->EVENTS_IN[channel_number] = 0; -} - - -/** - * @brief Function for unconfiguring GPIOTE channel. - * - * - * Note that when unconfiguring the channel, the pin is configured as GPIO PIN_CNF configuration. - * - * @param channel_number specifies the GPIOTE channel [0:3] to unconfigure. - */ -static __INLINE void nrf_gpiote_unconfig(uint32_t channel_number) -{ - /* Unonfigure the channel as the caller expects */ - NRF_GPIOTE->CONFIG[channel_number] = (GPIOTE_CONFIG_MODE_Disabled << GPIOTE_CONFIG_MODE_Pos) | - (31UL << GPIOTE_CONFIG_PSEL_Pos) | - (GPIOTE_CONFIG_POLARITY_Toggle << GPIOTE_CONFIG_POLARITY_Pos); -} - - -/** @} */ - -#endif \ No newline at end of file