rng 2.0.0.0
rng.h
Go to the documentation of this file.
1/*
2 * MikroSDK - MikroE Software Development Kit
3 * Copyright© 2020 MikroElektronika d.o.o.
4 *
5 * Permission is hereby granted, free of charge, to any person
6 * obtaining a copy of this software and associated documentation
7 * files (the "Software"), to deal in the Software without restriction,
8 * including without limitation the rights to use, copy, modify, merge,
9 * publish, distribute, sublicense, and/or sell copies of the Software,
10 * and to permit persons to whom the Software is furnished to do so,
11 * subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be
14 * included in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
20 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
22 * OR OTHER DEALINGS IN THE SOFTWARE.
23 */
24
33// ----------------------------------------------------------------------------
34
35#ifndef RNG_H
36#define RNG_H
37
42#ifdef PREINIT_SUPPORTED
43#include "preinit.h"
44#endif
45
46#ifdef MikroCCoreVersion
47 #if MikroCCoreVersion >= 1
48 #include "delays.h"
49 #endif
50#endif
51
52#include "drv_digital_out.h"
53#include "drv_digital_in.h"
54#include "drv_i2c_master.h"
55
56// -------------------------------------------------------------- PUBLIC MACROS
66#define RNG_MAP_MIKROBUS( cfg, mikrobus ) \
67 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
68 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
69 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
76#define RNG_RETVAL uint8_t
77
78#define RNG_OK 0x00
79#define RNG_INIT_ERROR 0xFF
86#define RNG_DEVICE_SLAVE_ADDRESS_GND 0x48
87#define RNG_DEVICE_SLAVE_ADDRESS_VDD 0x49
88#define RNG_DEVICE_SLAVE_ADDRESS_SDA 0x4A
89#define RNG_DEVICE_SLAVE_ADDRESS_SCL 0x4B
96#define RNG_RESET_DEVICE 0x06
103#define RNG_CONVERSION_REG 0x00
104#define RNG_CONFIG_REG 0x01
105#define RNG_LO_THRESH_REG 0x02
106#define RNG_HI_THRESH_REG 0x03
113#define RNG_CONFIG_REG_COMP_QUEUE_DISABLE 0x0003
114#define RNG_CONFIG_REG_COMP_QUEUE_4_CONV 0x0002
115#define RNG_CONFIG_REG_COMP_QUEUE_2_CONV 0x0001
116#define RNG_CONFIG_REG_COMP_QUEUE_1_CONV 0x0000
117#define RNG_CONFIG_REG_COMP_LAT_NON 0x0000
118#define RNG_CONFIG_REG_COMP_LAT 0x0004
119#define RNG_CONFIG_REG_COMP_POL_LOW 0x0000
120#define RNG_CONFIG_REG_COMP_POL_HIGH 0x0008
121#define RNG_CONFIG_REG_COMP_MODE_TRAD 0x0000
122#define RNG_CONFIG_REG_COMP_MODE_WINDOW 0x0010
123#define RNG_CONFIG_REG_DATA_RATE_8_SPS 0x0000
124#define RNG_CONFIG_REG_DATA_RATE_16_SPS 0x0020
125#define RNG_CONFIG_REG_DATA_RATE_32_SPS 0x0040
126#define RNG_CONFIG_REG_DATA_RATE_64_SPS 0x0060
127#define RNG_CONFIG_REG_DATA_RATE_128_SPS 0x0080
128#define RNG_CONFIG_REG_DATA_RATE_250_SPS 0x00A0
129#define RNG_CONFIG_REG_DATA_RATE_475_SPS 0x00C0
130#define RNG_CONFIG_REG_DATA_RATE_860_SPS 0x00E0
131#define RNG_CONFIG_REG_DEV_MODE_SINGLE 0x0100
132#define RNG_CONFIG_REG_DEV_MODE_CONTIN 0x0000
133#define RNG_CONFIG_REG_PGA_6144 0x0000
134#define RNG_CONFIG_REG_PGA_4096 0x0200
135#define RNG_CONFIG_REG_PGA_2048 0x0400
136#define RNG_CONFIG_REG_PGA_1024 0x0600
137#define RNG_CONFIG_REG_PGA_512 0x0800
138#define RNG_CONFIG_REG_PGA_256_1 0x0A00
139#define RNG_CONFIG_REG_PGA_256_2 0x0C00
140#define RNG_CONFIG_REG_PGA_256_3 0x0E00
141#define RNG_CONFIG_REG_MUX_AINP_AINN_0_1 0x0000
142#define RNG_CONFIG_REG_MUX_AINP_AINN_0_3 0x1000
143#define RNG_CONFIG_REG_MUX_AINP_AINN_1_3 0x2000
144#define RNG_CONFIG_REG_MUX_AINP_AINN_2_3 0x3000
145#define RNG_CONFIG_REG_MUX_AINP_AINN_0_GND 0x4000
146#define RNG_CONFIG_REG_MUX_AINP_AINN_1_GND 0x5000
147#define RNG_CONFIG_REG_MUX_AINP_AINN_2_GND 0x6000
148#define RNG_CONFIG_REG_MUX_AINP_AINN_3_GND 0x7000
149#define RNG_CONFIG_REG_OS_SINGLE_CONV 0x8000
150#define RNG_CONFIG_REG_OS_NO_EFFECT 0x0000
157#define RNG_REG_LOWTHRES_HOLD 0x8000
158#define RNG_REG_HIGH_THRESH_HOLD 0x7FFF
161 // End group macro
162// --------------------------------------------------------------- PUBLIC TYPES
171typedef struct
172{
173 // Input pins
174
175 digital_in_t int_pin;
176
177 // Modules
178
179 i2c_master_t i2c;
180
181 // ctx variable
182
184
185 // static variable
186
187 uint16_t dev_vref;
188
189} rng_t;
190
194typedef struct
195{
196 // Communication gpio pins
197
198 pin_name_t scl;
199 pin_name_t sda;
200
201 // Additional gpio pins
202
203 pin_name_t int_pin;
204
205 // static variable
206
207 uint32_t i2c_speed;
208 uint8_t i2c_address;
209
210 uint16_t dev_vref_cfg;
211
212} rng_cfg_t;
213
214 // End types group
215// ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
216
222#ifdef __cplusplus
223extern "C"{
224#endif
225
235
245
253void rng_default_cfg ( rng_t *ctx );
254
264void rng_write_function ( rng_t *ctx, uint8_t reg, uint16_t reg_data );
265
276uint16_t rng_read_function ( rng_t *ctx, uint8_t reg );
277
286
295void rng_set_config ( rng_t *ctx, uint16_t conf_data );
296
305void rng_set_vref ( rng_t *ctx, uint16_t vref_mv );
306
316float rng_get_voltage ( rng_t *ctx );
317
327void rng_set_threshold ( rng_t *ctx, uint8_t thresh_reg, uint16_t thresh_data );
328
329
330#ifdef __cplusplus
331}
332#endif
333#endif // _RNG_H_
334
335 // End public_function group
337
338// ------------------------------------------------------------------------- END
#define RNG_RETVAL
Definition rng.h:76
void rng_reset_device(rng_t *ctx)
Function used for reset device.
void rng_cfg_setup(rng_cfg_t *cfg)
Config Object Initialization function.
void rng_write_function(rng_t *ctx, uint8_t reg, uint16_t reg_data)
Write function.
RNG_RETVAL rng_init(rng_t *ctx, rng_cfg_t *cfg)
Initialization function.
void rng_set_config(rng_t *ctx, uint16_t conf_data)
Function used for set configuration.
void rng_set_vref(rng_t *ctx, uint16_t vref_mv)
Function used for set vref in millivolts.
void rng_set_threshold(rng_t *ctx, uint8_t thresh_reg, uint16_t thresh_data)
Function used for set threshold values.
void rng_default_cfg(rng_t *ctx)
Click Default Configuration function.
uint16_t rng_read_function(rng_t *ctx, uint8_t reg)
Read function.
float rng_get_voltage(rng_t *ctx)
Function used for get voltage.
Click configuration structure definition.
Definition rng.h:195
uint16_t dev_vref_cfg
Definition rng.h:210
uint32_t i2c_speed
Definition rng.h:207
pin_name_t scl
Definition rng.h:198
pin_name_t int_pin
Definition rng.h:203
pin_name_t sda
Definition rng.h:199
uint8_t i2c_address
Definition rng.h:208
Click ctx object definition.
Definition rng.h:172
digital_in_t int_pin
Definition rng.h:175
i2c_master_t i2c
Definition rng.h:179
uint8_t slave_address
Definition rng.h:183
uint16_t dev_vref
Definition rng.h:187