Mouse code for the MacroRat

Dependencies:   ITG3200 QEI

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?

UserRevisionLine numberNew 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