39#ifdef PREINIT_SUPPORTED
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
52#include "drv_i2c_master.h"
53#include "drv_spi_master.h"
76#define SMARTMIC_NO_RESPONSE_BIT 0x1000
77#define SMARTMIC_CMD_SYNC 0x8000
78#define SMARTMIC_CMD_SET_AUDIO_DATA_PORT 0x8004
79#define SMARTMIC_CMD_GET_DEVICE_PARAM 0x800B
80#define SMARTMIC_CMD_SET_DEVICE_PARAM_ID 0x800C
81#define SMARTMIC_CMD_SET_DEVICE_PARAM 0x800D
82#define SMARTMIC_CMD_GET_CHIP_ID 0x800E
83#define SMARTMIC_CMD_SET_POWER_STATE ( 0x8010 | SMARTMIC_NO_RESPONSE_BIT )
84#define SMARTMIC_CMD_SET_CLOCK_SOURCE 0x8011
85#define SMARTMIC_CMD_SET_UART_STOP_BITS 0x8012
86#define SMARTMIC_CMD_GET_SIG_RMS 0x8013
87#define SMARTMIC_CMD_GET_SIG_PEAK 0x8014
88#define SMARTMIC_CMD_SET_DIG_GAIN 0x8015
89#define SMARTMIC_CMD_GET_ALGO_PARAM 0x8016
90#define SMARTMIC_CMD_SET_ALGO_PARAM_ID 0x8017
91#define SMARTMIC_CMD_SET_ALGO_PARAM 0x8018
92#define SMARTMIC_CMD_UART_RATE_REQUEST 0x8019
93#define SMARTMIC_CMD_SET_EVENT_RESP 0x801A
94#define SMARTMIC_CMD_SET_DIAG_CONFIG 0x801C
95#define SMARTMIC_CMD_GET_DIG_GAIN 0x801D
96#define SMARTMIC_CMD_OUTPUT_KNOWN_SIG 0x801E
97#define SMARTMIC_CMD_GET_FIRST_BUILD_STR 0x8020
98#define SMARTMIC_CMD_GET_NEXT_BUILD_STR 0x8021
99#define SMARTMIC_CMD_GET_INFO 0x8022
100#define SMARTMIC_CMD_SET_SPI_SAMPLE_CFG 0x8023
101#define SMARTMIC_CMD_SET_STREAMING 0x8025
102#define SMARTMIC_CMD_GET_BAF_INFO 0x8027
103#define SMARTMIC_CMD_SELECT_STREAMING 0x8028
104#define SMARTMIC_CMD_CONFIG_DATA_PORT 0x802C
105#define SMARTMIC_CMD_READ_DATA_BLOCK 0x802E
106#define SMARTMIC_CMD_WRITE_DATA_BLOCK 0x802F
107#define SMARTMIC_CMD_SET_SAMPLE_RATE 0x8030
108#define SMARTMIC_CMD_SET_PRESET 0x8031
109#define SMARTMIC_CMD_SELECT_ROUTE 0x8032
110#define SMARTMIC_CMD_STOP_ROUTE 0x8033
111#define SMARTMIC_CMD_SET_BUFF_DATA_FORMAT 0x8034
112#define SMARTMIC_CMD_SET_FRAME_SIZE 0x8035
113#define SMARTMIC_CMD_PDM_BYPASS_MODE 0x8040
114#define SMARTMIC_CMD_SET_AUDIO_PORT_CLK_F 0x8042
115#define SMARTMIC_CMD_POWER_DOWN_INT_OSC 0x8043
116#define SMARTMIC_CMD_SET_DIG_HW_PT 0x8052
117#define SMARTMIC_CMD_ENABLE_DISABLE_JTAG 0x8061
118#define SMARTMIC_CMD_SET_PAD_CONTROL 0x8062
119#define SMARTMIC_CMD_GET_EVENT 0x806D
137#define SMARTMIC_VQ_CMD_VS_PROCESSING_MODE 0x5003
138#define SMARTMIC_VQ_CMD_OEM_SENSITIVITY 0x5008
139#define SMARTMIC_VQ_CMD_UTK_SENSITIVITY 0x5009
140#define SMARTMIC_VQ_CMD_VID_SENSITIVITY 0x500D
141#define SMARTMIC_VQ_CMD_RESET 0x500E
147#define SMARTMIC_VS_PROCESSING_MODE_KW 0x0000
148#define SMARTMIC_OEM_SENSITIVITY_5 0x0005
149#define SMARTMIC_UTK_SENSITIVITY_0 0x0000
150#define SMARTMIC_VID_SENSITIVITY_2 0x0002
151#define SMARTMIC_RESET 0x0001
157#define SMARTMIC_SYNC_BYTE 0xB7
158#define SMARTMIC_BOOT_BYTE 0x01
159#define SMARTMIC_SAMPLE_RATE_16K 0x0001
160#define SMARTMIC_FRAME_SIZE_16MS 0x0010
161#define SMARTMIC_BUFF_DATA_FORMAT_16BIT 0x0002
162#define SMARTMIC_ROUTE_6 0x0006
163#define SMARTMIC_DIGITAL_GAIN_20 0x0C14
164#define SMARTMIC_END_POINT_ID 0x0C00
165#define SMARTMIC_LOW_POWER_MODE_RT6 0x0002
166#define SMARTMIC_IA611_INT_RISING_EDGE 0x04
167#define SMARTMIC_IA611_INT_FALLING_EDGE 0x03
168#define SMARTMIC_IA611_INT_LOW_LEVEL 0x01
169#define SMARTMIC_WDB_SIZE_NO_HEADER 508
170#define SMARTMIC_WDB_SIZE 512
171#define SMARTMIC_UART_EVENT_HEADER 0xFE
172#define SMARTMIC_NO_KWD_DETECTED 0
173#define SMARTMIC_OEM1_KWD_DETECTED 1
174#define SMARTMIC_OEM2_KWD_DETECTED 2
175#define SMARTMIC_OEM3_KWD_DETECTED 3
176#define SMARTMIC_OEM4_KWD_DETECTED 4
182#define SMARTMIC_DRIVER_UART 0
183#define SMARTMIC_DRIVER_SPI 1
184#define SMARTMIC_DRIVER_I2C 2
185#define SMARTMIC_DRIVER_SELECTOR SMARTMIC_DRIVER_I2C
191#define SMARTMIC_SYS_CFG_6SEC_TO 0
192#define SMARTMIC_SYS_CFG_6SEC_TO_UTK 1
193#define SMARTMIC_SYS_CFG_6SEC_TO_VID 2
194#define SMARTMIC_SYS_CFG_SELECTOR SMARTMIC_SYS_CFG_6SEC_TO
201#define SMARTMIC_DEVICE_ADDRESS_0 0x3E
202#define SMARTMIC_DEVICE_ADDRESS_1 0x3F
203#define SMARTMIC_DEVICE_ADDRESS_2 0x38
204#define SMARTMIC_DEVICE_ADDRESS_3 0x39
214#define SMARTMIC_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
215#define SMARTMIC_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
222#define DRV_BUFFER_SIZE 256
240#define SMARTMIC_MAP_MIKROBUS( cfg, mikrobus ) \
241 cfg.tx_pin = MIKROBUS( mikrobus, MIKROBUS_TX ); \
242 cfg.rx_pin = MIKROBUS( mikrobus, MIKROBUS_RX ); \
243 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
244 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
245 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
246 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
247 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
248 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
249 cfg.en = MIKROBUS( mikrobus, MIKROBUS_RST ); \
250 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
265#if ( SMARTMIC_DRIVER_SELECTOR == SMARTMIC_DRIVER_UART )
269#elif ( SMARTMIC_DRIVER_SELECTOR == SMARTMIC_DRIVER_I2C )
274 pin_name_t chip_select;
296#if ( SMARTMIC_DRIVER_SELECTOR == SMARTMIC_DRIVER_UART )
299 uart_data_bits_t data_bit;
300 uart_parity_t parity_bit;
301 uart_stop_bits_t stop_bit;
302#elif ( SMARTMIC_DRIVER_SELECTOR == SMARTMIC_DRIVER_I2C )
307 spi_master_mode_t spi_mode;
308 spi_master_chip_select_polarity_t cs_polarity;
#define DRV_BUFFER_SIZE
Smart Mic driver buffer size.
Definition smartmic.h:222
err_t smartmic_read_data(smartmic_t *ctx, uint8_t *data_out, uint16_t len)
Smart Mic read data function.
err_t smartmic_send_command(smartmic_t *ctx, uint16_t cmd, uint16_t data_in, uint16_t *response)
Smart Mic send command function.
void smartmic_cfg_setup(smartmic_cfg_t *cfg)
Smart Mic configuration object setup function.
void smartmic_enable_device(smartmic_t *ctx)
Smart Mic enable device function.
err_t smartmic_default_cfg(smartmic_t *ctx)
Smart Mic default configuration function.
err_t smartmic_download_keyword(smartmic_t *ctx, uint16_t *data_in, uint16_t len)
Smart Mic download keyword function.
err_t smartmic_download_bin(smartmic_t *ctx, uint8_t *data_in, uint32_t len)
Smart Mic download bin function.
err_t smartmic_voice_make(smartmic_t *ctx)
Smart Mic voice make function.
err_t smartmic_wait_keyword(smartmic_t *ctx)
Smart Mic wait keyword function.
err_t smartmic_write_data(smartmic_t *ctx, uint8_t *data_in, uint16_t len)
Smart Mic write data function.
err_t smartmic_init(smartmic_t *ctx, smartmic_cfg_t *cfg)
Smart Mic initialization function.
uint8_t smartmic_get_irq_pin(smartmic_t *ctx)
Smart Mic get irq pin function.
void smartmic_disable_device(smartmic_t *ctx)
Smart Mic disable device function.
err_t smartmic_download_firmware(smartmic_t *ctx)
Smart Mic download firmware function.
err_t smartmic_download_config(smartmic_t *ctx)
Smart Mic download config function.
smartmic_return_value_t
Smart Mic Click return value data.
Definition smartmic.h:318
@ SMARTMIC_ERROR
Definition smartmic.h:320
@ SMARTMIC_FIRMWARE_OK
Definition smartmic.h:321
@ SMARTMIC_OK
Definition smartmic.h:319
struct smartmic_s smartmic_t
Smart Mic Click context object.
This file contains SPI specific macros, functions, etc.
Smart Mic Click configuration object.
Definition smartmic.h:284
uint32_t i2c_speed
Definition smartmic.h:303
pin_name_t sck
Definition smartmic.h:291
pin_name_t tx_pin
Definition smartmic.h:286
pin_name_t mosi
Definition smartmic.h:290
pin_name_t rx_pin
Definition smartmic.h:285
pin_name_t scl
Definition smartmic.h:287
pin_name_t en
Definition smartmic.h:293
pin_name_t int_pin
Definition smartmic.h:294
pin_name_t miso
Definition smartmic.h:289
pin_name_t sda
Definition smartmic.h:288
pin_name_t cs
Definition smartmic.h:292
uint8_t i2c_address
Definition smartmic.h:304
Smart Mic Click context object.
Definition smartmic.h:260
digital_in_t irq
Definition smartmic.h:263
i2c_master_t i2c
Definition smartmic.h:270
digital_out_t en
Definition smartmic.h:261
uint8_t slave_address
Definition smartmic.h:271