recnplay 2.0.0.0
recnplay.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 RECNPLAY_H
36#define RECNPLAY_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_spi_master.h"
55
56
57// -------------------------------------------------------------- PUBLIC MACROS
68#define RECNPLAY_MAP_MIKROBUS( cfg, mikrobus ) \
69 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
70 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
71 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
72 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
73 cfg.rdy = MIKROBUS( mikrobus, MIKROBUS_AN ); \
74 cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
75 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
82#define RECPLAY_PLAY_VP 0xA6
83#define RECPLAY_PLAY_VP_RN 0xAE
84#define RECPLAY_EXE_VM 0xB0
85#define RECPLAY_REC_MSG 0x38
86#define RECPLAY_REC_MSG_ADDR 0x3A
87#define RECPLAY_PLAY_MSG 0x3C
88#define RECPLAY_PLAY_SIL 0xA8
89#define RECPLAY_STOP 0x2A
90#define RECPLAY_ERASE_MSG 0x3E
91#define RECPLAY_SPI_PCM_WRITE 0xAA
92#define RECPLAY_SPI_PCM_READ 0xAC
93#define RECPLAY_SPI_SND_DEC 0xC0
94#define RECPLAY_SPI_RCV_ENC 0xC2
95#define RECPLAY_READ_STATUS 0x40
96#define RECPLAY_READ_INT 0x46
97#define RECPLAY_READ_MSG_ADDR 0x42
98#define RECPLAY_READ_MSG_LEN 0x44
99#define RECPLAY_READ_ID 0x48
100#define RECPLAY_DIG_READ 0xA2
101#define RECPLAY_DIG_WRITE 0xA0
102#define RECPLAY_ERASE_MEM 0x24
103#define RECPLAY_CHIP_ERASE 0x26
104#define RECPLAY_PWR_UP 0x10
105#define RECPLAY_PWR_DOWN 0x12
106#define RECPLAY_SET_CLK_CFG 0xB4
107#define RECPLAY_READ_CLK_CFG 0xB6
108#define RECPLAY_WRITE_CFG_REG 0xB8
109#define RECPLAY_READ_CFG_REG 0xBA
116#define RECPLAY_INT_PEAK_DET_MASK 0x80
117#define RECPLAY_INT_MEM_PROT_ERR_MASK 0x40
118#define RECPLAY_INT_WR_FIN_MASK 0x20
119#define RECPLAY_INT_CMD_ERR_MASK 0x10
120#define RECPLAY_INT_OVF_ERR_MASK 0x08
121#define RECPLAY_INT_CMD_FIN_MASK 0x04
122#define RECPLAY_INT_ADDR_ERR_MASK 0x02
123#define RECPLAY_INT_FULL_ERR_MASK 0x01
130#define RECPLAY_STAT_PWR_DOWN_MASK 0x80
131#define RECPLAY_STAT_DBUF_RDY_MASK 0x40
132#define RECPLAY_STAT_INT_GEN_MASK 0x20
133#define RECPLAY_STAT_REC_MEM_FULL_MASK 0x10
134#define RECPLAY_STAT_VM_BSY_MASK 0x04
135#define RECPLAY_STAT_CBUF_FULL_MASK 0x02
136#define RECPLAY_STAT_CMD_BSY_MASK 0x01
143#define RECPLAY_INT_GEN_PIN 0x00
144#define RECPLAY_INT_NO_GEN_PIN 0x01
145#define RECPLAY_SPI_RDY_PIN 0x01
146#define RECPLAY_SPI_BSY_PIN 0x00
153#define RECPLAY_CFG00_REG 0x00
154#define RECPLAY_CFG01_REG 0x01
155#define RECPLAY_CFG02_REG 0x02
156#define RECPLAY_CFG03_REG 0x03
157#define RECPLAY_CFG04_REG 0x04
158#define RECPLAY_CFG05_REG 0x05
159#define RECPLAY_CFG06_REG 0x06
160#define RECPLAY_CFG07_REG 0x07
161#define RECPLAY_CFG08_REG 0x08
162#define RECPLAY_CFG09_REG 0x09
163#define RECPLAY_CFG0A_REG 0x0A
164#define RECPLAY_CFG0B_REG 0x0B
165#define RECPLAY_CFG0C_REG 0x0C
166#define RECPLAY_CFG0D_REG 0x0D
167#define RECPLAY_CFG0E_REG 0x0E
168#define RECPLAY_CFG0F_REG 0x0F
169#define RECPLAY_CFG10_REG 0x10
170#define RECPLAY_CFG11_REG 0x11
171#define RECPLAY_CFG12_REG 0x12
172#define RECPLAY_CFG13_REG 0x13
173#define RECPLAY_CFG14_REG 0x14
174#define RECPLAY_CFG15_REG 0x15
175#define RECPLAY_CFG16_REG 0x16
176#define RECPLAY_CFG17_REG 0x17
177#define RECPLAY_CFG18_REG 0x18
178#define RECPLAY_CFG19_REG 0x19
179#define RECPLAY_CFG1A_REG 0x1A
180#define RECPLAY_CFG1B_REG 0x1B
181#define RECPLAY_CFG1C_REG 0x1C
182#define RECPLAY_CFG1D_REG 0x1D
183#define RECPLAY_CFG1E_REG 0x1E
184#define RECPLAY_CFG1F_REG 0x1F
185#define RECPLAY_CFG20_REG 0x20
186#define RECPLAY_CFG21_REG 0x21
187#define RECPLAY_CFG22_REG 0x22
188#define RECPLAY_CFG23_REG 0x23
189#define RECPLAY_CFG24_REG 0x24
190#define RECPLAY_CFG25_REG 0x25
191#define RECPLAY_CFG26_REG 0x26
192#define RECPLAY_CFG27_REG 0x27
193#define RECPLAY_CFG28_REG 0x28
194#define RECPLAY_CFG29_REG 0x29
195#define RECPLAY_CFG2A_REG 0x2A
196#define RECPLAY_CFG2B_REG 0x2B
197#define RECPLAY_CFG2C_REG 0x2C
198#define RECPLAY_CFG2D_REG 0x2D
199#define RECPLAY_CFG2E_REG 0x2E
200#define RECPLAY_CFG2F_REG 0x2F
207#define RECNPLAY_RETVAL uint8_t
208
209#define RECNPLAY_OK 0x00
210#define RECNPLAY_INIT_ERROR 0xFF
213 // End group macro
214// --------------------------------------------------------------- PUBLIC TYPES
223typedef struct
224{
225 // Output pins
226
227 digital_out_t cs;
228 digital_out_t rst;
229
230 // Input pins
231
232 digital_in_t rdy;
233 digital_in_t int_pin;
234
235 // Modules
236
237 spi_master_t spi;
238 pin_name_t chip_select;
239
240} recnplay_t;
241
245typedef struct
246{
247 uint8_t part_id;
248 uint8_t man_id;
249 uint8_t mem_type;
250 uint8_t dev_id;
251
253
257typedef struct
258{
259 // Communication gpio pins
260
261 pin_name_t miso;
262 pin_name_t mosi;
263 pin_name_t sck;
264 pin_name_t cs;
265
266 // Additional gpio pins
267
268 pin_name_t rdy;
269 pin_name_t rst;
270 pin_name_t int_pin;
271
272 // static variable
273
274 uint32_t spi_speed;
275 spi_master_mode_t spi_mode;
276 spi_master_chip_select_polarity_t cs_polarity;
277
279
280 // End types group
281
282// ----------------------------------------------- PUBLIC FUNCTION DECLARATIONS
283
288#ifdef __cplusplus
289extern "C"{
290#endif
291
301
311
323void recnplay_generic_transfer ( recnplay_t *ctx, uint8_t *wr_buf, uint16_t wr_len, uint8_t *rd_buf, uint16_t rd_len );
324
338
352
365
378
392
406RECNPLAY_RETVAL recplay_play_msg ( recnplay_t* ctx, uint32_t mem_addr, uint16_t sector_offset );
407
419RECNPLAY_RETVAL recplay_play_silence ( recnplay_t* ctx, uint8_t silence_length );
420
432
445RECNPLAY_RETVAL recplay_erase_msg ( recnplay_t* ctx, uint32_t mem_addr );
446
459RECNPLAY_RETVAL recplay_spi_write_pcm ( recnplay_t* ctx, uint16_t* data_pcm, uint8_t num_pcm );
460
473RECNPLAY_RETVAL recplay_spi_read_pcm ( recnplay_t* ctx, uint16_t* data_pcm, uint8_t num_pcm );
474
487RECNPLAY_RETVAL recplay_spi_send_cmprsd_data ( recnplay_t* ctx, uint8_t* cmprsd_data, uint8_t n_data );
488
501RECNPLAY_RETVAL recplay_spi_receive_enc_data ( recnplay_t* ctx, uint8_t* encoded_data, uint8_t n_data );
502
514RECNPLAY_RETVAL recplay_read_status ( recnplay_t* ctx, uint8_t* interr_status );
515
527RECNPLAY_RETVAL recplay_read_interr ( recnplay_t* ctx, uint8_t* interr_status );
528
541RECNPLAY_RETVAL recplay_read_msg_addr ( recnplay_t* ctx, uint32_t* msg_addr, uint16_t* msg_length );
542
555
568
583RECNPLAY_RETVAL recplay_dig_read ( recnplay_t* ctx, uint32_t mem_addr, uint8_t* data_out, uint8_t n_data );
584
599RECNPLAY_RETVAL recplay_dig_write ( recnplay_t* ctx, uint32_t mem_addr, uint8_t* data_in, uint8_t n_data );
600
614RECNPLAY_RETVAL recplay_erase_mem ( recnplay_t* ctx, uint32_t start_addr, uint32_t end_addr );
615
628
640
652
664
677
691RECNPLAY_RETVAL recplay_write_cnfg_reg ( recnplay_t* ctx, uint8_t reg_addr, uint8_t* cnfg_data, uint8_t n_data );
692
706RECNPLAY_RETVAL recplay_read_cnfg_reg ( recnplay_t* ctx, uint8_t reg_addr, uint8_t* cnfg_data, uint8_t n_data );
707
718
729
738
739
740#ifdef __cplusplus
741}
742#endif
743#endif // _RECNPLAY_H_
744
745 // End public_function group
747
748// ------------------------------------------------------------------------- END
#define RECNPLAY_RETVAL
Definition recnplay.h:207
uint8_t recplay_check_int(recnplay_t *ctx)
Interrupt Request Pin Check Command.
RECNPLAY_RETVAL recplay_spi_receive_enc_data(recnplay_t *ctx, uint8_t *encoded_data, uint8_t n_data)
SPI Receive Encoded Data Command.
RECNPLAY_RETVAL recplay_erase_mem(recnplay_t *ctx, uint32_t start_addr, uint32_t end_addr)
Memory Erase Command.
RECNPLAY_RETVAL recplay_read_status(recnplay_t *ctx, uint8_t *interr_status)
Status Read Command.
void recplay_reset(recnplay_t *ctx)
ISD3900 Reset Command.
RECNPLAY_RETVAL recplay_pwr_up(recnplay_t *ctx)
Power Up Command.
RECNPLAY_RETVAL recplay_set_clk_cnfg(recnplay_t *ctx, uint8_t clk_cnfg)
Clock Configuration Set Command.
RECNPLAY_RETVAL recplay_read_interr(recnplay_t *ctx, uint8_t *interr_status)
Interrupt Read Command.
void recnplay_cfg_setup(recnplay_cfg_t *cfg)
Config Object Initialization function.
void recnplay_generic_transfer(recnplay_t *ctx, uint8_t *wr_buf, uint16_t wr_len, uint8_t *rd_buf, uint16_t rd_len)
Generic transfer function.
RECNPLAY_RETVAL recplay_dig_read(recnplay_t *ctx, uint32_t mem_addr, uint8_t *data_out, uint8_t n_data)
Digital Read Command.
RECNPLAY_RETVAL recplay_read_msg_addr(recnplay_t *ctx, uint32_t *msg_addr, uint16_t *msg_length)
Recorded Message Address Read Command.
RECNPLAY_RETVAL recplay_spi_send_cmprsd_data(recnplay_t *ctx, uint8_t *cmprsd_data, uint8_t n_data)
SPI Send Compressed Data to Decode Command.
RECNPLAY_RETVAL recplay_record_msg(recnplay_t *ctx)
Message Record Command.
RECNPLAY_RETVAL recplay_erase_msg(recnplay_t *ctx, uint32_t mem_addr)
Message Erase at Address Command.
RECNPLAY_RETVAL recplay_play_silence(recnplay_t *ctx, uint8_t silence_length)
Silence Play Command.
RECNPLAY_RETVAL recplay_execute_vm(recnplay_t *ctx, uint16_t index)
Voice Macro Execute Command.
RECNPLAY_RETVAL recplay_write_cnfg_reg(recnplay_t *ctx, uint8_t reg_addr, uint8_t *cnfg_data, uint8_t n_data)
Configuration Write Command.
RECNPLAY_RETVAL recplay_read_msg_length(recnplay_t *ctx, uint16_t *msg_length)
Message Length Read Command.
uint8_t recplay_check_rdy(recnplay_t *ctx)
SPI Data Transfer Status Check Command.
RECNPLAY_RETVAL recplay_play_vp(recnplay_t *ctx, uint16_t index)
Voice Prompt Play Command.
RECNPLAY_RETVAL recnplay_init(recnplay_t *ctx, recnplay_cfg_t *cfg)
Initialization function.
RECNPLAY_RETVAL recplay_stop(recnplay_t *ctx)
Stop Command.
RECNPLAY_RETVAL recplay_read_id(recnplay_t *ctx, recnplay_dev_id_t *dev_id_data)
ISD3900 ID Read Command.
RECNPLAY_RETVAL recplay_read_clk_cnfg(recnplay_t *ctx, uint8_t *clk_cnfg)
Clock Configuration Read Command.
RECNPLAY_RETVAL recplay_play_vp_rn(recnplay_t *ctx, uint8_t value_rn)
Voice Prompt @Rn Play Command.
RECNPLAY_RETVAL recplay_erase_chip(recnplay_t *ctx)
Chip Erase Command.
RECNPLAY_RETVAL recplay_record_msg_addr(recnplay_t *ctx, uint32_t mem_addr)
Message Record at Address Command.
RECNPLAY_RETVAL recplay_dig_write(recnplay_t *ctx, uint32_t mem_addr, uint8_t *data_in, uint8_t n_data)
Digital Write Command.
RECNPLAY_RETVAL recplay_pwr_down(recnplay_t *ctx)
Power Down Command.
RECNPLAY_RETVAL recplay_spi_read_pcm(recnplay_t *ctx, uint16_t *data_pcm, uint8_t num_pcm)
PCM Data SPI Read Command.
RECNPLAY_RETVAL recplay_read_cnfg_reg(recnplay_t *ctx, uint8_t reg_addr, uint8_t *cnfg_data, uint8_t n_data)
Configuration Read Command.
RECNPLAY_RETVAL recplay_spi_write_pcm(recnplay_t *ctx, uint16_t *data_pcm, uint8_t num_pcm)
PCM Data SPI Write Command.
RECNPLAY_RETVAL recplay_play_msg(recnplay_t *ctx, uint32_t mem_addr, uint16_t sector_offset)
Message Play at Address Command.
Click configuration structure definition.
Definition recnplay.h:258
spi_master_chip_select_polarity_t cs_polarity
Definition recnplay.h:276
pin_name_t sck
Definition recnplay.h:263
spi_master_mode_t spi_mode
Definition recnplay.h:275
pin_name_t mosi
Definition recnplay.h:262
uint32_t spi_speed
Definition recnplay.h:274
pin_name_t int_pin
Definition recnplay.h:270
pin_name_t rdy
Definition recnplay.h:268
pin_name_t miso
Definition recnplay.h:261
pin_name_t rst
Definition recnplay.h:269
pin_name_t cs
Definition recnplay.h:264
Device ID data.
Definition recnplay.h:246
uint8_t part_id
Definition recnplay.h:247
uint8_t dev_id
Definition recnplay.h:250
uint8_t mem_type
Definition recnplay.h:249
uint8_t man_id
Definition recnplay.h:248
Click ctx object definition.
Definition recnplay.h:224
digital_out_t cs
Definition recnplay.h:227
spi_master_t spi
Definition recnplay.h:237
digital_in_t int_pin
Definition recnplay.h:233
digital_out_t rst
Definition recnplay.h:228
pin_name_t chip_select
Definition recnplay.h:238
digital_in_t rdy
Definition recnplay.h:232