mbed library sources

Dependents:   Encrypted my_mbed lklk CyaSSL_DTLS_Cellular ... more

Superseded

This library was superseded by mbed-dev - https://os.mbed.com/users/mbed_official/code/mbed-dev/.

Development branch of the mbed library sources. This library is kept in synch with the latest changes from the mbed SDK and it is not guaranteed to work.

If you are looking for a stable and tested release, please import one of the official mbed library releases:

Import librarymbed

The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Committer:
mbed_official
Date:
Mon Jul 06 09:15:09 2015 +0100
Revision:
583:967d0d8b7aed
Parent:
515:7467ef1f4ad8
Synchronized with git revision 0a7df4e114501712e80882fb66c8a1e1ffca2dcb

Full URL: https://github.com/mbedmicro/mbed/commit/0a7df4e114501712e80882fb66c8a1e1ffca2dcb/

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 507:d4fc7603a669 1 /*******************************************************************************
mbed_official 507:d4fc7603a669 2 * Copyright (C) 2015 Maxim Integrated Products, Inc., All Rights Reserved.
mbed_official 507:d4fc7603a669 3 *
mbed_official 507:d4fc7603a669 4 * Permission is hereby granted, free of charge, to any person obtaining a
mbed_official 507:d4fc7603a669 5 * copy of this software and associated documentation files (the "Software"),
mbed_official 507:d4fc7603a669 6 * to deal in the Software without restriction, including without limitation
mbed_official 507:d4fc7603a669 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
mbed_official 507:d4fc7603a669 8 * and/or sell copies of the Software, and to permit persons to whom the
mbed_official 507:d4fc7603a669 9 * Software is furnished to do so, subject to the following conditions:
mbed_official 507:d4fc7603a669 10 *
mbed_official 507:d4fc7603a669 11 * The above copyright notice and this permission notice shall be included
mbed_official 507:d4fc7603a669 12 * in all copies or substantial portions of the Software.
mbed_official 507:d4fc7603a669 13 *
mbed_official 507:d4fc7603a669 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
mbed_official 507:d4fc7603a669 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
mbed_official 507:d4fc7603a669 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
mbed_official 507:d4fc7603a669 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
mbed_official 507:d4fc7603a669 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
mbed_official 507:d4fc7603a669 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
mbed_official 507:d4fc7603a669 20 * OTHER DEALINGS IN THE SOFTWARE.
mbed_official 507:d4fc7603a669 21 *
mbed_official 507:d4fc7603a669 22 * Except as contained in this notice, the name of Maxim Integrated
mbed_official 507:d4fc7603a669 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
mbed_official 507:d4fc7603a669 24 * Products, Inc. Branding Policy.
mbed_official 507:d4fc7603a669 25 *
mbed_official 507:d4fc7603a669 26 * The mere transfer of this software does not imply any licenses
mbed_official 507:d4fc7603a669 27 * of trade secrets, proprietary technology, copyrights, patents,
mbed_official 507:d4fc7603a669 28 * trademarks, maskwork rights, or any other form of intellectual
mbed_official 507:d4fc7603a669 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
mbed_official 507:d4fc7603a669 30 * ownership rights.
mbed_official 507:d4fc7603a669 31 *******************************************************************************
mbed_official 507:d4fc7603a669 32 */
mbed_official 507:d4fc7603a669 33
mbed_official 507:d4fc7603a669 34 #include "mbed_assert.h"
mbed_official 507:d4fc7603a669 35 #include "analogout_api.h"
mbed_official 507:d4fc7603a669 36 #include "clkman_regs.h"
mbed_official 507:d4fc7603a669 37 #include "pwrman_regs.h"
mbed_official 507:d4fc7603a669 38 #include "afe_regs.h"
mbed_official 507:d4fc7603a669 39 #include "PeripheralPins.h"
mbed_official 507:d4fc7603a669 40
mbed_official 507:d4fc7603a669 41 //******************************************************************************
mbed_official 507:d4fc7603a669 42 void analogout_init(dac_t *obj, PinName pin)
mbed_official 507:d4fc7603a669 43 {
mbed_official 507:d4fc7603a669 44 // Make sure pin is an analog pin we can use for ADC
mbed_official 507:d4fc7603a669 45 DACName dac = (DACName)pinmap_peripheral(pin, PinMap_DAC);
mbed_official 507:d4fc7603a669 46 MBED_ASSERT((DACName)dac != (DACName)NC);
mbed_official 507:d4fc7603a669 47
mbed_official 507:d4fc7603a669 48 // Set the object pointer
mbed_official 507:d4fc7603a669 49 obj->dac = ((mxc_dac_regs_t*)MXC_DAC_GET_DAC((pin & 0x3)));
mbed_official 507:d4fc7603a669 50 obj->dac_fifo = ((mxc_dac_fifo_t*)MXC_DAC_GET_FIFO((pin & 0x3)));
mbed_official 507:d4fc7603a669 51 obj->index = (pin & 0x3);
mbed_official 507:d4fc7603a669 52
mbed_official 507:d4fc7603a669 53 // Set the ADC clock to the system clock frequency
mbed_official 507:d4fc7603a669 54 MXC_SET_FIELD(&MXC_CLKMAN->clk_ctrl, MXC_F_CLKMAN_CLK_CTRL_ADC_SOURCE_SELECT,
mbed_official 507:d4fc7603a669 55 (MXC_F_CLKMAN_CLK_CTRL_ADC_GATE_N | (MXC_E_CLKMAN_ADC_SOURCE_SELECT_SYSTEM <<
mbed_official 507:d4fc7603a669 56 MXC_F_CLKMAN_CLK_CTRL_ADC_SOURCE_SELECT_POS)));
mbed_official 507:d4fc7603a669 57
mbed_official 507:d4fc7603a669 58
mbed_official 507:d4fc7603a669 59 // Setup the OPAMP in follower mode
mbed_official 507:d4fc7603a669 60 switch(obj->index) {
mbed_official 507:d4fc7603a669 61 case 0:
mbed_official 507:d4fc7603a669 62 // Enable DAC clock
mbed_official 507:d4fc7603a669 63 MXC_CLKMAN->clk_ctrl_14_dac0 = MXC_E_CLKMAN_CLK_SCALE_ENABLED;
mbed_official 507:d4fc7603a669 64
mbed_official 507:d4fc7603a669 65 // Enable OPAMP
mbed_official 507:d4fc7603a669 66 MXC_AFE->ctrl5 &= ~MXC_F_AFE_CTRL5_OP_CMP0;
mbed_official 507:d4fc7603a669 67
mbed_official 507:d4fc7603a669 68 // Set the positive and negative inputs
mbed_official 507:d4fc7603a669 69 MXC_SET_FIELD(&MXC_AFE->ctrl4, (MXC_F_AFE_CTRL4_DAC_SEL_A |
mbed_official 507:d4fc7603a669 70 MXC_F_AFE_CTRL4_P_IN_SEL_OPAMP0 | MXC_F_AFE_CTRL4_N_IN_SEL_OPAMP0),
mbed_official 507:d4fc7603a669 71 ((0x1 << MXC_F_AFE_CTRL4_P_IN_SEL_OPAMP0_POS) |
mbed_official 507:d4fc7603a669 72 (0x1 << MXC_F_AFE_CTRL4_N_IN_SEL_OPAMP0_POS) |
mbed_official 507:d4fc7603a669 73 (0x0 << MXC_F_AFE_CTRL4_DAC_SEL_A_POS)));
mbed_official 507:d4fc7603a669 74
mbed_official 507:d4fc7603a669 75 // Enable N and P channel inputs
mbed_official 507:d4fc7603a669 76 MXC_AFE->ctrl3 |= (MXC_F_AFE_CTRL3_EN_PCH_OPAMP0 |
mbed_official 507:d4fc7603a669 77 MXC_F_AFE_CTRL3_EN_NCH_OPAMP0);
mbed_official 507:d4fc7603a669 78 break;
mbed_official 507:d4fc7603a669 79 case 1:
mbed_official 507:d4fc7603a669 80 // Enable DAC clock
mbed_official 507:d4fc7603a669 81 MXC_CLKMAN->clk_ctrl_15_dac1 = MXC_E_CLKMAN_CLK_SCALE_ENABLED;
mbed_official 507:d4fc7603a669 82
mbed_official 507:d4fc7603a669 83 // Enable OPAMP
mbed_official 507:d4fc7603a669 84 MXC_AFE->ctrl5 &= ~MXC_F_AFE_CTRL5_OP_CMP1;
mbed_official 507:d4fc7603a669 85
mbed_official 507:d4fc7603a669 86 // Set the positive and negative inputs
mbed_official 507:d4fc7603a669 87 MXC_SET_FIELD(&MXC_AFE->ctrl4, (MXC_F_AFE_CTRL4_DAC_SEL_B |
mbed_official 507:d4fc7603a669 88 MXC_F_AFE_CTRL4_P_IN_SEL_OPAMP1 | MXC_F_AFE_CTRL4_N_IN_SEL_OPAMP1),
mbed_official 507:d4fc7603a669 89 ((0x1 << MXC_F_AFE_CTRL4_P_IN_SEL_OPAMP1_POS) |
mbed_official 507:d4fc7603a669 90 (0x1 << MXC_F_AFE_CTRL4_N_IN_SEL_OPAMP1_POS) |
mbed_official 507:d4fc7603a669 91 (0x1 << MXC_F_AFE_CTRL4_DAC_SEL_B_POS)));
mbed_official 507:d4fc7603a669 92
mbed_official 507:d4fc7603a669 93 // Enable N and P channel inputs
mbed_official 507:d4fc7603a669 94 MXC_AFE->ctrl3 |= (MXC_F_AFE_CTRL3_EN_PCH_OPAMP1 |
mbed_official 507:d4fc7603a669 95 MXC_F_AFE_CTRL3_EN_NCH_OPAMP1);
mbed_official 507:d4fc7603a669 96
mbed_official 507:d4fc7603a669 97 break;
mbed_official 507:d4fc7603a669 98 case 2:
mbed_official 507:d4fc7603a669 99 // Enable DAC clock
mbed_official 507:d4fc7603a669 100 MXC_CLKMAN->clk_ctrl_16_dac2 = MXC_E_CLKMAN_CLK_SCALE_ENABLED;
mbed_official 507:d4fc7603a669 101
mbed_official 507:d4fc7603a669 102 // Enable OPAMP
mbed_official 507:d4fc7603a669 103 MXC_AFE->ctrl5 &= ~MXC_F_AFE_CTRL5_OP_CMP2;
mbed_official 507:d4fc7603a669 104
mbed_official 507:d4fc7603a669 105 // Set the positive and negative inputs
mbed_official 507:d4fc7603a669 106 MXC_SET_FIELD(&MXC_AFE->ctrl4, (MXC_F_AFE_CTRL4_DAC_SEL_C |
mbed_official 507:d4fc7603a669 107 MXC_F_AFE_CTRL4_P_IN_SEL_OPAMP2 | MXC_F_AFE_CTRL4_N_IN_SEL_OPAMP2),
mbed_official 507:d4fc7603a669 108 ((0x1 << MXC_F_AFE_CTRL4_P_IN_SEL_OPAMP2_POS) |
mbed_official 507:d4fc7603a669 109 (0x1 << MXC_F_AFE_CTRL4_N_IN_SEL_OPAMP2_POS) |
mbed_official 507:d4fc7603a669 110 (0x2 << MXC_F_AFE_CTRL4_DAC_SEL_C_POS)));
mbed_official 507:d4fc7603a669 111
mbed_official 507:d4fc7603a669 112 // Enable N and P channel inputs
mbed_official 507:d4fc7603a669 113 MXC_AFE->ctrl3 |= (MXC_F_AFE_CTRL3_EN_PCH_OPAMP2 |
mbed_official 507:d4fc7603a669 114 MXC_F_AFE_CTRL3_EN_NCH_OPAMP2);
mbed_official 507:d4fc7603a669 115 break;
mbed_official 507:d4fc7603a669 116 case 3:
mbed_official 507:d4fc7603a669 117 // Enable DAC clock
mbed_official 507:d4fc7603a669 118 MXC_CLKMAN->clk_ctrl_17_dac3 = MXC_E_CLKMAN_CLK_SCALE_ENABLED;
mbed_official 507:d4fc7603a669 119
mbed_official 507:d4fc7603a669 120 // Enable OPAMP
mbed_official 507:d4fc7603a669 121 MXC_AFE->ctrl5 &= ~MXC_F_AFE_CTRL5_OP_CMP3;
mbed_official 507:d4fc7603a669 122
mbed_official 507:d4fc7603a669 123 // Set the positive and negative inputs
mbed_official 507:d4fc7603a669 124 MXC_SET_FIELD(&MXC_AFE->ctrl4, (MXC_F_AFE_CTRL4_DAC_SEL_D |
mbed_official 507:d4fc7603a669 125 MXC_F_AFE_CTRL4_P_IN_SEL_OPAMP3 | MXC_F_AFE_CTRL4_N_IN_SEL_OPAMP3),
mbed_official 507:d4fc7603a669 126 ((0x1 << MXC_F_AFE_CTRL4_P_IN_SEL_OPAMP3_POS) |
mbed_official 507:d4fc7603a669 127 (0x1 << MXC_F_AFE_CTRL4_N_IN_SEL_OPAMP3_POS) |
mbed_official 507:d4fc7603a669 128 (0x3 << MXC_F_AFE_CTRL4_DAC_SEL_D_POS)));
mbed_official 507:d4fc7603a669 129
mbed_official 507:d4fc7603a669 130 // Enable N and P channel inputs
mbed_official 507:d4fc7603a669 131 MXC_AFE->ctrl3 |= (MXC_F_AFE_CTRL3_EN_PCH_OPAMP3 |
mbed_official 507:d4fc7603a669 132 MXC_F_AFE_CTRL3_EN_NCH_OPAMP3);
mbed_official 507:d4fc7603a669 133 break;
mbed_official 507:d4fc7603a669 134 }
mbed_official 507:d4fc7603a669 135
mbed_official 507:d4fc7603a669 136 // Enable AFE power
mbed_official 507:d4fc7603a669 137 MXC_PWRMAN->pwr_rst_ctrl |= MXC_F_PWRMAN_PWR_RST_CTRL_AFE_POWERED;
mbed_official 507:d4fc7603a669 138
mbed_official 507:d4fc7603a669 139 // Setup internal voltage references
mbed_official 507:d4fc7603a669 140 MXC_SET_FIELD(&MXC_AFE->ctrl1, (MXC_F_AFE_CTRL1_REF_DAC_VOLT_SEL | MXC_F_AFE_CTRL1_REF_ADC_VOLT_SEL),
mbed_official 507:d4fc7603a669 141 (MXC_F_AFE_CTRL1_REF_ADC_POWERUP | MXC_F_AFE_CTRL1_REF_BLK_POWERUP |
mbed_official 507:d4fc7603a669 142 (MXC_E_AFE_REF_VOLT_SEL_1500 << MXC_F_AFE_CTRL1_REF_ADC_VOLT_SEL_POS)));
mbed_official 507:d4fc7603a669 143
mbed_official 507:d4fc7603a669 144 // Disable interpolation
mbed_official 507:d4fc7603a669 145 obj->dac->ctrl0 &= MXC_F_DAC_CTRL0_INTERP_MODE;
mbed_official 507:d4fc7603a669 146 }
mbed_official 507:d4fc7603a669 147
mbed_official 507:d4fc7603a669 148 //******************************************************************************
mbed_official 507:d4fc7603a669 149 void analogout_write(dac_t *obj, float value)
mbed_official 507:d4fc7603a669 150 {
mbed_official 507:d4fc7603a669 151 analogout_write_u16(obj, (uint16_t)((value/1.0) * 0xFFFF));
mbed_official 507:d4fc7603a669 152 }
mbed_official 507:d4fc7603a669 153
mbed_official 507:d4fc7603a669 154 //******************************************************************************
mbed_official 507:d4fc7603a669 155 void analogout_write_u16(dac_t *obj, uint16_t value)
mbed_official 507:d4fc7603a669 156 {
mbed_official 507:d4fc7603a669 157 // Enable the OPAMP
mbed_official 507:d4fc7603a669 158 // Setup the OPAMP in follower mode
mbed_official 507:d4fc7603a669 159 switch(obj->index) {
mbed_official 507:d4fc7603a669 160 case 0:
mbed_official 507:d4fc7603a669 161 MXC_AFE->ctrl3 |= MXC_F_AFE_CTRL3_POWERUP_OPAMP0;
mbed_official 507:d4fc7603a669 162 break;
mbed_official 507:d4fc7603a669 163 case 1:
mbed_official 507:d4fc7603a669 164 MXC_AFE->ctrl3 |= MXC_F_AFE_CTRL3_POWERUP_OPAMP1;
mbed_official 507:d4fc7603a669 165 break;
mbed_official 507:d4fc7603a669 166 case 2:
mbed_official 507:d4fc7603a669 167 MXC_AFE->ctrl3 |= MXC_F_AFE_CTRL3_POWERUP_OPAMP2;
mbed_official 507:d4fc7603a669 168 break;
mbed_official 507:d4fc7603a669 169 case 3:
mbed_official 507:d4fc7603a669 170 MXC_AFE->ctrl3 |= MXC_F_AFE_CTRL3_POWERUP_OPAMP3;
mbed_official 507:d4fc7603a669 171 break;
mbed_official 507:d4fc7603a669 172 }
mbed_official 507:d4fc7603a669 173
mbed_official 507:d4fc7603a669 174 // Output 1 sample with minimal delay
mbed_official 507:d4fc7603a669 175 obj->dac->rate |= 0x1;
mbed_official 507:d4fc7603a669 176
mbed_official 507:d4fc7603a669 177 // Set the start mode to output once data is in the FIFO
mbed_official 507:d4fc7603a669 178 obj->dac->ctrl0 &= ~(MXC_F_DAC_CTRL0_START_MODE | MXC_F_DAC_CTRL0_OP_MODE);
mbed_official 507:d4fc7603a669 179
mbed_official 507:d4fc7603a669 180 // Enable the DAC
mbed_official 507:d4fc7603a669 181 obj->dac->ctrl0 |= (MXC_F_DAC_CTRL0_POWER_MODE_2 |
mbed_official 507:d4fc7603a669 182 MXC_F_DAC_CTRL0_POWER_MODE_1_0 | MXC_F_DAC_CTRL0_POWER_ON |
mbed_official 507:d4fc7603a669 183 MXC_F_DAC_CTRL0_CLOCK_GATE_EN | MXC_F_DAC_CTRL0_CPU_START);
mbed_official 507:d4fc7603a669 184
mbed_official 507:d4fc7603a669 185 if(obj->index < 2) {
mbed_official 515:7467ef1f4ad8 186 obj->out = (value);
mbed_official 507:d4fc7603a669 187 obj->dac_fifo->output_16 = (obj->out);
mbed_official 507:d4fc7603a669 188
mbed_official 507:d4fc7603a669 189 } else {
mbed_official 507:d4fc7603a669 190 // Convert 16 bits to 8 bits
mbed_official 507:d4fc7603a669 191 obj->out = (value >> 8);
mbed_official 507:d4fc7603a669 192 obj->dac_fifo->output_8 = (obj->out);
mbed_official 507:d4fc7603a669 193 }
mbed_official 507:d4fc7603a669 194 }
mbed_official 507:d4fc7603a669 195
mbed_official 507:d4fc7603a669 196 //******************************************************************************
mbed_official 507:d4fc7603a669 197 float analogout_read(dac_t *obj)
mbed_official 507:d4fc7603a669 198 {
mbed_official 507:d4fc7603a669 199 return (((float)analogout_read_u16(obj) / (float)0xFFFF) * 1.5);
mbed_official 507:d4fc7603a669 200 }
mbed_official 507:d4fc7603a669 201
mbed_official 507:d4fc7603a669 202 //******************************************************************************
mbed_official 507:d4fc7603a669 203 uint16_t analogout_read_u16(dac_t *obj)
mbed_official 507:d4fc7603a669 204 {
mbed_official 507:d4fc7603a669 205 if(obj->index < 2) {
mbed_official 507:d4fc7603a669 206 // Convert 12 bits to 16 bits
mbed_official 507:d4fc7603a669 207 return (obj->out << 4);
mbed_official 507:d4fc7603a669 208 } else {
mbed_official 507:d4fc7603a669 209 // Convert 8 bits to 16 bits
mbed_official 507:d4fc7603a669 210 return (obj->out << 8);
mbed_official 507:d4fc7603a669 211 }
mbed_official 507:d4fc7603a669 212 }