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 
38 #include "mikrosdk_version.h"
39 
40 #ifdef __GNUC__
41 #if mikroSDK_GET_VERSION < 20800ul
42 #include "rcu_delays.h"
43 #else
44 #include "delays.h"
45 #endif
46 #endif
47 
48 #include "drv_digital_out.h"
49 #include "drv_digital_in.h"
50 #include "drv_i2c_master.h"
51 
52 // -------------------------------------------------------------- PUBLIC MACROS
62 #define RNG_MAP_MIKROBUS( cfg, mikrobus ) \
63  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
64  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
65  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
66 
72 #define RNG_RETVAL uint8_t
73 
74 #define RNG_OK 0x00
75 #define RNG_INIT_ERROR 0xFF
76 
82 #define RNG_DEVICE_SLAVE_ADDRESS_GND 0x48
83 #define RNG_DEVICE_SLAVE_ADDRESS_VDD 0x49
84 #define RNG_DEVICE_SLAVE_ADDRESS_SDA 0x4A
85 #define RNG_DEVICE_SLAVE_ADDRESS_SCL 0x4B
86 
92 #define RNG_RESET_DEVICE 0x06
93 
99 #define RNG_CONVERSION_REG 0x00
100 #define RNG_CONFIG_REG 0x01
101 #define RNG_LO_THRESH_REG 0x02
102 #define RNG_HI_THRESH_REG 0x03
103 
109 #define RNG_CONFIG_REG_COMP_QUEUE_DISABLE 0x0003
110 #define RNG_CONFIG_REG_COMP_QUEUE_4_CONV 0x0002
111 #define RNG_CONFIG_REG_COMP_QUEUE_2_CONV 0x0001
112 #define RNG_CONFIG_REG_COMP_QUEUE_1_CONV 0x0000
113 #define RNG_CONFIG_REG_COMP_LAT_NON 0x0000
114 #define RNG_CONFIG_REG_COMP_LAT 0x0004
115 #define RNG_CONFIG_REG_COMP_POL_LOW 0x0000
116 #define RNG_CONFIG_REG_COMP_POL_HIGH 0x0008
117 #define RNG_CONFIG_REG_COMP_MODE_TRAD 0x0000
118 #define RNG_CONFIG_REG_COMP_MODE_WINDOW 0x0010
119 #define RNG_CONFIG_REG_DATA_RATE_8_SPS 0x0000
120 #define RNG_CONFIG_REG_DATA_RATE_16_SPS 0x0020
121 #define RNG_CONFIG_REG_DATA_RATE_32_SPS 0x0040
122 #define RNG_CONFIG_REG_DATA_RATE_64_SPS 0x0060
123 #define RNG_CONFIG_REG_DATA_RATE_128_SPS 0x0080
124 #define RNG_CONFIG_REG_DATA_RATE_250_SPS 0x00A0
125 #define RNG_CONFIG_REG_DATA_RATE_475_SPS 0x00C0
126 #define RNG_CONFIG_REG_DATA_RATE_860_SPS 0x00E0
127 #define RNG_CONFIG_REG_DEV_MODE_SINGLE 0x0100
128 #define RNG_CONFIG_REG_DEV_MODE_CONTIN 0x0000
129 #define RNG_CONFIG_REG_PGA_6144 0x0000
130 #define RNG_CONFIG_REG_PGA_4096 0x0200
131 #define RNG_CONFIG_REG_PGA_2048 0x0400
132 #define RNG_CONFIG_REG_PGA_1024 0x0600
133 #define RNG_CONFIG_REG_PGA_512 0x0800
134 #define RNG_CONFIG_REG_PGA_256_1 0x0A00
135 #define RNG_CONFIG_REG_PGA_256_2 0x0C00
136 #define RNG_CONFIG_REG_PGA_256_3 0x0E00
137 #define RNG_CONFIG_REG_MUX_AINP_AINN_0_1 0x0000
138 #define RNG_CONFIG_REG_MUX_AINP_AINN_0_3 0x1000
139 #define RNG_CONFIG_REG_MUX_AINP_AINN_1_3 0x2000
140 #define RNG_CONFIG_REG_MUX_AINP_AINN_2_3 0x3000
141 #define RNG_CONFIG_REG_MUX_AINP_AINN_0_GND 0x4000
142 #define RNG_CONFIG_REG_MUX_AINP_AINN_1_GND 0x5000
143 #define RNG_CONFIG_REG_MUX_AINP_AINN_2_GND 0x6000
144 #define RNG_CONFIG_REG_MUX_AINP_AINN_3_GND 0x7000
145 #define RNG_CONFIG_REG_OS_SINGLE_CONV 0x8000
146 #define RNG_CONFIG_REG_OS_NO_EFFECT 0x0000
147 
153 #define RNG_REG_LOWTHRES_HOLD 0x8000
154 #define RNG_REG_HIGH_THRESH_HOLD 0x7FFF
155  // End group macro
158 // --------------------------------------------------------------- PUBLIC TYPES
167 typedef struct
168 {
169  // Input pins
170 
171  digital_in_t int_pin;
172 
173  // Modules
174 
175  i2c_master_t i2c;
176 
177  // ctx variable
178 
179  uint8_t slave_address;
180 
181  // static variable
182 
183  uint16_t dev_vref;
184 
185 } rng_t;
186 
190 typedef struct
191 {
192  // Communication gpio pins
193 
194  pin_name_t scl;
195  pin_name_t sda;
196 
197  // Additional gpio pins
198 
199  pin_name_t int_pin;
200 
201  // static variable
202 
203  uint32_t i2c_speed;
204  uint8_t i2c_address;
205 
206  uint16_t dev_vref_cfg;
207 
208 } rng_cfg_t;
209  // End types group
211 // ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
212 
218 #ifdef __cplusplus
219 extern "C"{
220 #endif
221 
230 void rng_cfg_setup ( rng_cfg_t *cfg );
231 
241 
249 void rng_default_cfg ( rng_t *ctx );
250 
260 void rng_write_function ( rng_t *ctx, uint8_t reg, uint16_t reg_data );
261 
272 uint16_t rng_read_function ( rng_t *ctx, uint8_t reg );
273 
281 void rng_reset_device ( rng_t *ctx );
282 
291 void rng_set_config ( rng_t *ctx, uint16_t conf_data );
292 
301 void rng_set_vref ( rng_t *ctx, uint16_t vref_mv );
302 
312 float rng_get_voltage ( rng_t *ctx );
313 
323 void rng_set_threshold ( rng_t *ctx, uint8_t thresh_reg, uint16_t thresh_data );
324 
325 
326 #ifdef __cplusplus
327 }
328 #endif
329 #endif // _RNG_H_
330  // End public_function group
333 
334 // ------------------------------------------------------------------------- END
rng_cfg_t::int_pin
pin_name_t int_pin
Definition: rng.h:199
rng_set_threshold
void rng_set_threshold(rng_t *ctx, uint8_t thresh_reg, uint16_t thresh_data)
Function used for set threshold values.
rng_cfg_t::dev_vref_cfg
uint16_t dev_vref_cfg
Definition: rng.h:206
rng_reset_device
void rng_reset_device(rng_t *ctx)
Function used for reset device.
rng_cfg_t::sda
pin_name_t sda
Definition: rng.h:195
rng_set_config
void rng_set_config(rng_t *ctx, uint16_t conf_data)
Function used for set configuration.
rng_get_voltage
float rng_get_voltage(rng_t *ctx)
Function used for get voltage.
rng_default_cfg
void rng_default_cfg(rng_t *ctx)
Click Default Configuration function.
rng_cfg_t::scl
pin_name_t scl
Definition: rng.h:194
rng_t::dev_vref
uint16_t dev_vref
Definition: rng.h:183
rng_t::slave_address
uint8_t slave_address
Definition: rng.h:179
rng_read_function
uint16_t rng_read_function(rng_t *ctx, uint8_t reg)
Read function.
rng_init
RNG_RETVAL rng_init(rng_t *ctx, rng_cfg_t *cfg)
Initialization function.
rng_t::i2c
i2c_master_t i2c
Definition: rng.h:175
rng_cfg_t
Click configuration structure definition.
Definition: rng.h:191
rng_cfg_t::i2c_address
uint8_t i2c_address
Definition: rng.h:204
rng_t
Click ctx object definition.
Definition: rng.h:168
rng_set_vref
void rng_set_vref(rng_t *ctx, uint16_t vref_mv)
Function used for set vref in millivolts.
rng_t::int_pin
digital_in_t int_pin
Definition: rng.h:171
rng_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: rng.h:203
rng_write_function
void rng_write_function(rng_t *ctx, uint8_t reg, uint16_t reg_data)
Write function.
rng_cfg_setup
void rng_cfg_setup(rng_cfg_t *cfg)
Config Object Initialization function.
RNG_RETVAL
#define RNG_RETVAL
Definition: rng.h:72