http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/adc/nrf_drv_adc.h ---------------------------------------------------------------------- diff --git a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/adc/nrf_drv_adc.h b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/adc/nrf_drv_adc.h deleted file mode 100644 index 3639046..0000000 --- a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/adc/nrf_drv_adc.h +++ /dev/null @@ -1,298 +0,0 @@ -/* Copyright (c) 2015 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. - * - */ - -#include "nrf_adc.h" -#include "nrf_drv_config.h" -#include "sdk_errors.h" -#include <stdbool.h> - -#ifdef __cplusplus -extern "C" { -#endif - - -/** - * @addtogroup nrf_adc ADC HAL and driver - * @ingroup nrf_drivers - * @brief Analog-to-digital converter (ADC) APIs. - * @details The ADC HAL provides basic APIs for accessing the registers of the analog-to-digital converter. - * The ADC driver provides APIs on a higher level. - * - * @defgroup nrf_adc_drv ADC driver - * @{ - * @ingroup nrf_adc - * @brief Analog-to-digital converter (ADC) driver. - */ - - -/** - * @brief Driver event types. - */ -typedef enum -{ - NRF_DRV_ADC_EVT_DONE, ///< Event generated when the buffer is filled with samples. - NRF_DRV_ADC_EVT_SAMPLE, ///< Event generated when the requested channel is sampled. -} nrf_drv_adc_evt_type_t; - -typedef int16_t nrf_adc_value_t; - -/** - * @brief Analog-to-digital converter driver DONE event. - */ -typedef struct -{ - nrf_adc_value_t * p_buffer; ///< Pointer to buffer with converted samples. - uint16_t size; ///< Number of samples in the buffer. -} nrf_drv_adc_done_evt_t; - -/** - * @brief Analog-to-digital converter driver SAMPLE event. - */ -typedef struct -{ - nrf_adc_value_t sample; ///< Converted sample. -} nrf_drv_adc_sample_evt_t; - -/** - * @brief Analog-to-digital converter driver event. - */ -typedef struct -{ - nrf_drv_adc_evt_type_t type; ///< Event type. - union - { - nrf_drv_adc_done_evt_t done; ///< Data for DONE event. - nrf_drv_adc_sample_evt_t sample; ///< Data for SAMPLE event. - } data; -} nrf_drv_adc_evt_t; - -/**@brief Macro for initializing the ADC channel with the default configuration. */ -#define NRF_DRV_ADC_DEFAULT_CHANNEL(analog_input) \ - {{{ \ - .resolution = NRF_ADC_CONFIG_RES_10BIT, \ - .input = NRF_ADC_CONFIG_SCALING_INPUT_FULL_SCALE, \ - .reference = NRF_ADC_CONFIG_REF_VBG, \ - .ain = (analog_input) \ - }}, NULL} - -/** - * @brief ADC channel configuration. - * - * @note The bit fields reflect bit fields in the ADC CONFIG register. - */ -typedef struct -{ - uint32_t resolution :2; ///< 8-10 bit resolution. - uint32_t input :3; ///< Input selection and scaling. - uint32_t reference :2; ///< Reference source. - uint32_t reserved :1; ///< Unused bit fields. - uint32_t ain :8; ///< Analog input. - uint32_t external_reference:2; ///< Eternal reference source. -}nrf_drv_adc_channel_config_t; - -// Forward declaration of the nrf_drv_adc_channel_t type. -typedef struct nrf_drv_adc_channel_s nrf_drv_adc_channel_t; - -/** - * @brief ADC channel. - * - * This structure is defined by the user and used by the driver. Therefore, it should - * not be defined on the stack as a local variable. - */ -struct nrf_drv_adc_channel_s -{ - union - { - nrf_drv_adc_channel_config_t config; ///< Channel configuration. - uint32_t data; ///< Raw value. - } config; - nrf_drv_adc_channel_t * p_next; ///< Pointer to the next enabled channel (for internal use). -}; - -/** - * @brief ADC configuration. - */ -typedef struct -{ - uint8_t interrupt_priority; ///< Priority of ADC interrupt. -} nrf_drv_adc_config_t; - -/** @brief ADC default configuration. */ -#define NRF_DRV_ADC_DEFAULT_CONFIG \ -{ \ - .interrupt_priority = ADC_CONFIG_IRQ_PRIORITY \ -} - -/** - * @brief User event handler prototype. - * - * This function is called when the requested number of samples has been processed. - * - * @param p_event Event. - */ -typedef void (*nrf_drv_adc_event_handler_t)(nrf_drv_adc_evt_t const * p_event); - -/** - * @brief Function for initializing the ADC. - * - * If a valid event handler is provided, the driver is initialized in non-blocking mode. - * If event_handler is NULL, the driver works in blocking mode. - * - * @param[in] p_config Driver configuration. - * @param[in] event_handler Event handler provided by the user. - * - * @retval NRF_SUCCESS If initialization was successful. - * @retval NRF_ERROR_INVALID_STATE If the driver is already initialized. - */ -ret_code_t nrf_drv_adc_init(nrf_drv_adc_config_t const * p_config, - nrf_drv_adc_event_handler_t event_handler); - -/** - * @brief Function for uninitializing the ADC. - * - * This function stops all ongoing conversions and disables all channels. - */ -void nrf_drv_adc_uninit(void); - -/** - * @brief Function for enabling an ADC channel. - * - * This function configures and enables the channel. When @ref nrf_drv_adc_buffer_convert is - * called, all channels that have been enabled with this function are sampled. - * - * @note The channel instance variable @p p_channel is used by the driver as an item - * in a list. Therefore, it cannot be an automatic variable, and an assertion fails if it is - * an automatic variable (if asserts are enabled). - */ -void nrf_drv_adc_channel_enable(nrf_drv_adc_channel_t * const p_channel); - -/** - * @brief Function for disabling an ADC channel. - */ -void nrf_drv_adc_channel_disable(nrf_drv_adc_channel_t * const p_channel); - -/** - * @brief Function for starting ADC sampling. - * - * This function triggers single ADC sampling. If more than one channel is enabled, the driver - * emulates scanning and all channels are sampled in the order they were enabled. - */ -void nrf_drv_adc_sample(void); - -/** - * @brief Function for executing a single ADC conversion. - * - * This function selects the desired input and starts a single conversion. If a valid pointer - * is provided for the result, the function blocks until the conversion is completed. Otherwise, the - * function returns when the conversion is started, and the result is provided in an event (driver - * must be initialized in non-blocking mode otherwise an assertion will fail). The function will fail if - * ADC is busy. The channel does not need to be enabled to perform a single conversion. - * - * @param[in] p_channel Channel. - * @param[out] p_value Pointer to the location where the result should be placed. Unless NULL is - * provided, the function is blocking. - * - * @retval NRF_SUCCESS If conversion was successful. - * @retval NRF_ERROR_BUSY If the ADC driver is busy. - */ -ret_code_t nrf_drv_adc_sample_convert(nrf_drv_adc_channel_t const * const p_channel, - nrf_adc_value_t * p_value); - -/** - * @brief Function for converting data to the buffer. - * - * If the driver is initialized in non-blocking mode, this function returns when the first conversion - * is set up. When the buffer is filled, the application is notified by the event handler. If the - * driver is initialized in blocking mode, the function returns when the buffer is filled. - * - * Conversion is done on all enabled channels, but it is not triggered by this - * function. This function will prepare the ADC for sampling and then - * wait for the SAMPLE task. Sampling can be triggered manually by the @ref - * nrf_drv_adc_sample function or by PPI using the @ref NRF_ADC_TASK_START task. - * - * @note If more than one channel is enabled, the function emulates scanning, and - * a single START task will trigger conversion on all enabled channels. For example: - * If 3 channels are enabled and the user requests 6 samples, the completion event - * handler will be called after 2 START tasks. - * @note The application must adjust the sampling frequency. The maximum frequency - * depends on the sampling timer and the maximum latency of the ADC interrupt. If - * an interrupt is not handled before the next sampling is triggered, the sample - * will be lost. - * - * @param[in] buffer Result buffer. - * @param[in] size Buffer size in samples. - * - * @retval NRF_SUCCESS If conversion was successful. - * @retval NRF_ERROR_BUSY If the driver is busy. - */ -ret_code_t nrf_drv_adc_buffer_convert(nrf_adc_value_t * buffer, uint16_t size); - -/** - * @brief Function for retrieving the ADC state. - * - * @retval true If the ADC is busy. - * @retval false If the ADC is ready. - */ -bool nrf_drv_adc_is_busy(void); - -/** - * @brief Function for getting the address of the ADC START task. - * - * This function is used to get the address of the START task, which can be used to trigger ADC - * conversion. - * - * @return Start task address. - */ -__STATIC_INLINE uint32_t nrf_drv_adc_start_task_get(void); - -/** - * @brief Function for converting a GPIO pin number to an analog input pin mask to be used in - * the ADC channel configuration. - * - * @param[in] pin GPIO pin. - * - * @return Analog input pin mask. The function returns @ref NRF_ADC_CONFIG_INPUT_DISABLED - * if the specified pin is not an analog input. - */ -__STATIC_INLINE nrf_adc_config_input_t nrf_drv_adc_gpio_to_ain(uint32_t pin); - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE uint32_t nrf_drv_adc_start_task_get(void) -{ - return nrf_adc_task_address_get(NRF_ADC_TASK_START); -} - -__STATIC_INLINE nrf_adc_config_input_t nrf_drv_adc_gpio_to_ain(uint32_t pin) -{ - // AIN2 - AIN7 - if (pin >= 1 && pin <= 6) - { - return (nrf_adc_config_input_t)(1 << (pin+1)); - } - // AIN0 - AIN1 - else if (pin >= 26 && pin <= 27) - { - return (nrf_adc_config_input_t)(1 <<(pin - 26)); - } - else - { - return NRF_ADC_CONFIG_INPUT_DISABLED; - } -} -#endif - -#ifdef __cplusplus -} -#endif - -/** @} */
http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/ble_flash/ble_flash.c ---------------------------------------------------------------------- diff --git a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/ble_flash/ble_flash.c b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/ble_flash/ble_flash.c deleted file mode 100644 index 12438cc..0000000 --- a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/ble_flash/ble_flash.c +++ /dev/null @@ -1,286 +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. - * - */ - -#include "ble_flash.h" -#include <stdlib.h> -#include <stdint.h> -#include <string.h> -#include "nrf_soc.h" -#include "nordic_common.h" -#include "nrf_error.h" -#include "nrf.h" -#include "app_util.h" - - -static volatile bool m_radio_active = false; /**< TRUE if radio is active (or about to become active), FALSE otherwise. */ - - -uint16_t ble_flash_crc16_compute(uint8_t * p_data, uint16_t size, uint16_t * p_crc) -{ - uint16_t i; - uint16_t crc = (p_crc == NULL) ? 0xffff : *p_crc; - - for (i = 0; i < size; i++) - { - crc = (unsigned char)(crc >> 8) | (crc << 8); - crc ^= p_data[i]; - crc ^= (unsigned char)(crc & 0xff) >> 4; - crc ^= (crc << 8) << 4; - crc ^= ((crc & 0xff) << 4) << 1; - } - return crc; -} - - -/**@brief Function for erasing a page in flash. - * - * @param[in] p_page Pointer to first word in page to be erased. - */ -static void flash_page_erase(uint32_t * p_page) -{ - // Turn on flash erase enable and wait until the NVMC is ready. - NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Een << NVMC_CONFIG_WEN_Pos); - while (NRF_NVMC->READY == NVMC_READY_READY_Busy) - { - // Do nothing. - } - - // Erase page. - NRF_NVMC->ERASEPAGE = (uint32_t)p_page; - while (NRF_NVMC->READY == NVMC_READY_READY_Busy) - { - // Do nothing. - } - - // Turn off flash erase enable and wait until the NVMC is ready. - NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos); - while (NRF_NVMC->READY == NVMC_READY_READY_Busy) - { - // Do nothing - } -} - - -/**@brief Function for writing one word to flash. Unprotected write, which can interfere with radio communication. - * - * @details This function DOES NOT use the m_radio_active variable, but will force the write even - * when the radio is active. To be used only from @ref ble_flash_page_write. - * - * @note Flash location to be written must have been erased previously. - * - * @param[in] p_address Pointer to flash location to be written. - * @param[in] value Value to write to flash. - */ -static void flash_word_unprotected_write(uint32_t * p_address, uint32_t value) -{ - // Turn on flash write enable and wait until the NVMC is ready. - NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos); - while (NRF_NVMC->READY == NVMC_READY_READY_Busy) - { - // Do nothing. - } - *p_address = value; - - // Wait flash write to finish - while (NRF_NVMC->READY == NVMC_READY_READY_Busy) - { - // Do nothing. - } - - // Turn off flash write enable and wait until the NVMC is ready. - NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos); - while (NRF_NVMC->READY == NVMC_READY_READY_Busy) - { - // Do nothing. - } -} - - -/**@brief Function for writing one word to flash. - * - * @note Flash location to be written must have been erased previously. - * - * @param[in] p_address Pointer to flash location to be written. - * @param[in] value Value to write to flash. - */ -static void flash_word_write(uint32_t * p_address, uint32_t value) -{ - // If radio is active, wait for it to become inactive. - while (m_radio_active) - { - // Do nothing (just wait for radio to become inactive). - (void) sd_app_evt_wait(); - } - - // Turn on flash write enable and wait until the NVMC is ready. - NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Wen << NVMC_CONFIG_WEN_Pos); - while (NRF_NVMC->READY == NVMC_READY_READY_Busy) - { - // Do nothing. - } - - *p_address = value; - // Wait flash write to finish - while (NRF_NVMC->READY == NVMC_READY_READY_Busy) - { - // Do nothing. - } - // Turn off flash write enable and wait until the NVMC is ready. - NRF_NVMC->CONFIG = (NVMC_CONFIG_WEN_Ren << NVMC_CONFIG_WEN_Pos); - while (NRF_NVMC->READY == NVMC_READY_READY_Busy) - { - // Do nothing - } -} - - -uint32_t ble_flash_word_write(uint32_t * p_address, uint32_t value) -{ - flash_word_write(p_address, value); - return NRF_SUCCESS; -} - - -uint32_t ble_flash_block_write(uint32_t * p_address, uint32_t * p_in_array, uint16_t word_count) -{ - uint16_t i; - - for (i = 0; i < word_count; i++) - { - flash_word_write(p_address, p_in_array[i]); - p_address++; - } - - return NRF_SUCCESS; -} - - -uint32_t ble_flash_page_erase(uint8_t page_num) -{ - uint32_t * p_page = (uint32_t *)(BLE_FLASH_PAGE_SIZE * page_num); - flash_page_erase(p_page); - - return NRF_SUCCESS; -} - - -uint32_t ble_flash_page_write(uint8_t page_num, uint32_t * p_in_array, uint8_t word_count) -{ - int i; - uint32_t * p_page; - uint32_t * p_curr_addr; - uint16_t in_data_crc; - uint16_t flash_crc; - uint32_t flash_header; - - p_page = (uint32_t *)(BLE_FLASH_PAGE_SIZE * page_num); - p_curr_addr = p_page; - - // Calculate CRC of the data to write. - in_data_crc = ble_flash_crc16_compute((uint8_t *)p_in_array, - word_count * sizeof(uint32_t), - NULL); - - // Compare the calculated to the one in flash. - flash_header = *p_curr_addr; - flash_crc = (uint16_t)flash_header; - - if (flash_crc == in_data_crc) - { - // Data is the same as the data already stored in flash, return without modifying flash. - return NRF_SUCCESS; - } - - // Erase flash page - flash_page_erase(p_page); - - // Reserve space for magic number (for detecting if flash content is valid). - p_curr_addr++; - - // Reserve space for saving word_count. - p_curr_addr++; - - // Write data - for (i = 0; i < word_count; i++) - { - flash_word_unprotected_write(p_curr_addr, p_in_array[i]); - p_curr_addr++; - } - - // Write number of elements. - flash_word_write(p_page + 1, (uint32_t)(word_count)); - - // Write magic number and CRC to indicate that flash content is valid. - flash_header = BLE_FLASH_MAGIC_NUMBER | (uint32_t)in_data_crc; - flash_word_write(p_page, flash_header); - - return NRF_SUCCESS; -} - - -uint32_t ble_flash_page_read(uint8_t page_num, uint32_t * p_out_array, uint8_t * p_word_count) -{ - int byte_count; - uint32_t * p_page; - uint32_t * p_curr_addr; - uint32_t flash_header; - uint32_t calc_header; - uint16_t calc_crc; - uint32_t tmp; - - p_page = (uint32_t *)(BLE_FLASH_PAGE_SIZE * page_num); - p_curr_addr = p_page; - - // Check if block is valid - flash_header = *p_curr_addr; - tmp = flash_header & 0xFFFF0000; - if (tmp != BLE_FLASH_MAGIC_NUMBER) - { - *p_word_count = 0; - return NRF_ERROR_NOT_FOUND; - } - p_curr_addr++; - - // Read number of elements - *p_word_count = (uint8_t)(*(p_curr_addr)); - p_curr_addr++; - - // Read data - byte_count = (*p_word_count) * sizeof(uint32_t); - memcpy(p_out_array, p_curr_addr, byte_count); - - // Check CRC - calc_crc = ble_flash_crc16_compute((uint8_t *)p_out_array, - (*p_word_count) * sizeof(uint32_t), - NULL); - calc_header = BLE_FLASH_MAGIC_NUMBER | (uint32_t)calc_crc; - - if (calc_header != flash_header) - { - return NRF_ERROR_NOT_FOUND; - } - - return NRF_SUCCESS; -} - - -uint32_t ble_flash_page_addr(uint8_t page_num, uint32_t ** pp_page_addr) -{ - *pp_page_addr = (uint32_t *)(BLE_FLASH_PAGE_SIZE * page_num); - return NRF_SUCCESS; -} - - -void ble_flash_on_radio_active_evt(bool radio_active) -{ - m_radio_active = radio_active; -} http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/ble_flash/ble_flash.h ---------------------------------------------------------------------- diff --git a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/ble_flash/ble_flash.h b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/ble_flash/ble_flash.h deleted file mode 100644 index 080ea5a..0000000 --- a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/ble_flash/ble_flash.h +++ /dev/null @@ -1,150 +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. - * - */ - -/** @file - * - * @defgroup ble_flash_module Flash Manager - * @{ - * @ingroup ble_sdk_lib - * @brief Module for accessing flash memory. - * - * @details It contains functions for reading, writing and erasing one page in flash. - * - * The module uses the first 32 bits of the flash page to write a magic number in order to - * determine if the page has been written or not. - * - * @note Be careful not to use a page number in the SoftDevice area (which currently occupies the - * range 0 to 127), or in your application space! In both cases, this would end up - * with a hard fault. - */ - -#ifndef BLE_FLASH_H__ -#define BLE_FLASH_H__ - -#include <stdint.h> -#include <stdbool.h> -#include "nrf.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#define BLE_FLASH_PAGE_SIZE ((uint16_t)NRF_FICR->CODEPAGESIZE) /**< Size of one flash page. */ -#define BLE_FLASH_MAGIC_NUMBER 0x45DE0000 /**< Magic value to identify if flash contains valid data. */ -#define BLE_FLASH_EMPTY_MASK 0xFFFFFFFF /**< Bit mask that defines an empty address in flash. */ - - -/**@brief Macro for getting the end of the flash available for application. - * - * @details The result flash page number indicates the end boundary of the flash available - * to the application. If a bootloader is used, the end will be the start of the - * bootloader region. Otherwise, the end will be the size of the flash. - */ -#define BLE_FLASH_PAGE_END \ - ((NRF_UICR->NRFFW[0] != BLE_FLASH_EMPTY_MASK) \ - ? (NRF_UICR->NRFFW[0] / BLE_FLASH_PAGE_SIZE) \ - : NRF_FICR->CODESIZE) - -/**@brief Function for erasing the specified flash page, and then writes the given data to this page. - * - * @warning This operation blocks the CPU. DO NOT use while in a connection! - * - * @param[in] page_num Page number to update. - * @param[in] p_in_array Pointer to a RAM area containing the elements to write in flash. - * This area has to be 32 bits aligned. - * @param[in] word_count Number of 32 bits words to write in flash. - * - * @return NRF_SUCCESS on successful flash write, otherwise an error code. - */ -uint32_t ble_flash_page_write(uint8_t page_num, uint32_t * p_in_array, uint8_t word_count); - -/**@brief Function for reading data from flash to RAM. - * - * @param[in] page_num Page number to read. - * @param[out] p_out_array Pointer to a RAM area where the found data will be written. - * This area has to be 32 bits aligned. - * @param[out] p_word_count Number of 32 bits words read. - * - * @return NRF_SUCCESS on successful upload, NRF_ERROR_NOT_FOUND if no valid data has been found - * in flash (first 32 bits not equal to the MAGIC_NUMBER+CRC). - */ -uint32_t ble_flash_page_read(uint8_t page_num, uint32_t * p_out_array, uint8_t * p_word_count); - -/**@brief Function for erasing a flash page. - * - * @note This operation blocks the CPU, so it should not be done while the radio is running! - * - * @param[in] page_num Page number to erase. - * - * @return NRF_SUCCESS on success, an error_code otherwise. - */ -uint32_t ble_flash_page_erase(uint8_t page_num); - -/**@brief Function for writing one word to flash. - * - * @note Flash location to be written must have been erased previously. - * - * @param[in] p_address Pointer to flash location to be written. - * @param[in] value Value to write to flash. - * - * @return NRF_SUCCESS. - */ -uint32_t ble_flash_word_write(uint32_t * p_address, uint32_t value); - -/**@brief Function for writing a data block to flash. - * - * @note Flash locations to be written must have been erased previously. - * - * @param[in] p_address Pointer to start of flash location to be written. - * @param[in] p_in_array Pointer to start of flash block to be written. - * @param[in] word_count Number of words to be written. - * - * @return NRF_SUCCESS. - */ -uint32_t ble_flash_block_write(uint32_t * p_address, uint32_t * p_in_array, uint16_t word_count); - -/**@brief Function for computing pointer to start of specified flash page. - * - * @param[in] page_num Page number. - * @param[out] pp_page_addr Pointer to start of flash page. - * - * @return NRF_SUCCESS. - */ -uint32_t ble_flash_page_addr(uint8_t page_num, uint32_t ** pp_page_addr); - -/**@brief Function for calculating a 16 bit CRC using the CRC-16-CCITT scheme. - * - * @param[in] p_data Pointer to data on which the CRC is to be calulated. - * @param[in] size Number of bytes on which the CRC is to be calulated. - * @param[in] p_crc Initial CRC value (if NULL, a preset value is used as the initial value). - * - * @return Calculated CRC. - */ -uint16_t ble_flash_crc16_compute(uint8_t * p_data, uint16_t size, uint16_t * p_crc); - -/**@brief Function for handling flashing module Radio Notification event. - * - * @note For flash writing to work safely while in a connection or while advertising, this function - * MUST be called from the Radio Notification module's event handler (see - * @ref ble_radio_notification for details). - * - * @param[in] radio_active TRUE if radio is active (or about to become active), FALSE otherwise. - */ -void ble_flash_on_radio_active_evt(bool radio_active); - -#ifdef __cplusplus -} -#endif - -#endif // BLE_FLASH_H__ - -/** @} */ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/clock/nrf_drv_clock.c ---------------------------------------------------------------------- diff --git a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/clock/nrf_drv_clock.c b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/clock/nrf_drv_clock.c deleted file mode 100644 index 8545117..0000000 --- a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/clock/nrf_drv_clock.c +++ /dev/null @@ -1,479 +0,0 @@ -/* Copyright (c) 2015 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. - * - */ - -#include "nrf_drv_clock.h" -#include "nrf_error.h" -#include "nordic_common.h" - -#ifdef SOFTDEVICE_PRESENT -#include "nrf_sdm.h" -#include "nrf_soc.h" -#include "app_util_platform.h" -#else -#include "app_util_platform.h" -#endif // SOFTDEVICE_PRESENT - -/*lint -save -e652 */ -#define NRF_CLOCK_LFCLK_RC CLOCK_LFCLKSRC_SRC_RC -#define NRF_CLOCK_LFCLK_Xtal CLOCK_LFCLKSRC_SRC_Xtal -#define NRF_CLOCK_LFCLK_Synth CLOCK_LFCLKSRC_SRC_Synth -/*lint -restore */ - -#define INT_MAX 0xFFFFFFFF - -#if (CLOCK_CONFIG_LF_SRC == NRF_CLOCK_LFCLK_RC) && !defined(SOFTDEVICE_PRESENT) -#define CALIBRATION_SUPPORT 1 -#else -#define CALIBRATION_SUPPORT 0 -#endif -typedef enum -{ - CAL_STATE_IDLE, - CAL_STATE_CT, - CAL_STATE_HFCLK_REQ, - CAL_STATE_CAL, - CAL_STATE_ABORT, -} nrf_drv_clock_cal_state_t; - -/**@brief CLOCK control block. */ -typedef struct -{ - volatile uint32_t hfclk_requests; /*< High-frequency clock request counter. */ - volatile nrf_drv_clock_handler_item_t * p_hf_head; - bool module_initialized; /*< Indicate the state of module */ - volatile bool hfclk_on; /*< High-frequency clock state. */ -#ifndef SOFTDEVICE_PRESENT - volatile bool lfclk_on; /*< Low-frequency clock state. */ - uint32_t lfclk_requests; /*< Low-frequency clock request counter. */ - volatile nrf_drv_clock_handler_item_t * p_lf_head; -#if CALIBRATION_SUPPORT - nrf_drv_clock_handler_item_t cal_hfclk_started_handler_item; - nrf_drv_clock_event_handler_t cal_done_handler; - volatile nrf_drv_clock_cal_state_t cal_state; -#endif //CALIBRATION_SUPPORT -#endif //SOFTDEVICE_PRESENT -}nrf_drv_clock_cb_t; - -static nrf_drv_clock_cb_t m_clock_cb; - -#ifndef SOFTDEVICE_PRESENT -/**@brief Function for starting LFCLK. This function will return immediately without waiting for start. - */ -static void lfclk_start(void) -{ - nrf_clock_event_clear(NRF_CLOCK_EVENT_LFCLKSTARTED); - nrf_clock_int_enable(NRF_CLOCK_INT_LF_STARTED_MASK); - nrf_clock_task_trigger(NRF_CLOCK_TASK_LFCLKSTART); -} - -/**@brief Function for stopping LFCLK and calibration (if it was set up). - */ -static void lfclk_stop(void) -{ -#if CALIBRATION_SUPPORT - (void)nrf_drv_clock_calibration_abort(); -#endif //CALIBRATION_SUPPORT - - nrf_clock_task_trigger(NRF_CLOCK_TASK_LFCLKSTOP); - while (nrf_clock_lf_is_running()) - {} -} -#endif -static void hfclk_start(void) -{ -#ifndef SOFTDEVICE_PRESENT - nrf_clock_event_clear(NRF_CLOCK_EVENT_HFCLKSTARTED); - nrf_clock_int_enable(NRF_CLOCK_INT_HF_STARTED_MASK); - nrf_clock_task_trigger(NRF_CLOCK_TASK_HFCLKSTART); -#else - UNUSED_VARIABLE(sd_clock_hfclk_request()); -#endif -} - -static void hfclk_stop(void) -{ -#ifndef SOFTDEVICE_PRESENT - nrf_clock_task_trigger(NRF_CLOCK_TASK_HFCLKSTOP); - while (nrf_clock_hf_is_running(NRF_CLOCK_HFCLK_HIGH_ACCURACY)) - {} -#else - UNUSED_VARIABLE(sd_clock_hfclk_release()); -#endif -} - -ret_code_t nrf_drv_clock_init(void) -{ - uint32_t result = NRF_SUCCESS; - - if (m_clock_cb.module_initialized) - { - return MODULE_ALREADY_INITIALIZED; - } - - m_clock_cb.p_hf_head = NULL; - m_clock_cb.hfclk_requests = 0; -#ifndef SOFTDEVICE_PRESENT - m_clock_cb.p_lf_head = NULL; - m_clock_cb.lfclk_requests = 0; - nrf_clock_xtalfreq_set(CLOCK_CONFIG_XTAL_FREQ); - nrf_clock_lf_src_set((nrf_clock_lfclk_t)CLOCK_CONFIG_LF_SRC); - nrf_drv_common_irq_enable(POWER_CLOCK_IRQn, CLOCK_CONFIG_IRQ_PRIORITY); -#if CALIBRATION_SUPPORT - m_clock_cb.cal_state = CAL_STATE_IDLE; -#endif // CALIBRATION_SUPPORT -#else // SOFTDEVICE_PRESENT - uint8_t is_enabled; - result = sd_softdevice_is_enabled(&is_enabled); - if((result == NRF_SUCCESS) && !is_enabled) - { - result = NRF_ERROR_SOFTDEVICE_NOT_ENABLED; - } -#endif // SOFTDEVICE_PRESENT - m_clock_cb.module_initialized = true; - return result; -} - -void nrf_drv_clock_uninit(void) -{ - ASSERT(m_clock_cb.module_initialized); -#ifndef SOFTDEVICE_PRESENT - nrf_drv_common_irq_disable(POWER_CLOCK_IRQn); - nrf_clock_int_disable(0xFFFFFFFF); - lfclk_stop(); -#endif - hfclk_stop(); - m_clock_cb.module_initialized = false; -} - -static void item_enqueue(nrf_drv_clock_handler_item_t ** p_head, - nrf_drv_clock_handler_item_t * p_item) -{ - if (*p_head) - { - p_item->p_next = *p_head; - *p_head = p_item; - } - else - { - p_item->p_next = NULL; - *p_head = p_item; - } -} - -static nrf_drv_clock_handler_item_t * item_dequeue(nrf_drv_clock_handler_item_t ** p_head) -{ - nrf_drv_clock_handler_item_t * p_item = *p_head; - if (p_item) - { - *p_head = p_item->p_next; - } - - return p_item; -} - -void nrf_drv_clock_lfclk_request(nrf_drv_clock_handler_item_t * p_handler_item) -{ - ASSERT(m_clock_cb.module_initialized); -#ifndef SOFTDEVICE_PRESENT - ASSERT(m_clock_cb.lfclk_requests != INT_MAX); - CRITICAL_REGION_ENTER(); - if (m_clock_cb.lfclk_on) - { - if (p_handler_item) - { - p_handler_item->event_handler(NRF_DRV_CLOCK_EVT_LFCLK_STARTED); - } - } - else - { - - if (p_handler_item) - { - item_enqueue((nrf_drv_clock_handler_item_t **)&m_clock_cb.p_lf_head, p_handler_item); - } - if (m_clock_cb.lfclk_requests == 0) - { - lfclk_start(); - } - } - m_clock_cb.lfclk_requests++; - CRITICAL_REGION_EXIT(); -#else - if (p_handler_item) - { - p_handler_item->event_handler(NRF_DRV_CLOCK_EVT_LFCLK_STARTED); - } -#endif // SOFTDEVICE_PRESENT -} - - -void nrf_drv_clock_lfclk_release(void) -{ - ASSERT(m_clock_cb.module_initialized); -#ifndef SOFTDEVICE_PRESENT - ASSERT(m_clock_cb.lfclk_requests > 0); - - CRITICAL_REGION_ENTER(); - m_clock_cb.lfclk_requests--; - if (m_clock_cb.lfclk_requests == 0) - { - lfclk_stop(); - m_clock_cb.lfclk_on = false; - m_clock_cb.p_lf_head = NULL; - } - CRITICAL_REGION_EXIT(); -#endif // SOFTDEVICE_PRESENT -} - - -bool nrf_drv_clock_lfclk_is_running(void) -{ - ASSERT(m_clock_cb.module_initialized); - bool result; -#ifndef SOFTDEVICE_PRESENT - result = nrf_clock_lf_is_running(); -#else - result = true; -#endif - return result; -} - -void nrf_drv_clock_hfclk_request(nrf_drv_clock_handler_item_t * p_handler_item) -{ - ASSERT(m_clock_cb.module_initialized); - ASSERT(m_clock_cb.hfclk_requests != INT_MAX); - - CRITICAL_REGION_ENTER(); - if (m_clock_cb.hfclk_on) - { - if (p_handler_item) - { - p_handler_item->event_handler(NRF_DRV_CLOCK_EVT_HFCLK_STARTED); - } - } - else - { - if (p_handler_item) - { - item_enqueue((nrf_drv_clock_handler_item_t **)&m_clock_cb.p_hf_head, p_handler_item); - } - if (m_clock_cb.hfclk_requests == 0) - { - hfclk_start(); - } - } - m_clock_cb.hfclk_requests++; - CRITICAL_REGION_EXIT(); -} - -void nrf_drv_clock_hfclk_release(void) -{ - ASSERT(m_clock_cb.module_initialized); - ASSERT(m_clock_cb.hfclk_requests > 0); - - //disable interrupts CLOCK or SoftDevice events - CRITICAL_REGION_ENTER(); - m_clock_cb.hfclk_requests--; - if (m_clock_cb.hfclk_requests == 0) - { - hfclk_stop(); - m_clock_cb.hfclk_on = false; - m_clock_cb.p_hf_head = NULL; - } - CRITICAL_REGION_EXIT(); - //enable interrupts CLOCK or SoftDevice events -} - -bool nrf_drv_clock_hfclk_is_running(void) -{ - bool result; - ASSERT(m_clock_cb.module_initialized); -#ifndef SOFTDEVICE_PRESENT - result = nrf_clock_hf_is_running(NRF_CLOCK_HFCLK_HIGH_ACCURACY); -#else - uint32_t is_running; - UNUSED_VARIABLE(sd_clock_hfclk_is_running(&is_running)); - result = is_running ? true : false; -#endif - return result; -} - -#if CALIBRATION_SUPPORT -static void clock_calibration_hf_started(nrf_drv_clock_evt_type_t event) -{ - if (m_clock_cb.cal_state == CAL_STATE_ABORT) - { - nrf_drv_clock_hfclk_release(); - m_clock_cb.cal_state = CAL_STATE_IDLE; - if (m_clock_cb.cal_done_handler) - { - m_clock_cb.cal_done_handler(NRF_DRV_CLOCK_EVT_CAL_ABORTED); - } - } - else - { - nrf_clock_int_enable(NRF_CLOCK_INT_DONE_MASK); - m_clock_cb.cal_state = CAL_STATE_CAL; - nrf_clock_task_trigger(NRF_CLOCK_TASK_CAL); - } -} -#endif - -ret_code_t nrf_drv_clock_calibration_start(uint8_t interval, nrf_drv_clock_event_handler_t handler) -{ -#if CALIBRATION_SUPPORT - ASSERT(m_clock_cb.cal_state == CAL_STATE_IDLE); - ret_code_t ret = NRF_SUCCESS; - if (m_clock_cb.lfclk_on == false) - { - ret = NRF_ERROR_INVALID_STATE; - } - else if (m_clock_cb.cal_state == CAL_STATE_IDLE) - { - m_clock_cb.cal_done_handler = handler; - m_clock_cb.cal_hfclk_started_handler_item.event_handler = clock_calibration_hf_started; - if (interval == 0) - { - m_clock_cb.cal_state = CAL_STATE_HFCLK_REQ; - nrf_drv_clock_hfclk_request(&m_clock_cb.cal_hfclk_started_handler_item); - } - else - { - m_clock_cb.cal_state = CAL_STATE_CT; - nrf_clock_cal_timer_timeout_set(interval); - nrf_clock_int_enable(NRF_CLOCK_INT_CTTO_MASK); - nrf_clock_task_trigger(NRF_CLOCK_TASK_CTSTART); - } - } - else - { - ret = NRF_ERROR_BUSY; - } - return ret; -#else //CALIBRATION_SUPPORT - return NRF_ERROR_FORBIDDEN; -#endif -} - - -ret_code_t nrf_drv_clock_calibration_abort(void) -{ -#if CALIBRATION_SUPPORT - CRITICAL_REGION_ENTER(); - switch(m_clock_cb.cal_state) - { - case CAL_STATE_CT: - nrf_clock_int_disable(NRF_CLOCK_INT_CTTO_MASK); - nrf_clock_task_trigger(NRF_CLOCK_TASK_CTSTOP); - m_clock_cb.cal_state = CAL_STATE_IDLE; - if (m_clock_cb.cal_done_handler) - { - m_clock_cb.cal_done_handler(NRF_DRV_CLOCK_EVT_CAL_ABORTED); - } - break; - case CAL_STATE_HFCLK_REQ: - /* fall through. */ - case CAL_STATE_CAL: - m_clock_cb.cal_state = CAL_STATE_ABORT; - break; - default: - break; - } - CRITICAL_REGION_EXIT(); - return NRF_SUCCESS; -#else //CALIBRATION_SUPPORT - return NRF_ERROR_FORBIDDEN; -#endif -} - -ret_code_t nrf_drv_clock_is_calibrating(bool * p_is_calibrating) -{ -#if CALIBRATION_SUPPORT - ASSERT(m_clock_cb.module_initialized); - *p_is_calibrating = (m_clock_cb.cal_state != CAL_STATE_IDLE); - return NRF_SUCCESS; -#else //CALIBRATION_SUPPORT - return NRF_ERROR_FORBIDDEN; -#endif -} - -static __INLINE void clock_clk_started_notify(nrf_drv_clock_handler_item_t **p_head, - nrf_drv_clock_evt_type_t evt_type) -{ - while(1) - { - nrf_drv_clock_handler_item_t * p_item = item_dequeue(p_head); - if (p_item) - { - p_item->event_handler(evt_type); - } - else - { - break; - } - } -} - -#ifndef SOFTDEVICE_PRESENT -void POWER_CLOCK_IRQHandler(void) -{ - if (nrf_clock_event_check(NRF_CLOCK_EVENT_HFCLKSTARTED)) - { - nrf_clock_event_clear(NRF_CLOCK_EVENT_HFCLKSTARTED); - nrf_clock_int_disable(NRF_CLOCK_INT_HF_STARTED_MASK); - m_clock_cb.hfclk_on = true; - clock_clk_started_notify((nrf_drv_clock_handler_item_t **)&m_clock_cb.p_hf_head, NRF_DRV_CLOCK_EVT_HFCLK_STARTED); - } - if (nrf_clock_event_check(NRF_CLOCK_EVENT_LFCLKSTARTED)) - { - nrf_clock_event_clear(NRF_CLOCK_EVENT_LFCLKSTARTED); - nrf_clock_int_disable(NRF_CLOCK_INT_LF_STARTED_MASK); - m_clock_cb.lfclk_on = true; - clock_clk_started_notify((nrf_drv_clock_handler_item_t **)&m_clock_cb.p_lf_head, NRF_DRV_CLOCK_EVT_LFCLK_STARTED); - } -#if CALIBRATION_SUPPORT - if (nrf_clock_event_check(NRF_CLOCK_EVENT_CTTO)) - { - nrf_clock_event_clear(NRF_CLOCK_EVENT_CTTO); - nrf_clock_int_disable(NRF_CLOCK_INT_CTTO_MASK); - nrf_drv_clock_hfclk_request(&m_clock_cb.cal_hfclk_started_handler_item); - } - - if (nrf_clock_event_check(NRF_CLOCK_EVENT_DONE)) - { - nrf_clock_event_clear(NRF_CLOCK_EVENT_DONE); - nrf_clock_int_disable(NRF_CLOCK_INT_DONE_MASK); - - nrf_drv_clock_hfclk_release(); - nrf_drv_clock_evt_type_t evt_type = (m_clock_cb.cal_state == CAL_STATE_ABORT) ? - NRF_DRV_CLOCK_EVT_CAL_ABORTED : NRF_DRV_CLOCK_EVT_CAL_DONE; - m_clock_cb.cal_state = CAL_STATE_IDLE; - if (m_clock_cb.cal_done_handler) - { - m_clock_cb.cal_done_handler(evt_type); - } - } -#endif //CALIBRATION_SUPPORT -} -#else -void nrf_drv_clock_on_soc_event(uint32_t evt_id) -{ - if (evt_id == NRF_EVT_HFCLKSTARTED) - { - clock_clk_started_notify((nrf_drv_clock_handler_item_t **)&m_clock_cb.p_hf_head, NRF_DRV_CLOCK_EVT_HFCLK_STARTED); - } -} -#endif // SOFTDEVICE_PRESENT - -#undef NRF_CLOCK_LFCLK_RC -#undef NRF_CLOCK_LFCLK_Xtal -#undef NRF_CLOCK_LFCLK_Synth http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/clock/nrf_drv_clock.h ---------------------------------------------------------------------- diff --git a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/clock/nrf_drv_clock.h b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/clock/nrf_drv_clock.h deleted file mode 100644 index 78e13d9..0000000 --- a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/clock/nrf_drv_clock.h +++ /dev/null @@ -1,254 +0,0 @@ -/* Copyright (c) 2015 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_DRV_CLOCK_H__ -#define NRF_DRV_CLOCK_H__ - -#include <stdbool.h> -#include <stdint.h> -#include "sdk_errors.h" -#include "nrf_assert.h" -#include "nrf_clock.h" -#include "nrf_drv_config.h" -#include "nrf_drv_common.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * - * @addtogroup nrf_clock Clock HAL and driver - * @ingroup nrf_drivers - * @brief Clock APIs. - * @details The clock HAL provides basic APIs for accessing the registers of the clock. - * The clock driver provides APIs on a higher level. - * - * @defgroup nrf_clock_drv Clock driver - * @{ - * @ingroup nrf_clock - * @brief Driver for managing the low-frequency clock (LFCLK) and the high-frequency clock (HFCLK). - */ - -/** - * @brief Clock events. - */ -typedef enum -{ - NRF_DRV_CLOCK_EVT_HFCLK_STARTED, ///< HFCLK has been started. - NRF_DRV_CLOCK_EVT_LFCLK_STARTED, ///< LFCLK has been started. - NRF_DRV_CLOCK_EVT_CAL_DONE, ///< Calibration is done. - NRF_DRV_CLOCK_EVT_CAL_ABORTED, ///< Calibration has been aborted. -} nrf_drv_clock_evt_type_t; - -/** - * @brief Clock event handler. - * - * @param[in] event Event. - */ -typedef void (*nrf_drv_clock_event_handler_t)(nrf_drv_clock_evt_type_t event); - -// Forward declaration of the nrf_drv_clock_handler_item_t type. -typedef struct nrf_drv_clock_handler_item_s nrf_drv_clock_handler_item_t; - -struct nrf_drv_clock_handler_item_s -{ - nrf_drv_clock_handler_item_t * p_next; ///< A pointer to the next handler that should be called when the clock is started. - nrf_drv_clock_event_handler_t event_handler; ///< Function to be called when the clock is started. -}; - -/** - * @brief Function for initializing the nrf_drv_clock module. - * - * After initialization, the module is in power off state (clocks are not requested). - * - * @retval NRF_SUCCESS If the procedure was successful. - * @retval MODULE_ALREADY_INITIALIZED If the driver was already initialized. - * @retval NRF_ERROR_SOFTDEVICE_NOT_ENABLED If the SoftDevice was not enabled. - */ -ret_code_t nrf_drv_clock_init(void); - -/** - * @brief Function for uninitializing the clock module. - * - */ -void nrf_drv_clock_uninit(void); - -/** - * @brief Function for requesting the LFCLK. - * - * The low-frequency clock can be requested by different modules - * or contexts. The driver ensures that the clock will be started only when it is requested - * the first time. If the clock is not ready but it was already started, the handler item that is - * provided as an input parameter is added to the list of handlers that will be notified - * when the clock is started. If the clock is already enabled, user callback is called from the - * current context. - * - * The first request will start the selected LFCLK source. If an event handler is - * provided, it will be called once the LFCLK is started. If the LFCLK was already started at this - * time, the event handler will be called from the context of this function. Additionally, - * the @ref nrf_drv_clock_lfclk_is_running function can be polled to check if the clock has started. - * - * @note When a SoftDevice is enabled, the LFCLK is always running and the driver cannot control it. - * - * @note The handler item provided by the user cannot be an automatic variable. - * - * @param[in] p_handler_item A pointer to the event handler structure. - */ -void nrf_drv_clock_lfclk_request(nrf_drv_clock_handler_item_t * p_handler_item); - -/** - * @brief Function for releasing the LFCLK. - * - * If there are no more requests, the LFCLK source will be stopped. - * - * @note When a SoftDevice is enabled, the LFCLK is always running. - */ -void nrf_drv_clock_lfclk_release(void); - -/** - * @brief Function for checking the LFCLK state. - * - * @retval true If the LFCLK is running. - * @retval false If the LFCLK is not running. - */ -bool nrf_drv_clock_lfclk_is_running(void); - -/** - * @brief Function for requesting the high-accuracy source HFCLK. - * - * The high-accuracy source - * can be requested by different modules or contexts. The driver ensures that the high-accuracy - * clock will be started only when it is requested the first time. If the clock is not ready - * but it was already started, the handler item that is provided as an input parameter is added - * to the list of handlers that will be notified when the clock is started. - * - * If an event handler is provided, it will be called once the clock is started. If the clock was already - * started at this time, the event handler will be called from the context of this function. Additionally, - * the @ref nrf_drv_clock_hfclk_is_running function can be polled to check if the clock has started. - * - * @note If a SoftDevice is running, the clock is managed by the SoftDevice and all requests are handled by - * the SoftDevice. This function cannot be called from all interrupt priority levels in that case. - * @note The handler item provided by the user cannot be an automatic variable. - * - * @param[in] p_handler_item A pointer to the event handler structure. - */ -void nrf_drv_clock_hfclk_request(nrf_drv_clock_handler_item_t * p_handler_item); - -/** - * @brief Function for releasing the high-accuracy source HFCLK. - * - * If there are no more requests, the high-accuracy source will be released. - */ -void nrf_drv_clock_hfclk_release(void); - -/** - * @brief Function for checking the HFCLK state. - * - * @retval true If the HFCLK is running (for \nRFXX XTAL source). - * @retval false If the HFCLK is not running. - */ -bool nrf_drv_clock_hfclk_is_running(void); - -/** - * @brief Function for starting a single calibration process. - * - * This function can also delay the start of calibration by a user-specified value. The delay will use - * a low-power timer that is part of the CLOCK module. @ref nrf_drv_clock_is_calibrating can be called to - * check if calibration is still in progress. If a handler is provided, the user can be notified when - * calibration is completed. The ext calibration can be started from the handler context. - * - * The calibration process consists of three phases: - * - Delay (optional) - * - Requesting the high-accuracy HFCLK - * - Hardware-supported calibration - * - * @param[in] delay Time after which the calibration will be started (in 0.25 s units). - * @param[in] handler NULL or user function to be called when calibration is completed or aborted. - * - * @retval NRF_SUCCESS If the procedure was successful. - * @retval NRF_ERROR_FORBIDDEN If a SoftDevice is present or the selected LFCLK source is not an RC oscillator. - * @retval NRF_ERROR_INVALID_STATE If the low-frequency clock is off. - * @retval NRF_ERROR_BUSY If calibration is in progress. - */ -ret_code_t nrf_drv_clock_calibration_start(uint8_t delay, nrf_drv_clock_event_handler_t handler); - -/** - * @brief Function for aborting calibration. - * - * This function aborts on-going calibration. If calibration was started, it cannot be stopped. If a handler - * was provided by @ref nrf_drv_clock_calibration_start, this handler will be called once - * aborted calibration is completed. @ref nrf_drv_clock_is_calibrating can also be used to check - * if the system is calibrating. - * - * @retval NRF_SUCCESS If the procedure was successful. - * @retval NRF_ERROR_FORBIDDEN If a SoftDevice is present or the selected LFCLK source is not an RC oscillator. - */ -ret_code_t nrf_drv_clock_calibration_abort(void); - -/** - * @brief Function for checking if calibration is in progress. - * - * This function indicates that the system is - * in calibration if it is in any of the calibration process phases (see @ref nrf_drv_clock_calibration_start). - * - * @param[out] p_is_calibrating True if calibration is in progress, false if not. - * - * @retval NRF_SUCCESS If the procedure was successful. - * @retval NRF_ERROR_FORBIDDEN If a SoftDevice is present or the selected LFCLK source is not an RC oscillator. - */ -ret_code_t nrf_drv_clock_is_calibrating(bool * p_is_calibrating); - -/**@brief Function for returning a requested task address for the clock driver module. - * - * @param[in] task One of the peripheral tasks. - * - * @return Task address. - */ -__STATIC_INLINE uint32_t nrf_drv_clock_ppi_task_addr(nrf_clock_task_t task); - -/**@brief Function for returning a requested event address for the clock driver module. - * - * @param[in] event One of the peripheral events. - * - * @return Event address. - */ -__STATIC_INLINE uint32_t nrf_drv_clock_ppi_event_addr(nrf_clock_event_t event); - -/** - * @brief Function called by the SoftDevice handler if an @ref nrf_soc event is received from the SoftDevice. - */ -#ifdef SOFTDEVICE_PRESENT -void nrf_drv_clock_on_soc_event(uint32_t evt_id); -#endif -/** - *@} - **/ - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION -__STATIC_INLINE uint32_t nrf_drv_clock_ppi_task_addr(nrf_clock_task_t task) -{ - return nrf_clock_task_address_get(task); -} - -__STATIC_INLINE uint32_t nrf_drv_clock_ppi_event_addr(nrf_clock_event_t event) -{ - return nrf_clock_event_address_get(event); -} -#endif //SUPPRESS_INLINE_IMPLEMENTATION - -/*lint --flb "Leave library region" */ -#ifdef __cplusplus -} -#endif - -#endif // NRF_CLOCK_H__ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/common/nrf_drv_common.c ---------------------------------------------------------------------- diff --git a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/common/nrf_drv_common.c b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/common/nrf_drv_common.c deleted file mode 100644 index eff432d..0000000 --- a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/common/nrf_drv_common.c +++ /dev/null @@ -1,208 +0,0 @@ -/* Copyright (c) 2015 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. - * - */ - -#include <stddef.h> -#include "nrf_drv_common.h" -#include "nrf_assert.h" -#include "app_util_platform.h" - -#ifdef SOFTDEVICE_PRESENT -#include "nrf_soc.h" -#endif - - -#if PERIPHERAL_RESOURCE_SHARING_ENABLED - -typedef struct { - nrf_drv_irq_handler_t handler; - bool acquired; -} shared_resource_t; - -// SPIM0, SPIS0, SPI0, TWIM0, TWIS0, TWI0 -#if (SPI0_ENABLED || SPIS0_ENABLED || TWI0_ENABLED || TWIS0_ENABLED) - #define SERIAL_BOX_0_IN_USE - // [this checking may need a different form in unit tests, hence macro] - #ifndef IS_SERIAL_BOX_0 - #define IS_SERIAL_BOX_0(p_per_base) (p_per_base == NRF_SPI0) - #endif - - static shared_resource_t m_serial_box_0 = { .acquired = false }; - void SPI0_TWI0_IRQHandler(void) - { - ASSERT(m_serial_box_0.handler); - m_serial_box_0.handler(); - } -#endif // (SPI0_ENABLED || SPIS0_ENABLED || TWI0_ENABLED || TWIS0_ENABLED) - -// SPIM1, SPIS1, SPI1, TWIM1, TWIS1, TWI1 -#if (SPI1_ENABLED || SPIS1_ENABLED || TWI1_ENABLED || TWIS1_ENABLED) - #define SERIAL_BOX_1_IN_USE - // [this checking may need a different form in unit tests, hence macro] - #ifndef IS_SERIAL_BOX_1 - #define IS_SERIAL_BOX_1(p_per_base) (p_per_base == NRF_SPI1) - #endif - - static shared_resource_t m_serial_box_1 = { .acquired = false }; - void SPI1_TWI1_IRQHandler(void) - { - ASSERT(m_serial_box_1.handler); - m_serial_box_1.handler(); - } -#endif // (SPI1_ENABLED || SPIS1_ENABLED || TWI1_ENABLED || TWIS1_ENABLED) - -// SPIM2, SPIS2, SPI2 -#if (SPI2_ENABLED || SPIS2_ENABLED) - #define SERIAL_BOX_2_IN_USE - // [this checking may need a different form in unit tests, hence macro] - #ifndef IS_SERIAL_BOX_2 - #define IS_SERIAL_BOX_2(p_per_base) (p_per_base == NRF_SPI2) - #endif - - static shared_resource_t m_serial_box_2 = { .acquired = false }; - void SPIM2_SPIS2_SPI2_IRQHandler(void) - { - ASSERT(m_serial_box_2.handler); - m_serial_box_2.handler(); - } -#endif // (SPI2_ENABLED || SPIS2_ENABLED) - -// COMP, LPCOMP -#if (COMP_ENABLED || LPCOMP_ENABLED) - #define COMP_LPCOMP_IN_USE - - #ifndef IS_COMP_LPCOMP - #define IS_COMP_LPCOMP(p_per_base) ((p_per_base) == NRF_LPCOMP) - #endif - - static shared_resource_t m_comp_lpcomp = { .acquired = false }; - void LPCOMP_IRQHandler(void) - { - ASSERT(m_comp_lpcomp.handler); - m_comp_lpcomp.handler(); - } -#endif // (COMP_ENABLED || LPCOMP_ENABLED) - -#if defined(SERIAL_BOX_0_IN_USE) || \ - defined(SERIAL_BOX_1_IN_USE) || \ - defined(SERIAL_BOX_2_IN_USE) || \ - defined(COMP_LPCOMP_IN_USE) -static ret_code_t acquire_shared_resource(shared_resource_t * p_resource, - nrf_drv_irq_handler_t handler) -{ - bool busy = false; - - CRITICAL_REGION_ENTER(); - if (p_resource->acquired) - { - busy = true; - } - else - { - p_resource->acquired = true; - } - CRITICAL_REGION_EXIT(); - - if (busy) - { - return NRF_ERROR_BUSY; - } - - p_resource->handler = handler; - return NRF_SUCCESS; -} -#endif - -ret_code_t nrf_drv_common_per_res_acquire(void const * p_per_base, - nrf_drv_irq_handler_t handler) -{ -#ifdef SERIAL_BOX_0_IN_USE - if (IS_SERIAL_BOX_0(p_per_base)) - { - return acquire_shared_resource(&m_serial_box_0, handler); - } -#endif - -#ifdef SERIAL_BOX_1_IN_USE - if (IS_SERIAL_BOX_1(p_per_base)) - { - return acquire_shared_resource(&m_serial_box_1, handler); - } -#endif - -#ifdef SERIAL_BOX_2_IN_USE - if (IS_SERIAL_BOX_2(p_per_base)) - { - return acquire_shared_resource(&m_serial_box_2, handler); - } -#endif - -#ifdef COMP_LPCOMP_IN_USE - if (IS_COMP_LPCOMP(p_per_base)) - { - return acquire_shared_resource(&m_comp_lpcomp, handler); - } -#endif - - return NRF_ERROR_INVALID_PARAM; -} - -void nrf_drv_common_per_res_release(void const * p_per_base) -{ -#ifdef SERIAL_BOX_0_IN_USE - if (IS_SERIAL_BOX_0(p_per_base)) - { - m_serial_box_0.acquired = false; - } - else -#endif - -#ifdef SERIAL_BOX_1_IN_USE - if (IS_SERIAL_BOX_1(p_per_base)) - { - m_serial_box_1.acquired = false; - } - else -#endif - -#ifdef SERIAL_BOX_2_IN_USE - if (IS_SERIAL_BOX_2(p_per_base)) - { - m_serial_box_2.acquired = false; - } - else -#endif - -#ifdef COMP_LPCOMP_IN_USE - if (IS_COMP_LPCOMP(p_per_base)) - { - m_comp_lpcomp.acquired = false; - } - else -#endif - - {} -} - -#endif // PERIPHERAL_RESOURCE_SHARING_ENABLED - - -void nrf_drv_common_irq_enable(IRQn_Type IRQn, uint8_t priority) -{ - -#ifdef SOFTDEVICE_PRESENT - ASSERT((priority == APP_IRQ_PRIORITY_LOW) || (priority == APP_IRQ_PRIORITY_HIGH)); -#endif - - NVIC_SetPriority(IRQn, priority); - NVIC_ClearPendingIRQ(IRQn); - NVIC_EnableIRQ(IRQn); -} http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/common/nrf_drv_common.h ---------------------------------------------------------------------- diff --git a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/common/nrf_drv_common.h b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/common/nrf_drv_common.h deleted file mode 100644 index 356ff72..0000000 --- a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/common/nrf_drv_common.h +++ /dev/null @@ -1,202 +0,0 @@ -/* Copyright (c) 2015 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_DRV_COMMON_H__ -#define NRF_DRV_COMMON_H__ - -#include <stdint.h> -#include <stdbool.h> -#include "nrf.h" -#include "sdk_errors.h" -#include "nrf_drv_config.h" - - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @brief Offset of event registers in every peripheral instance - * - * This is the offset where event registers start in the every peripheral. - */ -#define NRF_DRV_COMMON_EVREGS_OFFSET 0x100U - -/** - * @brief Driver state. - */ -typedef enum -{ - NRF_DRV_STATE_UNINITIALIZED, /**< Uninitialized. */ - NRF_DRV_STATE_INITIALIZED, /**< Initialized but powered off. */ - NRF_DRV_STATE_POWERED_ON -} nrf_drv_state_t; - -/** - * @brief Driver power state selection. - */ -typedef enum -{ - NRF_DRV_PWR_CTRL_ON, /**< Power on request. */ - NRF_DRV_PWR_CTRL_OFF /**< Power off request. */ -} nrf_drv_pwr_ctrl_t; - -/** - * @brief IRQ handler type. - */ -typedef void (*nrf_drv_irq_handler_t)(void); - - -#if PERIPHERAL_RESOURCE_SHARING_ENABLED - -/** - * @brief Function for acquiring shared peripheral resources associated with - * the specified peripheral. - * - * Certain resources and registers are shared among peripherals that have - * the same ID (for example: SPI0, SPIM0, SPIS0, TWI0, TWIM0, and TWIS0). - * Only one of them can be utilized at a given time. This function reserves - * proper resources to be used by the specified peripheral. - * If PERIPHERAL_RESOURCE_SHARING_ENABLED is set to a non-zero value, IRQ - * handlers for peripherals that are sharing resources with others are - * implemented by the nrf_drv_common module instead of individual drivers. - * The drivers must then specify their interrupt handling routines and - * register them by using this function. - * - * @param[in] p_per_base Requested peripheral base pointer. - * @param[in] handler Interrupt handler to register. May be NULL - * if interrupts are not used for the peripheral. - * - * @retval NRF_SUCCESS If resources were acquired successfully. - * @retval NRF_ERROR_BUSY If resources were already acquired. - * @retval NRF_ERROR_INVALID_PARAM If the specified peripheral is not enabled - * or the peripheral does not share resources - * with other peripherals. - */ -ret_code_t nrf_drv_common_per_res_acquire(void const * p_per_base, - nrf_drv_irq_handler_t handler); - -/** - * @brief Function for releasing shared resources reserved previously by - * @ref nrf_drv_common_per_res_acquire() for the specified peripheral. - * - * @param[in] p_per_base Requested peripheral base pointer. - */ -void nrf_drv_common_per_res_release(void const * p_per_base); - -#endif // PERIPHERAL_RESOURCE_SHARING_ENABLED - - -/** - * @brief Function sets priority and enables NVIC interrupt - * - * @note Function checks if correct priority is used when softdevice is present - * - * @param[in] IRQn Interrupt id - * @param[in] priority Interrupt priority - */ -void nrf_drv_common_irq_enable(IRQn_Type IRQn, uint8_t priority); - -/** - * @brief Function disables NVIC interrupt - * - * @param[in] IRQn Interrupt id - */ -__STATIC_INLINE void nrf_drv_common_irq_disable(IRQn_Type IRQn); - -/** - * @brief Convert bit position to event code - * - * Function for converting the bit position in INTEN register to event code - * that is equivalent to the offset of the event register from the beginning - * of peripheral instance. - * - * For example the result of this function can be casted directly to - * the types like @ref nrf_twis_event_t or @ref nrf_rng_events_t... - * - * @param bit Bit position in INTEN register - * @return Event code to be casted to the right enum type or to be used in functions like - * @ref nrf_rng_event_get - * - * @sa nrf_drv_event_to_bitpos - */ -__STATIC_INLINE uint32_t nrf_drv_bitpos_to_event(uint32_t bit); - -/** - * @brief Convert event code to bit position - * - * This function can be used to get bit position in INTEN register from event code. - * - * @param event Event code that may be casted from enum values from types like - * @ref nrf_twis_event_t or @ref nrf_rng_events_t - * @return Bit position in INTEN register that corresponds to the given code. - * - * @sa nrf_drv_bitpos_to_event - */ -__STATIC_INLINE uint32_t nrf_drv_event_to_bitpos(uint32_t event); - -/** - * @brief Get interrupt number connected with given instance - * - * Function returns interrupt number for a given instance of any peripheral. - * @param[in] pinst Pointer to peripheral registry - * @return Interrupt number - */ -__STATIC_INLINE IRQn_Type nrf_drv_get_IRQn(void const * const pinst); - -/** - * @brief Check if given object is in RAM - * - * Function for analyzing if given location is placed in RAM. - * This function is used to determine if we have address that can be supported by EasyDMA. - * @param[in] ptr Pointer to the object - * @retval true Object is located in RAM - * @retval false Object is not located in RAM - */ -__STATIC_INLINE bool nrf_drv_is_in_RAM(void const * const ptr); - - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE void nrf_drv_common_irq_disable(IRQn_Type IRQn) -{ - NVIC_DisableIRQ(IRQn); -} - -__STATIC_INLINE uint32_t nrf_drv_bitpos_to_event(uint32_t bit) -{ - return NRF_DRV_COMMON_EVREGS_OFFSET + bit * sizeof(uint32_t); -} - -__STATIC_INLINE uint32_t nrf_drv_event_to_bitpos(uint32_t event) -{ - return (event - NRF_DRV_COMMON_EVREGS_OFFSET) / sizeof(uint32_t); -} - -__STATIC_INLINE IRQn_Type nrf_drv_get_IRQn(void const * const pinst) -{ - uint8_t ret = (uint8_t)((uint32_t)pinst>>12U); - return (IRQn_Type) ret; -} - -__STATIC_INLINE bool nrf_drv_is_in_RAM(void const * const ptr) -{ - return ((((uintptr_t)ptr) & 0xE0000000u) == 0x20000000u); -} - -#endif // SUPPRESS_INLINE_IMPLEMENTATION - -#ifdef __cplusplus -} -#endif - -#endif // NRF_DRV_COMMON_H__ http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/comp/nrf_drv_comp.c ---------------------------------------------------------------------- diff --git a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/comp/nrf_drv_comp.c b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/comp/nrf_drv_comp.c deleted file mode 100644 index 26b21d5..0000000 --- a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/comp/nrf_drv_comp.c +++ /dev/null @@ -1,174 +0,0 @@ -/* Copyright (c) 2015 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. - * - */ - -#include "nrf_drv_comp.h" - -#include "nrf_assert.h" -#include "nrf_error.h" -#include "nrf_soc.h" -#include "nrf_drv_common.h" -#include "app_util_platform.h" -#include <stdbool.h> -#include <stddef.h> -#include <stdint.h> - -#define COMP_IRQ COMP_LPCOMP_IRQn -#define COMP_IRQ_HANDLER COMP_LPCOMP_IRQHandler - -static comp_events_handler_t m_comp_events_handler = NULL; -static nrf_drv_state_t m_state = NRF_DRV_STATE_UNINITIALIZED; - -static const nrf_drv_comp_config_t m_default_config = NRF_DRV_COMP_CONF_DEFAULT_CONFIG(NRF_COMP_INPUT_0); - -static void comp_execute_handler(nrf_comp_event_t event, uint32_t event_mask) -{ - if ( nrf_comp_event_check(event) && nrf_comp_int_enable_check(event_mask) ) - { - nrf_comp_event_clear(event); - - m_comp_events_handler(event); - } -} - -#if PERIPHERAL_RESOURCE_SHARING_ENABLED - #define IRQ_HANDLER_NAME irq_handler_for_comp - #define IRQ_HANDLER static void IRQ_HANDLER_NAME(void) - - IRQ_HANDLER; -#else - #define IRQ_HANDLER void COMP_IRQ_HANDLER(void) -#endif // PERIPHERAL_RESOURCE_SHARING_ENABLED - -IRQ_HANDLER -{ - comp_execute_handler(NRF_COMP_EVENT_READY, COMP_INTENSET_READY_Msk); - comp_execute_handler(NRF_COMP_EVENT_DOWN, COMP_INTENSET_DOWN_Msk); - comp_execute_handler(NRF_COMP_EVENT_UP, COMP_INTENSET_UP_Msk); - comp_execute_handler(NRF_COMP_EVENT_CROSS, COMP_INTENSET_CROSS_Msk); -} - - -ret_code_t nrf_drv_comp_init(const nrf_drv_comp_config_t * p_config, - comp_events_handler_t event_handler) -{ - if (m_state != NRF_DRV_STATE_UNINITIALIZED) - { // COMP driver is already initialized - return NRF_ERROR_INVALID_STATE; - } - - if (p_config == NULL) - { - p_config = &m_default_config; - } - -#if PERIPHERAL_RESOURCE_SHARING_ENABLED - if (nrf_drv_common_per_res_acquire(NRF_COMP, IRQ_HANDLER_NAME) != NRF_SUCCESS) - { - return NRF_ERROR_BUSY; - } -#endif - - nrf_comp_task_trigger(NRF_COMP_TASK_STOP); - nrf_comp_enable(); - - // Clear events to be sure there are no leftovers. - nrf_comp_event_clear(NRF_COMP_EVENT_READY); - nrf_comp_event_clear(NRF_COMP_EVENT_DOWN); - nrf_comp_event_clear(NRF_COMP_EVENT_UP); - nrf_comp_event_clear(NRF_COMP_EVENT_CROSS); - - nrf_comp_ref_set(p_config->reference); - - //If external source is chosen, write to appropriate register. - if (p_config->reference == COMP_REFSEL_REFSEL_ARef) - { - nrf_comp_ext_ref_set(p_config->ext_ref); - } - - nrf_comp_th_set(p_config->threshold); - nrf_comp_main_mode_set(p_config->main_mode); - nrf_comp_speed_mode_set(p_config->speed_mode); - nrf_comp_hysteresis_set(p_config->hyst); - nrf_comp_isource_set(p_config->isource); - nrf_comp_shorts_disable(NRF_DRV_COMP_SHORT_STOP_AFTER_CROSS_EVT | NRF_DRV_COMP_SHORT_STOP_AFTER_UP_EVT | - NRF_DRV_COMP_SHORT_STOP_AFTER_DOWN_EVT); - nrf_comp_int_disable(COMP_INTENCLR_CROSS_Msk | COMP_INTENCLR_UP_Msk | - COMP_INTENCLR_DOWN_Msk | COMP_INTENCLR_READY_Msk); - - if (event_handler) - { - m_comp_events_handler = event_handler; - } - else - { - return NRF_ERROR_INVALID_PARAM; - } - - nrf_comp_input_select(p_config->input); - - nrf_drv_common_irq_enable(COMP_LPCOMP_IRQn, p_config->interrupt_priority); - - m_state = NRF_DRV_STATE_INITIALIZED; - - return NRF_SUCCESS; -} - - -void nrf_drv_comp_uninit(void) -{ - ASSERT(m_state != NRF_DRV_STATE_UNINITIALIZED); - nrf_drv_common_irq_disable(COMP_LPCOMP_IRQn); - nrf_comp_disable(); - m_state = NRF_DRV_STATE_UNINITIALIZED; - m_comp_events_handler = NULL; -} - -void nrf_drv_comp_pin_select(nrf_comp_input_t psel) -{ - bool comp_enable_state = nrf_comp_enable_check(); - nrf_comp_task_trigger(NRF_COMP_TASK_STOP); - if(m_state == NRF_DRV_STATE_POWERED_ON) - { - m_state = NRF_DRV_STATE_INITIALIZED; - } - nrf_comp_disable(); - nrf_comp_input_select(psel); - if(comp_enable_state == true) - { - nrf_comp_enable(); - } -} - -void nrf_drv_comp_start(uint32_t comp_int_mask, uint32_t comp_shorts_mask) -{ - ASSERT(m_state == NRF_DRV_STATE_INITIALIZED); - nrf_comp_int_enable(comp_int_mask); - nrf_comp_shorts_enable(comp_shorts_mask); - nrf_comp_task_trigger(NRF_COMP_TASK_START); - m_state = NRF_DRV_STATE_POWERED_ON; -} - -void nrf_drv_comp_stop(void) -{ - ASSERT(m_state == NRF_DRV_STATE_POWERED_ON); - nrf_comp_shorts_disable(UINT32_MAX); - nrf_comp_int_disable(UINT32_MAX); - nrf_comp_task_trigger(NRF_COMP_TASK_STOP); - m_state = NRF_DRV_STATE_INITIALIZED; -} - -uint32_t nrf_drv_comp_sample() -{ - ASSERT(m_state == NRF_DRV_STATE_POWERED_ON); - nrf_comp_task_trigger(NRF_COMP_TASK_SAMPLE); - return nrf_comp_result_get(); -} http://git-wip-us.apache.org/repos/asf/incubator-mynewt-core/blob/a1481cb2/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/comp/nrf_drv_comp.h ---------------------------------------------------------------------- diff --git a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/comp/nrf_drv_comp.h b/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/comp/nrf_drv_comp.h deleted file mode 100644 index b1d8d49..0000000 --- a/hw/mcu/nordic/src/ext/nRF5_SDK_11.0.0_89a8197/components/drivers_nrf/comp/nrf_drv_comp.h +++ /dev/null @@ -1,276 +0,0 @@ -/* Copyright (c) 2015 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_DRV_COMP_H__ -#define NRF_DRV_COMP_H__ - -#include "nrf_comp.h" -#include "sdk_errors.h" -#include "nrf_drv_common.h" -#include "nrf_drv_config.h" -#include "app_util_platform.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @addtogroup nrf_comp COMP HAL and driver - * @ingroup nrf_drivers - * @brief @tagAPI52 Comparator (COMP) APIs. - * @details The COMP HAL provides basic APIs for accessing the registers of Comparator. - * The COMP driver provides APIs on a higher level. - * - * @defgroup nrf_drivers_comp COMP driver - * @{ - * @ingroup nrf_comp - * @brief @tagAPI52 Comparator (COMP) driver. - */ - -/** - * @brief Macro to convert the threshold voltage to an integer value (needed by the COMP_TH register). - * - * @param[in] vol Voltage to be changed to COMP_TH register value. This value must not be smaller than - * reference voltage divided by 64. - * @param[in] ref Reference voltage. - */ -#define VOLTAGE_THRESHOLD_TO_INT(vol, ref) (uint8_t)(((vol) > ((ref)/64)) ? (ROUNDED_DIV((vol)*64,(ref))-1) : 0) - -/**@brief COMP event handler function type. - * @param[in] event COMP event. - */ -typedef void (* comp_events_handler_t)(nrf_comp_event_t event); - -/** - * @enum nrf_drv_comp_short_mask_t - * @brief COMP shortcut masks. - */ -typedef enum -{ - NRF_DRV_COMP_SHORT_STOP_AFTER_CROSS_EVT = COMP_SHORTS_CROSS_STOP_Msk, /*!< Shortcut between the CROSS event and the STOP task. */ - NRF_DRV_COMP_SHORT_STOP_AFTER_UP_EVT = COMP_SHORTS_UP_STOP_Msk, /*!< Shortcut between the UP event and the STOP task. */ - NRF_DRV_COMP_SHORT_STOP_AFTER_DOWN_EVT = COMP_SHORTS_DOWN_STOP_Msk /*!< Shortcut between the DOWN event and the STOP task. */ -}nrf_drv_comp_short_mask_t; - -/** - * @enum nrf_drv_comp_evt_en_mask_t - * @brief COMP events masks. - */ -typedef enum -{ - NRF_DRV_COMP_EVT_EN_CROSS_MASK = COMP_INTENSET_CROSS_Msk, /*!< CROSS event (generated after VIN+ == VIN-). */ - NRF_DRV_COMP_EVT_EN_UP_MASK = COMP_INTENSET_UP_Msk, /*!< UP event (generated when VIN+ crosses VIN- while increasing). */ - NRF_DRV_COMP_EVT_EN_DOWN_MASK = COMP_INTENSET_DOWN_Msk, /*!< DOWN event (generated when VIN+ crosses VIN- while decreasing). */ - NRF_DRV_COMP_EVT_EN_READY_MASK = COMP_INTENSET_READY_Msk /*!< READY event (generated when the module is ready). */ -}nrf_drv_comp_evt_en_mask_t; - -/**@brief COMP configuration. - */ -typedef struct -{ - nrf_comp_ref_t reference; /**< Reference selection. */ - nrf_comp_ext_ref_t ext_ref; /**< External analog reference selection. */ - nrf_comp_main_mode_t main_mode; /**< Main operation mode. */ - nrf_comp_th_t threshold; /**< Structure holding THDOWN and THUP values needed by the COMP_TH register. */ - nrf_comp_sp_mode_t speed_mode; /**< Speed and power mode. */ - nrf_comp_hyst_t hyst; /**< Comparator hysteresis.*/ - nrf_isource_t isource; /**< Current source selected on analog input. */ - nrf_comp_input_t input; /**< Input to be monitored. */ - uint8_t interrupt_priority; /**< Interrupt priority. */ -} nrf_drv_comp_config_t; - -/** @brief COMP threshold default configuration. */ -#define COMP_CONFIG_TH \ -{ \ - .th_down = VOLTAGE_THRESHOLD_TO_INT(0.5, 1.8), \ - .th_up = VOLTAGE_THRESHOLD_TO_INT(1.5, 1.8) \ -} - -/** @brief COMP driver default configuration including the COMP HAL configuration. */ -#define NRF_DRV_COMP_CONF_DEFAULT_CONFIG(INPUT) \ - { \ - .reference = COMP_CONFIG_REF, \ - .main_mode = COMP_CONFIG_MAIN_MODE, \ - .threshold = COMP_CONFIG_TH, \ - .speed_mode = COMP_CONFIG_SPEED_MODE, \ - .hyst = COMP_CONFIG_HYST, \ - .isource = COMP_CONFIG_ISOURCE, \ - .input = INPUT, \ - .interrupt_priority = COMP_CONFIG_IRQ_PRIORITY \ - } - -/** - * @brief Function for initializing the COMP driver. - * - * This function initializes the COMP driver, but does not enable the peripheral or any interrupts. - * To start the driver, call the function @ref nrf_drv_comp_start() after initialization. - * - * If no configuration structure is provided, the driver is initialized with the default settings. - * - * @param[in] p_config Initial configuration. If NULL, the default configuration is used. - * @param[in] event_handler Handler function. - * - * @retval NRF_ERROR_INVALID_PARAM If the configuration is invalid. - * @retval NRF_ERROR_INVALID_STATE If the driver has already been initialized. - * @retval NRF_ERROR_BUSY If the LPCOMP driver is initialized. - */ -ret_code_t nrf_drv_comp_init(const nrf_drv_comp_config_t * p_config, - comp_events_handler_t event_handler); - - -/** - * @brief Function for uninitializing the COMP driver. - * - * This function uninitializes the COMP driver. The COMP peripheral and - * its interrupts are disabled, and local variables are cleaned. After this call, you must - * initialize the driver again by calling nrf_drv_comp_init() if you want to use it. - * - * @sa nrf_drv_comp_stop() - */ -void nrf_drv_comp_uninit(void); - -/** - * @brief Function for setting the analog input. - * - * @param[in] psel COMP analog pin selection. - */ -void nrf_drv_comp_pin_select(nrf_comp_input_t psel); - -/** - * @brief Function for starting the COMP peripheral and interrupts. - * - * Before calling this function, the driver must be initialized. This function - * enables the COMP peripheral and its interrupts. - * - * @param[in] comp_evt_en_mask Mask of events to be enabled. This parameter should be built as - * 'or' of elements from @ref nrf_drv_comp_evt_en_mask_t. - * @param[in] comp_shorts_mask Mask of shorts to be enabled. This parameter should be built as - * 'or' of elements from @ref nrf_drv_comp_short_mask_t. - * - * @sa nrf_drv_comp_init() - * - */ -void nrf_drv_comp_start(uint32_t comp_evt_en_mask, uint32_t comp_shorts_mask); - -/**@brief Function for stopping the COMP peripheral. - * - * Before calling this function, the driver must be enabled. This function disables the COMP - * peripheral and its interrupts. - * - * @sa nrf_drv_comp_uninit() - * - */ -void nrf_drv_comp_stop(void); - -/** - * @brief Function for copying the current state of the comparator result to the RESULT register. - * - * @retval 0 If the input voltage is below the threshold (VIN+ < VIN-). - * @retval 1 If the input voltage is above the threshold (VIN+ > VIN-). - */ -uint32_t nrf_drv_comp_sample(void); - -/** - * @brief Function for getting the task address. - * - * Before calling this function, the driver must be enabled. - * - * @param[in] comp_task COMP task. - * - * @return Address of the given COMP task. - */ -__STATIC_INLINE uint32_t nrf_drv_comp_task_address_get(nrf_comp_task_t comp_task) -{ - return (uint32_t)nrf_comp_task_address_get(comp_task); -} - -/** - * @brief Function for getting the event address. - * - * @param[in] comp_event COMP event. - * - * @return Address of the given COMP event. - */ -__STATIC_INLINE uint32_t nrf_drv_comp_event_address_get(nrf_comp_event_t comp_event) -{ - return (uint32_t)nrf_comp_event_address_get(comp_event); -} - -/** - * @brief Function for converting a GPIO pin number to an analog COMP channel. - * - * @param[in] pin GPIO pin number. - * - * @return COMP channel. The function returns UINT8_MAX - * if the specified pin is not an analog input. - */ -__STATIC_INLINE nrf_comp_input_t nrf_drv_comp_gpio_to_ain(uint8_t pin); - -/** - * @brief Function for converting a COMP channel to a GPIO pin number. - * - * @param[in] ain COMP channel. - * - * @return GPIO pin number. The function returns UINT8_MAX - * if the specified channel is not a GPIO pin. - */ -__STATIC_INLINE uint8_t nrf_drv_comp_ain_to_gpio(nrf_comp_input_t ain); - -#ifndef SUPPRESS_INLINE_IMPLEMENTATION - -__STATIC_INLINE nrf_comp_input_t nrf_drv_comp_gpio_to_ain(uint8_t pin) -{ - // AIN0 - AIN3 - if ((pin >= 2) && (pin <= 5)) - { - return (nrf_comp_input_t)(pin-2); - } - // AIN4 - AIN7 - else if ((pin >= 28) && (pin <= 31)) - { - return (nrf_comp_input_t)(pin - 24); - } - else - { - return (nrf_comp_input_t)UINT8_MAX; - } -} - -__STATIC_INLINE uint8_t nrf_drv_comp_ain_to_gpio(nrf_comp_input_t ain) -{ - // AIN0 - AIN3 - if (ain <= 3) - { - return (uint8_t)(ain + 2); - } - // AIN4 - AIN7 - else if ((ain >= 4) && (ain <= 7)) - { - return (uint8_t)(ain + 24); - } - else - { - return UINT8_MAX; - } -} - -#endif //SUPPRESS_INLINE_IMPLEMENTATION - -/** - *@} - **/ - -#ifdef __cplusplus -} -#endif - - #endif /* NRF_DRV_COMP_H__ */