ISM RF transmitter library for MAX4146X family devices

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

Committer:
Erman Komurcu
Date:
Thu May 02 12:51:33 2019 +0300
Revision:
0:4040347d719c
Child:
1:ccf0e1d28860
Initial Commit

Who changed what in which revision?

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