Go to the documentation of this file.
35 #include "mikrosdk_version.h"
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_spi_master.h"
70 #define DTMF_CMD_GENERAL_RESET 0x01
71 #define DTMF_CMD_GENERAL_CONTROL 0xE0
72 #define DTMF_CMD_TRANSMIT_MODE 0xE1
73 #define DTMF_CMD_RECEIVE_MODE 0xE2
74 #define DTMF_CMD_TRANSMIT_DATA 0xE3
75 #define DTMF_CMD_RECEIVE_DATA 0xE5
76 #define DTMF_CMD_STATUS 0xE6
77 #define DTMF_CMD_PROGRAMMING 0xE8
95 #define DTMF_CONTROL_TXAN_OFF 0x8000u
96 #define DTMF_CONTROL_TXA_OFF 0x4000u
97 #define DTMF_CONTROL_LB 0x0800u
98 #define DTMF_CONTROL_EQU 0x0400u
99 #define DTMF_CONTROL_PWR 0x0100u
100 #define DTMF_CONTROL_RST 0x0080u
101 #define DTMF_CONTROL_IRQN_EN 0x0040u
102 #define DTMF_CONTROL_IRQ_PROG_FLAG 0x0010u
103 #define DTMF_CONTROL_IRQ_TX_RDY_UNF 0x0008u
104 #define DTMF_CONTROL_IRQ_ENERGY_RX_CP 0x0004u
105 #define DTMF_CONTROL_IRQ_CONT_10 0x0002u
106 #define DTMF_CONTROL_IRQ_RX_RDY_OVF 0x0001u
107 #define DTMF_CONTROL_IRQ_MASK 0x001Fu
113 #define DTMF_TX_MODE_V21_FSK_HIGH 0x9000u
114 #define DTMF_TX_MODE_V21_FSK_LOW 0x8000u
115 #define DTMF_TX_MODE_BELL_103_FSK_HIGH 0x7000u
116 #define DTMF_TX_MODE_BELL_103_FSK_LOW 0x6000u
117 #define DTMF_TX_MODE_V23_FSK_1200 0x5000u
118 #define DTMF_TX_MODE_V23_FSK_75 0x4000u
119 #define DTMF_TX_MODE_BELL_202_FSK_1200 0x3000u
120 #define DTMF_TX_MODE_BELL_202_FSK_150 0x2000u
121 #define DTMF_TX_MODE_DTMF_TONES 0x1000u
122 #define DTMF_TX_MODE_DISABLED 0x0000u
123 #define DTMF_TX_MODE_MASK 0xF000u
124 #define DTMF_TX_LEVEL_0_DB 0x0E00u
125 #define DTMF_TX_LEVEL_MIN_1_5_DB 0x0C00u
126 #define DTMF_TX_LEVEL_MIN_3_DB 0x0A00u
127 #define DTMF_TX_LEVEL_MIN_4_5_DB 0x0800u
128 #define DTMF_TX_LEVEL_MIN_6_DB 0x0600u
129 #define DTMF_TX_LEVEL_MIN_7_5_DB 0x0400u
130 #define DTMF_TX_LEVEL_MIN_9_DB 0x0200u
131 #define DTMF_TX_LEVEL_MIN_10_5_DB 0x0000u
132 #define DTMF_TX_LEVEL_MASK 0x0E00u
133 #define DTMF_TX_DTMF_TWIST_2_DB 0x00E0u
134 #define DTMF_TX_DTMF_TWIST_1_DB 0x00C0u
135 #define DTMF_TX_DTMF_TWIST_1_5_DB 0x00A0u
136 #define DTMF_TX_DTMF_TWIST_2_5_DB 0x0080u
137 #define DTMF_TX_DTMF_TWIST_3_DB 0x0060u
138 #define DTMF_TX_DTMF_TWIST_3_5_DB 0x0040u
139 #define DTMF_TX_DTMF_TWIST_4_DB 0x0020u
140 #define DTMF_TX_DTMF_TWIST_4_5_DB 0x0000u
141 #define DTMF_TX_DTMF_TWIST_MASK 0x00E0u
142 #define DTMF_TX_DATA_FORMAT_SYNC 0x0018u
143 #define DTMF_TX_DATA_FORMAT_SS_NO_PAR 0x0010u
144 #define DTMF_TX_DATA_FORMAT_SS_EVEN_PAR 0x0008u
145 #define DTMF_TX_DATA_FORMAT_SS_ODD_PAR 0x0000u
146 #define DTMF_TX_DATA_FORMAT_MASK 0x0018u
147 #define DTMF_TX_DATA_STOP_8_2 0x0007u
148 #define DTMF_TX_DATA_STOP_8_1 0x0006u
149 #define DTMF_TX_DATA_STOP_7_2 0x0005u
150 #define DTMF_TX_DATA_STOP_7_1 0x0004u
151 #define DTMF_TX_DATA_STOP_6_2 0x0003u
152 #define DTMF_TX_DATA_STOP_6_1 0x0002u
153 #define DTMF_TX_DATA_STOP_5_2 0x0001u
154 #define DTMF_TX_DATA_STOP_5_1 0x0000u
155 #define DTMF_TX_DATA_STOP_MASK 0x0007u
156 #define DTMF_TX_DATA_SOURCE_TX_BUF 0x0004u
157 #define DTMF_TX_DATA_SOURCE_CONT_1S 0x0003u
158 #define DTMF_TX_DATA_SOURCE_CONT_0S 0x0002u
159 #define DTMF_TX_DATA_SOURCE_CONT_ALT 0x0000u
160 #define DTMF_TX_DATA_SOURCE_MASK 0x0007u
161 #define DTMF_TX_TONE_FIXED_NO_TONE 0x0000u
162 #define DTMF_TX_TONE_FIXED_PAIR_697 0x0001u
163 #define DTMF_TX_TONE_FIXED_PAIR_770 0x0002u
164 #define DTMF_TX_TONE_FIXED_PAIR_852 0x0003u
165 #define DTMF_TX_TONE_FIXED_PAIR_941 0x0004u
166 #define DTMF_TX_TONE_FIXED_PAIR_1209 0x0005u
167 #define DTMF_TX_TONE_FIXED_PAIR_1336 0x0006u
168 #define DTMF_TX_TONE_FIXED_PAIR_1477 0x0007u
169 #define DTMF_TX_TONE_FIXED_PAIR_1633 0x0008u
170 #define DTMF_TX_TONE_FIXED_PAIR_1300 0x0009u
171 #define DTMF_TX_TONE_FIXED_PAIR_2100 0x000Au
172 #define DTMF_TX_TONE_FIXED_PAIR_2225 0x000Bu
173 #define DTMF_TX_TONE_FIXED_PAIR_TA 0x000Cu
174 #define DTMF_TX_TONE_FIXED_PAIR_TB 0x000Du
175 #define DTMF_TX_TONE_FIXED_PAIR_TC 0x000Eu
176 #define DTMF_TX_TONE_FIXED_PAIR_TD 0x000Fu
177 #define DTMF_TX_TONE_D 0x0010u
178 #define DTMF_TX_TONE_1 0x0011u
179 #define DTMF_TX_TONE_2 0x0012u
180 #define DTMF_TX_TONE_3 0x0013u
181 #define DTMF_TX_TONE_4 0x0014u
182 #define DTMF_TX_TONE_5 0x0015u
183 #define DTMF_TX_TONE_6 0x0016u
184 #define DTMF_TX_TONE_7 0x0017u
185 #define DTMF_TX_TONE_8 0x0018u
186 #define DTMF_TX_TONE_9 0x0019u
187 #define DTMF_TX_TONE_0 0x001Au
188 #define DTMF_TX_TONE_STAR 0x001Bu
189 #define DTMF_TX_TONE_HASH 0x001Cu
190 #define DTMF_TX_TONE_A 0x001Du
191 #define DTMF_TX_TONE_B 0x001Eu
192 #define DTMF_TX_TONE_C 0x001Fu
193 #define DTMF_TX_TONE_MASK 0x001Fu
199 #define DTMF_RX_MODE_V21_FSK_HIGH 0x9000u
200 #define DTMF_RX_MODE_V21_FSK_LOW 0x8000u
201 #define DTMF_RX_MODE_BELL_103_FSK_HIGH 0x7000u
202 #define DTMF_RX_MODE_BELL_103_FSK_LOW 0x6000u
203 #define DTMF_RX_MODE_V23_FSK_1200 0x5000u
204 #define DTMF_RX_MODE_V23_FSK_75 0x4000u
205 #define DTMF_RX_MODE_BELL_202_FSK_1200 0x3000u
206 #define DTMF_RX_MODE_BELL_202_FSK_150 0x2000u
207 #define DTMF_RX_MODE_DTMF_TONES 0x1000u
208 #define DTMF_RX_MODE_DISABLED 0x0000u
209 #define DTMF_RX_MODE_MASK 0xF000u
210 #define DTMF_RX_LEVEL_0_DB 0x0E00u
211 #define DTMF_RX_LEVEL_MIN_1_5_DB 0x0C00u
212 #define DTMF_RX_LEVEL_MIN_3_DB 0x0A00u
213 #define DTMF_RX_LEVEL_MIN_4_5_DB 0x0800u
214 #define DTMF_RX_LEVEL_MIN_6_DB 0x0600u
215 #define DTMF_RX_LEVEL_MIN_7_5_DB 0x0400u
216 #define DTMF_RX_LEVEL_MIN_9_DB 0x0200u
217 #define DTMF_RX_LEVEL_MIN_10_5_DB 0x0000u
218 #define DTMF_RX_LEVEL_MASK 0x0E00u
219 #define DTMF_RX_USART_SYNC 0x0038u
220 #define DTMF_RX_USART_START_STOP 0x0030u
221 #define DTMF_RX_USART_DISABLED 0x0000u
222 #define DTMF_RX_USART_MASK 0x0038u
223 #define DTMF_RX_DATA_PARITY_8_PAR 0x0007u
224 #define DTMF_RX_DATA_PARITY_8_NO_PAR 0x0006u
225 #define DTMF_RX_DATA_PARITY_7_PAR 0x0005u
226 #define DTMF_RX_DATA_PARITY_7_NO_PAR 0x0004u
227 #define DTMF_RX_DATA_PARITY_6_PAR 0x0003u
228 #define DTMF_RX_DATA_PARITY_6_NO_PAR 0x0002u
229 #define DTMF_RX_DATA_PARITY_5_PAR 0x0001u
230 #define DTMF_RX_DATA_PARITY_5_NO_PAR 0x0000u
231 #define DTMF_RX_DATA_PARITY_MASK 0x0007u
232 #define DTMF_RX_TONE_DETECT_PROG_PAIR 0x0004u
233 #define DTMF_RX_TONE_DETECT_CALL_PROG 0x0003u
234 #define DTMF_RX_TONE_DETECT_ANSWER 0x0002u
235 #define DTMF_RX_TONE_DETECT_DTMF 0x0001u
236 #define DTMF_RX_TONE_DETECT_DISABLE 0x0007u
237 #define DTMF_RX_TONE_DETECT_MASK 0x0007u
243 #define DTMF_STATUS_IRQ 0x8000u
244 #define DTMF_STATUS_PROG_FLAG 0x2000u
245 #define DTMF_STATUS_TX_READY 0x1000u
246 #define DTMF_STATUS_TX_UNDERFLOW 0x0800u
247 #define DTMF_STATUS_ENERGY_RX_CP 0x0400u
248 #define DTMF_STATUS_1010_PATTERN 0x0200u
249 #define DTMF_STATUS_CONT_0S 0x0100u
250 #define DTMF_STATUS_CONT_1S 0x0080u
251 #define DTMF_STATUS_RX_READY 0x0040u
252 #define DTMF_STATUS_RX_OVERFLOW 0x0020u
253 #define DTMF_STATUS_RX_FRAMING_ERROR 0x0010u
254 #define DTMF_STATUS_RX_EVEN_PARITY 0x0008u
255 #define DTMF_STATUS_FSK_OUT 0x0001u
256 #define DTMF_STATUS_TONE_D 0x0000u
257 #define DTMF_STATUS_TONE_1 0x0001u
258 #define DTMF_STATUS_TONE_2 0x0002u
259 #define DTMF_STATUS_TONE_3 0x0003u
260 #define DTMF_STATUS_TONE_4 0x0004u
261 #define DTMF_STATUS_TONE_5 0x0005u
262 #define DTMF_STATUS_TONE_6 0x0006u
263 #define DTMF_STATUS_TONE_7 0x0007u
264 #define DTMF_STATUS_TONE_8 0x0008u
265 #define DTMF_STATUS_TONE_9 0x0009u
266 #define DTMF_STATUS_TONE_0 0x000Au
267 #define DTMF_STATUS_TONE_STAR 0x000Bu
268 #define DTMF_STATUS_TONE_HASH 0x000Cu
269 #define DTMF_STATUS_TONE_A 0x000Du
270 #define DTMF_STATUS_TONE_B 0x000Eu
271 #define DTMF_STATUS_TONE_C 0x000Fu
272 #define DTMF_STATUS_TONE_MASK 0x000Fu
278 #define DTMF_TIMEOUT_CLEAR_IRQ 2000u
279 #define DTMF_TIMEOUT_TX_READY 2000u
280 #define DTMF_TIMEOUT_CALL_PROGRESS 60000u
281 #define DTMF_TIMING_BUSY 50u
282 #define DTMF_TIMING_DISCONNECTED 250u
283 #define DTMF_TIMING_RINGING 2000u
284 #define DTMF_TIMING_CALL_PROGRESS 6000u
285 #define DTMF_TIMING_SEND_MESSAGE 2000u
286 #define DTMF_TIMING_RX_READY 10u
287 #define DTMF_TIMING_WAIT_FOR_MESSAGE 10000u
293 #define DTMF_STATE_IDLE 0
294 #define DTMF_STATE_IRQ_SET 1
295 #define DTMF_STATE_RINGING 2
296 #define DTMF_STATE_CALL_IN_PROGRESS 3
302 #define DTMF_DIAL_NUMBER_MAX_LEN 16
312 #define DTMF_SET_DATA_SAMPLE_EDGE SET_SPI_DATA_SAMPLE_EDGE
313 #define DTMF_SET_DATA_SAMPLE_MIDDLE SET_SPI_DATA_SAMPLE_MIDDLE
331 #define DTMF_MAP_MIKROBUS( cfg, mikrobus ) \
332 cfg.miso = MIKROBUS( mikrobus, MIKROBUS_MISO ); \
333 cfg.mosi = MIKROBUS( mikrobus, MIKROBUS_MOSI ); \
334 cfg.sck = MIKROBUS( mikrobus, MIKROBUS_SCK ); \
335 cfg.cs = MIKROBUS( mikrobus, MIKROBUS_CS ); \
336 cfg.rdn = MIKROBUS( mikrobus, MIKROBUS_AN ); \
337 cfg.hsw = MIKROBUS( mikrobus, MIKROBUS_RST ); \
338 cfg.irq = MIKROBUS( mikrobus, MIKROBUS_INT )
@ DTMF_TIMEOUT
Definition: dtmf.h:400
err_t dtmf_get_status(dtmf_t *ctx, uint16_t *data_out)
DTMF get status function.
pin_name_t miso
Definition: dtmf.h:375
uint8_t dtmf_tx_ready(dtmf_t *ctx)
DTMF tx ready function.
This file contains SPI specific macros, functions, etc.
uint8_t dtmf_unscram_1s_det(dtmf_t *ctx)
DTMF unscram 1s det function.
pin_name_t mosi
Definition: dtmf.h:376
spi_master_chip_select_polarity_t cs_polarity
Definition: dtmf.h:388
void dtmf_set_hsw_pin(dtmf_t *ctx, uint8_t state)
DTMF set hsw pin function.
spi_master_t spi
Definition: dtmf.h:357
err_t dtmf_send_message(dtmf_t *ctx, uint8_t *data_in, uint8_t len)
DTMF send message function.
uint16_t status
Definition: dtmf.h:364
err_t dtmf_general_reset(dtmf_t *ctx)
DTMF general reset function.
err_t dtmf_init(dtmf_t *ctx, dtmf_cfg_t *cfg)
DTMF initialization function.
uint8_t dtmf_call_progress(dtmf_t *ctx)
DTMF call progress function.
void dtmf_hook_on(dtmf_t *ctx)
DTMF hook on function.
uint16_t tx_mode
Definition: dtmf.h:362
dtmf_return_value_t
DTMF Click return value data.
Definition: dtmf.h:397
pin_name_t chip_select
Definition: dtmf.h:359
DTMF Click context object.
Definition: dtmf.h:348
err_t dtmf_set_control(dtmf_t *ctx, uint16_t data_in)
DTMF set control function.
uint32_t spi_speed
Definition: dtmf.h:386
err_t dtmf_set_transmit_mode(dtmf_t *ctx, uint16_t data_in)
DTMF set transmit mode function.
digital_in_t rdn
Definition: dtmf.h:353
err_t dtmf_clear_interrupts(dtmf_t *ctx)
DTMF clear interrupts function.
pin_name_t irq
Definition: dtmf.h:383
uint8_t dtmf_get_rdn_pin(dtmf_t *ctx)
DTMF get rdn pin function.
void dtmf_hook_off(dtmf_t *ctx)
DTMF hook off function.
pin_name_t sck
Definition: dtmf.h:377
spi_master_mode_t spi_mode
Definition: dtmf.h:387
uint16_t rx_mode
Definition: dtmf.h:363
uint8_t dtmf_rx_ready(dtmf_t *ctx)
DTMF rx ready function.
pin_name_t cs
Definition: dtmf.h:378
@ DTMF_ERROR
Definition: dtmf.h:399
err_t dtmf_handshake_init(dtmf_t *ctx)
DTMF handshake init function.
digital_out_t hsw
Definition: dtmf.h:350
err_t dtmf_receive_data(dtmf_t *ctx, uint8_t *data_out)
DTMF receive data function.
err_t dtmf_set_receive_mode(dtmf_t *ctx, uint16_t data_in)
DTMF set receive mode function.
uint8_t dtmf_get_irq_pin(dtmf_t *ctx)
DTMF get irq pin function.
@ DTMF_OK
Definition: dtmf.h:398
err_t dtmf_set_programming(dtmf_t *ctx, uint16_t data_in)
DTMF set programming function.
void dtmf_cfg_setup(dtmf_cfg_t *cfg)
DTMF configuration object setup function.
pin_name_t rdn
Definition: dtmf.h:381
DTMF Click configuration object.
Definition: dtmf.h:373
pin_name_t hsw
Definition: dtmf.h:382
uint16_t control
Definition: dtmf.h:361
digital_in_t irq
Definition: dtmf.h:354
err_t dtmf_transmit_data(dtmf_t *ctx, uint8_t data_in)
DTMF transmit data function.
err_t dtmf_dial(dtmf_t *ctx, uint8_t *dial_num)
DTMF dial function.