ISM RF transmitter library for MAX4146X family devices

Library for MAX41460, MAX41461, MAX41462, MAX41463, MAX41464 RF Transmitter ICs.

Committer:
Ibrahim Tilki
Date:
Thu Jan 13 13:27:54 2022 +0300
Revision:
2:80969d8f6d2b
Parent:
1:ccf0e1d28860
change crystal freq range, remove unused block from send_data

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Erman Komurcu 0:4040347d719c 1 /*******************************************************************************
Erman Komurcu 1:ccf0e1d28860 2 * Copyright (C) 2019 Maxim Integrated Products, Inc., All rights Reserved.
Erman Komurcu 1:ccf0e1d28860 3 *
Erman Komurcu 1:ccf0e1d28860 4 * This software is protected by copyright laws of the United States and
Erman Komurcu 1:ccf0e1d28860 5 * of foreign countries. This material may also be protected by patent laws
Erman Komurcu 1:ccf0e1d28860 6 * and technology transfer regulations of the United States and of foreign
Erman Komurcu 1:ccf0e1d28860 7 * countries. This software is furnished under a license agreement and/or a
Erman Komurcu 1:ccf0e1d28860 8 * nondisclosure agreement and may only be used or reproduced in accordance
Erman Komurcu 1:ccf0e1d28860 9 * with the terms of those agreements. Dissemination of this information to
Erman Komurcu 1:ccf0e1d28860 10 * any party or parties not specified in the license agreement and/or
Erman Komurcu 1:ccf0e1d28860 11 * nondisclosure agreement is expressly prohibited.
Erman Komurcu 1:ccf0e1d28860 12 *
Erman Komurcu 1:ccf0e1d28860 13 * The above copyright notice and this permission notice shall be included
Erman Komurcu 1:ccf0e1d28860 14 * in all copies or substantial portions of the Software.
Erman Komurcu 1:ccf0e1d28860 15 *
Erman Komurcu 1:ccf0e1d28860 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
Erman Komurcu 1:ccf0e1d28860 17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
Erman Komurcu 1:ccf0e1d28860 18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
Erman Komurcu 1:ccf0e1d28860 19 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
Erman Komurcu 1:ccf0e1d28860 20 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
Erman Komurcu 1:ccf0e1d28860 21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Erman Komurcu 1:ccf0e1d28860 22 * OTHER DEALINGS IN THE SOFTWARE.
Erman Komurcu 1:ccf0e1d28860 23 *
Erman Komurcu 1:ccf0e1d28860 24 * Except as contained in this notice, the name of Maxim Integrated
Erman Komurcu 1:ccf0e1d28860 25 * Products, Inc. shall not be used except as stated in the Maxim Integrated
Erman Komurcu 1:ccf0e1d28860 26 * Products, Inc. Branding Policy.
Erman Komurcu 1:ccf0e1d28860 27 *
Erman Komurcu 1:ccf0e1d28860 28 * The mere transfer of this software does not imply any licenses
Erman Komurcu 1:ccf0e1d28860 29 * of trade secrets, proprietary technology, copyrights, patents,
Erman Komurcu 1:ccf0e1d28860 30 * trademarks, maskwork rights, or any other form of intellectual
Erman Komurcu 1:ccf0e1d28860 31 * property whatsoever. Maxim Integrated Products, Inc. retains all
Erman Komurcu 1:ccf0e1d28860 32 * ownership rights.
Erman Komurcu 1:ccf0e1d28860 33 *******************************************************************************
Erman Komurcu 1:ccf0e1d28860 34 */
Erman Komurcu 0:4040347d719c 35
Erman Komurcu 0:4040347d719c 36 #ifndef MAX4146x_H_
Erman Komurcu 0:4040347d719c 37 #define MAX4146x_H_
Erman Komurcu 0:4040347d719c 38
Erman Komurcu 0:4040347d719c 39 #include "mbed.h"
Erman Komurcu 0:4040347d719c 40 #include "Max41460_regs.h"
Erman Komurcu 0:4040347d719c 41 #include "Max41461_2_regs.h"
Erman Komurcu 0:4040347d719c 42 #include "Max41463_4_regs.h"
Erman Komurcu 0:4040347d719c 43
Erman Komurcu 0:4040347d719c 44 #define I2C_ADDRESS 0xD2
Erman Komurcu 0:4040347d719c 45
Erman Komurcu 0:4040347d719c 46 /**
Erman Komurcu 0:4040347d719c 47 * @brief Base Class for All Maxim Max4146x RF Transmitters
Erman Komurcu 0:4040347d719c 48 *
Erman Komurcu 0:4040347d719c 49 * @details The MAX4146X is a UHF sub-GHz ISM/SRD transmitter
Erman Komurcu 0:4040347d719c 50 */
Erman Komurcu 0:4040347d719c 51 template <class REG>
Erman Komurcu 0:4040347d719c 52 class MAX4146X
Erman Komurcu 0:4040347d719c 53 {
Erman Komurcu 0:4040347d719c 54 private:
Erman Komurcu 0:4040347d719c 55 REG *reg;
Erman Komurcu 0:4040347d719c 56 I2C *i2c_handler;
Erman Komurcu 0:4040347d719c 57 SPI *spi_handler;
Erman Komurcu 0:4040347d719c 58 DigitalOut *ssel;
Erman Komurcu 0:4040347d719c 59
Erman Komurcu 0:4040347d719c 60 //manchester coding variables
Erman Komurcu 0:4040347d719c 61 unsigned char *manchester_bit_array;
Erman Komurcu 0:4040347d719c 62 unsigned char *bits_array;
Erman Komurcu 0:4040347d719c 63 static const unsigned char mask = 1; // Bit mask
Erman Komurcu 0:4040347d719c 64 char data_rate;
Erman Komurcu 0:4040347d719c 65 DigitalOut *data_sent; // data sent pin
Erman Komurcu 0:4040347d719c 66
Erman Komurcu 0:4040347d719c 67 uint8_t preset_mode;
Erman Komurcu 0:4040347d719c 68 float crystal_frequency ;
Erman Komurcu 0:4040347d719c 69 float center_frequency;
Erman Komurcu 0:4040347d719c 70 float baud_rate;
Erman Komurcu 0:4040347d719c 71
Erman Komurcu 0:4040347d719c 72 typedef enum {
Erman Komurcu 0:4040347d719c 73 CFG1_ADDR = 0x00,
Erman Komurcu 0:4040347d719c 74 CFG2_ADDR = 0x01,
Erman Komurcu 0:4040347d719c 75 CFG3_ADDR = 0x02,
Erman Komurcu 0:4040347d719c 76 CFG4_ADDR = 0x03,
Erman Komurcu 0:4040347d719c 77 CFG5_ADDR = 0x04,
Erman Komurcu 0:4040347d719c 78 SHDN_ADDR = 0x05,
Erman Komurcu 0:4040347d719c 79 PA1_ADDR = 0x06,
Erman Komurcu 0:4040347d719c 80 PA2_ADDR = 0x07,
Erman Komurcu 0:4040347d719c 81 PLL1_ADDR = 0x08,
Erman Komurcu 0:4040347d719c 82 PLL2_ADDR = 0x09,
Erman Komurcu 0:4040347d719c 83 CFG6_ADDR = 0x0A,
Erman Komurcu 0:4040347d719c 84 PLL3_ADDR = 0x0B,
Erman Komurcu 0:4040347d719c 85 PLL4_ADDR = 0x0C,
Erman Komurcu 0:4040347d719c 86 PLL5_ADDR = 0x0D,
Erman Komurcu 0:4040347d719c 87 PLL6_ADDR = 0x0E,
Erman Komurcu 0:4040347d719c 88 PLL7_ADDR = 0x0F,
Erman Komurcu 0:4040347d719c 89 CFG7_ADDR = 0x10,
Erman Komurcu 0:4040347d719c 90 I2C1_ADDR = 0x11,
Erman Komurcu 0:4040347d719c 91 I2C2_ADDR = 0x12,
Erman Komurcu 0:4040347d719c 92 I2C3_ADDR = 0x13,
Erman Komurcu 0:4040347d719c 93 I2C4_ADDR = 0x14,
Erman Komurcu 0:4040347d719c 94 I2C5_ADDR = 0x15,
Erman Komurcu 0:4040347d719c 95 I2C6_ADDR = 0x16,
Erman Komurcu 0:4040347d719c 96 CFG8_ADDR = 0x17,
Erman Komurcu 0:4040347d719c 97 CFG9_ADDR = 0x18,
Erman Komurcu 0:4040347d719c 98 ADDL1_ADDR = 0x19,
Erman Komurcu 0:4040347d719c 99 ADDL2_ADDR = 0x1A,
Erman Komurcu 0:4040347d719c 100 } register_address_t;
Erman Komurcu 0:4040347d719c 101
Erman Komurcu 0:4040347d719c 102 //Functions
Erman Komurcu 0:4040347d719c 103
Erman Komurcu 0:4040347d719c 104 protected:
Erman Komurcu 0:4040347d719c 105
Erman Komurcu 0:4040347d719c 106 //Functions
Erman Komurcu 0:4040347d719c 107 int io_write(uint8_t *data, uint32_t length);
Erman Komurcu 0:4040347d719c 108
Erman Komurcu 0:4040347d719c 109 public:
Erman Komurcu 0:4040347d719c 110
Erman Komurcu 0:4040347d719c 111 //Constructors
Erman Komurcu 0:4040347d719c 112 MAX4146X(REG *reg, SPI *spi, DigitalOut *cs);
Erman Komurcu 0:4040347d719c 113
Erman Komurcu 0:4040347d719c 114 MAX4146X(REG *reg, SPI *spi);
Erman Komurcu 0:4040347d719c 115
Erman Komurcu 0:4040347d719c 116 MAX4146X(REG *reg, I2C *i2c);
Erman Komurcu 0:4040347d719c 117
Erman Komurcu 0:4040347d719c 118 MAX4146X(DigitalOut *cs);
Erman Komurcu 0:4040347d719c 119
Erman Komurcu 0:4040347d719c 120
Erman Komurcu 0:4040347d719c 121 /**
Erman Komurcu 0:4040347d719c 122 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 123 *
Erman Komurcu 0:4040347d719c 124 * @details
Erman Komurcu 0:4040347d719c 125 * - Register : CFG1(0x00)
Erman Komurcu 0:4040347d719c 126 * - Bit Fields : [7:6]
Erman Komurcu 0:4040347d719c 127 * - Default : 0x2
Erman Komurcu 0:4040347d719c 128 * - Description : Start delay before enabling XO clock to digital block
Erman Komurcu 0:4040347d719c 129 */
Erman Komurcu 0:4040347d719c 130 typedef enum {
Erman Komurcu 0:4040347d719c 131 XOCLKDELAY_0_CYCLE, /**< 0x0: No delay. XO clock is immediately enabled to rest of digital block */
Erman Komurcu 0:4040347d719c 132 XOCLKDELAY_16_CYCLE, /**< 0x1: XO clock is enabled after 16 cycles to rest of digital block */
Erman Komurcu 0:4040347d719c 133 XOCLKDELAY_32_CYCLE, /**< 0x2: XO clock is enabled after 32 cycles to rest of digital block */
Erman Komurcu 0:4040347d719c 134 XOCLKDELAY_64_CYCLE, /**< 0x3: XO clock is enabled after 64 cycles to rest of digital block */
Erman Komurcu 0:4040347d719c 135 } xoclkdelay_t;
Erman Komurcu 0:4040347d719c 136
Erman Komurcu 0:4040347d719c 137 /**
Erman Komurcu 0:4040347d719c 138 * @brief Set start delay before enabling XO clock to digital block
Erman Komurcu 0:4040347d719c 139 *
Erman Komurcu 0:4040347d719c 140 * @param[in] delay delay cycle
Erman Komurcu 0:4040347d719c 141 *
Erman Komurcu 0:4040347d719c 142 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 143 */
Erman Komurcu 0:4040347d719c 144 int set_xoclkdelay(xoclkdelay_t delay);
Erman Komurcu 0:4040347d719c 145
Erman Komurcu 0:4040347d719c 146 /**
Erman Komurcu 0:4040347d719c 147 * @brief Get start delay before enabling XO clock to digital block
Erman Komurcu 0:4040347d719c 148 *
Erman Komurcu 0:4040347d719c 149 * @param[in] delay delay cycle
Erman Komurcu 0:4040347d719c 150 *
Erman Komurcu 0:4040347d719c 151 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 152 */
Erman Komurcu 0:4040347d719c 153 int get_xoclkdelay(xoclkdelay_t *delay);
Erman Komurcu 0:4040347d719c 154
Erman Komurcu 0:4040347d719c 155 /**
Erman Komurcu 0:4040347d719c 156 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 157 *
Erman Komurcu 0:4040347d719c 158 * @details
Erman Komurcu 0:4040347d719c 159 * -Register : CFG1(0x00)
Erman Komurcu 0:4040347d719c 160 * - Bit Fields : [5:4]
Erman Komurcu 0:4040347d719c 161 * - Default : 0x2
Erman Komurcu 0:4040347d719c 162 * - Description : XO clock division ratio for digital block
Erman Komurcu 0:4040347d719c 163 */
Erman Komurcu 0:4040347d719c 164 typedef enum {
Erman Komurcu 0:4040347d719c 165 XOCLKDIV_BY_4, /**< 0x0: Divide XO clock by 4 for digital clock */
Erman Komurcu 0:4040347d719c 166 XOCLKDIV_BY_5, /**< 0x1: Divide XO clock by 5 for digital clock. High time is 2 cycles, low time is 3 cycles */
Erman Komurcu 0:4040347d719c 167 XOCLKDIV_BY_6, /**< 0x2: Divide XO clock by 6 for digital clock */
Erman Komurcu 0:4040347d719c 168 XOCLKDIV_BY_7, /**< 0x3: Divide XO clock by 7 for digital clock. High time is 3 cycles,
Erman Komurcu 0:4040347d719c 169 and low time is 4 cycles */
Erman Komurcu 0:4040347d719c 170 } xoclkdiv_t;
Erman Komurcu 0:4040347d719c 171
Erman Komurcu 0:4040347d719c 172 /**
Erman Komurcu 0:4040347d719c 173 * @brief Set XO clock division ratio for digital block
Erman Komurcu 0:4040347d719c 174 *
Erman Komurcu 0:4040347d719c 175 * @param[in] div division ratio
Erman Komurcu 0:4040347d719c 176 *
Erman Komurcu 0:4040347d719c 177 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 178 */
Erman Komurcu 0:4040347d719c 179 int set_xoclkdiv(xoclkdiv_t div);
Erman Komurcu 0:4040347d719c 180
Erman Komurcu 0:4040347d719c 181 /**
Erman Komurcu 0:4040347d719c 182 * @brief Get XO clock division ratio for digital block
Erman Komurcu 0:4040347d719c 183 *
Erman Komurcu 0:4040347d719c 184 * @param[in] div division ratio
Erman Komurcu 0:4040347d719c 185 *
Erman Komurcu 0:4040347d719c 186 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 187 */
Erman Komurcu 0:4040347d719c 188 int get_xoclkdiv(xoclkdiv_t *div);
Erman Komurcu 0:4040347d719c 189
Erman Komurcu 0:4040347d719c 190 /**
Erman Komurcu 0:4040347d719c 191 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 192 *
Erman Komurcu 0:4040347d719c 193 * @details
Erman Komurcu 0:4040347d719c 194 * - Register : CFG1(0x00)
Erman Komurcu 0:4040347d719c 195 * - Bit Fields : [2]
Erman Komurcu 0:4040347d719c 196 * - Default : 0b0
Erman Komurcu 0:4040347d719c 197 * - Description : Sets the state of FSK Gaussian Shaping
Erman Komurcu 0:4040347d719c 198 */
Erman Komurcu 0:4040347d719c 199 typedef enum {
Erman Komurcu 0:4040347d719c 200 FSKSHAPE_DISABLE, /**< 0x0: FSK Shaping disabled */
Erman Komurcu 0:4040347d719c 201 FSKSHAPE_ENABLE, /**< 0x1: FSK Shaping enabled */
Erman Komurcu 0:4040347d719c 202 } fskshape_t;
Erman Komurcu 0:4040347d719c 203
Erman Komurcu 0:4040347d719c 204 /**
Erman Komurcu 0:4040347d719c 205 * @brief Sets the state of FSK Gaussian Shaping
Erman Komurcu 0:4040347d719c 206 *
Erman Komurcu 0:4040347d719c 207 * @param[in] shape enable/disable fskshaping
Erman Komurcu 0:4040347d719c 208 *
Erman Komurcu 0:4040347d719c 209 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 210 */
Erman Komurcu 0:4040347d719c 211 int set_fskshape(fskshape_t shape);
Erman Komurcu 0:4040347d719c 212
Erman Komurcu 0:4040347d719c 213 /**
Erman Komurcu 0:4040347d719c 214 * @brief Gets the state of FSK Gaussian Shaping
Erman Komurcu 0:4040347d719c 215 *
Erman Komurcu 0:4040347d719c 216 * @param[in] shape enable/disable fskshaping
Erman Komurcu 0:4040347d719c 217 *
Erman Komurcu 0:4040347d719c 218 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 219 */
Erman Komurcu 0:4040347d719c 220 int get_fskshape(fskshape_t *shape);
Erman Komurcu 0:4040347d719c 221
Erman Komurcu 0:4040347d719c 222 /**
Erman Komurcu 0:4040347d719c 223 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 224 *
Erman Komurcu 0:4040347d719c 225 * @details
Erman Komurcu 0:4040347d719c 226 * - Register : CFG1(0x00)
Erman Komurcu 0:4040347d719c 227 * - Bit Fields : [1]
Erman Komurcu 0:4040347d719c 228 * - Default : 0b0
Erman Komurcu 0:4040347d719c 229 * - Description : Controls if clock output acts as an input. When an input,
Erman Komurcu 0:4040347d719c 230 * it will sample the DATA pin.
Erman Komurcu 0:4040347d719c 231 */
Erman Komurcu 0:4040347d719c 232 typedef enum {
Erman Komurcu 0:4040347d719c 233 SYNC_0, /**< 0x0: asynchronous transmission mode */
Erman Komurcu 0:4040347d719c 234 SYNC_1, /**< 0x1: synchronous transmission mode */
Erman Komurcu 0:4040347d719c 235 } sync_t;
Erman Komurcu 0:4040347d719c 236
Erman Komurcu 0:4040347d719c 237 /**
Erman Komurcu 0:4040347d719c 238 * @brief Sets the state of clock pin
Erman Komurcu 0:4040347d719c 239 *
Erman Komurcu 0:4040347d719c 240 * @param[in] state pin state async/sync
Erman Komurcu 0:4040347d719c 241 *
Erman Komurcu 0:4040347d719c 242 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 243 */
Erman Komurcu 0:4040347d719c 244 int set_sync(sync_t state);
Erman Komurcu 0:4040347d719c 245
Erman Komurcu 0:4040347d719c 246 /**
Erman Komurcu 0:4040347d719c 247 * @brief Gets the state of clock pin
Erman Komurcu 0:4040347d719c 248 *
Erman Komurcu 0:4040347d719c 249 * @param[in] state pin state async/sync
Erman Komurcu 0:4040347d719c 250 *
Erman Komurcu 0:4040347d719c 251 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 252 */
Erman Komurcu 0:4040347d719c 253 int get_sync(sync_t *state);
Erman Komurcu 0:4040347d719c 254
Erman Komurcu 0:4040347d719c 255 /**
Erman Komurcu 0:4040347d719c 256 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 257 *
Erman Komurcu 0:4040347d719c 258 * @details
Erman Komurcu 0:4040347d719c 259 * - Register : CFG1(0x00)
Erman Komurcu 0:4040347d719c 260 * - Bit Fields : [0]
Erman Komurcu 0:4040347d719c 261 * - Default : 0b0
Erman Komurcu 0:4040347d719c 262 * - Description : Configures modulator mode
Erman Komurcu 0:4040347d719c 263 */
Erman Komurcu 0:4040347d719c 264 typedef enum {
Erman Komurcu 0:4040347d719c 265 MODMODE_ASK, /**< 0x0: ASK Mode */
Erman Komurcu 0:4040347d719c 266 MODMODE_FSK, /**< 0x1: FSK Mode */
Erman Komurcu 0:4040347d719c 267 } modmode_t;
Erman Komurcu 0:4040347d719c 268
Erman Komurcu 0:4040347d719c 269 /**
Erman Komurcu 0:4040347d719c 270 * @brief Sets modulator mode to ASK or FSK
Erman Komurcu 0:4040347d719c 271 *
Erman Komurcu 0:4040347d719c 272 * @param[in] mode ASK or FSK
Erman Komurcu 0:4040347d719c 273 *
Erman Komurcu 0:4040347d719c 274 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 275 */
Erman Komurcu 0:4040347d719c 276 int set_modmode(modmode_t mode);
Erman Komurcu 0:4040347d719c 277
Erman Komurcu 0:4040347d719c 278 /**
Erman Komurcu 0:4040347d719c 279 * @brief Gets modulator mode
Erman Komurcu 0:4040347d719c 280 *
Erman Komurcu 0:4040347d719c 281 * @param[in] mode ASK or FSK
Erman Komurcu 0:4040347d719c 282 *
Erman Komurcu 0:4040347d719c 283 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 284 */
Erman Komurcu 0:4040347d719c 285 int get_modmode(modmode_t* mode);
Erman Komurcu 0:4040347d719c 286
Erman Komurcu 0:4040347d719c 287 /**
Erman Komurcu 0:4040347d719c 288 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 289 *
Erman Komurcu 0:4040347d719c 290 * @details
Erman Komurcu 0:4040347d719c 291 * - Register : CFG2(0x01)
Erman Komurcu 0:4040347d719c 292 * - Bit Fields : [7:6]
Erman Komurcu 0:4040347d719c 293 * - Default : 0x2
Erman Komurcu 0:4040347d719c 294 * - Description : Selects the delay when CLKOUT starts
Erman Komurcu 0:4040347d719c 295 * toggling upon exiting SHUTDOWN mode,
Erman Komurcu 0:4040347d719c 296 * in divided XO clock cycles
Erman Komurcu 0:4040347d719c 297 */
Erman Komurcu 0:4040347d719c 298 typedef enum {
Erman Komurcu 0:4040347d719c 299 CLKOUT_DELAY_64_CYCLE, /**< 0x0: CLKOUT will start toggling after 64 cycles
Erman Komurcu 0:4040347d719c 300 whenever moving into normal mode from shutdown mode */
Erman Komurcu 0:4040347d719c 301 CLKOUT_DELAY_128_CYCLE, /**< 0x1: CLKOUT will start toggling after 128 cycles
Erman Komurcu 0:4040347d719c 302 whenever moving into normal mode from shutdown mode */
Erman Komurcu 0:4040347d719c 303 CLKOUT_DELAY_256_CYCLE, /**< 0x2: CLKOUT will start toggling after 256 cycles
Erman Komurcu 0:4040347d719c 304 whenever moving into normal mode from shutdown mode */
Erman Komurcu 0:4040347d719c 305 CLKOUT_DELAY_512_CYCLE, /**< 0x3: CLKOUT will start toggling after 512 cycles
Erman Komurcu 0:4040347d719c 306 whenever moving into normal mode from shutdown mode */
Erman Komurcu 0:4040347d719c 307 } clkout_delay_t;
Erman Komurcu 0:4040347d719c 308
Erman Komurcu 0:4040347d719c 309 /**
Erman Komurcu 0:4040347d719c 310 * @brief Sets clkout delay
Erman Komurcu 0:4040347d719c 311 *
Erman Komurcu 0:4040347d719c 312 * @param[in] delay delay cycles
Erman Komurcu 0:4040347d719c 313 *
Erman Komurcu 0:4040347d719c 314 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 315 */
Erman Komurcu 0:4040347d719c 316 int set_clkout_delay(clkout_delay_t delay);
Erman Komurcu 0:4040347d719c 317
Erman Komurcu 0:4040347d719c 318 /**
Erman Komurcu 0:4040347d719c 319 * @brief Gets clkout delay
Erman Komurcu 0:4040347d719c 320 *
Erman Komurcu 0:4040347d719c 321 * @param[in] delay delay cycles
Erman Komurcu 0:4040347d719c 322 *
Erman Komurcu 0:4040347d719c 323 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 324 */
Erman Komurcu 0:4040347d719c 325 int get_clkout_delay(clkout_delay_t* delay);
Erman Komurcu 0:4040347d719c 326
Erman Komurcu 0:4040347d719c 327 /**
Erman Komurcu 0:4040347d719c 328 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 329 *
Erman Komurcu 0:4040347d719c 330 * @details
Erman Komurcu 0:4040347d719c 331 * - Register : CFG2(0x01)
Erman Komurcu 0:4040347d719c 332 * - Bit Fields : [2:0]
Erman Komurcu 0:4040347d719c 333 * - Default : 0x1
Erman Komurcu 0:4040347d719c 334 * - Description : Baud clock post-divider setting.
Erman Komurcu 0:4040347d719c 335 */
Erman Komurcu 0:4040347d719c 336 typedef enum {
Erman Komurcu 0:4040347d719c 337 BCLK_POSTDIV_RESERVED_0, /**< 0x0: RESERVED */
Erman Komurcu 0:4040347d719c 338 BCLK_POSTDIV_BY_1, /**< 0x1: Divide by 1 */
Erman Komurcu 0:4040347d719c 339 BCLK_POSTDIV_BY_2, /**< 0x2: Divide by 2 */
Erman Komurcu 0:4040347d719c 340 BCLK_POSTDIV_BY_3, /**< 0x3: Divide by 3 */
Erman Komurcu 0:4040347d719c 341 BCLK_POSTDIV_BY_4, /**< 0x4: Divide by 4 */
Erman Komurcu 0:4040347d719c 342 BCLK_POSTDIV_BY_5, /**< 0x5: Divide by 5 */
Erman Komurcu 0:4040347d719c 343 BCLK_POSTDIV_RESERVED_6, /**< 0x6: RESERVED */
Erman Komurcu 0:4040347d719c 344 BCLK_POSTDIV_RESERVED_7, /**< 0x7: RESERVED */
Erman Komurcu 0:4040347d719c 345 } bclk_postdiv_t;
Erman Komurcu 0:4040347d719c 346
Erman Komurcu 0:4040347d719c 347 /**
Erman Komurcu 0:4040347d719c 348 * @brief Sets baud clock post-divider
Erman Komurcu 0:4040347d719c 349 *
Erman Komurcu 0:4040347d719c 350 * @param[in] div divider value
Erman Komurcu 0:4040347d719c 351 *
Erman Komurcu 0:4040347d719c 352 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 353 */
Erman Komurcu 0:4040347d719c 354 int set_bclk_postdiv(bclk_postdiv_t div);
Erman Komurcu 0:4040347d719c 355
Erman Komurcu 0:4040347d719c 356 /**
Erman Komurcu 0:4040347d719c 357 * @brief Gets baud clock post-divider
Erman Komurcu 0:4040347d719c 358 *
Erman Komurcu 0:4040347d719c 359 * @param[in] div divider value
Erman Komurcu 0:4040347d719c 360 *
Erman Komurcu 0:4040347d719c 361 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 362 */
Erman Komurcu 0:4040347d719c 363 int get_bclk_postdiv(bclk_postdiv_t* div);
Erman Komurcu 0:4040347d719c 364
Erman Komurcu 0:4040347d719c 365 /**
Erman Komurcu 0:4040347d719c 366 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 367 *
Erman Komurcu 0:4040347d719c 368 * @details
Erman Komurcu 0:4040347d719c 369 * - Register : CFG4(0x03)
Erman Komurcu 0:4040347d719c 370 * - Bit Fields : [1:0]
Erman Komurcu 0:4040347d719c 371 * - Default : 0x0
Erman Komurcu 0:4040347d719c 372 * - Description : Power Down Mode Select.
Erman Komurcu 0:4040347d719c 373 */
Erman Komurcu 0:4040347d719c 374 typedef enum {
Erman Komurcu 0:4040347d719c 375 PWDN_MODE_SHUTDOWN, /**< 0x0: SHUTDOWN low power state is enabled. While entering
Erman Komurcu 0:4040347d719c 376 low power state, XO, PLL, and PA are shutdown. */
Erman Komurcu 0:4040347d719c 377 PWDN_MODE_STANDBY, /**< 0x1: STANDBY low power state is enabled. While entering
Erman Komurcu 0:4040347d719c 378 low power state, XO is enabled. PLL and PA are shutdown */
Erman Komurcu 0:4040347d719c 379 PWDN_MODE_FAST_WAKEUP, /**< 0x2: FAST WAKEUP low power state is enabled. While entering
Erman Komurcu 0:4040347d719c 380 low power state, XO and PLL are enabled. PA is shutdown. */
Erman Komurcu 0:4040347d719c 381 PWDN_MODE_REVERT_TO_FAST_WAKEUP, /**< 0x3: Will revert to 0x2 */
Erman Komurcu 0:4040347d719c 382 } pwdn_mode_t;
Erman Komurcu 0:4040347d719c 383
Erman Komurcu 0:4040347d719c 384 /**
Erman Komurcu 0:4040347d719c 385 * @brief Sets power down mode
Erman Komurcu 0:4040347d719c 386 *
Erman Komurcu 0:4040347d719c 387 * @param[in] pwdn_mode power down mode
Erman Komurcu 0:4040347d719c 388 *
Erman Komurcu 0:4040347d719c 389 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 390 */
Erman Komurcu 0:4040347d719c 391 int set_pwdn_mode(pwdn_mode_t pwdn_mode);
Erman Komurcu 0:4040347d719c 392
Erman Komurcu 0:4040347d719c 393 /**
Erman Komurcu 0:4040347d719c 394 * @brief Gets power down mode
Erman Komurcu 0:4040347d719c 395 *
Erman Komurcu 0:4040347d719c 396 * @param[in] pwdn_mode power down mode
Erman Komurcu 0:4040347d719c 397 *
Erman Komurcu 0:4040347d719c 398 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 399 */
Erman Komurcu 0:4040347d719c 400 int get_pwdn_mode(pwdn_mode_t* pwdn_mode);
Erman Komurcu 0:4040347d719c 401
Erman Komurcu 0:4040347d719c 402 /**
Erman Komurcu 0:4040347d719c 403 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 404 *
Erman Komurcu 0:4040347d719c 405 * @details
Erman Komurcu 0:4040347d719c 406 * - Register : SHDN(0x05)
Erman Komurcu 0:4040347d719c 407 * - Bit Fields : [0]
Erman Komurcu 0:4040347d719c 408 * - Default : 0x0
Erman Komurcu 0:4040347d719c 409 * - Description : Enables a boost in PA output power for frequencies above 850MHz.
Erman Komurcu 0:4040347d719c 410 * This requires a different PA match compared to normal operation.
Erman Komurcu 0:4040347d719c 411 */
Erman Komurcu 0:4040347d719c 412 typedef enum {
Erman Komurcu 0:4040347d719c 413 PA_BOOST_NORMAL_MODE, /**< 0x0: PA Output power in normal operation. */
Erman Komurcu 0:4040347d719c 414 PA_BOOST_BOOST_MODE, /**< 0x1: PA Output power in boost mode for more output power. */
Erman Komurcu 0:4040347d719c 415 } pa_boost_t;
Erman Komurcu 0:4040347d719c 416
Erman Komurcu 0:4040347d719c 417 /**
Erman Komurcu 0:4040347d719c 418 * @brief enable/disable boost mode
Erman Komurcu 0:4040347d719c 419 *
Erman Komurcu 0:4040347d719c 420 * @param[in] pa_boost power amplifier output mode
Erman Komurcu 0:4040347d719c 421 *
Erman Komurcu 0:4040347d719c 422 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 423 */
Erman Komurcu 0:4040347d719c 424 int set_pa_boost(pa_boost_t pa_boost);
Erman Komurcu 0:4040347d719c 425
Erman Komurcu 0:4040347d719c 426 /**
Erman Komurcu 0:4040347d719c 427 * @brief Gets boost mode
Erman Komurcu 0:4040347d719c 428 *
Erman Komurcu 0:4040347d719c 429 * @param[in] pa_boost power amplifier output mode
Erman Komurcu 0:4040347d719c 430 *
Erman Komurcu 0:4040347d719c 431 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 432 */
Erman Komurcu 0:4040347d719c 433 int get_pa_boost(pa_boost_t* pa_boost);
Erman Komurcu 0:4040347d719c 434
Erman Komurcu 0:4040347d719c 435 /**
Erman Komurcu 0:4040347d719c 436 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 437 *
Erman Komurcu 0:4040347d719c 438 * @details
Erman Komurcu 0:4040347d719c 439 * - Register : PA1(0x06)
Erman Komurcu 0:4040347d719c 440 * - Bit Fields : [2:0]
Erman Komurcu 0:4040347d719c 441 * - Default : 0x0
Erman Komurcu 0:4040347d719c 442 * - Description : Controls the PA output power by enabling parallel drivers.
Erman Komurcu 0:4040347d719c 443 */
Erman Komurcu 0:4040347d719c 444 typedef enum {
Erman Komurcu 0:4040347d719c 445 PAPWR_1_DRIVER, /**< 0x0: Minimum, 1 driver */
Erman Komurcu 0:4040347d719c 446 PAPWR_2_DRIVER, /**< 0x1: 2 Drivers */
Erman Komurcu 0:4040347d719c 447 PAPWR_3_DRIVER, /**< 0x2: 3 Drivers */
Erman Komurcu 0:4040347d719c 448 PAPWR_4_DRIVER, /**< 0x3: 4 Drivers */
Erman Komurcu 0:4040347d719c 449 PAPWR_5_DRIVER, /**< 0x4: 5 Drivers */
Erman Komurcu 0:4040347d719c 450 PAPWR_6_DRIVER, /**< 0x5: 6 Drivers */
Erman Komurcu 0:4040347d719c 451 PAPWR_7_DRIVER, /**< 0x6: 7 Drivers */
Erman Komurcu 0:4040347d719c 452 PAPWR_8_DRIVER, /**< 0x7: 8 Drivers */
Erman Komurcu 0:4040347d719c 453 } papwr_t;
Erman Komurcu 0:4040347d719c 454
Erman Komurcu 0:4040347d719c 455 /**
Erman Komurcu 0:4040347d719c 456 * @brief set PA output power by enabling parallel drivers
Erman Komurcu 0:4040347d719c 457 *
Erman Komurcu 0:4040347d719c 458 * @param[in] papwr number of parallel drivers
Erman Komurcu 0:4040347d719c 459 *
Erman Komurcu 0:4040347d719c 460 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 461 */
Erman Komurcu 0:4040347d719c 462 int set_papwr(papwr_t papwr);
Erman Komurcu 0:4040347d719c 463
Erman Komurcu 0:4040347d719c 464 /**
Erman Komurcu 0:4040347d719c 465 * @brief Gets PA output power
Erman Komurcu 0:4040347d719c 466 *
Erman Komurcu 0:4040347d719c 467 * @param[in] papwr number of parallel drivers
Erman Komurcu 0:4040347d719c 468 *
Erman Komurcu 0:4040347d719c 469 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 470 */
Erman Komurcu 0:4040347d719c 471 int get_papwr(papwr_t* papwr);
Erman Komurcu 0:4040347d719c 472
Erman Komurcu 0:4040347d719c 473
Erman Komurcu 0:4040347d719c 474 /**
Erman Komurcu 0:4040347d719c 475 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 476 *
Erman Komurcu 0:4040347d719c 477 * @details
Erman Komurcu 0:4040347d719c 478 * - Register : PA2(0x07)
Erman Komurcu 0:4040347d719c 479 * - Bit Fields : [4:0]
Erman Komurcu 0:4040347d719c 480 * - Default : 0x00
Erman Komurcu 0:4040347d719c 481 * - Description : Controls shunt capacitance on PA output in fF.
Erman Komurcu 0:4040347d719c 482 */
Erman Komurcu 0:4040347d719c 483 typedef enum {
Erman Komurcu 0:4040347d719c 484 PACAP_0_fF,
Erman Komurcu 0:4040347d719c 485 PACAP_175_fF,
Erman Komurcu 0:4040347d719c 486 PACAP_350_fF,
Erman Komurcu 0:4040347d719c 487 PACAP_525_fF,
Erman Komurcu 0:4040347d719c 488 PACAP_700_fF,
Erman Komurcu 0:4040347d719c 489 PACAP_875_fF,
Erman Komurcu 0:4040347d719c 490 PACAP_1050_fF,
Erman Komurcu 0:4040347d719c 491 PACAP_1225_fF,
Erman Komurcu 0:4040347d719c 492 PACAP_1400_fF,
Erman Komurcu 0:4040347d719c 493 PACAP_1575_fF,
Erman Komurcu 0:4040347d719c 494 PACAP_1750_fF,
Erman Komurcu 0:4040347d719c 495 PACAP_1925_fF,
Erman Komurcu 0:4040347d719c 496 PACAP_2100_fF,
Erman Komurcu 0:4040347d719c 497 PACAP_2275_fF,
Erman Komurcu 0:4040347d719c 498 PACAP_2450_fF,
Erman Komurcu 0:4040347d719c 499 PACAP_2625_fF,
Erman Komurcu 0:4040347d719c 500 PACAP_2800_fF,
Erman Komurcu 0:4040347d719c 501 PACAP_2975_fF,
Erman Komurcu 0:4040347d719c 502 PACAP_3150_fF,
Erman Komurcu 0:4040347d719c 503 PACAP_3325_fF,
Erman Komurcu 0:4040347d719c 504 PACAP_3500_fF,
Erman Komurcu 0:4040347d719c 505 PACAP_3675_fF,
Erman Komurcu 0:4040347d719c 506 PACAP_3850_fF,
Erman Komurcu 0:4040347d719c 507 PACAP_4025_fF,
Erman Komurcu 0:4040347d719c 508 PACAP_4200_fF,
Erman Komurcu 0:4040347d719c 509 PACAP_4375_fF,
Erman Komurcu 0:4040347d719c 510 PACAP_4550_fF,
Erman Komurcu 0:4040347d719c 511 PACAP_4725_fF,
Erman Komurcu 0:4040347d719c 512 PACAP_4900_fF,
Erman Komurcu 0:4040347d719c 513 PACAP_5075_fF,
Erman Komurcu 0:4040347d719c 514 PACAP_5250_fF,
Erman Komurcu 0:4040347d719c 515 PACAP_5425_fF,
Erman Komurcu 0:4040347d719c 516 } pacap_t;
Erman Komurcu 0:4040347d719c 517
Erman Komurcu 0:4040347d719c 518 /**
Erman Komurcu 0:4040347d719c 519 * @brief set shunt capacitance value
Erman Komurcu 0:4040347d719c 520 *
Erman Komurcu 0:4040347d719c 521 * @param[in] pacap shunt capacitance value
Erman Komurcu 0:4040347d719c 522 *
Erman Komurcu 0:4040347d719c 523 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 524 */
Erman Komurcu 0:4040347d719c 525 int set_pacap(pacap_t pacap);
Erman Komurcu 0:4040347d719c 526
Erman Komurcu 0:4040347d719c 527 /**
Erman Komurcu 0:4040347d719c 528 * @brief Gets shunt capacitance value
Erman Komurcu 0:4040347d719c 529 *
Erman Komurcu 0:4040347d719c 530 * @param[in] pacap shunt capacitance value
Erman Komurcu 0:4040347d719c 531 *
Erman Komurcu 0:4040347d719c 532 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 533 */
Erman Komurcu 0:4040347d719c 534 int get_pacap(pacap_t* pacap);
Erman Komurcu 0:4040347d719c 535
Erman Komurcu 0:4040347d719c 536 /**
Erman Komurcu 0:4040347d719c 537 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 538 *
Erman Komurcu 0:4040347d719c 539 * @details
Erman Komurcu 0:4040347d719c 540 * - Register : PLL1(0x08)
Erman Komurcu 0:4040347d719c 541 * - Bit Fields : [7:6]
Erman Komurcu 0:4040347d719c 542 * -Default : 0x1
Erman Komurcu 0:4040347d719c 543 * - Description : Sets the level of charge pump offset current
Erman Komurcu 0:4040347d719c 544 * for fractional N mode to improve close in
Erman Komurcu 0:4040347d719c 545 * phase noise. Set to 'DISABLED' for integer N mode.
Erman Komurcu 0:4040347d719c 546 */
Erman Komurcu 0:4040347d719c 547 typedef enum {
Erman Komurcu 0:4040347d719c 548 CPLIN_NO_EXTRA_CURRENT, /**< 0x0: No extra current */
Erman Komurcu 0:4040347d719c 549 CPLIN_CHARGE_PUMP_CURRENT_5_PERCENT, /**< 0x1: 5% of charge pump current */
Erman Komurcu 0:4040347d719c 550 CPLIN_CHARGE_PUMP_CURRENT_10_PERCENT, /**< 0x2: 10% of charge pump current */
Erman Komurcu 0:4040347d719c 551 CPLIN_CHARGE_PUMP_CURRENT_15_PERCENT, /**< 0x3: 15% of charge pump current */
Erman Komurcu 0:4040347d719c 552 } cplin_t;
Erman Komurcu 0:4040347d719c 553
Erman Komurcu 0:4040347d719c 554 /**
Erman Komurcu 0:4040347d719c 555 * @brief set level of charge pump offset current
Erman Komurcu 0:4040347d719c 556 *
Erman Komurcu 0:4040347d719c 557 * @param[in] cplin percentage of charge pump current
Erman Komurcu 0:4040347d719c 558 *
Erman Komurcu 0:4040347d719c 559 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 560 */
Erman Komurcu 0:4040347d719c 561 int set_cplin(cplin_t cplin);
Erman Komurcu 0:4040347d719c 562
Erman Komurcu 0:4040347d719c 563 /**
Erman Komurcu 0:4040347d719c 564 * @brief Gets level of charge pump offset current
Erman Komurcu 0:4040347d719c 565 *
Erman Komurcu 0:4040347d719c 566 * @param[in] cplin percentage of charge pump current
Erman Komurcu 0:4040347d719c 567 *
Erman Komurcu 0:4040347d719c 568 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 569 */
Erman Komurcu 0:4040347d719c 570 int get_cplin(cplin_t* cplin);
Erman Komurcu 0:4040347d719c 571
Erman Komurcu 0:4040347d719c 572
Erman Komurcu 0:4040347d719c 573 /**
Erman Komurcu 0:4040347d719c 574 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 575 *
Erman Komurcu 0:4040347d719c 576 * @details
Erman Komurcu 0:4040347d719c 577 * - Register : PLL1(0x08)
Erman Komurcu 0:4040347d719c 578 * - Bit Fields : [5]
Erman Komurcu 0:4040347d719c 579 * - Default : 0b1
Erman Komurcu 0:4040347d719c 580 * - Description : Sets PLL between fractional-N and integer-N mode.
Erman Komurcu 0:4040347d719c 581 *
Erman Komurcu 0:4040347d719c 582 */
Erman Komurcu 0:4040347d719c 583 typedef enum {
Erman Komurcu 0:4040347d719c 584 FRACMODE_INTEGER_N, /**< 0x0: Integer N Mode */
Erman Komurcu 0:4040347d719c 585 RACMODE_FRACTIONAL_N, /**< 0x1: Fractional N Mode */
Erman Komurcu 0:4040347d719c 586 } fracmode_t;
Erman Komurcu 0:4040347d719c 587
Erman Komurcu 0:4040347d719c 588 /**
Erman Komurcu 0:4040347d719c 589 * @brief set PLL mode
Erman Komurcu 0:4040347d719c 590 *
Erman Komurcu 0:4040347d719c 591 * @param[in] fracmode Integer N/Fractional N mode
Erman Komurcu 0:4040347d719c 592 *
Erman Komurcu 0:4040347d719c 593 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 594 */
Erman Komurcu 0:4040347d719c 595 int set_fracmode(fracmode_t fracmode);
Erman Komurcu 0:4040347d719c 596
Erman Komurcu 0:4040347d719c 597 /**
Erman Komurcu 0:4040347d719c 598 * @brief Gets PLL mode
Erman Komurcu 0:4040347d719c 599 *
Erman Komurcu 0:4040347d719c 600 * @param[in] fracmode Integer N/Fractional N mode
Erman Komurcu 0:4040347d719c 601 *
Erman Komurcu 0:4040347d719c 602 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 603 */
Erman Komurcu 0:4040347d719c 604 int get_fracmode(fracmode_t* fracmode);
Erman Komurcu 0:4040347d719c 605
Erman Komurcu 0:4040347d719c 606 /* Register Configuration
Erman Komurcu 0:4040347d719c 607 *
Erman Komurcu 0:4040347d719c 608 * @Register : PLL1(0x08)
Erman Komurcu 0:4040347d719c 609 * @Bit Fields : [2:1]
Erman Komurcu 0:4040347d719c 610 * @Default : 0x0
Erman Komurcu 0:4040347d719c 611 * @Description :
Erman Komurcu 0:4040347d719c 612 */
Erman Komurcu 0:4040347d719c 613 typedef enum {
Erman Komurcu 0:4040347d719c 614 LODIV_DISABLED, /**< 0x0: Disabled */
Erman Komurcu 0:4040347d719c 615 LODIV_DIVIDE_BY_4, /**< 0x1: LC VCO divided by 4 */
Erman Komurcu 0:4040347d719c 616 LODIV_DIVIDE_BY_8, /**< 0x2: LC VCO divided by 8 */
Erman Komurcu 0:4040347d719c 617 LODIV_DIVIDE_BY_12, /**< 0x3: LC VCO divided by 12 */
Erman Komurcu 0:4040347d719c 618 } lodiv_t;
Erman Komurcu 0:4040347d719c 619
Erman Komurcu 0:4040347d719c 620 /**
Erman Komurcu 0:4040347d719c 621 * @brief set divider of LC VCO
Erman Komurcu 0:4040347d719c 622 *
Erman Komurcu 0:4040347d719c 623 * @param[in] lodiv divider value
Erman Komurcu 0:4040347d719c 624 *
Erman Komurcu 0:4040347d719c 625 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 626 */
Erman Komurcu 0:4040347d719c 627 int set_lodiv(lodiv_t lodiv);
Erman Komurcu 0:4040347d719c 628
Erman Komurcu 0:4040347d719c 629 /**
Erman Komurcu 0:4040347d719c 630 * @brief Gets divider of LC VCO
Erman Komurcu 0:4040347d719c 631 *
Erman Komurcu 0:4040347d719c 632 * @param[in] lodiv divider value
Erman Komurcu 0:4040347d719c 633 *
Erman Komurcu 0:4040347d719c 634 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 635 */
Erman Komurcu 0:4040347d719c 636 int get_lodiv(lodiv_t* lodiv);
Erman Komurcu 0:4040347d719c 637
Erman Komurcu 0:4040347d719c 638 /**
Erman Komurcu 0:4040347d719c 639 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 640 *
Erman Komurcu 0:4040347d719c 641 * @details
Erman Komurcu 0:4040347d719c 642 * - Register : PLL1(0x08)
Erman Komurcu 0:4040347d719c 643 * - Bit Fields : [0]
Erman Komurcu 0:4040347d719c 644 * - Default : 0b0
Erman Komurcu 0:4040347d719c 645 * - Description : Sets LO generation. For lower power, choose LOWCURRENT.
Erman Komurcu 0:4040347d719c 646 * For higher performance, choose LOWNOISE
Erman Komurcu 0:4040347d719c 647 */
Erman Komurcu 0:4040347d719c 648 typedef enum {
Erman Komurcu 0:4040347d719c 649 LOMODE_RING_OSCILLATOR, /**< 0x0: Ring Oscillator Mode */
Erman Komurcu 0:4040347d719c 650 LOMODE_LC_VCO, /**< 0x1: LC VCO Mode */
Erman Komurcu 0:4040347d719c 651 } lomode_t;
Erman Komurcu 0:4040347d719c 652
Erman Komurcu 0:4040347d719c 653 /**
Erman Komurcu 0:4040347d719c 654 * @brief set LO generation
Erman Komurcu 0:4040347d719c 655 *
Erman Komurcu 0:4040347d719c 656 * @param[in] lomode selection of mode
Erman Komurcu 0:4040347d719c 657 *
Erman Komurcu 0:4040347d719c 658 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 659 */
Erman Komurcu 0:4040347d719c 660 int set_lomode(lomode_t lomode);
Erman Komurcu 0:4040347d719c 661
Erman Komurcu 0:4040347d719c 662 /**
Erman Komurcu 0:4040347d719c 663 * @brief Gets LO generation
Erman Komurcu 0:4040347d719c 664 *
Erman Komurcu 0:4040347d719c 665 * @param[in] lomode selection of mode
Erman Komurcu 0:4040347d719c 666 *
Erman Komurcu 0:4040347d719c 667 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 668 */
Erman Komurcu 0:4040347d719c 669 int get_lomode(lomode_t* lomode);
Erman Komurcu 0:4040347d719c 670
Erman Komurcu 0:4040347d719c 671 /**
Erman Komurcu 0:4040347d719c 672 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 673 *
Erman Komurcu 0:4040347d719c 674 * @details
Erman Komurcu 0:4040347d719c 675 * - Register : PLL2(0x09)
Erman Komurcu 0:4040347d719c 676 * - Bit Fields : [1:0]
Erman Komurcu 0:4040347d719c 677 * - Default : 0x0
Erman Komurcu 0:4040347d719c 678 * - Description : Sets Charge Pump Current in microAmpere
Erman Komurcu 0:4040347d719c 679 *
Erman Komurcu 0:4040347d719c 680 */
Erman Komurcu 0:4040347d719c 681 typedef enum {
Erman Komurcu 0:4040347d719c 682 CPVAL_5_UA, /**< 0x0: 5µA */
Erman Komurcu 0:4040347d719c 683 CPVAL_10_UA, /**< 0x1: 10µA */
Erman Komurcu 0:4040347d719c 684 CPVAL_15_UA, /**< 0x2: 15µA */
Erman Komurcu 0:4040347d719c 685 CPVAL_20_UA, /**< 0x3: 20µA */
Erman Komurcu 0:4040347d719c 686 } cpval_t;
Erman Komurcu 0:4040347d719c 687
Erman Komurcu 0:4040347d719c 688 /**
Erman Komurcu 0:4040347d719c 689 * @brief set charge pump current
Erman Komurcu 0:4040347d719c 690 *
Erman Komurcu 0:4040347d719c 691 * @param[in] cpval current value
Erman Komurcu 0:4040347d719c 692 *
Erman Komurcu 0:4040347d719c 693 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 694 */
Erman Komurcu 0:4040347d719c 695 int set_cpval(cpval_t cpval);
Erman Komurcu 0:4040347d719c 696
Erman Komurcu 0:4040347d719c 697 /**
Erman Komurcu 0:4040347d719c 698 * @brief Gets charge pump current
Erman Komurcu 0:4040347d719c 699 *
Erman Komurcu 0:4040347d719c 700 * @param[in] cpval current value
Erman Komurcu 0:4040347d719c 701 *
Erman Komurcu 0:4040347d719c 702 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 703 */
Erman Komurcu 0:4040347d719c 704 int get_cpval(cpval_t* cpval);
Erman Komurcu 0:4040347d719c 705
Erman Komurcu 0:4040347d719c 706 /**
Erman Komurcu 0:4040347d719c 707 * Register Configuration
Erman Komurcu 0:4040347d719c 708 *
Erman Komurcu 0:4040347d719c 709 * @details
Erman Komurcu 0:4040347d719c 710 * - Register : CFG6(0x0A)
Erman Komurcu 0:4040347d719c 711 * - Bit Fields : [2]
Erman Komurcu 0:4040347d719c 712 * - Default : 0b0
Erman Komurcu 0:4040347d719c 713 * - Description : Enables DATA transmission in I2C mode. Aliased address for I2C_TXEN1.
Erman Komurcu 0:4040347d719c 714 */
Erman Komurcu 0:4040347d719c 715 typedef enum {
Erman Komurcu 0:4040347d719c 716 I2C_TXEN1_DISABLE, /**< 0x0: Data transmission not enabled in I2C mode. */
Erman Komurcu 0:4040347d719c 717 I2C_TXEN1_ENABLE, /**< 0x1: Data transmission enabled in I2C mode. */
Erman Komurcu 0:4040347d719c 718 } i2c_txen1_t;
Erman Komurcu 0:4040347d719c 719
Erman Komurcu 0:4040347d719c 720
Erman Komurcu 0:4040347d719c 721 /** Register Configuration
Erman Komurcu 0:4040347d719c 722 *
Erman Komurcu 0:4040347d719c 723 * @details
Erman Komurcu 0:4040347d719c 724 * - Register : CFG6(0x0A)
Erman Komurcu 0:4040347d719c 725 * - Bit Fields : [1]
Erman Komurcu 0:4040347d719c 726 * - Default : 0b0
Erman Komurcu 0:4040347d719c 727 * - Description : Transmission enable.
Erman Komurcu 0:4040347d719c 728 */
Erman Komurcu 0:4040347d719c 729 typedef enum {
Erman Komurcu 0:4040347d719c 730 SPI_TXEN1_DISABLE, /**< 0x0: Transmission disabled. */
Erman Komurcu 0:4040347d719c 731 SPI_TXEN1_ENABLE, /**< 0x1: Transmission enabled. */
Erman Komurcu 0:4040347d719c 732 } spi_txen1_t;
Erman Komurcu 0:4040347d719c 733
Erman Komurcu 0:4040347d719c 734 /**
Erman Komurcu 0:4040347d719c 735 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 736 *
Erman Komurcu 0:4040347d719c 737 * @details
Erman Komurcu 0:4040347d719c 738 * - Register : CFG6(0x0A)
Erman Komurcu 0:4040347d719c 739 * - Bit Fields : [0]
Erman Komurcu 0:4040347d719c 740 * - Default : 0b0
Erman Komurcu 0:4040347d719c 741 * - Description : Four wire readback on CLKOUT pin mode.
Erman Komurcu 0:4040347d719c 742 *
Erman Komurcu 0:4040347d719c 743 */
Erman Komurcu 0:4040347d719c 744 typedef enum {
Erman Komurcu 0:4040347d719c 745 FOURWIRE1_READBACK_DISABLE, /**< 0x0: Four wire readback disabled. */
Erman Komurcu 0:4040347d719c 746 FOURWIRE1_READBACK_ENABLE, /**< 0x1: Four wire readback enabled. */
Erman Komurcu 0:4040347d719c 747 } fourwire1_t;
Erman Komurcu 0:4040347d719c 748
Erman Komurcu 0:4040347d719c 749
Erman Komurcu 0:4040347d719c 750 /**
Erman Komurcu 0:4040347d719c 751 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 752 *
Erman Komurcu 0:4040347d719c 753 * @details
Erman Komurcu 0:4040347d719c 754 * - Register : CFG7(0x10)
Erman Komurcu 0:4040347d719c 755 * - Bit Fields : [2]
Erman Komurcu 0:4040347d719c 756 * - Default : 0b0
Erman Komurcu 0:4040347d719c 757 * - Description : Enables DATA transmission in I2C mode. Aliased address for I2C_TXEN1
Erman Komurcu 0:4040347d719c 758 */
Erman Komurcu 0:4040347d719c 759 typedef enum {
Erman Komurcu 0:4040347d719c 760 I2C_TXEN2_DISABLE, /**< 0x0: Data transmission not enabled in I2C mode. */
Erman Komurcu 0:4040347d719c 761 I2C_TXEN2_ENABLE, /**< 0x1: Data transmission enabled in I2C mode. */
Erman Komurcu 0:4040347d719c 762 } i2c_txen2_t;
Erman Komurcu 0:4040347d719c 763
Erman Komurcu 0:4040347d719c 764 /**
Erman Komurcu 0:4040347d719c 765 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 766 *
Erman Komurcu 0:4040347d719c 767 * @details
Erman Komurcu 0:4040347d719c 768 * - Register : CFG7(0x10)
Erman Komurcu 0:4040347d719c 769 * - Bit Fields : [1]
Erman Komurcu 0:4040347d719c 770 * - Default : 0b0
Erman Komurcu 0:4040347d719c 771 * - Description : Transmission enable.
Erman Komurcu 0:4040347d719c 772 */
Erman Komurcu 0:4040347d719c 773 typedef enum {
Erman Komurcu 0:4040347d719c 774 SPI_TXEN2_DISABLE, /**< 0x0: Transmission disabled. */
Erman Komurcu 0:4040347d719c 775 SPI_TXEN2_ENABLE, /**< 0x1: Transmission enabled. */
Erman Komurcu 0:4040347d719c 776 } spi_txen2_t;
Erman Komurcu 0:4040347d719c 777
Erman Komurcu 0:4040347d719c 778
Erman Komurcu 0:4040347d719c 779 /**
Erman Komurcu 0:4040347d719c 780 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 781 *
Erman Komurcu 0:4040347d719c 782 * @details
Erman Komurcu 0:4040347d719c 783 * - Register : CFG7(0x10)
Erman Komurcu 0:4040347d719c 784 * - Bit Fields : [0]
Erman Komurcu 0:4040347d719c 785 * - Default : 0b0
Erman Komurcu 0:4040347d719c 786 * - Description : Four wire readback on CLKOUT pin mode. Aliased address for FOURWIRE1
Erman Komurcu 0:4040347d719c 787 */
Erman Komurcu 0:4040347d719c 788 typedef enum {
Erman Komurcu 0:4040347d719c 789 FOURWIRE2_READBACK_DISABLE, /**< 0x0: Four wire readback disabled. */
Erman Komurcu 0:4040347d719c 790 FOURWIRE2_READBACK_ENABLE, /**< 0x1: Four wire readback enabled. */
Erman Komurcu 0:4040347d719c 791 } fourwire2_t;
Erman Komurcu 0:4040347d719c 792
Erman Komurcu 0:4040347d719c 793
Erman Komurcu 0:4040347d719c 794
Erman Komurcu 0:4040347d719c 795 /**
Erman Komurcu 0:4040347d719c 796 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 797 *
Erman Komurcu 0:4040347d719c 798 * @details
Erman Komurcu 0:4040347d719c 799 * - Register : I2C1(0x11)
Erman Komurcu 0:4040347d719c 800 * - Bit Fields : [7]
Erman Komurcu 0:4040347d719c 801 * - Default : 0b0
Erman Komurcu 0:4040347d719c 802 * - Description : Packet Length Mode
Erman Komurcu 0:4040347d719c 803 *
Erman Komurcu 0:4040347d719c 804 */
Erman Komurcu 0:4040347d719c 805 typedef enum {
Erman Komurcu 0:4040347d719c 806 PKTLEN_MODE_SET_LENGTH, /**< 0x0: PKTLEN[14:0] need not be programmed. FIFO underflow event will
Erman Komurcu 0:4040347d719c 807 be treated as end of packet event. For cases where actual packet length
Erman Komurcu 0:4040347d719c 808 is greater than 32767 bits, it is expected that the µC will pad
Erman Komurcu 0:4040347d719c 809 such a packet to make it an integral multiple of 8-bits */
Erman Komurcu 0:4040347d719c 810 PKTLEN_MODE_NO_SET_LENGTH, /**< 0x1: PKTLEN[14:0] will provide the length of packet. Once FIFO is
Erman Komurcu 0:4040347d719c 811 read for PKTLEN[14:0] bits, or if FIFO underflow, MAX4146x will consider
Erman Komurcu 0:4040347d719c 812 that as an end of packet event. */
Erman Komurcu 0:4040347d719c 813 } pktlen_mode_t;
Erman Komurcu 0:4040347d719c 814
Erman Komurcu 0:4040347d719c 815 /**
Erman Komurcu 0:4040347d719c 816 * @brief set packet length
Erman Komurcu 0:4040347d719c 817 *
Erman Komurcu 0:4040347d719c 818 * @param[in] pktlen_mode packet length mode
Erman Komurcu 0:4040347d719c 819 *
Erman Komurcu 0:4040347d719c 820 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 821 */
Erman Komurcu 0:4040347d719c 822 int set_pktlen_mode(pktlen_mode_t pktlen_mode);
Erman Komurcu 0:4040347d719c 823
Erman Komurcu 0:4040347d719c 824 /**
Erman Komurcu 0:4040347d719c 825 * @brief Gets packet length
Erman Komurcu 0:4040347d719c 826 *
Erman Komurcu 0:4040347d719c 827 * @param[in] pktlen_mode packet length mode
Erman Komurcu 0:4040347d719c 828 *
Erman Komurcu 0:4040347d719c 829 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 830 */
Erman Komurcu 0:4040347d719c 831 int get_pktlen_mode(pktlen_mode_t* pktlen_mode);
Erman Komurcu 0:4040347d719c 832
Erman Komurcu 0:4040347d719c 833
Erman Komurcu 0:4040347d719c 834 /**
Erman Komurcu 0:4040347d719c 835 * @brief Register Configuration
Erman Komurcu 0:4040347d719c 836 *
Erman Komurcu 0:4040347d719c 837 * @details
Erman Komurcu 0:4040347d719c 838 * - Register : CFG8(0x17)
Erman Komurcu 0:4040347d719c 839 * - Bit Fields : [0]
Erman Komurcu 0:4040347d719c 840 * - Default : 0b0
Erman Komurcu 0:4040347d719c 841 * - Description : Places DUT into software reset.
Erman Komurcu 0:4040347d719c 842 */
Erman Komurcu 0:4040347d719c 843 typedef enum {
Erman Komurcu 0:4040347d719c 844 SOFTRESET_DEASSERT, /**< 0x0: Deassert the reset */
Erman Komurcu 0:4040347d719c 845 SOFTRESET_RESET, /**< 0x1: Resets the entire digital, until this bit is set to 0 */
Erman Komurcu 0:4040347d719c 846 } softreset_t;
Erman Komurcu 0:4040347d719c 847
Erman Komurcu 0:4040347d719c 848 /**
Erman Komurcu 0:4040347d719c 849 * @brief set softreset bit
Erman Komurcu 0:4040347d719c 850 *
Erman Komurcu 0:4040347d719c 851 * @param[in] softreset enable/disable
Erman Komurcu 0:4040347d719c 852 *
Erman Komurcu 0:4040347d719c 853 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 854 */
Erman Komurcu 0:4040347d719c 855 int set_softreset(softreset_t softreset);
Erman Komurcu 0:4040347d719c 856
Erman Komurcu 0:4040347d719c 857 /**
Erman Komurcu 0:4040347d719c 858 * @brief Operation state of the rf transmitter
Erman Komurcu 0:4040347d719c 859 *
Erman Komurcu 0:4040347d719c 860 * @details
Erman Komurcu 0:4040347d719c 861 * - Default : 0b0
Erman Komurcu 0:4040347d719c 862 * - Description : Places DUT into software reset.
Erman Komurcu 0:4040347d719c 863 */
Erman Komurcu 0:4040347d719c 864 typedef enum {
Erman Komurcu 0:4040347d719c 865 INITIALIZED = 0,
Erman Komurcu 0:4040347d719c 866 UNINITIALIZED = 1,
Erman Komurcu 0:4040347d719c 867 UNKNOWN = 2,
Erman Komurcu 0:4040347d719c 868 } operation_mode_t;
Erman Komurcu 0:4040347d719c 869
Erman Komurcu 0:4040347d719c 870
Erman Komurcu 0:4040347d719c 871 // Indicates whether initialization is successful
Erman Komurcu 0:4040347d719c 872 operation_mode_t operation_mode;
Erman Komurcu 0:4040347d719c 873
Erman Komurcu 0:4040347d719c 874 /**
Erman Komurcu 0:4040347d719c 875 * @brief get fifo flags (I2C6) Read only
Erman Komurcu 0:4040347d719c 876 *
Erman Komurcu 0:4040347d719c 877 * @param[in] fifo_flags 8-bit fifo flags
Erman Komurcu 0:4040347d719c 878 *
Erman Komurcu 0:4040347d719c 879 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 880 */
Erman Komurcu 0:4040347d719c 881 int get_fifo_flags(uint8_t *fifo_flags);
Erman Komurcu 0:4040347d719c 882
Erman Komurcu 0:4040347d719c 883 /**
Erman Komurcu 0:4040347d719c 884 * @brief get pktcomplete bit field flags (I2C4) Read only
Erman Komurcu 0:4040347d719c 885 *
Erman Komurcu 0:4040347d719c 886 * @param[in] pktcomplete 0x0: Packet transmission is not completed
Erman Komurcu 0:4040347d719c 887 * 0x1: Packet transmission is completed
Erman Komurcu 0:4040347d719c 888 *
Erman Komurcu 0:4040347d719c 889 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 890 */
Erman Komurcu 0:4040347d719c 891 int get_pktcomplete(uint8_t *pktcomplete);
Erman Komurcu 0:4040347d719c 892
Erman Komurcu 0:4040347d719c 893 /**
Erman Komurcu 0:4040347d719c 894 * @brief get packet length of transmitted packet
Erman Komurcu 0:4040347d719c 895 *
Erman Komurcu 0:4040347d719c 896 * @param[in] pktlen Provides status information of bits transmitted for the current packet
Erman Komurcu 0:4040347d719c 897 *
Erman Komurcu 0:4040347d719c 898 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 899 */
Erman Komurcu 0:4040347d719c 900 int get_tx_pktlen(uint16_t *pktlen);
Erman Komurcu 0:4040347d719c 901
Erman Komurcu 0:4040347d719c 902
Erman Komurcu 0:4040347d719c 903 /* PUBLIC FUNCTION DECLARATIONS */
Erman Komurcu 0:4040347d719c 904
Erman Komurcu 0:4040347d719c 905 /**
Erman Komurcu 0:4040347d719c 906 * @brief Read from a register.
Erman Komurcu 0:4040347d719c 907 *
Erman Komurcu 0:4040347d719c 908 * @param[in] reg Address of a register to be read.
Erman Komurcu 0:4040347d719c 909 * @param[out] value Pointer to save result value.
Erman Komurcu 0:4040347d719c 910 * @param[in] len Size of result to be read.
Erman Komurcu 0:4040347d719c 911 *
Erman Komurcu 0:4040347d719c 912 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 913 */
Erman Komurcu 0:4040347d719c 914 int read_register(uint8_t reg, uint8_t *value, uint8_t len);
Erman Komurcu 0:4040347d719c 915
Erman Komurcu 0:4040347d719c 916 /**
Erman Komurcu 0:4040347d719c 917 * @brief Write to a register.
Erman Komurcu 0:4040347d719c 918 *
Erman Komurcu 0:4040347d719c 919 * @param[in] reg Address of a register to be written.
Erman Komurcu 0:4040347d719c 920 * @param[out] value Pointer of value to be written to register.
Erman Komurcu 0:4040347d719c 921 * @param[in] len Size of result to be written.
Erman Komurcu 0:4040347d719c 922 *
Erman Komurcu 0:4040347d719c 923 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 924 */
Erman Komurcu 0:4040347d719c 925 int write_register(uint8_t reg, const uint8_t *value, uint8_t len);
Erman Komurcu 0:4040347d719c 926
Erman Komurcu 0:4040347d719c 927 /**
Erman Komurcu 0:4040347d719c 928 * @brief Initial programming steps after power on or soft reset.
Erman Komurcu 0:4040347d719c 929 *
Erman Komurcu 0:4040347d719c 930 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 931 */
Erman Komurcu 0:4040347d719c 932 int initial_programming(void);
Erman Komurcu 0:4040347d719c 933
Erman Komurcu 0:4040347d719c 934 /**
Erman Komurcu 0:4040347d719c 935 * @brief Set Baud clock predivision ratio
Erman Komurcu 0:4040347d719c 936 *
Erman Komurcu 0:4040347d719c 937 * @param[in] prediv values between 3 and 255
Erman Komurcu 0:4040347d719c 938 *
Erman Komurcu 0:4040347d719c 939 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 940 */
Erman Komurcu 0:4040347d719c 941 int set_bclk_prediv(uint8_t prediv);
Erman Komurcu 0:4040347d719c 942
Erman Komurcu 0:4040347d719c 943 /**
Erman Komurcu 0:4040347d719c 944 * @brief Gets Baud clock predivision ratio
Erman Komurcu 0:4040347d719c 945 *
Erman Komurcu 0:4040347d719c 946 * @param[in] prediv values between 3 and 255
Erman Komurcu 0:4040347d719c 947 *
Erman Komurcu 0:4040347d719c 948 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 949 */
Erman Komurcu 0:4040347d719c 950 int get_bclk_prediv(uint8_t* prediv);
Erman Komurcu 0:4040347d719c 951
Erman Komurcu 0:4040347d719c 952 /**
Erman Komurcu 0:4040347d719c 953 * @brief Controls GFSK shaping
Erman Komurcu 0:4040347d719c 954 *
Erman Komurcu 0:4040347d719c 955 * @param[in] tstep values between 0 and 31
Erman Komurcu 0:4040347d719c 956 *
Erman Komurcu 0:4040347d719c 957 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 958 */
Erman Komurcu 0:4040347d719c 959 int set_tstep(uint8_t tstep);
Erman Komurcu 0:4040347d719c 960
Erman Komurcu 0:4040347d719c 961 /**
Erman Komurcu 0:4040347d719c 962 * @brief Gets tstep
Erman Komurcu 0:4040347d719c 963 *
Erman Komurcu 0:4040347d719c 964 * @param[in] tstep values between 0 and 31
Erman Komurcu 0:4040347d719c 965 *
Erman Komurcu 0:4040347d719c 966 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 967 */
Erman Komurcu 0:4040347d719c 968 int get_tstep(uint8_t* tstep);
Erman Komurcu 0:4040347d719c 969
Erman Komurcu 0:4040347d719c 970 /**
Erman Komurcu 0:4040347d719c 971 * @brief Set PLL frequency
Erman Komurcu 0:4040347d719c 972 *
Erman Komurcu 0:4040347d719c 973 * @param[in] freq FREQ value to PLL between 0x00 and 0xFFFFFF
Erman Komurcu 0:4040347d719c 974 *
Erman Komurcu 0:4040347d719c 975 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 976 *
Erman Komurcu 0:4040347d719c 977 * @description LO frequency = FREQ<23:0>/2^16*fXTAL
Erman Komurcu 0:4040347d719c 978 */
Erman Komurcu 0:4040347d719c 979 int set_frequency(uint32_t freq);
Erman Komurcu 0:4040347d719c 980
Erman Komurcu 0:4040347d719c 981 /**
Erman Komurcu 0:4040347d719c 982 * @brief Gets PLL frequency
Erman Komurcu 0:4040347d719c 983 *
Erman Komurcu 0:4040347d719c 984 * @param[in] freq FREQ value to PLL between 0x00 and 0xFFFFFF
Erman Komurcu 0:4040347d719c 985 *
Erman Komurcu 0:4040347d719c 986 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 987 *
Erman Komurcu 0:4040347d719c 988 * @description LO frequency = FREQ<23:0>/2^16*fXTAL
Erman Komurcu 0:4040347d719c 989 */
Erman Komurcu 0:4040347d719c 990 int get_frequency(uint32_t* freq);
Erman Komurcu 0:4040347d719c 991
Erman Komurcu 0:4040347d719c 992 /**
Erman Komurcu 0:4040347d719c 993 * @brief Set frequency deviation from the space frequency for the mark frequency
Erman Komurcu 0:4040347d719c 994 *
Erman Komurcu 0:4040347d719c 995 * @param[in] deltaf frequency deviation value
Erman Komurcu 0:4040347d719c 996 *
Erman Komurcu 0:4040347d719c 997 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 998 *
Erman Komurcu 0:4040347d719c 999 * @description fDELTA = DELTAF[6:0]* fXTAL/8192
Erman Komurcu 0:4040347d719c 1000 */
Erman Komurcu 0:4040347d719c 1001 int set_deltaf(uint8_t deltaf);
Erman Komurcu 0:4040347d719c 1002
Erman Komurcu 0:4040347d719c 1003 /**
Erman Komurcu 0:4040347d719c 1004 * @brief Get frequency deviation from the space frequency for the mark frequency
Erman Komurcu 0:4040347d719c 1005 *
Erman Komurcu 0:4040347d719c 1006 * @param[in] deltaf frequency deviation value
Erman Komurcu 0:4040347d719c 1007 *
Erman Komurcu 0:4040347d719c 1008 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 1009 *
Erman Komurcu 0:4040347d719c 1010 * @description fDELTA = DELTAF[6:0]* fXTAL/8192
Erman Komurcu 0:4040347d719c 1011 */
Erman Komurcu 0:4040347d719c 1012 int get_deltaf(uint8_t* deltaf);
Erman Komurcu 0:4040347d719c 1013
Erman Komurcu 0:4040347d719c 1014 /**
Erman Komurcu 0:4040347d719c 1015 * @brief Set frequency deviation from the space frequency for the mark frequency
Erman Komurcu 0:4040347d719c 1016 *
Erman Komurcu 0:4040347d719c 1017 * @param[in] deltaf_shape frequency deviation value
Erman Komurcu 0:4040347d719c 1018 *
Erman Komurcu 0:4040347d719c 1019 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 1020 *
Erman Komurcu 0:4040347d719c 1021 * @description fDELTA = DELTAF_SHAPE[3:0]* fXTAL/81920
Erman Komurcu 0:4040347d719c 1022 */
Erman Komurcu 0:4040347d719c 1023 int set_deltaf_shape(uint8_t deltaf_shape);
Erman Komurcu 0:4040347d719c 1024
Erman Komurcu 0:4040347d719c 1025 /**
Erman Komurcu 0:4040347d719c 1026 * @brief Gets frequency deviation from the space frequency for the mark frequency
Erman Komurcu 0:4040347d719c 1027 *
Erman Komurcu 0:4040347d719c 1028 * @param[in] deltaf_shape frequency deviation value
Erman Komurcu 0:4040347d719c 1029 *
Erman Komurcu 0:4040347d719c 1030 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 1031 *
Erman Komurcu 0:4040347d719c 1032 * @description fDELTA = DELTAF_SHAPE[3:0]* fXTAL/81920
Erman Komurcu 0:4040347d719c 1033 */
Erman Komurcu 0:4040347d719c 1034 int get_deltaf_shape(uint8_t* deltaf_shape);
Erman Komurcu 0:4040347d719c 1035
Erman Komurcu 0:4040347d719c 1036 /**
Erman Komurcu 0:4040347d719c 1037 * @brief Set Packet Length for I2C communication
Erman Komurcu 0:4040347d719c 1038 *
Erman Komurcu 0:4040347d719c 1039 * @param[in] pktlen values between 0x00 and 0x7FF
Erman Komurcu 0:4040347d719c 1040 *
Erman Komurcu 0:4040347d719c 1041 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 1042 */
Erman Komurcu 0:4040347d719c 1043 int set_i2c_pktlen(uint16_t pktlen);
Erman Komurcu 0:4040347d719c 1044
Erman Komurcu 0:4040347d719c 1045 /**
Erman Komurcu 0:4040347d719c 1046 * @brief Gets Packet Length for I2C communication
Erman Komurcu 0:4040347d719c 1047 *
Erman Komurcu 0:4040347d719c 1048 * @param[in] pktlen values between 0x00 and 0x7FF
Erman Komurcu 0:4040347d719c 1049 *
Erman Komurcu 0:4040347d719c 1050 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 1051 */
Erman Komurcu 0:4040347d719c 1052 int get_i2c_pktlen(uint16_t* pktlen);
Erman Komurcu 0:4040347d719c 1053
Erman Komurcu 0:4040347d719c 1054 /**
Erman Komurcu 0:4040347d719c 1055 * @brief Adjust baud rate
Erman Komurcu 0:4040347d719c 1056 *
Erman Komurcu 0:4040347d719c 1057 * @param[in] baud_rate preferred baud rate
Erman Komurcu 0:4040347d719c 1058 *
Erman Komurcu 0:4040347d719c 1059 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 1060 *
Erman Komurcu 0:4040347d719c 1061 * @description It changes only the values of BCLK_PREDIV and BCLK_POSTDIV
Erman Komurcu 0:4040347d719c 1062 * Baud_rate = f_clk/((1+BCLK_PREDIV)x2^(1+BCLK_POSTDIV))
Erman Komurcu 0:4040347d719c 1063 * where f_clk = f_xtal/XOCLKDIV_ratio
Erman Komurcu 0:4040347d719c 1064 * Note that to maintain the internal 3.2MHz time base,
Erman Komurcu 0:4040347d719c 1065 * XOCLKDIV[1:0] (register CFG1, 0x00, bit 4) must be programmed,
Erman Komurcu 0:4040347d719c 1066 * based on the crystal frequency
Erman Komurcu 0:4040347d719c 1067 */
Erman Komurcu 0:4040347d719c 1068 int adjust_baudrate(float rate);
Erman Komurcu 0:4040347d719c 1069
Erman Komurcu 0:4040347d719c 1070 /**
Erman Komurcu 0:4040347d719c 1071 * @brief Gets baud rate
Erman Komurcu 0:4040347d719c 1072 *
Erman Komurcu 0:4040347d719c 1073 * @returns baud rate.
Erman Komurcu 0:4040347d719c 1074 *
Erman Komurcu 0:4040347d719c 1075 */
Erman Komurcu 0:4040347d719c 1076 float get_baudrate();
Erman Komurcu 0:4040347d719c 1077
Erman Komurcu 0:4040347d719c 1078 /**
Erman Komurcu 0:4040347d719c 1079 * @brief Adjust Manchester Bitrate
Erman Komurcu 0:4040347d719c 1080 *
Erman Komurcu 0:4040347d719c 1081 * @param[in] data_rate preferred data rate in (1-50)kbps
Erman Komurcu 0:4040347d719c 1082 *
Erman Komurcu 0:4040347d719c 1083 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 1084 */
Erman Komurcu 0:4040347d719c 1085 int adjust_manchester_bitrate(char rate);
Erman Komurcu 0:4040347d719c 1086
Erman Komurcu 0:4040347d719c 1087 /**
Erman Komurcu 0:4040347d719c 1088 * @brief Get Manchester Bitrate
Erman Komurcu 0:4040347d719c 1089 *
Erman Komurcu 0:4040347d719c 1090 * @returns data rate in (1-50)kbps
Erman Komurcu 0:4040347d719c 1091 */
Erman Komurcu 0:4040347d719c 1092 char get_manchester_bitrate();
Erman Komurcu 0:4040347d719c 1093
Erman Komurcu 0:4040347d719c 1094 /**
Erman Komurcu 0:4040347d719c 1095 * @brief Configures the crystal frequency of the chip (Fxtal)
Erman Komurcu 0:4040347d719c 1096 *
Erman Komurcu 0:4040347d719c 1097 * @param[in] freq crystal frequency values between 12.8 MHz and 19.2 MHz
Erman Komurcu 0:4040347d719c 1098 *
Erman Komurcu 0:4040347d719c 1099 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 1100 */
Erman Komurcu 0:4040347d719c 1101 int set_crystal_frequency(float freq);
Erman Komurcu 0:4040347d719c 1102
Erman Komurcu 0:4040347d719c 1103 /**
Erman Komurcu 0:4040347d719c 1104 * @brief Get the crystal frequency of the chip (Fxtal)
Erman Komurcu 0:4040347d719c 1105 *
Erman Komurcu 0:4040347d719c 1106 * @returns crystal frequency values between 12.8 MHz and 19.2 MHz
Erman Komurcu 0:4040347d719c 1107 */
Erman Komurcu 0:4040347d719c 1108 float get_crystal_frequency();
Erman Komurcu 0:4040347d719c 1109
Erman Komurcu 0:4040347d719c 1110 /**
Erman Komurcu 0:4040347d719c 1111 * @brief Adjust center/carrier frequency of the chip
Erman Komurcu 0:4040347d719c 1112 *
Erman Komurcu 0:4040347d719c 1113 * @param[in] freq center/carrier frequency value between 250 MHz and 950 MHz
Erman Komurcu 0:4040347d719c 1114 *
Erman Komurcu 0:4040347d719c 1115 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 1116 */
Erman Komurcu 0:4040347d719c 1117 int set_center_frequency(float freq);
Erman Komurcu 0:4040347d719c 1118
Erman Komurcu 0:4040347d719c 1119 /**
Erman Komurcu 0:4040347d719c 1120 * @brief Gets center/carrier frequency of the chip
Erman Komurcu 0:4040347d719c 1121 *
Erman Komurcu 0:4040347d719c 1122 * @returns center/carrier frequency value between 250 MHz and 950 MHz
Erman Komurcu 0:4040347d719c 1123 */
Erman Komurcu 0:4040347d719c 1124 float get_center_frequency();
Erman Komurcu 0:4040347d719c 1125
Erman Komurcu 0:4040347d719c 1126 /**
Erman Komurcu 0:4040347d719c 1127 * @brief set the FSK deviation values (Delta_f)
Erman Komurcu 0:4040347d719c 1128 *
Erman Komurcu 0:4040347d719c 1129 * @param[in] deviation deviation value in in kHz baud rate
Erman Komurcu 0:4040347d719c 1130 *
Erman Komurcu 0:4040347d719c 1131 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 1132 *
Erman Komurcu 0:4040347d719c 1133 * @description The mark frequency is defined by the space frequency
Erman Komurcu 0:4040347d719c 1134 * plus a frequency deviation. If frequency shaping is
Erman Komurcu 0:4040347d719c 1135 * disabled by setting FSKSHAPE = 0 (register CFG1, bit 2),
Erman Komurcu 0:4040347d719c 1136 * the frequency deviation is defined by DELTAF[6:0]
Erman Komurcu 0:4040347d719c 1137 * (register PLL6, bits 6:0).
Erman Komurcu 0:4040347d719c 1138 * DELTAF[6 : 0] = (Delta_f * 8192)f_xtal
Erman Komurcu 0:4040347d719c 1139 * If frequency shaping is enabled by setting FSKSHAPE = 1
Erman Komurcu 0:4040347d719c 1140 * (register CFG1, bit 2), the frequency deviation is defined
Erman Komurcu 0:4040347d719c 1141 * by DETLAF_SHAPE[3:0] (register PLL7, bits 3:0).
Erman Komurcu 0:4040347d719c 1142 * DELTAF_SHAPE[3 : 0] = (Delta_f * 8192)/(f_xtal * 10)
Erman Komurcu 0:4040347d719c 1143 */
Erman Komurcu 0:4040347d719c 1144 int adjust_frequency_deviation(float deviation);
Erman Komurcu 0:4040347d719c 1145
Erman Komurcu 0:4040347d719c 1146 /**
Erman Komurcu 0:4040347d719c 1147 * @brief Send data for selected Preset/I2C/SPI mode
Erman Komurcu 0:4040347d719c 1148 *
Erman Komurcu 0:4040347d719c 1149 * @param[in] data data pointer for data to be transferred
Erman Komurcu 0:4040347d719c 1150 * @param[in] length legth of data to be transferred
Erman Komurcu 0:4040347d719c 1151 *
Erman Komurcu 0:4040347d719c 1152 * @returns 0 on success, negative error code on failure.
Erman Komurcu 0:4040347d719c 1153 */
Erman Komurcu 0:4040347d719c 1154 int send_data(uint8_t *data, uint32_t length);
Erman Komurcu 0:4040347d719c 1155 };
Erman Komurcu 0:4040347d719c 1156
Erman Komurcu 0:4040347d719c 1157
Erman Komurcu 0:4040347d719c 1158 /** MAX41460 Device Class
Erman Komurcu 0:4040347d719c 1159 *
Erman Komurcu 0:4040347d719c 1160 * Hold configurations for the MAX41460
Erman Komurcu 0:4040347d719c 1161 */
Erman Komurcu 0:4040347d719c 1162 class MAX41460 : public MAX4146X <max41460_reg_map_t>
Erman Komurcu 0:4040347d719c 1163 {
Erman Komurcu 0:4040347d719c 1164 max41460_reg_map_t regmap;
Erman Komurcu 0:4040347d719c 1165 public:
Erman Komurcu 0:4040347d719c 1166 MAX41460(SPI *spi, DigitalOut *cs) : MAX4146X<max41460_reg_map_t>(&regmap, spi, cs) {}
Erman Komurcu 0:4040347d719c 1167
Erman Komurcu 0:4040347d719c 1168 MAX41460(SPI *spi) : MAX4146X<max41460_reg_map_t>(&regmap, spi) {}
Erman Komurcu 0:4040347d719c 1169
Erman Komurcu 0:4040347d719c 1170 MAX41460(DigitalOut *cs) : MAX4146X(cs) {}
Erman Komurcu 0:4040347d719c 1171
Erman Komurcu 0:4040347d719c 1172 };
Erman Komurcu 0:4040347d719c 1173
Erman Komurcu 0:4040347d719c 1174 /** MAX41461 Device Class
Erman Komurcu 0:4040347d719c 1175 *
Erman Komurcu 0:4040347d719c 1176 * Hold configurations for the MAX41461
Erman Komurcu 0:4040347d719c 1177 */
Erman Komurcu 0:4040347d719c 1178 class MAX41461 : public MAX4146X <max41461_2_reg_map_t>
Erman Komurcu 0:4040347d719c 1179 {
Erman Komurcu 0:4040347d719c 1180 max41461_2_reg_map_t regmap;
Erman Komurcu 0:4040347d719c 1181 public:
Erman Komurcu 0:4040347d719c 1182 MAX41461(I2C *i2c) : MAX4146X<max41461_2_reg_map_t>(&regmap, i2c) {}
Erman Komurcu 0:4040347d719c 1183
Erman Komurcu 0:4040347d719c 1184 MAX41461(DigitalOut *cs) : MAX4146X(cs) {}
Erman Komurcu 0:4040347d719c 1185 };
Erman Komurcu 0:4040347d719c 1186
Erman Komurcu 0:4040347d719c 1187 /** MAX41462 Device Class
Erman Komurcu 0:4040347d719c 1188 *
Erman Komurcu 0:4040347d719c 1189 * Hold configurations for the MAX41462
Erman Komurcu 0:4040347d719c 1190 */
Erman Komurcu 0:4040347d719c 1191 class MAX41462 : public MAX41461
Erman Komurcu 0:4040347d719c 1192 {
Erman Komurcu 0:4040347d719c 1193 public:
Erman Komurcu 0:4040347d719c 1194 MAX41462(I2C *i2c) : MAX41461(i2c) {}
Erman Komurcu 0:4040347d719c 1195
Erman Komurcu 0:4040347d719c 1196 MAX41462(DigitalOut *cs) : MAX41461(cs) {}
Erman Komurcu 0:4040347d719c 1197
Erman Komurcu 0:4040347d719c 1198 };
Erman Komurcu 0:4040347d719c 1199
Erman Komurcu 0:4040347d719c 1200 /** MAX41463 Device Class
Erman Komurcu 0:4040347d719c 1201 *
Erman Komurcu 0:4040347d719c 1202 * Hold configurations for the MAX41463
Erman Komurcu 0:4040347d719c 1203 */
Erman Komurcu 0:4040347d719c 1204 class MAX41463 : public MAX4146X <max41463_4_reg_map_t>
Erman Komurcu 0:4040347d719c 1205 {
Erman Komurcu 0:4040347d719c 1206 max41463_4_reg_map_t regmap;
Erman Komurcu 0:4040347d719c 1207 public:
Erman Komurcu 0:4040347d719c 1208 MAX41463(I2C *i2c) : MAX4146X<max41463_4_reg_map_t>(&regmap, i2c) {}
Erman Komurcu 0:4040347d719c 1209
Erman Komurcu 0:4040347d719c 1210 MAX41463(DigitalOut *cs) : MAX4146X(cs) {}
Erman Komurcu 0:4040347d719c 1211
Erman Komurcu 0:4040347d719c 1212 };
Erman Komurcu 0:4040347d719c 1213
Erman Komurcu 0:4040347d719c 1214 /** MAX41464 Device Class
Erman Komurcu 0:4040347d719c 1215 *
Erman Komurcu 0:4040347d719c 1216 * Hold configurations for the MAX41464
Erman Komurcu 0:4040347d719c 1217 */
Erman Komurcu 0:4040347d719c 1218 class MAX41464 : public MAX41463
Erman Komurcu 0:4040347d719c 1219 {
Erman Komurcu 0:4040347d719c 1220 public:
Erman Komurcu 0:4040347d719c 1221 MAX41464(I2C *i2c) : MAX41463(i2c) {}
Erman Komurcu 0:4040347d719c 1222
Erman Komurcu 0:4040347d719c 1223 MAX41464(DigitalOut *cs) : MAX41463(cs) {}
Erman Komurcu 0:4040347d719c 1224
Erman Komurcu 0:4040347d719c 1225 };
Erman Komurcu 0:4040347d719c 1226
Erman Komurcu 0:4040347d719c 1227
Erman Komurcu 0:4040347d719c 1228 #endif /* MAX4146x_H_ */