Mouse code for the MacroRat
mbed-dev/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF51822_UNIFIED/analogin_api.c@46:b156ef445742, 2017-06-03 (annotated)
- Committer:
- sahilmgandhi
- Date:
- Sat Jun 03 00:22:44 2017 +0000
- Revision:
- 46:b156ef445742
- Parent:
- 18:6a4db94011d3
Final code for internal battlebot competition.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sahilmgandhi | 18:6a4db94011d3 | 1 | /* mbed Microcontroller Library |
sahilmgandhi | 18:6a4db94011d3 | 2 | * Copyright (c) 2006-2013 ARM Limited |
sahilmgandhi | 18:6a4db94011d3 | 3 | * |
sahilmgandhi | 18:6a4db94011d3 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
sahilmgandhi | 18:6a4db94011d3 | 5 | * you may not use this file except in compliance with the License. |
sahilmgandhi | 18:6a4db94011d3 | 6 | * You may obtain a copy of the License at |
sahilmgandhi | 18:6a4db94011d3 | 7 | * |
sahilmgandhi | 18:6a4db94011d3 | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
sahilmgandhi | 18:6a4db94011d3 | 9 | * |
sahilmgandhi | 18:6a4db94011d3 | 10 | * Unless required by applicable law or agreed to in writing, software |
sahilmgandhi | 18:6a4db94011d3 | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
sahilmgandhi | 18:6a4db94011d3 | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
sahilmgandhi | 18:6a4db94011d3 | 13 | * See the License for the specific language governing permissions and |
sahilmgandhi | 18:6a4db94011d3 | 14 | * limitations under the License. |
sahilmgandhi | 18:6a4db94011d3 | 15 | */ |
sahilmgandhi | 18:6a4db94011d3 | 16 | #include "mbed_assert.h" |
sahilmgandhi | 18:6a4db94011d3 | 17 | #include "analogin_api.h" |
sahilmgandhi | 18:6a4db94011d3 | 18 | #include "cmsis.h" |
sahilmgandhi | 18:6a4db94011d3 | 19 | #include "pinmap.h" |
sahilmgandhi | 18:6a4db94011d3 | 20 | #include "nrf_drv_adc.h" |
sahilmgandhi | 18:6a4db94011d3 | 21 | |
sahilmgandhi | 18:6a4db94011d3 | 22 | #ifdef DEVICE_ANALOGIN |
sahilmgandhi | 18:6a4db94011d3 | 23 | |
sahilmgandhi | 18:6a4db94011d3 | 24 | |
sahilmgandhi | 18:6a4db94011d3 | 25 | #define ADC_10BIT_RANGE 0x3FF |
sahilmgandhi | 18:6a4db94011d3 | 26 | #define ADC_RANGE ADC_10BIT_RANGE |
sahilmgandhi | 18:6a4db94011d3 | 27 | |
sahilmgandhi | 18:6a4db94011d3 | 28 | static const PinMap PinMap_ADC[] = { |
sahilmgandhi | 18:6a4db94011d3 | 29 | {p1, ADC0_0, 4}, |
sahilmgandhi | 18:6a4db94011d3 | 30 | {p2, ADC0_0, 8}, |
sahilmgandhi | 18:6a4db94011d3 | 31 | {p3, ADC0_0, 16}, |
sahilmgandhi | 18:6a4db94011d3 | 32 | {p4, ADC0_0, 32}, |
sahilmgandhi | 18:6a4db94011d3 | 33 | {p5, ADC0_0, 64}, |
sahilmgandhi | 18:6a4db94011d3 | 34 | {p6, ADC0_0, 128}, |
sahilmgandhi | 18:6a4db94011d3 | 35 | #ifndef TARGET_NRF51_DONGLE |
sahilmgandhi | 18:6a4db94011d3 | 36 | {p26, ADC0_0, 1}, |
sahilmgandhi | 18:6a4db94011d3 | 37 | {p27, ADC0_0, 2}, |
sahilmgandhi | 18:6a4db94011d3 | 38 | #endif |
sahilmgandhi | 18:6a4db94011d3 | 39 | {NC, NC, 0} |
sahilmgandhi | 18:6a4db94011d3 | 40 | }; |
sahilmgandhi | 18:6a4db94011d3 | 41 | |
sahilmgandhi | 18:6a4db94011d3 | 42 | void ADC_IRQHandler(void); // export IRQ handler from nrf_drv_adc.c |
sahilmgandhi | 18:6a4db94011d3 | 43 | |
sahilmgandhi | 18:6a4db94011d3 | 44 | void analogin_init(analogin_t *obj, PinName pin) |
sahilmgandhi | 18:6a4db94011d3 | 45 | { |
sahilmgandhi | 18:6a4db94011d3 | 46 | obj->adc = (ADCName)pinmap_peripheral(pin, PinMap_ADC); |
sahilmgandhi | 18:6a4db94011d3 | 47 | MBED_ASSERT(obj->adc != (ADCName)NC); |
sahilmgandhi | 18:6a4db94011d3 | 48 | |
sahilmgandhi | 18:6a4db94011d3 | 49 | uint32_t pinFunc = pinmap_function(pin, PinMap_ADC); |
sahilmgandhi | 18:6a4db94011d3 | 50 | MBED_ASSERT(pinFunc != (uint32_t)NC); |
sahilmgandhi | 18:6a4db94011d3 | 51 | |
sahilmgandhi | 18:6a4db94011d3 | 52 | obj->adc_pin = pinFunc; |
sahilmgandhi | 18:6a4db94011d3 | 53 | |
sahilmgandhi | 18:6a4db94011d3 | 54 | NVIC_SetVector(ADC_IRQn, (uint32_t)ADC_IRQHandler); |
sahilmgandhi | 18:6a4db94011d3 | 55 | |
sahilmgandhi | 18:6a4db94011d3 | 56 | ret_code_t ret_code; |
sahilmgandhi | 18:6a4db94011d3 | 57 | // p_config, event_handler |
sahilmgandhi | 18:6a4db94011d3 | 58 | ret_code = nrf_drv_adc_init(NULL , NULL); // select blocking mode |
sahilmgandhi | 18:6a4db94011d3 | 59 | MBED_ASSERT((ret_code == NRF_SUCCESS) || (ret_code == NRF_ERROR_INVALID_STATE)); //NRF_ERROR_INVALID_STATE expected for multiple channels used. |
sahilmgandhi | 18:6a4db94011d3 | 60 | } |
sahilmgandhi | 18:6a4db94011d3 | 61 | |
sahilmgandhi | 18:6a4db94011d3 | 62 | uint16_t analogin_read_u16(analogin_t *obj) |
sahilmgandhi | 18:6a4db94011d3 | 63 | { |
sahilmgandhi | 18:6a4db94011d3 | 64 | nrf_adc_value_t adc_value; |
sahilmgandhi | 18:6a4db94011d3 | 65 | |
sahilmgandhi | 18:6a4db94011d3 | 66 | nrf_drv_adc_channel_t adc_channel; |
sahilmgandhi | 18:6a4db94011d3 | 67 | |
sahilmgandhi | 18:6a4db94011d3 | 68 | // initialization by assigment because IAR dosen't support variable initializer in declaration statement. |
sahilmgandhi | 18:6a4db94011d3 | 69 | adc_channel.config.config.resolution = NRF_ADC_CONFIG_RES_10BIT; |
sahilmgandhi | 18:6a4db94011d3 | 70 | adc_channel.config.config.input = NRF_ADC_CONFIG_SCALING_INPUT_FULL_SCALE; |
sahilmgandhi | 18:6a4db94011d3 | 71 | adc_channel.config.config.reference = NRF_ADC_CONFIG_REF_VBG; |
sahilmgandhi | 18:6a4db94011d3 | 72 | adc_channel.config.config.ain = (obj->adc_pin); |
sahilmgandhi | 18:6a4db94011d3 | 73 | adc_channel.p_next = NULL; |
sahilmgandhi | 18:6a4db94011d3 | 74 | |
sahilmgandhi | 18:6a4db94011d3 | 75 | |
sahilmgandhi | 18:6a4db94011d3 | 76 | ret_code_t ret_code; |
sahilmgandhi | 18:6a4db94011d3 | 77 | |
sahilmgandhi | 18:6a4db94011d3 | 78 | ret_code = nrf_drv_adc_sample_convert( &adc_channel, &adc_value); |
sahilmgandhi | 18:6a4db94011d3 | 79 | MBED_ASSERT(ret_code == NRF_SUCCESS); |
sahilmgandhi | 18:6a4db94011d3 | 80 | |
sahilmgandhi | 18:6a4db94011d3 | 81 | return adc_value; |
sahilmgandhi | 18:6a4db94011d3 | 82 | } |
sahilmgandhi | 18:6a4db94011d3 | 83 | |
sahilmgandhi | 18:6a4db94011d3 | 84 | float analogin_read(analogin_t *obj) |
sahilmgandhi | 18:6a4db94011d3 | 85 | { |
sahilmgandhi | 18:6a4db94011d3 | 86 | uint16_t value = analogin_read_u16(obj); |
sahilmgandhi | 18:6a4db94011d3 | 87 | |
sahilmgandhi | 18:6a4db94011d3 | 88 | return (float)value * (1.0f / (float)ADC_RANGE); |
sahilmgandhi | 18:6a4db94011d3 | 89 | } |
sahilmgandhi | 18:6a4db94011d3 | 90 | |
sahilmgandhi | 18:6a4db94011d3 | 91 | #endif // DEVICE_ANALOGIN |